Inserir linhas em uma tabela pai x filho com base em outro processo

Imagine uma situação em que você precisa iniciar uma solicitação via hAPI.startProcess(), ou seja, um sub-processo não atende à demanda e você precisa enviar valores de uma tabela do processo A para um filho da solicitação do processo B. Como fazer isso no Fluig?
Vou descrever um pouco melhor a situação com um exemplo prático.

Seu fluxo tem uma atividade do tipo serviço em que o processo A inicia uma nova solicitação do processo B. O processo A possui uma tabela pai e filho, sendo necessário inserir as linhas dessa tabela do processo A no pai x filho do processo B.

Claro que um sub-processo resolveria essa situação, porém, um sub-processo não atende à demanda, pois a solicitação inicial fica travada enquanto o sub-processo não é finalizado. Por essa razão, a nova solicitação é iniciada via startProcess no script da solicitação. Então, como obter os dados da tabela pai e filho da solicitação A se essa tabela é dinâmica e não há como saber previamente os IDs dos campos que serão gerados?

A resposta é simples e pode ser seguida passo a passo:

  • Fazer uma busca nos campos do pai e filho utilizando o método getChildrenIndexes();
  • Criar um novo HashMap;
  • Atribuir novos valores ao HashMap recém-criado com base na busca dos dados do formulário da solicitação do processo A;
  • Iniciar o processo B com os valores desejados do processo A.

function afterTaskSave(colleagueId, nextSequenceId, userList) {

    /** Pai e filho de base */
    var trucks = hAPI.getChildrenIndexes("table_trucks")
    var formValues = new java.util.HashMap();

    /** Aqui estamos obtendo os dados do pai e filho do processo principal e salvando na mesma posição do pai e filho do processo que será aberto */
    for (var index = 0; index < trucks.length; index++) {
        formValues.put('vl_plate___' + trucks[index], tb_trucks_children.get('vl_plate___' + trucks[index]));
        formValues.put('nm_driver___' + trucks[index], tb_trucks_children.get('nm_driver___' + trucks[index]));
    }

    /** Atribuido o mesmo usuário que esta movendo a solicitação para iniciar a nova*/
    var users = new java.util.ArrayList();
    users.add(colleagueId);

    /** Verifique na documentação os parametros utilizados no startProcess */
    var idSubProcess = hAPI.startProcess(processId, targetTask, users, obs, completeTask, formValues, managerMode);

    /** Gravando o ID da nova instância do processo B em um campo do processo A */
    hAPI.setCardValue("idProcessB", idSubProcess);
}

No exemplo acima, estamos iniciando a nova solicitação através do evento de workflow afterTaskSave, mas obviamente é possível utilicar qualquer evento de processo. Analise e implemente da melhor forma possível.
Nenhum comentário

Nenhum comentário :

Postar um comentário