Você precisa pensar qual é o melhor método para tratar o erro.
Quando você cria uma Atividade de Serviço você indica quantas tentativas ela deve realizar antes seguir o fluxo do catch
. Toda vez que você dá um throw
, ou que alguma Exception
é disparada dentro da atividade sem você a capturar, é considerado um erro e vai tentar executar a atividade de serviço novamente no tempo indicado na sua configuração. Somente após exceder o limite de tentativas é que o "catch"
da atividade vai encaminhar para próxima ação.
O problema do throw é que ele interrompe a atividade e assim não salva os dados no formulário com a hAPI.setCardValue
. Por isso no post citado deram a sugestão de sempre retornar true
(pra nunca cair no catch da atividade) e tratar o erro de outra forma. Por exemplo, você pode criar campos no formulário pra indicar o erro no serviço, salvar as informações nesses campos, dar um return true
pra não cair no catch e então tratar o que vai acontecer de acordo com os campos. Então precisa analisar muito bem o que e como você quer tratar os erros.
No meu caso, do post que você citou, eu precisava fazer várias etapas e por isso resolvi fazer um encadeamento de atividades de serviço. Nessa situação eu precisava de um serviço que cria um PDF e o anexa no Processo, precisava criar o Processo em outro sistema (DocFlow) e então precisava enviar todos os anexos do Fluig para esse outro sistema.
Como é obrigatório criar o processo no DocFlow eu fiz os “catches” jogarem para a atividade “Cadastrar manualmente no DocFlow” onde o usuário pode fazer tudo manualmente ou enviar para a condicional “Nova Tentativa Automática”, que vai encaminhar para o serviço correto de acordo com as informações salvas.
Lembrando que quando tem um throw na atividade a próxima tentativa trará tanto o número da tentativa quanto a mensagem que foi disparada no throw e você pode se basear nisso para tratar a situação.
Um exemplo de como tratar o serviço sem deixar cair no catch da atividade:
/**
* Atividade de serviço pra executar a ação
*
* @param {number} attempt Número da tentativa
* @param {string} message Última mensagem de erro da atividade
* @returns {boolean} True se executou
* @throws {string} Exceção com a mensagem de erro
*/
function servicetask112(attempt, message) {
try {
executaAtividade(); // Pode disparar um throw "mensagem do erro"
} catch (e) {
// Deu erro e é a terceira e última tentativa da atividade
if (attempt == 3) {
hAPI.setCardValue("erroServico", e);
return true;
} else {
throw e; // Não é a última tentativa. Deixar tentar novamente
}
}
return true;
}
Assim você cria o fluxo do catch na atividade só por obrigação, pois ele nunca será executado e você garante que o que for inserido no formulário será salvo.