Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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 sempre é disparado 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.

Exemplo:

Bloco de código
languagejs
linenumberstrue
function validateCustomMetadata(fields){
}

...

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:

Bloco de código
languagejs
linenumberstrue
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:

Bloco de código
languagejs
linenumberstrue
function validateCustomMetadata (fields){
    fields.setValue("campo1","Valor para o Campo 1");
}

...

Informações

Veja o exemplo em nosso repositório aqui.


Exemplo:

Bloco de código
languagejs
linenumberstrue
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:

Bloco de código
languagejs
linenumberstrue
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:

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 .
	
	
	var state = getValue("WKState");
	

	if (state == "PUBLISH") {

		var doc = getValue("WKDocument");

		// Faz validações apenas se o documento estiver sendo publicado na pasta
		// 624
		if (doc.getParentDocumentId() == 624) {
			// Reduzir o retorno de registros para reduzir impacto em
			// performance.
			var constraintDocument1 = DatasetFactory.createConstraint(
					'sqlLimit', '1', '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 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 datasetDocument = DatasetFactory.getDataset('document', null,
					new Array(constraintDocument1, constraintDocument2,
							constraintDocument3, constraintDocument4,
							constraintDocument5), null);

			if (datasetDocument.rowsCount > 0) {
				throw "Já existe um documento com a mesma descrição informada";
			}

		}
	}
}

...

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


Exemplo:

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


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:

Bloco de código
languagejs
linenumberstrue
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.


BeforeDocumentRemove

Este evento é executado antes do documento ir para a lixeira.

Exemplo:

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

    //Exemplo implementação

       var doc = getValue("WKDocument");
        var subject = getValue("WKSubject");
        var listApprover = getValue("WKListApprover");
        var listSeg = getValue("WKListSecurity");
        var listRelated = getValue("WKListRelatedDocument");
        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 (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);
}

...

PropriedadeDescriçãoTipo
WKDocumentObjeto do DocumentoDocumentDto
WKSubjectDescrição do Assunto do documentoString
WKListApproverLista dos Aprovadores do documentoList<ApproverDto>
WKListSecurityLista com a segurança do documento

List<DocumentSecurityConfigDto>

WKListRelatedDocument

Lista com os documentos relacionados ao documento

List<RelatedDocumentDto>
WKStateEstado da ação: PUBLISH ou MODIFYString
WKUserUsuário logadoString
WKCompanyCódigo da Empresa

int


AfterDocumentRemove

Este evento é executado logo após o documento ir para a lixeira.

Exemplo:

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

    //Exemplo implementação

       var doc = getValue("WKDocument");
        var subject = getValue("WKSubject");
        var listApprover = getValue("WKListApprover");
        var listSeg = getValue("WKListSecurity");
        var listRelated = getValue("WKListRelatedDocument");
        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 (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);
}

...

PropriedadeDescriçãoTipo
WKDocumentObjeto do DocumentoDocumentDto
WKSubjectDescrição do Assunto do documentoString
WKListApproverLista dos Aprovadores do documentoList<ApproverDto>
WKListSecurityLista com a segurança do documento

List <DocumentSecurityConfigDto>

WKListRelatedDocument

Lista com os documentos relacionados ao documento

List<RelatedDocumentDto>
WKStateEstado da ação: PUBLISH ou MODIFYString
WKUserUsuário logadoString
WKCompanyCódigo da Empresa

int

BeforeDocumentRestore

Este evento é executado antes do documento ser restaurado da lixeira.

Exemplo:

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

    //Exemplo implementação

       var doc = getValue("WKDocument");
        var subject = getValue("WKSubject");
        var listApprover = getValue("WKListApprover");
        var listSeg = getValue("WKListSecurity");
        var listRelated = getValue("WKListRelatedDocument");
        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());

        log.info("Assunto: " + subject);
}

...

