Eventos

Os eventos de documentos são um conjunto de scripts carregados pela API de Documentos, os quais são desenvolvidos utilizando Javascript e são chamados durante a execução de ação em Documentos ou em momentos específicos de interação em Documentos.

AddDocumentConvertionExt

Este evento permite personalizar a conversão de documento realizada pelo fluig. Mais informações sobre ele podem ser encontradas no guia Conversores de Documentos.

 

ValidateCustomMetadata

Este evento é disparado sempre antes de salvar os valores dos campos customizados de um documento, tanto na publicação como edição. Através dele é possível alterar ou validar os valores dos campos customizados dos metadados de um documento. O evento recebe como parâmetro uma referência aos campos customizados.

function validateCustomMetadata(fields){
}

 

No contexto deste evento a variável fields pode ser usada para consultar ou modificar os valores dos campos customizados de um documento. Não permitindo adicionar novos campos.

Para inserir novos campos em um documento existe varias maneiras disponíveis.

Para consultar o valor de um campo customizado neste evento, utiliza-se o fields.getValue passando como parâmetro o código do campo desejado. Retornando “null”, caso o campo não esteja disponível para este documento.

Exemplo

 

function validateCustomMetadata (fields){
    log.info("Valor do Campo 1: " + fields.getValue("campo1"));
}

 


Já para realizar a edição utiliza-se o fields.setValue, passando como parâmetro, primeiro o nome do campo, em seguida o valor.

Exemplo

 

function validateCustomMetadata (fields){
    fields.setValue("campo1","Valor para o Campo 1");
}

 


Alem dos valores dos campos customizados disponibilizamos algumas informações do documento que esta sendo criado ou editado, porém somente para consulta através do método getValue.

WKUser

Código do usuário

WKCompany

Número da empresa

WKNumParentDocument

Número da pasta pai

WKDocumentType

Tipo do documento

WKDocumentTypeIdID do tipo de documento

WKPrivateDocument

Se o documento esta sendo publicado na pasta particular (true/false)

WKNumAcess

Número de acessos

WKComments

Comentários do documento

WKAuthor

Código do autor do documento

WKCreateDate

Data de criação do documento

WKDescription

Descrição do documento

WKNumDocument

Número do documento

WKNumVersion

Número da versão do documento

WKExpirationDate

Data de expiração do documento

WKExpires

Documento expira? (true/false)

WKFileSize

Tamanho do documento em bytes

WKKeyWord

Palavras chaves do documento

WKVolume

Volume do documento

WKSubject

Assunto relacionado ao documento


Exemplo

 

function validateCustomMetadata (fields){
    log.info("Usuário: " + getValue("WKUser "));
}

 


As exceções podem ser tratadas utilizando o comando throw.

Este comando retornará uma mensagem ao usuário ao tentar salvar o documento.

Exemplo

 

function validateCustomMetadata (fields){
    if( fields.getValue("campo1") == "Area 1"){
        throw "TRATAMENTO DA EXCEÇÃO";
    }
}

 

BeforeDocumentPublisher

Utilizado quando é preciso fazer validação customizada nas propriedades da tela de publicação/edição de documentos antes de salva-lo 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, pois já existe um evento que trata esta situação.

Exemplo

 

function beforeDocumentPublisher(){
}

 

 

São disponibilizadas algumas propriedades referentes ao documento que esta sendo criado ou editado, porem somente para consulta através do método getValue.

 

Propriedade

Descrição

Tipo

WKDocument

Objeto do Documento

DocumentDto

WKSubject

Descrição do Assunto do documento

String

WKListApprover

Lista dos Aprovadores do documento

List<ApproverDto>

WKListSecurity

Lista com a segurança do documento

List <DocumentSecurityConfigDto>

WKListRelatedDocument

Lista com os documentos relacionados ao documento

List< RelatedDocumentDto>

WKState

Estado da ação: PUBLISH ou MODIFY

String

WKUser

Usuário logado

String

WKCompany

Código da Empresa

int

Os objetos Dto’s serão explicados no capítulo “Objetos utilizados nos eventos”

 

 

O produto retorna null quando for necessário pegar umas das propriedades do documento que não exista.

Por exemplo: Nem todos os documentos publicados tem aprovador, então a variável WKListApprover só terá informações quando realmente existirem aprovadores na publicação.

Exemplo

 

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);

}

 

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.

Exemplo

 

function afterDocumentPublisher(){
}


As propriedades recuperadas através do método getValue() são as mesmas do eventos beforeDocumentPublisher e a forma de manipulação das propriedades pode ser vista no exemplo do evento beforeDocumentPublisher.

 

BeforeDocumentViewer

Utilizado quando é preciso fazer validação customizada antes da visualização de algum documento.

Exemplo

 

function beforeDocumentViewer (){
}

 

São disponibilizadas algumas propriedades referentes ao documento que esta sendo visualizado, porem somente para consulta através do método getValue.

Propriedade

Descrição

Tipo

WKDocument

Objeto do Documento

DocumentDto

WKUser

Usuário logado.

String

WKCompany

Código da Empresa

int

Os objetos Dto’s serão explicados no capítulo “Objetos utilizados nos eventos”.

 

Exemplo

 

