Home

TOTVS | Plataformas e tecnologias

Árvore de páginas

Versões comparadas

Chave

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

Índice
maxLevel4
outlinetrue
exclude.*ndice
stylenone

 

Customização de Eventos

A customização de eventos é realizada pela criação de scripts na linguagem “JavaScript”. O código de implementação de cada script é armazenado em banco de dados e dispensa o uso de quaisquer outros arquivos, como por exemplo, “custom.p”. Os eventos de customização para o TOTVS | ECM são criados pelo administrador, na seção eventos, conforme a figura abaixo.

...

Abaixo um exemplo de uso do log em script:

 

log.info(“Testando o log info”);

 

Teríamos no console do servidor a mensagem “Testando o log info”.

...

 

AdddocumentConvertionExt

 

Este evento permite customizar a conversão de documento realizada pelo ECM. Mais informações sobre ele podem ser encontradas no “Guia de Referência Customização de Conversores”.

 

 

DizplayCentralTasks

 

Este evento é disparado sempre antes de ser exibida a central de tarefas. Através dele é possível inserir, alterar ou remover os links da central de tarefas. O evento recebe como parâmetro um LinkedHashMap com os links disponíveis na central de tarefas.
Exemplo adicionando um link customizado ao final dos itens da central de tarefas:

...

Exemplos alterando a ordem de exibição dos links padrões e adicionando três novos, um no início e dois ao final:

 

Bloco de código
function displayCentralTasks (links){
var _links = new java.util.LinkedHashMap();
_links.put("Totvs","http://www.totvs.com");
var it = links.keySet().iterator();
while (it.hasNext()) {
            var key = it.next();
_links.put(key, links.get(key));
}
_links.put("Totvs ECM" ,"http://www.totvs.com/tecnologia/ecm");
_links.put("Google","http://www.google.com.br/search?sourceid=chrome&ie=UTF-8&q=" + getValue("WKUser"));


links.clear();
links.putAll(_links);
}

...

Disponibilizamos algumas informações sobre o usuário e a empresa, porem somente para consulta através do método getValue.

 

WKUserCódigo do usuário
WKCompany

Número da empresa

...

