Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Liberar apenas após a tarefa: https://jiraproducao.totvs.com.br/browse/FBPM-7942

...

Deck of Cards
historyfalse
idExemplos beforeDcoumentPublisher
Card
label1- Validar informações do documento

É possível usar vários objetos e fazer validações e é muito comum validar permissões específicas ao negócio do cliente e não permitir a inclusão do documento.

No exemplo abaixo, o trecho de código está mostrando todos os possíveis atributos, declara os possíveis objetos, exibe no log algumas informações desses objetos, depois verifica os aprovadores, validando que não pode conter um usuário administrador como aprovador e exibe todos documentos relacionados.

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher(){
                
                var doc = getValue("WKDocument");
                var subject = getValue("WKSubject");
                var listApprover = getValue("WKListApprover");
                var listSeg = getValue("WKListSecurity");
                var listRelated = getValue("WKListRelatedDocument");
                var state = getValue("WKState");
                var user = getValue("WKUser");
                var company = getValue("WKCompany");
 
 
                log.info("Usuário Logado: " + user);
 
 
                log.info("Empresa: " + company);
                
                log.info("Número do documento: "+ doc.getDocumentId() + " - Versão: "+ doc.getVersion());
                
                if(listApprover!=null){
                    for(j = 0; j < listApprover.size(); j++) {          
                        if (listApprover.get(j).getColleagueId().equals("adm")){
                            throw "O usuário adm não pode ser aprovador de documentos";
                        }
                    }
                }
 
 
                if(listSeg != null){
                    for(j = 0; j < listSeg.size(); j++) {    
                        if (listSeg.get(j).getAttributionValue().equals("cvd")){
                            throw "O usuário cvd não pode estar na segurança de documentos";
                        }
                    }
                }
 
 
                if( listRelated != null){
                    log.info("Os seguintes documentos estão relacionados a este documentos: ");
                        for(j = 0; j < listRelated.size(); j++) {         
                            log.info("Nr. documento: "+ listRelated.get(j).getRelatedDocumentId());
                        }
                }
                log.info("Assunto: " + subject);
                log.info("Estado: " + state);
}
Card
label2- Impedir publicação com descrição repetida

Exemplo de evento que impede o usuário de publicar um documento com descrição repetida em uma determinada pasta.

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher() {
	// Exemplo de evento que impede o usuário de publicar um documento com descrição
    // repetida em uma determinada pasta levando em consideração também se o documento esta na lixeira.
	// caso não queira considerar a lixeira é só remover a validação da mesma, porem o documento poderá
	// ser restaurando da lixeira para pasta duplicando assim o nome do arquivo.


    var state = getValue("WKState");


    if (state == "PUBLISH") {

        var doc = getValue("WKDocument");

        // Faz validações apenas se o documento estiver sendo publicado na pasta selecionada (trocar o "6" pelo numero da pasta desejada)
        // Valida também se o documento esta sendo publicado como novo opção (getVersionOption), caso seja somente alteração ou seja, nova revisão ou versão passa
        if (doc.getParentDocumentId() == 6 && doc.getVersionOption() == 0) {

        	 //###############################################################################################
            //documentos ativos

            // Reduz o retorno de registros para reduzir impacto em performance.
            var constraintDocument1 = DatasetFactory.createConstraint(
                    'sqlLimit', '0', '1', ConstraintType.MUST);

            // Passando código da pasta pai para o Dataset
            var constraintDocument2 = DatasetFactory.createConstraint(
                    'parentDocumentId', doc.getParentDocumentId(), doc
                            .getParentDocumentId(), ConstraintType.MUST);

            // Consultando apenas registros de documentos ativos.
            var constraintDocument3 = DatasetFactory.createConstraint(
                    'activeVersion', 'true', 'true', ConstraintType.MUST);

            // Consultando apenas nos documentos que não foram removidos.
            var constraintDocument4 = DatasetFactory.createConstraint(
                    'deleted', 'false', 'false', ConstraintType.MUST);

            // Consultando documentos que tenham a mesma descrição informada na
            // publicação
            var constraintDocument5 = DatasetFactory.createConstraint(
                    'documentDescription', doc.getDocumentDescription(), doc
                            .getDocumentDescription(), ConstraintType.MUST);

            var datasetDocumentActive = DatasetFactory.getDataset('document', null,
                    new Array(constraintDocument1, constraintDocument2,
                            constraintDocument3, constraintDocument4,
                            constraintDocument5), null);


            //###############################################################################################
            //Considera o documento que esta na lixeira

            // Consultando apenas registros de documentos inativos.
            constraintDocument3 = DatasetFactory.createConstraint(
                    'activeVersion', 'false', 'false', ConstraintType.MUST);

            // Consultando apenas nos documentos que foram removidos.
            constraintDocument4 = DatasetFactory.createConstraint(
                    'deleted', 'true', 'true', ConstraintType.MUST);


            var datasetDocumentDeleted = DatasetFactory.getDataset('document', null,
                    new Array(constraintDocument1, constraintDocument2,
                            constraintDocument3, constraintDocument4,
                            constraintDocument5), null);


            var isExistDoc = datasetDocumentActive != null && datasetDocumentActive.rowsCount > 0
                && (datasetDocumentActive.getValue(0, "documentDescription") == doc.getDocumentDescription());

            var isExistDocDeleted = datasetDocumentDeleted != null && datasetDocumentDeleted.rowsCount > 0
                && (datasetDocumentDeleted.getValue(0, "documentDescription") == doc.getDocumentDescription());


            if (isExistDoc || isExistDocDeleted) {
                throw "Já existe um documento com a mesma descrição informada";
            }

        }
    }
}
Card
label3- Tornar campo descrição/versão/revisão obrigatório

