Índice | ||||||||
---|---|---|---|---|---|---|---|---|
|
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”.
...
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”.
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.
WKUser | Código do usuário |
WKCompany | Número da empresa |
...
Bloco de código |
---|
function displayCentralTasks (links){log.info("Usuário: “ + getValue("WKUser"));} |
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.
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.
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.
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.
WKUser | Código do usuário |
WKCompany | Número da empresa |
WKNumParentDocument | Número da pasta pai |
WKDocumentType | Tipo do documento |
WKPrivateDocument | Se o documento esta sendo publicado na pasta particular (true/false) |
Bloco de código |
---|
function displayCustomMetadata(fields){log.info("Usuário: “ + getValue("WKUser "));} |
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 |
---|
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.
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.
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.
WKUser | Código do usuário |
WKCompany | Número da empresa |
WKNumParentDocument | Número da pasta pai |
WKDocumentType | Tipo do documento |
WKPrivateDocument | Se o documento esta sendo publicado na pasta particular (true/false) |
WKNumAcess | Numero 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 |
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.
Bloco de código |
---|
function validateCustomMetadata (fields){if( fields.getValue("campo1") == “Area 1”){throw "TRATAMENTO DA EXCEÇÃO";}} |
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.
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.
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 |
...
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.
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); } |
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.
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.
Utilizado quando é preciso fazer validação customizada antes da visualização de algum documento.
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.
Propriedade | Descrição | Tipo |
---|---|---|
WKDocument | Objeto do Documento | DocumentDto |
WKUser | Usuário logado. | String |
WKCompany | Código da Empresa | int |
Informações | ||
---|---|---|
| ||
Os objetos Dto’s serão explicados no capítulo “Objetos utilizados nos eventos” |
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"); } } |
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.
Bloco de código |
---|
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 Fichário | int |
cardId | Código da Ficha | int |
versionId | Versão da Ficha | int |
cardData | Dados da Ficha | HashMap<String,String> |
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); } |
Utilizado como complemento do evento afterSaveCard. É chamado toda vez que um fichário ou uma ficha é eliminado da lixeira.
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:
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
cardId | Código da Ficha | int |
...
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()); |
Este objeto que representa os aprovadores e suas propriedades, na tabela abaixo consta mais informações sobre ele:
Função | Descrição da Função | Tipo do Retorno |
---|---|---|
getDocumentId() | Retorna o número do documento | int |
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: | int |
getLevelId() | Retorna o nível de aprovação, no caso de aprovação em níveis | int |
...
Este objeto que representa a segurança de um documento e suas propriedades, na tabela abaixo consta mais informações sobre ele:
Função | Descrição da Função | Tipo do Retorno |
---|---|---|
getDocumentId() | Retorna o número do documento | int |
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: | int |
getPermission() | Retorna se é uma permissão. | boolean |
getShowContent() | Retorna se lista o conteúdo | boolean |
getSecurityLevel() | Retorna no nível de permissão/restrição, onde:
0 →Leitura; | int |
getSequence() | Retorna a sequência da permissão/restrição | int |
getSecurityVersion() | Retorna se ele utiliza a segurança deste versão nas demais | boolean |
...
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"; } } } |
Função | Descrição da Função | Tipo do Retorno |
---|---|---|
getDocumentId() | Retorna o número do documento | int |
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
|
...
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.
...
Informações |
---|
Este mapa não terá objetos quando o evento for CREATE e DELETE. |
...