Tempo do Processo no Analytics

Precisava criar no analytics o tempo das solicitações. Exemplo: O tempo que demorou para que uma solicitação demorou, desde que ela foi iniciada até o encerramento da solicitação. Alguém já conseguiu criar e tem um exemplo? Grato!

No novo Fluig 1.6.1 esse campo foi adicionado e já é enviado no novo ETL do analytics. Faz a atualização no ambiente de testes, verifica se tudo seu funcionou certinho (forms, processos, zooms) e segue pra atualização do ambiente produção.

Eu vi mesmo esta funcionalidade, mas agora não posso atualizar meu ambiente e preciso disso em um relatório no analytics. Eu vi que no analytics tem a date de criação da solicitação e e a data da ultima atualização( data final da solicitação), pensando que a (data final - data inicial) = tempo do processo. Mas ainda não consegui fazer uma métrica que me forneça isso. Se alguém conseguiu fazer?

Ainda tem a questão do calendário. Pra pegar o tempo útil.

Infelizmente não dá pra calcular métrica usando datas no analytics. Você realmente teria que criar um campo no formulário, armazenar isso e marcar pra enviar pro analytics.

Eu fiz um dataset uma vez que criava todo um histórico de uma solicitação. O que daria para fazer era pegar estes campos do dataset e subir para o analytics.

PS: Precisa informar o número da solicitação, recomendo criar uma constraint que receba o número da solic.


function createDataset(fields, constraints, sortFields) {

     var newDataset = DatasetBuilder.newDataset();
     var localConstraints = new Array();

     newDataset.addColumn("Id_da_Solicitação");
     newDataset.addColumn("Número_da_Atividade");
     newDataset.addColumn("Data_de_Início_da_Atividade");
     newDataset.addColumn("Data_de_Fim_da_Atividade");
     newDataset.addColumn("Hora_Fim_da_Atividade");
     newDataset.addColumn("Tempo_Gasto")
     newDataset.addColumn("Status_da_Atividade")
     newDataset.addColumn("Data_Prazo");
     newDataset.addColumn("Hora_Prazo");
     newDataset.addColumn("Quantidade_Repetições");

     //setar o número da solicitação aqui
     var c1 = DatasetFactory.createConstraint("processTaskPK.processInstanceId", 1051, 1051, ConstraintType.MUST);   
     localConstraints.push(c1);
     var fields1 = new Array("processTaskPK.processInstanceId","choosedSequence","status","taskCompletionHour","taskCompletionDate","deadlineDate","deadlineHour");

     var atividade = DatasetFactory.getDataset("processTask", fields1, null, null);

     var row = new Array();
     var rows = new Array();

     var qntd = [];

     if(atividade.rowsCount > 0) {

         for (var i = 0; i < atividade.rowsCount; i++) {
            var Idsolicitacao = atividade.getValue(i, "processTaskPK.processInstanceId");

            var nroAtividade = atividade.getValue(i, "choosedSequence");

            qntd.push(nroAtividade);

            var dataFinal = atividade.getValue(i, "taskCompletionDate");

            var tempoFinal = atividade.getValue(i, "taskCompletionHour");

            var dataPrazo = atividade.getValue(i, "deadlineDate");

            var horaPrazo = atividade.getValue(i, "deadlineHour");

            var status = atividade.getValue(i, "status");
            if (status == 0){
                status = "Aberta";
            }else if (status == 2){
                status = "Finalizada";
            }else if (status == 3){
                status = "Solicitada por Admin";
            }else if (status == 4){
                status = "Cancelada";
            }

            var tempoGasto = "0";

            if (i<atividade.rowsCount-1){
            var tempoFinalNxt = atividade.getValue(i+1, "taskCompletionHour");
            if (tempoFinalNxt != "0"){
                tempoGasto = parseInt(tempoFinalNxt)-parseInt(tempoFinal);
            }

            }

            var hmsFinal = ConverterSeg(tempoFinal); 
            var hmsGasto = ConverterSeg(tempoGasto)
            var hmsPrazo = ConverterSeg(horaPrazo)

            localConstraints = new Array();   

             //setar o número da solicitação aqui
            var c2 = DatasetFactory.createConstraint("processHistoryPK.processInstanceId", 1051, 1051, ConstraintType.MUST);
            localConstraints.push(c2);
            var fields2 = new Array("movementDate","processHistoryPK.processInstanceId");

            var data = DatasetFactory.getDataset("processHistory", fields2, null, null);

               row = new Array();
               row.push(Idsolicitacao);
               row.push(nroAtividade);
               row.push(data.getValue(0, "movementDate"));
               row.push(dataFinal);
               row.push(hmsFinal);
               row.push(hmsGasto);
               row.push(status);
               row.push(dataPrazo);
               row.push(hmsPrazo);

               rows.push(row);


              }
         var counts = {};
        qntd.forEach(function(x) { counts[x] = (counts[x] || 0)+1; });

         for (var i = 0; i < rows.length; i++) {
             var nroAtividade = atividade.getValue(i, "choosedSequence");
             rows[i].push(counts[nroAtividade]);
             newDataset.addRow(rows[i]);
         }
     }else {
          newDataset.addRow(new Array("Erro ao consultar o dataset: ", "Não foram achados registros no dataset."));
     }
     return newDataset;

     function ConverterSeg(segundos){
             var sec_num = parseInt(segundos, 10);
            var hours   = Math.floor(sec_num / 3600);
            var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
            var seconds = sec_num - (hours * 3600) - (minutes * 60);

            if (hours   < 10) {hours   = "0"+hours;}
            if (minutes < 10) {minutes = "0"+minutes;}
            if (seconds < 10) {seconds = "0"+seconds;}
            return hours+':'+minutes+':'+seconds;
     }

    }