PropriedadeDescrçãoTipo
WKUserCódigo do usuárioString
WKCompanyNúmero da empresaint
WKDocumentObjeto do DocumentoDocumentDto
WKUserLocaleIdioma do Usuário logadoString
WKSubjectAssunto do documentoString

AfterDocumentRestore

Este evento é executado logo após o documento ser restaurado da lixeira.

Exemplo:

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

    //Exemplo implementação

       var doc = getValue("WKDocument");
        var subject = getValue("WKSubject");
        var listApprover = getValue("WKListApprover");
        var listSeg = getValue("WKListSecurity");
        var listRelated = getValue("WKListRelatedDocument");
        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());

        log.info("Assunto: " + subject);
}

...

PropriedadeDescrçãoTipo
WKUserCódigo do usuárioString
WKCompanyNúmero da empresaint
WKDocumentObjeto do DocumentoDocumentDto
WKUserLocaleIdioma do Usuário logadoString
WKSubjectAssunto do documentoString

BeforeDocumentRemovePermanently

Este evento é executado antes do documento ser excluído permanentemente

Exemplo:

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

    //Exemplo implementação

       var doc = getValue("WKDocument");
        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());
}

...

PropriedadeDescriçãoTipo
WKUserCódigo do usuárioString
WKCompanyNúmero da empresaint
WKDocumentObjeto do DocumentoDocumentDto
WKUserLocaleIdioma do Usuário logadoString

AfterDocumentRemovePermanently

Este evento é executado logo após o documento ser excluído permanentemente.

Exemplo:

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

    //Exemplo implementação

       var doc = getValue("WKDocument");
       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());
}

...

PropriedadeDescriçãoTipo
WKUserCódigo do usuárioString
WKCompanyNúmero da empresaint
WKDocumentObjeto do DocumentoDocumentDto
WKUserLocaleIdioma do Usuário logadoString


BeforeDocumentViewer

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


Exemplo:

Bloco de código
languagejs
linenumberstrue
function beforeDocumentViewer (){
}

...

PropriedadeDescriçãoTipo
WKDocumentObjeto do DocumentoDocumentDto
WKUserUsuário logadoString
WKCompanyCódigo da Empresaint


Exemplo:

Bloco de código
languagejs
linenumberstrue
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 check-out: " + 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");
                }
}
Informações

Veja o exemplo (event-document-expiration-date-validation) no repositorio do fluig clicando aqui.


BeforeDownloadContent

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


Exemplo:

Bloco de código
languagejs
linenumberstrue
function beforeDownloadContent (documentId){
}

...

PropriedadeDescriçãoTipo
WKDocumentObjeto do DocumentoDocumentDto
WKSubjectDescrição do Assunto do documentoString
WKUserLocale

Idioma do Usuário logado

String
WKUserUsuário logadoString
WKCompanyCódigo da Empresaint


Exemplo:

Bloco de código
languagejs
linenumberstrue
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

Este evento é 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 de uma forma externa. Por exemplo, ao criar um registro de formulário, enviar os dados do mesmo para um Webservice de outro produto.


Exemplo:

Bloco de código
languagejs
linenumberstrue
function afterSaveCard(companyId, formId, cardId, versionId, cardData){
}

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
formId

Código do Formulário

int
cardIdCódigo do Registro de Formulárioint
versionId

Versão do Registro de Formulário

int
cardData Dados do Registro de FormulárioHashmap <String, String>


Exemplo:

Bloco de código
languagejs
linenumberstrue
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

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


Exemplo:

Bloco de código
languagejs
linenumberstrue
function afterSaveCard(companyId, formId, cardId, versionId, cardData){
}

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
cardIdCódigo do Registro de Formulárioint


Exemplo:

Bloco de código
languagejs
linenumberstrue
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); 
}

onApplyDocumentPrintProperties

Este evento é chamado ao realizar a impressão de documentos que utilizam variáveis de cópia controlada. Onde será possível alterar ou obter o valor das variáveis disponibilizadas para este evento que podem ser consultadas em Impressão de Cópia controlada

