Como pegar maiores detalhes de histórico do processo

Gostaria, de obter maiores informações do histórico de movimentações, bem como nome das pessoas que interagiram no processo. Não sei como relacionar e nem os nomes dos datasets para essa finalidade.


function createDataset(fields, constraints, sortFields) {
    var dataset = DatasetBuilder.newDataset();
    dataset.addColumn("metadata#id");
    dataset.addColumn("metadata#version");   
    dataset.addColumn("movementDate");
    dataset.addColumn("movementHour");
    dataset.addColumn("stateSequence");
    dataset.addColumn("realDateTime");
    dataset.addColumn("previousMovementSequence");

    //Cria a constraint para buscar os formulários ativos
    var cst = DatasetFactory.createConstraint("metadata#active", true, true, ConstraintType.MUST);    
    var constraints_ = [];
    constraints_[0] = cst;

    for(z = 0; z < constraints.length; z++)
        constraints_[z + 1] = (DatasetFactory.createConstraint(constraints[z].fieldName, constraints[z].initialValue, constraints[z].finalValue, ConstraintType.MUST));

    var companyId = "1";
    var datasetPrincipal = DatasetFactory.getDataset("Frm_SCMA", null, constraints_, null);

    for (var i = 0; i < datasetPrincipal.rowsCount; i++) {        
        var processInstanceId = datasetPrincipal.getValue(i, "TxtNumSolicitacao");       
        var constraints = [];
        constraints[0] = DatasetFactory.createConstraint("processHistoryPK.processInstanceId", processInstanceId, processInstanceId, ConstraintType.MUST);         
        var DatasetHistorico = DatasetFactory.getDataset("processHistory", null, constraints, null); 

        for (var j = 0; j < DatasetHistorico.rowsCount; j++) {           
            dataset.addRow(new Array(
                    datasetPrincipal.getValue(i, "metadata#id"), 
                    datasetPrincipal.getValue(i, "metadata#version"),
                    DatasetHistorico.getValue(j, "movementDate"),
                    DatasetHistorico.getValue(j, "movementHour"),
                    DatasetHistorico.getValue(j, "stateSequence"),
                    DatasetHistorico.getValue(j, "realDateTime"),
                    DatasetHistorico.getValue(j, "previousMovementSequence")
                )
            );        
        }
    }      
    return dataset;                 
}

Oi Alex,

Para o relatório não ficar complexo, você pode salvar todas as informações que você deseja no formulário. VocÊ pode usar campos ocultos caso não queira que todas as informações sejam exibidas para o usuário.

EDIT: Se você salvar no formulário todas as informações necessárias para o relatório, você só precisará consultar o dataset do formulário no BIRT.

Abs,

Marcos

O problema é que eu preciso gerar um dataset para utilização no BIRT.

Se você salvar no formulário todas as informações necessárias para o relatório, você só precisará consultar o dataset do formulário no BIRT.

Acabei conseguindo resolver o meu problema.


function createDataset(fields, constraints, sortFields) {
    //Cria as colunas
    var dataset = DatasetBuilder.newDataset();
    dataset.addColumn("processInstanceId");
    dataset.addColumn("processId");
    dataset.addColumn("version");
    dataset.addColumn("cardDocumentId");
    dataset.addColumn("movementDate");
    dataset.addColumn("movementSequence");
    dataset.addColumn("stateSequence");
    dataset.addColumn("stateName");
    dataset.addColumn("processTaskcolleagueId");
    dataset.addColumn("processTaskcolleagueName");       

    var datasetworkflowProcess = DatasetFactory.getDataset('workflowProcess', null, constraints, sortFields);         
    var totalDeRegistros = datasetworkflowProcess.rowsCount;

    //log.info(">>>>>>>>>>>>>>>>>>>>>>>> Total de Registros em [workflowProcess] ====> " + totalDeRegistros.toString());

    for (var i = 0; i < totalDeRegistros; i++) {
        var processInstanceId = datasetworkflowProcess.getValue(i, "workflowProcessPK.processInstanceId");
        var companyId = datasetworkflowProcess.getValue(i, "workflowProcessPK.companyId");
        var processId = datasetworkflowProcess.getValue(i, "processId");
        var version = datasetworkflowProcess.getValue(i, "version");
        var cardDocumentId = datasetworkflowProcess.getValue(i, "cardDocumentId");

        //log.info(">>>>>>>>>>>>>>>>>>>>>>>> valor em [workflowProcessPK.processInstaceId] ====> " + processInstanceId);
        //log.info(">>>>>>>>>>>>>>>>>>>>>>>> valor em [workflowProcessPK.companyId] ====> " + companyId);

        var datasetProcessHistory = findProcessHistory(companyId, processInstanceId);

        var movementSequence;
        var processTaskcolleagueId;
        var processTaskcolleagueName;
        var stateSequence;
        var activityName;

        for (var h = 0; h < datasetProcessHistory.rowsCount; h++) {                         

            try {
                movementSequence = datasetProcessHistory.getValue(h, "processHistoryPK.movementSequence");                    
                var datasetProcessTask = findprocessTask(companyId, processInstanceId, movementSequence);
                processTaskcolleagueId = datasetProcessTask.getValue(0, "processTaskPk.colleagueId");
                processTaskcolleagueName = findResponsableName(companyId, processTaskcolleagueId);
                stateSequence = datasetProcessHistory.getValue(h, "stateSequence"); 
                activityName = GetProcessStateName(companyId, processId, version, stateSequence);

            } catch (error) {
                log.info(">>>>>>>>>>>>>>>>>>>>>>>> Falha ao recuperar histórico ====> " + error);
            }

            dataset.addRow(new Array(
                    processInstanceId,
                    processId,
                    version,
                    cardDocumentId,
                    datasetProcessHistory.getValue(h, "movementDate"),
                    movementSequence,
                    stateSequence,
                    activityName,
                    processTaskcolleagueId,
                    processTaskcolleagueName                 
                )
            );
        }
    }

    return dataset;            

}

