...
WKUser | Código do usuário |
WKCompany | Número da empresa |
Exemplo:
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.
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");} |
...
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) |
Exemplo:
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.
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");} |
...
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 |
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";}} |
...
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(){ } |
...
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); } |
...
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(){ } |
...
Utilizado quando é preciso fazer validação customizada antes da visualização de algum documento.
Exemplo:
Bloco de código |
---|
function beforeDocumentViewer (){ } |
...
Informações | ||
---|---|---|
| ||
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"); } } |
...
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){} |
...
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> |
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); } |
...
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); } |
...
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 |
getUUID() | Retorna o UUID (identificador Único Global) do documento | String |
getDocumentTypeId() | Retorna o tipo do arquivo físico, se retornar branco ou nulo é porque esse tipo não é conhecido pelo ECM | String |
getLanguageId() | Retorna o código do Idioma do documento | String |
getIconId() | Retorna o código do Ícone do documento | int |
getTopicId() | Retorna o código do assunto do documento | int |
getColleagueId() | Retorna a matricula do colaborador que criou o documento | String |
getDocumentDescription() | Retorna a descrição do documento | String |
getAdditionalComments() | Retorna os comentários adicionais do documento | String |
getPhisicalFile() | Retorna o nome do arquivo físico atrelado ao documento | String |
getCreateDate() | Retorna a data de criação | java.util.Date |
getApprovedDate() | Retorna a data de Aprovação | java.util.Date |
getLastModifiedDate() | Retorna a Data da última modificação | java.util.Date |
getDocumentType() | Retorna o tipo do documento, onde: 9 →Aplicativo portal →Site | String |
getExpirationDate() | Retorna a data de expiração | java.util.Date |
getParentDocumentId() | Retorna o número da Pasta/Fichário pai | int |
getRelatedFiles() | String com o nome do arquivo físico principal e anexos | String |
getActiveVersion() | Retorna se a versão é ativa | boolean |
getVersionDescription() | Retorna a descrição da versão | String |
getDownloadEnabled() | Retorna se o documento permite Download | boolean |
getApproved() | Retorna se o documento está em aprovação | boolean |
getValidationStartDate() | Retorna a partir de que data em que o documento poderá ser visualizado | java.util.Date |
getPublisherId() | Retorna a matricula do colaborador que publicou o documento | String |
getCardDescription() | Retorna a descrição da ficha, para documento do tipo 5 | String |
getDocumentPropertyNumber() | Retorna o fichário que foi usado como base para criação da ficha, por isso só tem um valor quando o documento é do tipo 5 (ficha) | int |
getDocumentPropertyVersion() | Retorna a versão do fichário em que a ficha foi criada | int |
getPrivateDocument() | Retorna se o documento/pasta está abaixo da pasta particular | boolean |
getPrivateColleagueId() | Se é um documento particular retorna a matricula do colaborador onde este documento está alocado | String |
getIndexed() | Retorna se o documento já foi indexado | boolean |
getPriority() | Retorna a prioridade do documento | int |
getUserNotify() | Retorna se notifica os usuários que tenham esse assunto de interesse | boolean |
getExpires() | Retorna se o documento está expirado | boolean |
getVolumeId() | Retorna o volume onde o documento foi publicado, se estiver em branco ele utiliza o volume do pai | String |
getInheritSecurity() | Retorna se herda segurança do pai | boolean |
getUpdateIsoProperties() | Retorna se atualiza as propriedades da cópia controlada | boolean |
getLastModifiedTime() | Retorna a hora da última modificação em milissegundos | String |
getDeleted() | Retorna se o documento está na lixeira | boolean |
getDatasetName() | Retorna o documento do dataset , se o documento é um fichário | String |
getKeyWord() | Retorna as palavras chaves do documento. Cada palavra é separada por vírgula | String |
getImutable() | Retorna se a versão/revisão é inalterável | boolean |
getDraft() | Retorna se o documento está em edição, para documento do tipo “Novo Conteúdo” | boolean |
getInternalVisualizer() | Retorna se utiliza visualizador interno | boolean |
getPhisicalFileSize() | Retorna o tamanho físico do documento principal e anexos | float |
getIsEncrypted() | Retorna se o arquivo PDF publicado possui algum tipo de segurança | boolean |
Exemplo de utilização:
Bloco de código |
---|
var doc = getValue("WKDocument"); log.info("Número do documento: "+ doc.getDocumentId() + " - Versão: "+ doc.getVersion()); |
...
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 |
Exemplo de utilização:
Bloco de código |
---|
var listApprover = getValue("WKListApprover"); 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 aprovadores 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 |
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 |
Exemplo de utilização:
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
|
Exemplo de utilização
Bloco de código |
---|
var listRelated = getValue("WKListRelatedDocument"); 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()); } } |
...
Exemplo de utilização:
Bloco de código |
---|
import java.util.Enumeration; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageListener; @MessageDriven(mappedName = "custom/DocumentListener", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/wdkDocument") }) public class DocumentListenerMessageBean implements MessageListener { @Override public void onMessage(Message message) { try { System.out.println("========Document Listener========"); System.out.println("Message received: " + message.getJMSMessageID()); if (message instanceof MapMessage) { MapMessage mm = (MapMessage) message; @SuppressWarnings("unchecked") Enumeration<String> es = mm.getMapNames(); while (es.hasMoreElements()) { String prop = es.nextElement(); System.out.println(prop + ": " + mm.getObject(prop)); } } System.out.println("========Fim Document Listener========"); } catch (Exception e) { e.printStackTrace(); } } } |
...
Bloco de código |
---|
private Map<String, Object> decoderMap(byte[] array) { if(array.length>0){ ByteArrayInputStream bos = new ByteArrayInputStream(array); ObjectInputStream p = new ObjectInputStream(bos); Object docObject = p.readObject(); try{ Map<String, Object> map = (Map<String, Object>) docObject; return map; }catch(java.lang.ClassCastException e){ e.printStackTrace(); } } return null; } |
Exemplo de utilização:
Bloco de código |
---|
package com.totvs.ecm.custom.dm; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.util.Enumeration; import java.util.Iterator; import java.util.Map; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageListener; @MessageDriven(mappedName = "custom/DocumentListener", activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/wdkAbstract") }) public class AbstractListenerMessageBean implements MessageListener { @Override public void onMessage(Message message) { try { System.out.println("==============Abstract Listener===================="); System.out.println("Message received: " + message.getJMSMessageID()); if (message instanceof MapMessage) { MapMessage mm = (MapMessage) message; @SuppressWarnings("unchecked") Enumeration<String> es = mm.getMapNames(); while (es.hasMoreElements()) { String prop = es.nextElement(); System.out.println(prop + ": " + mm.getObject(prop)); if(prop.equalsIgnoreCase("mapNewVersion") || prop.equalsIgnoreCase("mapOldVersion")){ Map<String, Object> m = decoderMap(mm.getBytes(prop)); Iterator it = m.entrySet().iterator(); while (it.hasNext()) { Map.Entry e = (Map.Entry)it.next(); System.out.println(prop + " - " + e.getKey() + ": " + e.getValue()); } } } }System.out.println("==========Fim Abstract Listener==============="); }catch (Exception e) { e.printStackTrace(); } } private Map<String, Object> decoderMap(byte[] array) throws IOException, ClassNotFoundException{ if(array.length>0){ ByteArrayInputStream bos = new ByteArrayInputStream(array); ObjectInputStream p = new ObjectInputStream(bos); Object docObject = p.readObject(); try{ Map<String, Object> map = (Map<String, Object>) docObject; return map; }catch(java.lang.ClassCastException e){ e.printStackTrace(); } } return null; } } |
...