function beforeDocumentViewer(){
 
 
                var doc = getValue("WKDocument");
                var company = getValue("WKCompany");
                var ds
                
                try {
                               var c1 = DatasetFactory.createConstraint(                                                                                                                                                                                                                                                    "allocatedDocumentPK.companyId", company, company, ConstraintType.MUST);
                               var c2 = DatasetFactory.createConstraint( "allocatedDocumentPK.sourceDocument", doc.getDocumentId(), doc.getDocumentId(), ConstraintType.MUST);
                               var c3 = DatasetFactory.createConstraint( "allocatedDocumentPK.sourceVersion", doc.getVersion(), doc.getVersion(), ConstraintType.MUST);
                               var c4 = DatasetFactory.createConstraint("active""true","true", ConstraintType.MUST);
                                var constraints = new Array(c1, c2, c3, c4);
                               ds = DatasetFactory.getDataset("allocatedDocument"null, constraints, null);
 
 
                }catch (e) {
                               log.error("Erro ao tentar recuperar o documento em CheckOut: " + e.message);
                }
 
 
                if(ds!=null && ds.rowsCount>0){      
                               throw  "Este documento está em Check Out e não pode ser visualizado. Foi gerado o documento " + ds.getValue(0,"allocatedDocumentPK.destinationDocument") + " que está sob responsabilidade do usuário com matrícula "+ ds.getValue(0,"colleagueId");
                }
}

 

BeforeDownloadContent

Utilizado quando é preciso fazer validação customizada antes do download de algum documento.


Exemplo

 

function beforeDownloadContent (documentId){
}

 

 

São disponibilizadas algumas propriedades referentes ao documento que esta sendo visualizado, porem somente para consulta através do método getValue.

Propriedade

Descrição

Tipo

WKDocument

Objeto do Documento

DocumentDto

WKSubject

Descrição do Assunto do documento

String

WKUserLocale

Idioma do Usuário logado

String

WKUser

Usuário logado

String

WKCompany

Código da Empresa

int

Os objetos Dto’s serão explicados no capítulo “Objetos utilizados nos eventos”.

 

Exemplo

 

function beforeDownloadContent(documentId) {
    var companyId = getValue("WKCompany");
    var c1 = DatasetFactory.createConstraint( "documentPK.documentId", documentId, documentId, ConstraintType.MUST);
    var c2 = DatasetFactory.createConstraint( "documentPK.companyId", companyId, companyId, ConstraintType.MUST);
    var constraints = new Array(c1, c2);
    var ds = DatasetFactory.getDataset("document"null, constraints, null);
    if (ds != null && ds.rowsCount > 0) {
        var parent = ds.getValue(0"parentDocumentId");
        if (parent == 43) {
            throw "Download não permitido!";
        }
    }
}

 

AfterSaveCard

Utilizado quando ao criar/salvar os dados de um registro de formulário pela Navegação de Documentos ou por movimentações Workflow se deseja salvar os dados do registro de formulário em uma forma externa. Por exemplo, ao criar o registro de formulário, enviar os dados do mesmo para um Webservice de outro produto.


Exemplo

 

function afterSaveCard(companyId, formId, cardId, versionId, cardData){
}

 

 

Sendo os parâmetros:

Propriedade

Descrição

Tipo

companyId

Código da Empresa

int

formId

Código do Formulário

int

cardId

Código do Registro de Formulário

int

versionIdVersão do Registro de Formulárioint
cardDataDados do Registro de FormulárioHashmap <String, String>


Exemplo

 

function afterSaveCard(companyId, formId, cardId, versionId, cardData){ 
    var custom = ServiceManager.getService("CustomCard"); 
    var serviceHelper = custom.getBean(); 
    var serviceLocator = serviceHelper.instantiate("com.totvs.technology.webdesk.forms.service.custom.CustomCardServiceLocator"); 
    var service = serviceLocator.getCustomCardPort();
 
    var ar = new Array(); 
    var it = cardData.keySet().iterator(); 
    while (it.hasNext()) { 
        var key = it.next(); 
        var field1 = serviceHelper.instantiate("com.totvs.technology.webdesk.forms.service.custom.CardKeyValue"); 
         
        field1.setKey(key); 
            field1.setValue( cardData.get(key)); 
        log.info('>' + key + ': ' + cardData.get(key)); 
 
        ar.push(field1); 
    
 
    var resultArr = serviceHelper.instantiate("com.totvs.technology.webdesk.forms.service.custom.CardKeyValueArray"); 
    resultArr.setItem(ar); 
    service.create(companyId, formId, cardId, versionId, resultArr); 
}

 

AfterDeleteCard

Utilizado como complemento do evento afterSaveCard. É chamado toda vez que um formulário ou um registro de formulário é eliminado da lixeira.


Exemplo

 

function afterSaveCard(companyId, formId, cardId, versionId, cardData){
}

 

 

Sendo os parâmetros:

Propriedade

Descrição

Tipo

companyId

Código da Empresa

int

cardId

Código do Registro de Formulário

int


Exemplo

 

function afterDeleteCard(companyId,cardId){ 
    var custom = ServiceManager.getService("CustomCard"); 
    var serviceHelper = custom.getBean();
 
    var serviceLocator = serviceHelper.instantiate("com.totvs.technology.webdesk.forms.service.custom.CustomCardServiceLocator"); 
 
    var service = serviceLocator.getCustomCardPort(); 
 
    log.info("########## carregou serviço CustomCard"); 
    service.deleteCard(companyId, cardId); 
}