function findProcessHistory(companyId, processInstanceId) {
    var constraint1 = DatasetFactory.createConstraint('processHistoryPK.companyId', companyId, companyId, ConstraintType.MUST);
    var constraint2 = DatasetFactory.createConstraint('processHistoryPK.processInstanceId', processInstanceId, processInstanceId, ConstraintType.MUST);

    var constraints = new Array(constraint1, constraint2);            
    return DatasetFactory.getDataset('processHistory', null, constraints, null);    
}

function findprocessTask(companyId, processInstanceId, movementSequence) {
    var constraint1 = DatasetFactory.createConstraint('processStatePK.companyId', companyId, companyId, ConstraintType.MUST);
    var constraint2 = DatasetFactory.createConstraint('processTaskPK.processInstanceId', processInstanceId, processInstanceId, ConstraintType.MUST);
    var constraint3 = DatasetFactory.createConstraint('processTaskPK.movementSequence', movementSequence, movementSequence, ConstraintType.MUST);

    var constraints = new Array(constraint1, constraint2, constraint3);            
    return DatasetFactory.getDataset('processTask', null, constraints, null);    
}

function findResponsableName(companyId, colleagueId) {    
    if (colleagueId == 'System:Auto') {
        return "Atividade sem responsável definido";
    } else if (colleagueId.indexOf('Pool:Group:') == 0) {
        return "Atividade em pool por grupo";
    } else if (colleagueId.indexOf('Pool:Role:') == 0) {
        return "Atividade em pool por papel";
    } else {
        return findColleagueName(companyId, colleagueId);
    }
}

function findColleagueName(companyId, colleagueId) {        
    var constraint1 = DatasetFactory.createConstraint('colleaguePK.companyId', companyId, companyId, ConstraintType.MUST);
    var constraint2 = DatasetFactory.createConstraint('colleaguePK.colleagueId', colleagueId, colleagueId, ConstraintType.MUST);
    var constraints = new Array(constraint1, constraint2);

    var columns = new Array('colleagueName');
    return DatasetFactory.getDataset('colleague', columns, constraints, null).getValue(0, "colleagueName");
}

function GetProcessStateName(companyId, processId, version, sequence) {
    var constraint1 = DatasetFactory.createConstraint('processStatePK.companyId', companyId, companyId, ConstraintType.MUST);
    var constraint2 = DatasetFactory.createConstraint('processStatePK.processId', processId, processId, ConstraintType.MUST);
    var constraint3 = DatasetFactory.createConstraint('processStatePK.sequence', sequence, sequence, ConstraintType.MUST);
    var constraint4 = DatasetFactory.createConstraint('processStatePK.version', version, version, ConstraintType.MUST);
    var constraints = new Array(constraint1, constraint2, constraint3, constraint4);        

    var columns = new Array('stateSequence');    
    return DatasetFactory.getDataset('processHistory', columns, constraints, null).getValue(0, "stateSequence");        
}

Alex, você também consegue várias informações da solicitação usando o fluigAPI.getWorkflowService().getActiveTasks(processInstanceId), talvez diminua a quantidade de datasets que vc precise consultar. De um log.dir() na resposta desse método que vc conseguirá ver as informações que ele retorna. Consumo de serviços na API pública e no componente SDK - TOTVS Fluig - TDN