Árvore de páginas

Versões comparadas

Chave

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

...

Índice
outlinetrue
exclude.*ndice
stylenone

 

Eventos globais JavaScript

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.

...

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.

...

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.

...

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.

...


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

 

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

...

Nota

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


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

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

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
Nota

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


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

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

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

 

Sendo os parâmetros:

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

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

 

Sendo os parâmetros: 

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

 

Desenvolvimento de Eventos JMS

O fluig suporta o desenvolvimento de eventos JMS, permitindo criar procedimentos de auditoria com base nas informações fornecidas pelo produto. O JMS (Java Message Service) é uma API Java™ que provê uma conexão assíncrona entre aplicações por meio de troca de mensagens.

O produto dispara um tipo de mensagem JMS personalizável, o wdkDocument. O wdkDocument será acionado quando houver manipulação nos documentos do fluig.

Para a aplicação receber a mensagem com as informações do documento, a classe tem que estender o MessageListener e ter a seguinte linha:

Bloco de código
languagejava
@MessageDriven(mappedName = "custom/DocumentListener", activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/wdkDocument")})

 

O objeto de retorno será um MapMessage que conterá os seguintes parâmetros:

  • event (String): Informa qual o tipo de evento que foi efetuado com o documento, conforme a tabela abaixo:

EventoDescrição
PUBLISH

Um novo documento publicado

MODIFY

Documento é modificado

DELETEDocumento é excluído da base de dados
SENDRECYCLE

Documento é enviado para lixeira

DELETEFOLDER

Uma pasta é excluída da base de dados

EXTERNALCONVERTION

Documento com conversão customizada
CONVERTIONLONGTERMDocumento convertido para longo prazo

MOVE

Um ou mais documento ou pastas foram movidos de uma pasta para outra

RESTORERECYCLE

Restaura documentos e pastas da Lixeira
  • companyId (Integer): Código da empresa em que o documento foi manipulado.
  • colleagueId (String): Usuário que efetuou a ação.
  • documentId (Integer): Código do documento que sofreu a ação.
  • version (Integer): Número da versão do documento.
  • lhasCreatedDocument (Boolean): Informa se criou o documento.
  • IhasIncreasedVersion (Boolean): Informa se foi incrementada a versão.
  • changedApproval (Boolean): Informa se o aprovador foi modificado.
  • documento (byte[ ]): Array de bytes com o documento e suas propriedades.