Nota

É necessário que a opção Atualiza propriedades de cópia controlada? esteja habilitada nas propriedades do documento.


Exemplo:

Bloco de código
languagejs
linenumberstrue
function onApplyDocumentPrintProperties(fields) {
    // Exemplo implementação
      log.info(fields.get("Document.PrintedDocument.Copies"));//consultando o valor da variável    
      fields.put("Document.PrintedDocument.Copies", "2");//alterando o valor da variável
}

...

Variável
Descrição
Formato
Document.LevelN.ApproverM*---
Document.AuthorAutor do documentoMatricula - Nome do autor
Document.CommentsComentários do documentoTexto
Document.IDCódigo do documentoNúmero
Document.FirstVersionDateData da primeira versão DD/MM/YYYY
Document.LastUpdateDateData da última atualização DD/MM/YYYY
Document.CreationDateData de criação do documento DD/MM/YYYY
Document.ExpiresOnData de expiração do documento DD/MM/YYYY
Document.ApprovedOnData que o documento foi aprovadoDD/MM/YYYY
Document.VersionDescriptionDescrição da Versão/RevisãoTexto
Document.DescriptionDescrição do documento Texto
Document.ActiveDocumento ativotrue ou false
Document.Author.IDMatricula do autor do documentonúmero
Document.Publisher.IDMatricula do publicador do documentoNúmero
Document.Author.Name Nome do autor do documentoTexto
Document.Publisher.Name Nome do publicador do documentoTexto
Document.Approvers1Primeiro aprovador do nível 1Nome do aprovador

Document.Publisher

Publicador do documentoMatricula - Nome do publicador
Document.RevisionRevisão do documentoNúmero da Revisão
Document.ApproversNSegundo aprovador do nível 1Nome do aprovador
Document.TagTags do documentoTexto
Document.Version

Versão do documento

Versão,Revisão


onApplyDocumentProtocolProperties

Este evento é chamado ao realizar a impressão com documento de protocolo. Onde será possível alterar ou obter o valor das variáveis disponibilizadas para este evento que podem ser consultadas em Impressão de Cópia controlada.


Exemplo:

Bloco de código
languagejs
linenumberstrue
function onApplyDocumentProtocolProperties(fields) {
    // Exemplo implementação 
    log.info(fields.get("Document.PrintedDocument.Description"));//consultando o valor da variável   
    fields.put("Document.PrintedDocument.Description", "Descrição do documento");//alterando o valor da variável
}

...

Variável
Descrição
Document.PrintDateData da impressão 
Document.PrintRequesterRequisitante/Solicitante 
Document.PrintedDocument.AreaResponsibleResponsável pela área 
Document.PrintedDocument.Description Descrição do documento
Document.PrintedDocument.Comments Comentários do documento
Document.PrintedDocument.VersionDescription Descrição da Versão/Revisão
Document.PrintedDocument.TagTags do documento
Document.DocumentNrDocumento Número do documento
Document.PrintedDocument.Version Versão do documento 
Document.PrintedDocument.RevisionRevisão do documento
Document.DestinationAreaÁrea 
Document.PrintedDocument.PublisherPublicador do documento
Document.PrintedDocument.VersionDescription1Descrição da versão do documento
Document.PrintedDocument.VersionDescription2 

Continuação da descrição da versão do documento

Document.PrintedDocument.VersionDescription3Continuação da descrição da versão do documento

onApplyDocumentPublishProperties

Este evento é chamado na publicação ou alteração de documentos. Onde será possível alterar ou obter o valor das variáveis disponibilizadas para este evento que podem ser consultadas em Impressão de Cópia controlada.


Exemplo:

Bloco de código
languagejs
linenumberstrue
function onApplyDocumentPublishProperties(fields) {
    // Exemplo implementação  
   log.info(fields.get("Document.Author "));//consultando o valor da variável
   fields.put("Document.Author", "Autor do Documento");//alterando o valor da variável
}

...