Anexo: Como tornar obrigatório um anexo em uma determinada etapa do processo?

É possível obrigar a inclusão de um anexo em um determinada etapa do processo. Vamos supor que na Atividade 20 = Cotação, quero obrigar o usuário nessa etapa a anexar o documento da cotação realizada.

@italo você encontrou a solução para verificar uma etapa específica?

Segue o exemplo que eu uso pára validar se foi incluído um anexo numa determinada etapa do processo. Este método valida o momento em que foi anexado, então se o processo voltar a uma atividade que precise de um anexo e este já foi incluído anteriormente, não será pedido novamente.



function beforeTaskSave(colleagueId, nextSequenceId, userList) {

    var numState = getValue("WKNumState");
    var process = getValue("WKNumProces");
    var anexado = false;
    var message = "";

    if(numState = 0 && hAPI.listAttachments().size() < 2) {
        message += "<br/>- É necessario anexar os documentos;"
    }

    if (numState == 1){ //etapa do processo
        if (temAnexo() == false) message += "<br/>- É necessario anexar os documentos;";
    }

    if (message != "") throw "<br/><strong>Os campos abaixo são de preencimento obrigatório:</strong><br/>" + message;

    function temAnexo(){        
        var constraintProcessAttachment = DatasetFactory.createConstraint('processAttachmentPK.processInstanceId', process, process, ConstraintType.MUST);
        var datasetProcessAttachment = DatasetFactory.getDataset('processAttachment', null, new Array(constraintProcessAttachment), null);

        for(var i = 0; i < datasetProcessAttachment.rowsCount; i++) {
            var constraintProcessHistory1 = DatasetFactory.createConstraint('processHistoryPK.movementSequence', datasetProcessAttachment.getValue(i, "originalMovementSequence"), datasetProcessAttachment.getValue(i, "originalMovementSequence"), ConstraintType.MUST);
            var constraintProcessHistory2 = DatasetFactory.createConstraint('processHistoryPK.processInstanceId', process, process, ConstraintType.MUST);
            var constraintProcessHistory3 = DatasetFactory.createConstraint('processHistoryPK.companyId', datasetProcessAttachment.getValue(i, "processAttachmentPK.companyId"), datasetProcessAttachment.getValue(i, "processAttachmentPK.companyId"), ConstraintType.MUST);
            var constraintProcessHistory4 = DatasetFactory.createConstraint('stateSequence', numState, numState, ConstraintType.MUST);
            var datasetProcessHistory = DatasetFactory.getDataset('processHistory', null, new Array(constraintProcessHistory1, constraintProcessHistory2, constraintProcessHistory3, constraintProcessHistory4), null);
            for(var j = 0; j < datasetProcessHistory.rowsCount; j++) {                
                return true;            
            }    
        }
        return false;    
    }    
}

Só uma dúvida, ele obriga anexar lá na aba superior do GED ou tenho que incluir um campo de upload?

Isso, ele obriga anexar lá na aba superior.

Somente um comentário, na linha “if(numState = 0 && hAPI.listAttachments().size() < 2) {” tem que mudar para “if(numState == 0 && hAPI.listAttachments().size() < 2) {”

Esse código, ele mostra o erro para fazer o upload, mas quando clica em OK, o processo continua o processo sem dar a chance de fazer o upload.

Essa resposta é a mais correta, o certo seria usar o beforeStateEntry. Porém a lógica interna é melhor que a resposta aceita, pois, a resposta aceita não garante o comportamento exposto na pergunta.

@Italo, segue um exemplo:


function beforeTaskSave(colleagueId, nextSequenceId, userList) {

    var atv      = getValue("WKNumState");
    var nextAtv  = getValue("WKNextState");

    if (atv == 4) {

        var anexos   = hAPI.listAttachments();
        var temAnexo = false;

        if (anexos.size() > 0) {
            temAnexo = true;
        }

        if (!temAnexo) {
            throw "É preciso anexar o documento para continuar o processo!";
        }

    }
}

Nesta função o problema é se precisar obrigatoriamente adicionar anexos em 2 etapas distintas. Se adicionar na etapa 1 e precisar obrigar o usuário a adicionar na etapa 2 não vai funcionar direito porque com esta função já vai constar como 1 documento anexado.

Tentei fazer conforme o código abaixo; nas funções beforetasksave, beforetaskentry e validateform, porém sem sucesso. Segue o código;

function beforeTaskSave(colleagueId,nextSequenceId,userList){

var atv = getValue("3"); var nextAtv = getValue("4");

if (atv == 4) {

var anexos = hAPI.listAttachments(); var temAnexo = false;

if (anexos.size() > 0) { temAnexo = true; }

if (!temAnexo) { throw "É preciso anexar o documento para continuar o processo!"; }

}

if(form.getValue("descricao") == "") { throw "Descrição deve ser preenchida!"; }

}