Bloco de código
function displayCentralTasks (links){log.info("Usuário: “ + getValue("WKUser"));}

 

 

DisplayCustomMetadada

 

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

 

Exemplo:

Bloco de código
function displayCustomMetadata(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”, casso o campo não esteja disponível para este documento.

 

Exemplo:

Bloco de código
function displayCustomMetadata(fields){log.info("Valor do Campo 1: “ + fields.getValue("campo1"));}

...

Já pra 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
function displayCustomMetadata(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, porem somente para consulta através do método getValue.

 

WKUserCódigo do usuário
WKCompanyNúmero da empresa
WKNumParentDocumentNúmero da pasta pai
WKDocumentTypeTipo do documento
WKPrivateDocument

Se o documento esta sendo publicado

na pasta particular (true/false)

 

Exemplo:

Bloco de código
function displayCustomMetadata(fields){log.info("Usuário: “ + getValue("WKUser "));}

 

 

ValidateCustomMetadada

 

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.

 

Exemplo:

Bloco de código
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”, casso o campo não esteja disponível para este documento.

 

Exemplo:

Bloco de código
function validateCustomMetadata (fields){log.info("Valor do Campo 1: “ + fields.getValue("campo1"));}

...

Já pra 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
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, porem somente para consulta através do método getValue.

 

WKUserCódigo do usuário
WKCompanyNúmero da empresa
WKNumParentDocumentNúmero da pasta pai
WKDocumentTypeTipo do documento
WKPrivateDocument

Se o documento esta sendo publicado

na pasta particular (true/false)

WKNumAcess

Numero de acessos

WKCommentsComentários do documento
WKAuthorCódigo do autor do documento
WKCreateDateData de criação do documento
WKDescriptionDescrição do documento
WKNumDocumentNúmero do documento
WKNumVersionNúmero da versão do documento
WKExpirationDateData de expiração do documento
WKExpiresDocumento expira? (true/false)
WKFileSizeTamanho do documento em bytes
WKKeyWordPalavras chaves do documento
WKVolumeVolume do documento
WKSubjectAssunto relacionado ao documento

 

Exemplo:

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

 

PropriedadeDescriçãoTipo
WKDocumentObjeto do DocumentoDocumentDto
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
WKUserUsuário logado.String
WKCompanyCódigo da Empresaint

...

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

Bloco de código
function beforeDocumentViewer (){ }

...

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
WKUserUsuário logado.String
WKCompanyCódigo da Empresa

int

 

 

Informações
titleObservação

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

Exemplo:

Bloco de código
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 colaborador com matrícula "+ ds.getValue(0,"colleagueId");
        }
   }

 

 

AfterSaveCard

 

Utilizado quando ao criar/salvar os dados de uma ficha pelo GED ou por movimentações workflow se deseja salvar os dados da ficha em uma forma externa. Por exemplo, ao criar a ficha, enviar os dados da ficha para um Webservice de outro produto.

 

Exemplo:

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

 

Sendo os parâmetros:

 

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
formIdCódigo do Fichárioint
cardIdCódigo da Fichaint
versionIdVersão da Fichaint
cardDataDados da FichaHashMap<String,String>

 

 

Exemplo:

Bloco de código
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 fichário ou uma ficha é eliminado da lixeira.

 

Exemplo:

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

 

Sendo os parâmetros:

 

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
cardIdCódigo da Fichaint

...

Objetos Utilizados nos Eventos

 

Existem alguns objetos disponibilizados pelo produto que são utilizados nos eventos, nas próximas sessões eles serão explicados seus métodos e seus retornos.

...

Bloco de código
var doc = getValue("WKDocument"); 
log.info("Número do documento: "+ doc.getDocumentId() + " - Versão: "+ doc.getVersion());

 

 

ApproverDto

 

Este objeto que representa os aprovadores e suas propriedades, na tabela abaixo consta mais informações sobre ele:

 

FunçãoDescrição da FunçãoTipo do Retorno
getDocumentId()Retorna o número do documentoint
getVersion()

Retorna o número da versão do

documento.

int
getCompanyId()

Retorna o código da empresa em

que o documento foi publicado

Int
getColleagueId()

Retorna a matricula de um colaborador ou o código do grupo

que está aprovando este documento. É possível saber se vai retornar

um colaborador ou um grupo pelo tipo de aprovação

String
getApproverType()

Retorna o tipo da aprovação, onde:
0 →Colaborador
1 →Grupo

int
getLevelId()Retorna o nível de aprovação, no caso de aprovação em níveisint

...

DocumentSegurityConfigDto

 

Este objeto que representa a segurança de um documento e suas propriedades, na tabela abaixo consta mais informações sobre ele:

 

FunçãoDescrição da FunçãoTipo do Retorno
getDocumentId()Retorna o número do documentoint
getVersion()

Retorna o número da versão do

documento

int
getCompanyId()

Retorna o código da empresa em

que o documento foi publicado

Int
getAttributionValue()

Retorna a matricula de um colaborador ou o código do grupo que

está na segurança deste documento. É possível saber se vai

retornar um colaborador ou um grupo

pelo tipo da segurança.

Obs.: Retorna em branco quando o tipo é todos os usuários.

String
getAttributionType()

Retorna o tipo da segurança, onde:
1 →Colaborador;
2 →Grupo;
3 →Todos os Usuários

int
getPermission()

Retorna se é uma permissão.
Obs.: Se não é uma permissão é uma restrição

boolean
getShowContent()Retorna se lista o conteúdoboolean
getSecurityLevel()

Retorna no nível de permissão/restrição, onde:

  • sem permissão/restrição (nega acesso);

0 →Leitura;
1 →Gravação;
2 →Modificação;
3 →Total.

int
getSequence()Retorna a sequência da permissão/restriçãoint
getSecurityVersion()Retorna se ele utiliza a segurança deste versão nas demaisboolean

...

Bloco de código
var listSeg = getValue("WKListSecurity");
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";
         }
    }
}



RelatedDocumentDto

 

FunçãoDescrição da FunçãoTipo do Retorno
getDocumentId()Retorna o número do documentoint
getVersion()

Retorna o número da versão do

documento

int
getCompanyId()

Retorna o código da empresa

em que o documento foi publicado

int
getRelatedDocumentId()

Retorna o número do documento

que está relacionado ao documento publicado

int

 

...

Customização de Eventos JMS

 

O ECM tem customização 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 dois tipos de mensagens JMS customizáveis, o wdkDocument e o wdkAbstract.

...

  • userId (String): Usuário que efetuou a ação;
  • entity (String): Entidade do objeto que está sendo manipulado, conforme a tabela de objeto que já foi apresentada acima.
  • mapNewVersion (byte[ ]): Array de bytes de um HashMap<String, Object> com as propriedade do objeto.
  • mapPreviousVersion (byte[ ]): Array de bytes de um HashMap<String, Object> com as propriedade do objeto antes da alteração.

 

 

Informações

Este mapa não terá objetos quando o evento for CREATE e DELETE.

...