Exemplo de como tornar o campo 'Descrição/Versão/Revisão' de preenchimento obrigatório, apresentado no momento do check-in do documento. 

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher() {

    var doc = getValue("WKDocument");

    // Verifica se a descrição da versão não está preenchida
    if (doc.getVersionDescription() == "") {
        log.info("### Documento: " + doc.getDocumentId() + " - Versão: " + doc.getVersion() + " não está com a Descrição da Versão preenchida!");

        // Informa somente o numero do documento de origem, para o caso de checkin com nova versao/revisao
        var constraintDocument1 = DatasetFactory.createConstraint('allocatedDocumentPK.sourceDocument', doc.getDocumentId(), doc .getDocumentId(), ConstraintType.MUST);
        // Instanciando o dataset
        var datasetDocument = DatasetFactory.getDataset('allocatedDocument', null, new Array(constraintDocument1), null); 
        // Verifica se o documento esta em checkout/checkin e exibe a mensagem
        if (datasetDocument.rowsCount > 0) {
            throw "Para efetuar o checkin é necessário informar a Descrição da Versão!";
        }
    }
}
Card
label4- Parametrizar keyword do documento

Exemplo de uso do parâmetro WKDocumentEdit no evento, para que seja possível atualizar o campo keyWord do documento.

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher() {
    var doc = getValue("WKDocument");
    log.info("KeyWord Atual: " + doc.getKeyWord());

    var docEdit = getValue("WKDocumentEdit");
    docEdit.setKeyWord("Novo");
    log.info("KeyWord Novo: " + docEdit.getKeyWord());
}
Card
label5- Impedir publicação pela extensão do arquivo físico

Exemplo de como impedir a publicação pela extensão do arquivo físico.

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher(){
    var doc = getValue("WKDocument");
    var ext = [".exe",".reg"];

    for (var i = 0; i < ext.length; i++) {
        if (doc.getPhisicalFile().endsWith(ext[i])) { 
            throw "Desculpe, este tipo de arquivo não é permitido por razões de segurança"; 
        }
    }
}
Card
label6- Controlando a versão manualmente em novos documentos

Exemplo de uso do parâmetro WKDocumentEdit no evento para que seja possível controlar as propriedades version, validationStartDate e expirationDate do documento.

Bloco de código
languagejs
linenumberstrue
function beforeDocumentPublisher() {
    var doc = getValue("WKDocument");

    log.info("DocumentId Atual: " + doc.getDocumentId());
    log.info("Version Atual: " + doc.getVersion());
    log.info("DocumentType Atual: " + doc.getDocumentType());
    log.info("ValidationStartDate Atual: " + doc.getValidationStartDate());
    log.info("ExpirationDate Atual: " + doc.getExpirationDate());

    // Quando documento é novo e o tipo de documento é Documento normal.
    if (doc.getDocumentId() == 0 && doc.getDocumentType() == "2") {
	    var docEdit = getValue("WKDocumentEdit");

	    docEdit.setVersion(3);
	    log.info("Version Novo: " + docEdit.getVersion());
	    
	    docEdit.setValidationStartDate(stringToDate("26/05/2023 00:00:00"));
	    log.info("ValidationStartDate Novo: " + docEdit.getValidationStartDate());
	    
	    docEdit.setExpirationDate(stringToDate("27/05/2023 16:50:30"));
	    log.info("ExpirationDate Novo: " + docEdit.getExpirationDate());
    }
    
    function stringToDate(dateString){
        var format = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        return format.parse(dateString);  
    }
}


AfterDocumentPublisher

Utilizado quando é preciso fazer alguma manipulação customizada nas propriedades da tela de publicação/edição de documentos depois que ele foi salvo no banco de dados. Dentre todas as propriedades da tela de publicação/edição de documentos não serão tratados os campos customizados.

...