Histórico da Página
...
Painel |
---|
...
|
...
|
...
|
...
|
...
Desenvolvimento de Eventos
O desenvolvimento de eventos é realizado 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”.
Nota | ||
---|---|---|
| ||
Para que um usuário que não é administrador da empresa possa criar, importar, editar e remover eventos globais é necessário que ele possua a permissão "Configurar Eventos Globais". Esta permissão pode ser concedida pelo administrador através do item "Permissões" disponível na aba "Gerais" do Painel de Controle do fluig. Saiba como realizar esse procedimento clicando aqui. |
Os desenvolvimentos sobre a plataforma fluig são feitos pelo administrador, a partir do fluig Studio. No projeto fluig, clique com o botão direito sobre a pasta events e em seguida Novo -> Evento Global fluig conforme a figura abaixo.
Figura 1 - Criação de evento - fluig Studio.
Em seguida basta informar o Servidor e o Nome do Evento que será adicionado. Uma tela para edição do evento será aberta, conforme imagem a seguir:
Figura 2 - Criação de evento - fluig Studio.
É possível observar também que o arquivo .js foi adicionado a pasta events do projeto.
O fluig permite utilizar o log de execução nos eventos desenvolvidos sobre a plataforma. Através da variável global “log” é possível obter o feedback da execução de cada evento. Existem quatro níveis de log, são eles:
- ERROR: apresentação de erros.
- DEBUG: depurar a execução.
- WARN: informar possível problema de execução.
- INFO: apresentação de mensagens.
A apresentação de cada um dos tipos de log está condicionada a configuração do servidor de aplicação. Por exemplo, no JBoss®, por padrão, as mensagens do tipo info e warn são apresentadas no console do servidor e as do tipo debug, error são apresentadas no arquivo de log. Abaixo um exemplo de uso do log em script:
Bloco de código | ||
---|---|---|
| ||
log.info("Testando o log info"); |
Teríamos no console do servidor a mensagem “Testando o log info”.
Nota | ||
---|---|---|
| ||
Grande parte dos eventos possuem WKUser para identificar o usuário. Esse ao utilizar a função de substituto, onde um usuário pode substituir outro, irá sempre retornar o usuário que está no momento utilizando o sistema. Exemplo: Ana colocou Bruno como seu substituto, Bruno acessa o sistema e faz uma ação em nome da Ana, sistema irá retornar o código do usuário Bruno nos eventos que usam WKUser. |
Nota | ||
---|---|---|
| ||
Em todos os eventos é possível realizar chamadas para os serviços disponíveis na API pública. Acesse aqui nosso guia de consumo da API pública em eventos. |
Eventos do tipo "Before"
De uma forma geral, os eventos do tipo before são executados antes que a ação que disparou o evento seja efetivada, desta forma é possível filtrar os dados que são passados ou até mesmo evitar que a ação executada seja concluída.
Para bloquear a ação basta lançar uma Exception passando uma mensagem de texto que será exibida em formado de toast para o usuário:
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
throw "Você não pode efetuar esta ação após as 18 horas." |
Eventos do tipo "After"
Já os eventos do tipo after são executados após a efetivação da ação e não possuem nenhuma influência sobre esta. Ou seja, qualquer dado alterado no parâmetro recebido dentro do evento não será refletido sobre o conteúdo persistido da ação.
Outra característica interessante desse tipo de evento é que eles não devem lançar exceção, caso isso ocorra a exceção ignorada pelo sistema.
Eventos de processos
Os eventos de processos são aqueles executados a cada tarefa de uma solicitação workflow e também em momentos específicos como no envio de e-mail e na liberação de novos processos.
Liberar nova versão do processo
Quando liberar uma nova versão do processo configurado, o evento executado será:
- afterReleaseVersion
Salvar nova solicitação
Quando iniciar uma solicitação pelo menu Processos, é evento executado será:
- validateAvailableState
Acionando o botão Salvar da solicitação, os eventos executados são:
- beforeStateEntry
- beforeTaskCreate
- afterTaskCreate
- afterStateEntry
- beforeSendData
- validateAvailableStates
- beforeTaskSave
- afterTaskSave
- afterProcessCreate
Criar nova solicitação
Quando iniciar uma solicitação pelo menu Processos, é evento executado será:
- validateAvailableStates
Após criada a solicitação e acionado o botão Enviar, os eventos executados serão:
- beforeStateEntry
- beforeTaskCreate
- afterTaskCreate
- afterStateEntry
- beforeSendData
- validateAvailableStates
- beforeTaskSave
- afterTaskSave
- beforeTaskComplete
- afterTaskComplete
- beforeStateLeave
- afterStateLeave
- afterProcessCreate
- setProcess
- onNotify
Visualizar solicitação
Quando acessar a Central de Tarefas, abrir uma solicitação já iniciada, os eventos executados serão:
- validateAvailableStates
- setProcess
- checkComplementsPermission
Salvar solicitação
Quando acionar o botão Salvar a solicitação, os eventos executados serão:
- setProcess
- validateAvailableStates
- beforeTaskSave
- afterTaskSave
Movimentar solicitação
Quando movimentar a solicitação acionando o botão Enviar, os eventos executados serão:
- setProcess
- validateAvailableStates
- beforeTaskSave
- afterTaskSave
- beforeTaskComplete
- afterTaskComplete
- beforeStateLeave
- afterStateLeave
- beforeStateEntry
- beforeTaskCreate
- afterTaskCreate
- afterStateEntry
- beforeSendData
- onNotify
Movimentar para subprocesso
Quando movimentar a solicitação para subprocesso acionando o botão Enviar, os eventos executados serão:
- setProcess
- validateAvailableStates
- beforeTaskSave
- afterTaskSave
- beforeTaskComplete
- afterTaskComplete
- beforeStateLeave
- afterStateLeave
- beforeStateEntry
- subProcessCreated
- afterStateEntry
- BeforeSendData
- onNotify
Finalizar solicitação
Quando finalizar a solicitação acionando o botão Enviar, os eventos executados serão:
- setProcess
- validateAvailableStates
- beforeTaskSave
- afterTaskSave
- beforeTaskComplete
- afterTaskComplete
- beforeStateLeave
- afterStateLeave
- beforeStateEntry
- afterStateEntry
- afterProcessFinish
- beforeSendData
Cancelar solicitação
Quando usuário acessar solicitação já iniciada na Central de Tarefas para Cancelamento, os eventos executados serão:
- setProcess
- checkComplementsPermissions.
Quando acionar o botão Cancelar Solicitação, os eventos executados serão:
- setProcess
- beforeCancelProcess
- afterCancelProcess
- beforeSendData
- setProcess
- onNotify
Eventos Disponíveis
A seguir serão detalhados os eventos disponíveis no fluig.
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.
DisplayCentralTasks
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:
Bloco de código | ||
---|---|---|
| ||
function displayCentralTasks (links){
links.put("Fluig","http://www.fluig.com");
} |
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("Fluig","http://www.fluig.com");
var it = links.keySet().iterator();
while (it.hasNext()) {
var key = it.next();
_links.put(key, links.get(key));
}
_links.put("Fluig - DEV" ,"http://dev.fluig.com");
_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, porém 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"));
} |
DisplayCustomMetadata
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){
} |
No contexto deste evento a variável fields pode ser usada para consultar ou modificar os valores dos campos customizados de um documento. Não permitindo adicionar novos campos.
Para inserir novos campos em um documento existe diversos maneiras disponíveis.
- Pela herança da pasta pai.
- No cadastro de Campos Customizados, marcando a opção Mostrar em todos documentos ou da forma padrão.
- Através do WebService CustomFieldsService.
- Na edição dos metadados do documento, pelo usuário.
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 está sendo criado ou editado, porém 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"));
} |
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 | ||||
---|---|---|---|---|
| ||||
function validateCustomMetadata(fields){
} |
No contexto deste evento a variável fields pode ser usada para consultar ou modificar os valores dos campos customizados de um documento. Não permitindo adicionar novos campos.
Para inserir novos campos em um documento existe varias maneiras disponíveis.
- Pela herança da pasta pai.
- No cadastro de Campos Customizados, marcando a opção Mostrar em todos documentos ou da forma padrão.
- Através do WebService CustomFieldsService.
- Na edição dos metadados do documento, pelo usuário.
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.
Bloco de código | ||||
---|---|---|---|---|
| ||||
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 | ||||
---|---|---|---|---|
| ||||
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, porém 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 |
WKDocumentTypeId | ID do tipo de documento |
WKPrivateDocument | Se o documento esta sendo publicado na pasta particular (true/false) |
WKNumAcess | Número 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";
}
} |
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.
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 | |
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 |
Informações | ||
---|---|---|
| ||
Os objetos Dto’s serão explicados no capítulo “Objetos utilizados nos eventos” |
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);
} |
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.
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.
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 | |
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 usuário com matrícula "+ ds.getValue(0,"colleagueId");
}
} |
BeforeDownloadContent
Utilizado quando é preciso fazer validação customizada antes do download de algum documento.
Bloco de código | ||||
---|---|---|---|---|
| ||||
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.
Propriedade | Descrição | Tipo |
WKDocument | Objeto do Documento | |
WKSubject | Descrição do Assunto do documento | String |
WKUserLocale | Idioma do Usuário logado | String |
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 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.
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 Formulário | int |
cardId | Código do Registro de Formulário | int |
versionId | Versão do Registro de Formulário | int |
cardData | Dados do Registro de Formulário | 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);
} |
AfterDeleteCard
Utilizado como complemento do evento afterSaveCard. É chamado toda vez que um formulário ou um registro de formulário é eliminado da lixeira.
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 |
cardId | Código do Registro de Formulário | int |
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);
} |
BeforeWatchContent
Utilizado quando ao acompanhar algum conteúdo se deseja recuperar informações do registro e usar antes da ação de "acompanhar". Por exemplo, ao acompanhar um documento, é possível recuperar suas informações e usá-las em um dataset.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeWatchContent(companyId, watchDTO){
} |
Sendo os parâmetros:
Propriedade | Descrição | Tipo |
companyId | Código da Empresa | int |
watchDTO | Dados do registro | WatchDTO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeWatchContent(companyId, watchDTO){
if(watchDTO.getSocialWatchType() == "DOCUMENT"){
var objClass = "com.totvs.technology.social.document.6";
var objClass = watchDTO.getObjectClass();
var patt = new RegExp( /\d+/) ;
var documentId = patt.exec(objClass) ;
var documentVersion = watchDTO.getObjectId();
var doc = getValue("WKDocument");
var company = companyId;
var ds ;
try {
var c1 = DatasetFactory.createConstraint( "allocatedDocumentPK.companyId", company, company, ConstraintType.MUST);
var c2 = DatasetFactory.createConstraint("allocatedDocumentPK.sourceDocument",documentId,documentId, ConstraintType.MUST);
var c3 = DatasetFactory.createConstraint("allocatedDocumentPK.sourceVersion", documentVersion,documentVersion, 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 "Sua solicitação de notificação foi negada, pois o documento está em checkout." ;
}
}
} |
AfterWatchContent
Utilizado quando ao acompanhar algum conteúdo se deseja recuperar informações do registro e usar após a ação de "acompanhar". Por exemplo, ao acompanhar um post, é possível recuperar suas informações e usá-las para informar o usuário sobre o autor do post.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterWatchContent(companyId, watchDTO){
} |
Sendo os parâmetros:
Propriedade | Descrição | Tipo |
companyId | Código da Empresa | int |
watchDTO | Dados do registro | WatchDTO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterWatchContent(companyId, watchDTO){
if(watchDTO.getSocialWatchType() == "POST"){
throw "O usuário "+watchDTO.getUserAlias()+" vai ser notificado sobre o post " + watchDTO.getText() + " do autor " + watchDTO.getPostAuthor() ;
}
} |
BeforeUnwatchContent
Utilizado quando ao deixar de acompanhar algum conteúdo se deseja recuperar informações do registro e usar antes da ação de "deixar de acompanhar". Por exemplo, ao tentar deixar de acompanhar uma comunidade, é possível decidir se o usuário pode deixar de acompanhá-la.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeUnwatchContent(companyId, watchDTO){
} |
Sendo os parâmetros:
Propriedade | Descrição | Tipo |
companyId | Código da Empresa | int |
watchDTO | Dados do registro | WatchDTO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeUnwatchContent(companyId, watchDTO){
if(watchDTO.getSocialWatchType() == "COMMUNITY"){
throw "Você não pode deixar de ser notificado sobre a comunidade " + watchDTO.getDescription() ;
}
} |
AfterUnwatchContent
Utilizado quando ao deixar de acompanhar algum conteúdo se deseja recuperar informações do registro e usar após a ação de "deixar de acompanhar". Por exemplo, ao deixar de acompanhar um post, é possível recuperar suas informações e informar o usuário que aquele post possui muitos seguidores.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterUnwatchContent(companyId, watchDTO){
} |
Sendo os parâmetros:
Propriedade | Descrição | Tipo |
companyId | Código da Empresa | int |
watchDTO | Dados do registro | WatchDTO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterUnwatchContent(companyId, watchDTO){
if(watchDTO.getSocialWatchType() == "POST" && watchDTO.getNumberWatchers() < 3 ){
log.erro("O post \"" + watchDTO.getText() + "\" do autor " + watchDTO.getPostAuthor() + " deixou de ser polemico" )
}
} |
beforeSocialShare
Este evento é disparado sempre antes da efetivação do compartilhamento de um objeto social.
OBS: Pode-se alterar a mensagem de compartilhamento passando uma String para o método setText( <valor> ) do objeto "share". |
---|
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialShare(companyId, share){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
share | objeto de socialização | SocialShareEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialShare(companyId, share){
var lastUpd = share.getSociable().getLastUpdateDate().getTime();
log.info("lastUpd: " + lastUpd);
var daysAgo = new Date();
daysAgo.setDate(daysAgo.getDate()-3);
log.info("daysAgo: " + daysAgo);
if (lastUpd < oneMonthAgo) {
throw "You could not share old socials (more than 3 days old)";
}
} |
afterSocialShare
Esse evento é disparado sempre após a efetivação de um compartilhamento.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialShare(companyId, share){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
share | objeto de socialização | SocialShareEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialShare(companyId, share){
log.info(share.getUser() + " has shared the sociable " + share.getSociable().getId() + " with text " + share.getText());
} |
beforeSocialComment
Esse evento é disparado sempre antes da efetivação de um comentário.
OBS: Pode-se alterar o conteúdo do comentário passando uma String para o método setText( <valor> ) do objeto "comment". |
---|
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialComment(companyId, comment){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
comment | objeto de comentário | SocialCommentEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialComment(companyId, comment){
if (comment.getSociable().getNumberLikes() < 1) {
throw "You can not comment a post that was not liked.";
}
} |
afterSocialComment
Esse evento é disparado sempre após a efetivação de um comentário.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialComment(companyId, comment){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
comment | objeto de comentário | SocialCommentEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialComment(companyId, comment){
log.info(comment.getUser() + " has done the comment " + comment.getText());
} |
beforeSocialPost
Esse evento é disparado sempre antes da efetivação de um post.
OBS: Pode-se alterar o conteúdo da publicação passando uma String para o método setText( <valor> ) do objeto "post". |
---|
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialPost(companyId, post){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
post | Objeto que representa a publicação | SocialPostEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialPost(companyId, vo){
if(vo.getText().indexOf(" fluid ") > -1) {
vo.setText(vo.getText().replace( " fluid ", " fluig "));
}
} |
afterSocialPost
Esse evento é disparado sempre após a efetivação de um comentário.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialPost(companyId, post){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
post | objeto de post | SocialPostEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialPost(companyId, post){
if (post.getText().toLowerCase().indexOf("#minhacampanha") > -1) {
log.info(post.getUser() + " has published a content.");
}
}
|
beforeSocialPostRemove
Esse evento é disparado sempre antes da efetivação de uma remoção de um post.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialPostRemove(companyId, post){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
post | objeto de post | SocialPostEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialPostRemove(companyId, post){
if (post.getText().toLowerCase().indexOf("#important") > -1) {
throw "You cannot remove a post marked as important.";
}
} |
afterSocialPostRemove
Esse evento é disparado sempre após a efetivação de uma remoção de um post.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialPostRemove(companyId, post){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
post | objeto de post | SocialPostEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialPostRemove(companyId, post){
log.info(post.getUser() + " has removed the post " + post.getSociable().getId());
} |
beforeSocialDenounce
O evento é disparado quando um Sociable é denunciado porém antes que a ação seja efetivada.
Exemplo de uso:
...
|
Índice
Índice | ||||||
---|---|---|---|---|---|---|
|
Eventos globais
Os eventos globais do fluig são executados pela plataforma antes ou após alguma ação ocorrer (Ex: Aprovação de documento, movimentação de processo, publicação de comentário etc). Tais eventos podem ser personalizados através da linguagem Javascript. Os eventos são divididos em eventos do tipo before, que ocorre antes que a ação que disparou o evento seja efetivada e do tipo after, que ocorre após a ação acontecer.
Conector de Widget | ||||||
---|---|---|---|---|---|---|
|
SocialPostEventVO
Informações |
---|
Veja o exemplo em nosso repositório aqui. |
Desenvolvimento de Eventos
O desenvolvimento de eventos é realizado 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”.
Nota | ||
---|---|---|
| ||
Para que um usuário que não é administrador da empresa possa criar, importar, editar e remover eventos globais é necessário que ele possua a permissão "Configurar Eventos Globais". Esta permissão pode ser concedida pelo administrador através do item "Permissões" disponível no agrupador "Pessoas" do Painel de Controle do fluig. Saiba como realizar esse procedimento clicando aqui. |
Os desenvolvimentos sobre a plataforma fluig são feitos pelo administrador, a partir do fluig Studio. No projeto fluig, clique com o botão direito sobre a pasta events e em seguida Novo -> Evento Global fluig conforme a figura abaixo.
Figura 1 - Criação de evento - fluig Studio.
Em seguida basta informar o Servidor e o Nome do Evento que será adicionado. Uma tela para edição do evento será aberta, conforme imagem a seguir:
Figura 2 - Criação de evento - fluig Studio.
É possível observar também que o arquivo .js foi adicionado a pasta events do projeto.
O fluig permite utilizar o log de execução nos eventos desenvolvidos sobre a plataforma. Através da variável global “log” é possível obter o feedback da execução de cada evento. Existem quatro níveis de log, são eles:
- ERROR: apresentação de erros.
- DEBUG: depurar a execução.
- WARN: informar possível problema de execução.
- INFO: apresentação de mensagens.
A apresentação de cada um dos tipos de log está condicionada a configuração do servidor de aplicação. Por exemplo, no servidor de aplicação, por padrão, as mensagens do tipo info e warn são apresentadas no console do servidor e as do tipo debug, error são apresentadas no arquivo de log. Abaixo um exemplo de uso do log em script:
Bloco de código | ||
---|---|---|
| ||
log.info("Testando o log info"); |
Teríamos no console do servidor a mensagem “Testando o log info”.
Nota | ||
---|---|---|
| ||
Grande parte dos eventos possuem WKUser para identificar o usuário. Esse ao utilizar a função de substituto, onde um usuário pode substituir outro, irá sempre retornar o usuário que está no momento utilizando o sistema. Exemplo: Ana colocou Bruno como seu substituto, Bruno acessa o sistema e faz uma ação em nome da Ana, sistema irá retornar o código do usuário Bruno nos eventos que usam WKUser. |
Nota | ||
---|---|---|
| ||
Em todos os eventos é possível realizar chamadas para os serviços disponíveis na API pública. Acesse aqui nosso guia de consumo da API pública em eventos. |
Eventos do tipo "Before"
...
De uma forma geral, os eventos do tipo before são executados antes que a ação que disparou o evento seja efetivada, desta forma é possível filtrar os dados que são passados ou até mesmo evitar que a ação executada seja concluída.
Para bloquear a ação basta lançar uma Exception passando uma mensagem de texto que será exibida em formado de toast para o usuário:
Exemplo:
Bloco de código | ||||
---|---|---|---|---|
| ||||
throw "Você não pode efetuar esta ação após as 18 horas." |
Eventos do tipo "After"
...
Já os eventos do tipo after são executados após a efetivação da ação e não possuem nenhuma influência sobre esta. Ou seja, qualquer dado alterado no parâmetro recebido dentro do evento não será refletido sobre o conteúdo persistido da ação.
Outra característica interessante desse tipo de evento é que eles não devem lançar exceção, caso isso ocorra a exceção ignorada pelo sistema.
Eventos Gerais Disponíveis
...
A seguir serão detalhados os eventos gerais disponíveis no fluig. Eventos que podem ser disparados sem exclusividade de atividades de um card específico.
DisplayCentralTasks
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:
Bloco de código | ||
---|---|---|
| ||
function displayCentralTasks (links){
links.put("Fluig","http://www.fluig.com");
} |
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("Fluig","http://www.fluig.com");
var it = links.keySet().iterator();
while (it.hasNext()) {
var key = it.next();
_links.put(key, links.get(key));
}
_links.put("Fluig - DEV" ,"http://dev.fluig.com");
_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, porém 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"));
} |
DisplayCustomMetadata
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){
} |
No contexto deste evento a variável fields pode ser usada para consultar ou modificar os valores dos campos customizados de um documento. Não permitindo adicionar novos campos.
Para inserir novos campos em um documento existe diversos maneiras disponíveis.
- Pela herança da pasta pai.
- No cadastro de Campos Customizados, marcando a opção Mostrar em todos documentos ou da forma padrão.
- Através do WebService CustomFieldsService.
- Na edição dos metadados do documento, pelo usuário.
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 está sendo criado ou editado, porém 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"));
} |
BeforeWatchContent
Utilizado quando ao acompanhar algum conteúdo se deseja recuperar informações do registro e usar antes da ação de "acompanhar". Por exemplo, ao acompanhar um documento, é possível recuperar suas informações e usá-las em um dataset.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeWatchContent(companyId, watchDTO){
} |
Sendo os parâmetros:
...
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialDenounce(companyId, denounce){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
denounce | objeto de post | SocialDenounceEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialDenounce(companyId, denounce){
if (denounce.getSociable().getText().toLowerCase().indexOf("#cipa") > -1) {
throw "You cannot denounce posts about CIPA.";
}
} |
afterSocialDenounce
O evento é disparado após a efetivação de uma ação de denúncia de um sociable.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialDenounce(companyId, denounce){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
denounce | objeto de post | SocialDenounceEventVO |
Exemplo Prático
Registrar em log as denúncias efetuadas para auditoria.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialDenounce(companyId, denounce){
log.info(denounce.getUser() + " has denounced the sociable " + denounce.getSociable().getId() + " with comment " + denounce.getText());
} |
beforeSocialLike
O evento é disparado antes de ser efetivada uma ação de "curtir" de um sociable.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialLike(companyId, like){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
like | Objeto com dados do sociable curtido | SocialLikeEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialLike(companyId, like){
if (like.getSociable().getText().toLowerCase().indexOf("#greve") > -1) {
throw "You can not like a post that has this type of comment.";
}
} |
afterSocialLike
O evento é disparado após a efetivação de uma ação de "curtir" de um sociable.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialLike(companyId, like){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
like | Objeto com dados do sociable curtido | SocialLikeEventVO |
Exemplo Prático
Registrar em log para auditoria todas as publicações curtidas.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialLike(companyId, like){
log.info(like.getUser() + " has liked the " + like.getSociable().getUrl());
} |
beforeSocialUnlike
O evento é disparado antes de ser efetivada uma ação de "descurtir" de um sociable.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialUnlike(companyId, unlike){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
unlike | Objeto com dados do sociable descurtido | SocialLikeEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialUnlike(companyId, unlike){
throw "You can not unlike a post.";
} |
afterSocialUnlike
O evento é disparado após a efetivação de uma ação de "descurtir" de um sociable.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialUnlike(companyId, unlike){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
unlike | Objeto com dados do sociable descurtido | SocialLikeEventVO |
Exemplo Prático
Registrar em log para auditoria todas as publicações que deixaram de ser apoiadas.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialUnlike(companyId, unlike){
log.info(unlike.getUser() + " has unliked the " + unlike.getSociable().getUrl());
} |
beforeSocialCommentRemove
O evento é disparado antes da efetivação da remoção de um comentário de um sociable.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialCommentRemove(companyId, comment){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
comment | Objeto que contém as informações do comentário | SocialCommentEventVO |
Exemplo Prático: Evitar que usuários removam seus comentários em uma publicação de campanha interna da empresa.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialCommentRemove(companyId, comment){
if (comment.getSociable().getText().toLowerCase().indexOf("#bolao") > -1) {
throw "You cannot change your guess.";
}
} |
afterSocialCommentRemove
O evento é disparado após a efetivação da ação de remover o comentário de um sociable.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialCommentRemove(companyId, comment){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
comment | Objeto que contém as informações do comentário | SocialCommentEventVO |
Exemplo Prático
Registrar em log para auditoria todos os comentários com a hashtag "protesto".
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialCommentRemove(companyId, comment){
if (comment.getText().toLowerCase().indexOf("#protesto") > -1) {
log.info(comment.getUser() + " has removed the comment " + comment.getText() + " of the sociable " + comment.getSociable().getId());
}
} |
beforeCommunityParticipation
O evento é disparado antes da efetivação da participação em uma comunidade.
Bloco de código | ||
---|---|---|
| ||
function beforeCommunityParticipation(companyId, relation){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
relation | Objeto que contém as informações de participação | SocialCommunityRelationEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeCommunityParticipation(companyId, relation){
if (relation.getCommunity().getAlias() == "economia") {
throw "Comunidade temporariamente indisponível!";
}
log.info("beforeCommunityParticipation Social Alias: " + relation.getSocial().getAlias() + " Community Alias: " + relation.getCommunity().getAlias());
} |
afterCommunityParticipation
O evento é disparado após a efetivação da participação em uma comunidade.
Bloco de código | ||
---|---|---|
| ||
function afterCommunityParticipation(companyId, relation){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
companyId | Código da Empresa | int |
relation
watchDTO | Dados do registro | WatchDTO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterCommunityParticipationbeforeWatchContent(companyId, relationwatchDTO){ if(watchDTO.getSocialWatchType() == "DOCUMENT"){ var objClass log.info("afterCommunityParticipation Social Alias: " + relation.getSocial().getAlias() + " Community Alias: " + relation.getCommunity().getAlias()); } |
beforeCommunityLeave
O evento é disparado antes da efetivação da exclusão de participação em uma comunidade.
Bloco de código | ||
---|---|---|
| ||
function beforeCommunityLeave(companyId, relation){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
relation | Objeto que contém as informações de participação | SocialCommunityRelationEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeCommunityLeave(companyId, relation){
if (relation.getCommunity().getAlias() == "eventos") {
throw "Não é permitido deixar essa comunidade";
}
log.info("beforeCommunityLeave Social Alias: " + relation.getSocial().getAlias() + " Community Alias: " + relation.getCommunity().getAlias());
} |
afterCommunityLeave
O evento é disparado após a efetivação da exclusão de participação em uma comunidade.
Bloco de código | ||
---|---|---|
| ||
function afterCommunityLeave(companyId, relation){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
relation | Objeto que contém as informações de participação | SocialCommunityRelationEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterCommunityLeave(companyId, relation){
log.info("afterCommunityLeave Social Alias: " + relation.getSocial().getAlias() + " Community Alias: " + relation.getCommunity().getAlias());
} |
beforeSocialFollow
O evento é disparado antes da efetivação de seguir uma pessoa.
Bloco de código | ||
---|---|---|
| ||
function beforeSocialFollow(companyId, follow){
} |
Parâmetros da função
Propriedade | Descrição | Tipo |
---|---|---|
companyId | Código da Empresa | int |
follow | Objeto que contém as informações de seguir | SocialFollowEventVO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialFollow(companyId, follow){
log.info("beforeSocialFollow Social Alias: " + follow.getSocial().getAlias() + " Followed Alias: " + follow.getFollowed().getAlias());
} |
afterSocialFollow
O evento é disparado após a efetivação de seguir uma pessoa.
Bloco de código | ||
---|---|---|
| ||
function afterSocialFollow(companyId, follow){
} |
= "com.totvs.technology.social.document.6";
var objClass = watchDTO.getObjectClass();
var patt = new RegExp( /\d+/) ;
var documentId = patt.exec(objClass) ;
var documentVersion = watchDTO.getObjectId();
var doc = getValue("WKDocument");
var company = companyId;
var ds ;
try {
var c1 = DatasetFactory.createConstraint( "allocatedDocumentPK.companyId", company, company, ConstraintType.MUST);
var c2 = DatasetFactory.createConstraint("allocatedDocumentPK.sourceDocument",documentId,documentId, ConstraintType.MUST);
var c3 = DatasetFactory.createConstraint("allocatedDocumentPK.sourceVersion", documentVersion,documentVersion, 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 "Sua solicitação de notificação foi negada, pois o documento está em checkout." ;
}
}
} |
AfterWatchContent
Utilizado quando ao acompanhar algum conteúdo se deseja recuperar informações do registro e usar após a ação de "acompanhar". Por exemplo, ao acompanhar um post, é possível recuperar suas informações e usá-las para informar o usuário sobre o autor do post.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterWatchContent(companyId, watchDTO){
} |
Sendo os parâmetros:Parâmetros da função
Propriedade | Descrição | Tipo |
companyId | Código da Empresa | int |
follow
watchDTO | Dados do registro | WatchDTO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialFollowafterWatchContent(companyId, followwatchDTO){ if(watchDTO.getSocialWatchType() == "POST"){ throw log.info("afterSocialFollow Social Alias:"O usuário "+watchDTO.getUserAlias()+" vai ser notificado sobre o post " + followwatchDTO.getSocialgetText().getAlias() + " Followeddo Alias:autor " + followwatchDTO.getFollowedgetPostAuthor().getAlias()) ; } } |
beforeSocialUnfollow
BeforeUnwatchContent
Utilizado quando ao deixar de acompanhar algum conteúdo se deseja recuperar informações do registro e usar antes da ação de "deixar de acompanhar". Por exemplo, ao tentar deixar de acompanhar uma comunidade, é possível decidir se o usuário pode deixar de acompanhá-laO evento é disparado antes da efetivação de deixar de seguir uma pessoa.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialUnfollowbeforeUnwatchContent(companyId, followwatchDTO){ } |
Parâmetros da funçãoSendo os parâmetros:
Propriedade | Descrição | Tipo |
companyId | Código da Empresa | int |
follow
watchDTO | Dados do registro | WatchDTO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeSocialUnfollowbeforeUnwatchContent(companyId, followwatchDTO){ if(watchDTO.getSocialWatchType() == log.info("beforeSocialUnfollow Social Alias: " + follow.getSocial().getAlias() + " Followed Alias:"COMMUNITY"){ throw "Você não pode deixar de ser notificado sobre a comunidade " + followwatchDTO.getFollowedgetDescription().getAlias()) ; } } |
afterSocialUnfollow
AfterUnwatchContent
Utilizado quando ao deixar de acompanhar algum conteúdo se deseja recuperar informações do registro e usar após a ação de "deixar de acompanhar". Por exemplo, ao deixar de acompanhar um post, é possível recuperar suas informações e informar o usuário que aquele post possui muitos seguidoresO evento é disparado após a efetivação de deixar de seguir uma pessoa.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialUnfollowafterUnwatchContent(companyId, followwatchDTO){ } |
Parâmetros da funçãoSendo os parâmetros:
Propriedade | Descrição | Tipo |
companyId | Código da Empresa | int |
follow
watchDTO | Dados do registro | WatchDTO |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialUnfollowafterUnwatchContent(companyId, followwatchDTO){ if(watchDTO.getSocialWatchType() == "POST" && watchDTO.getNumberWatchers() < 3 ){ log.infoerro("afterSocialUnfollowO post Social Alias: \"" + followwatchDTO.getSocialgetText().getAlias + "\" do autor " + watchDTO.getPostAuthor() + " deixou Followedde Alias:ser polemico" + follow.getFollowed().getAlias());) } } |
beforeCreateUser
Evento disparado antes da criação de um novo usuário. Pode ser utilizado quando for necessário realizar validações no usuário antes da sua criação ou adicionar dados adicionais programaticamente.
...
Informações |
---|
Somente os atributos firstName, lastName, fullName podem ser modificados. Para adicionar dados adicionais para o usuário deve ser utilizado o método addData do UserEventVO. |
Parâmetro da função:
Propriedade | Descrição | Tipo |
user | Objeto que contém as informações do usuário |
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeCreateUser(user) { // Verifica se a senha informada atende os requisitos mínimos var passwordPattern = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,16})"; if (!user.getPassword().matches(passwordPattern)) { throw "A senha do usuário não atendeu os requisitos mínimos!"; } // Adiciona um dado adicional ao usuário informando a sua data de criação var dateFormat = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); user.putData("CreationDate", dateFormat.format(new Date())); } |
...
afterCreateUser
Evento disparado depois da criação de um novo usuário. Pode ser utilizado quando for necessário realizar alguma rotina com o usuário criado, como exemplo a criação de recursos adicionais para o usuário.
Bloco de código | ||
---|---|---|
| ||
function afterCreateUser(user) { } |
...
Parâmetro da função:
Propriedade | Descrição | Tipo |
user | Objeto que contém as informações do usuário |
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterCreateUser(user) { // Instância um cliente da API pública do Fluig. O usuário aplicativo utilizado // precisa ser um administrador do Fluig // Documentação para criar usuário aplicativo: http://tdn.totvs.com/x/KAFlDw var consumer = oauthUtil.getNewAPIConsumer( "e3fe3d72-bfcc-4552-8c9b-93c66531dab9", //Consumer Key do OAuth App "6bd0591b-73d8-4a9e-a161-d54dd92d3172-5a21991e-453f-4ea1-b80c-f42d4c57759d", //Consumer Secret do OAuth App "11a419dd-0c8a-4388-bd32-d66319bd750b", //Access Token do Usuário Aplicativo "fd2b53a4-b43d-4118-9725-68abaa1b41a9ee584784-73b2-454b-942f-5e07ad114234"); //Token Secret do Usuário Aplicativo // Adiciona o usuário criado na comunidade RH através da utilização do método // addParticipants do serviço de comunidades da API Públicade comunidades da API Pública // Alterar a comunidade RH para a comunidade que deseja realizar a ação em seu ambiente var postJson = '{"communityAlias": "RH", "userAliases": ["' + user.getLogin() + '"]}'; consumer.post("/public/social/community/addParticipants", postJson); } |
...
beforeUpdateUser
Evento disparado antes da atualização de um usuário. Pode ser utilizado quando for necessário realizar validações no usuário antes da sua atualização ou adicionar dados adicionais programaticamente.
...
Informações | |||||||
---|---|---|---|---|---|---|---|
Somente os atributos firstName, lastName, fullName podem ser modificados. Para adicionar dados adicionais para o usuário deve ser utilizado o método addData do UserEventVO. Para verificar se a senha do usuário foi alterada basta utilizar o método getPassword, onde caso seja retornado algum valor significa que a senha foi alterada. Já para verificar se a atualização do usuário foi realizada por ele próprio, através da edição de perfil, é necessário comparar o login do usuário recebido como parâmetro, através do método getLogin com o login do usuário corrente, resgatado através da chamada getValue("WKUser"), onde caso sejam iguais significa que a atualização foi realizada pelo próprio usuário. Exemplo:
|
Parâmetro da função:
Propriedade | Descrição | Tipo |
user | Objeto que contém as informações do usuário |
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeUpdateUser(user) { // Verifica se foi alterada a senha do usuário if (user.getPassword() != null) { // Caso a senha tenha sido alterada verifica se ela atende os requisitos mínimos var passwordPattern = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,16})"; if (!user.getPassword().matches(passwordPattern)) { throw "A senha do usuário não atendeu os requisitos mínimos!"; } } // Adiciona um dado adicional ao usuário informando a última data de atualização var dateFormat = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); user.putData("LastUpdateDate", dateFormat.format(new Date())); } |
...
afterUpdateUser
Evento disparado depois da atualização de um usuário, ou após a gravação de uma nova senha, pelo recurso de reset de senha da tela de login.
Informações |
---|
O evento afterUpdateUser será disparado no reset de senha pela tela de login somente na atualização 1.6.5 ou superior. |
Esse evento pode novo usuário. Pode ser utilizado quando for necessário realizar alguma rotina com o usuário atualizado, como exemplo a atualização de recursos adicionais do o usuário.
Bloco de código | ||
---|---|---|
| ||
function afterUpdateUser(user) { } |
Informações | |||||||
---|---|---|---|---|---|---|---|
Para verificar se a senha do usuário foi alterada basta utilizar o método getPassword, onde caso seja retornado algum valor significa que a senha foi alterada. Já para verificar se a atualização do usuário foi realizada por ele próprio, através da edição de perfil, é necessário comparar o login do usuário recebido como parâmetro, através do método getLogin com o login do usuário corrente, resgatado através da chamada getValue("WKUser"), onde caso sejam iguais significa que a atualização foi realizada pelo próprio usuário. Exemplo:
|
Parâmetro da função:
Propriedade | Descrição | Tipo |
user | Objeto que contém as informações do usuário |
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterUpdateUser(user) { log.info("O usuário " + user.getFullName() + " foi alterado."); } |
...
beforeDeactivateUser
Evento disparado antes da desativação de um usuário. Pode ser utilizado quando for necessário realizar validações no usuário antes da sua desativação.
Bloco de código | ||
---|---|---|
| ||
function beforeDeactivateUser(login) { } |
...
Parâmetro da função:
Propriedade | Descrição | Tipo |
login | Login do usuário a ser desativado | String |
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeDeactivateUser(login) { // Instância um cliente da API pública do Fluig. O usuário aplicativo utilizado // precisa ser um administrador do Fluig var consumer = oauthUtil.getNewAPIConsumer( "e3fe3d72-bfcc-4552-8c9b-93c66531dab9", "6bd0591b-73d8-4a9e-a161-d54dd92d3172-5a21991e-453f-4ea1-b80c-f42d4c57759d", "11a419dd-0c8a-4388-bd32-d66319bd750b", "fd2b53a4-b43d-4118-9725-68abaa1b41a9ee584784-73b2-454b-942f-5e07ad114234"); // Verifica se o usuário que esta sendo desativado é moderador de alguma comunidade. var moderateCommunities = []; var communities = JSON.parse(consumer.get("/public/social/community/listCommunities")).content; for (var i in communities) { var isModerator = JSON.parse(consumer.get("/public/social/community/isCommunityModerator/" + communities[i].alias + "/" + login)).content; if (isModerator) { moderateCommunities.push(communities[i].name); } } // Caso o usuário seja moderador de alguma comunidade lança uma exceção informando que // o usuário é moderador de comunidades e não pode ser desativado if (moderateCommunities.length > 0) { throw "O usuário " + login + " não pode ser desativado por ser moderador nas comunidades: " + moderateCommunities.join(", ") + "."; } } |
afterDeactivateUser
Evento disparado depois da desativação de um usuário. Pode ser utilizado quando for necessário realizar alguma rotina com o usuário desativado.
Bloco de código | ||
---|---|---|
| ||
function afterDeactivateUser(login) { } |
Parâmetro da função:
Propriedade | Descrição | Tipo |
login | Login do usuário desativado | String |
...
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterDeactivateUser(login) { // Busca um serviço customizado cadastrado no Fluig e invoca um método específico dele var provider = ServiceManager.getServiceInstance("CustomService"); var serviceLocator = provider.instantiate("com.fluig.sample.service.CustomService_Service"); var service = serviceLocator.getCustomServicePort(); service.deactivateUser(login); log.info("O usuário " + login + " foi desativado no serviço customizado."); } |
...
beforeActivateUser
Evento disparado antes da ativação de um usuário. Pode ser utilizado quando for necessário realizar validações no usuário antes da sua ativação.
Bloco de código | ||
---|---|---|
| ||
function beforeActivateUser(login) { } |
Parâmetro da função:
Propriedade | Descrição | Tipo |
login | Login do usuário a ser ativado | String |
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeActivateUser(login) { // Busca um serviço customizado cadastrado no Fluig e invoca um método específico dele var provider = ServiceManager.getServiceInstance("CustomService"); var serviceLocator = provider.instantiate("com.fluig.sample.service.CustomService_Service"); var service = serviceLocator.getCustomServicePort(); // Caso o usuário esteja desativado no serviço customizado lança uma exceção informando // que o usuário está desativado no serviço customizado e não pode ser ativado no Fluig if (service.isDeactivatedUser(login)) { throw "O usuário " + login + " está desativado no serviço customizado e não pode ser ativado!"; } } |
...
afterActivateUser
Evento disparado depois da ativação de um usuário. Pode ser utilizado quando for necessário realizar alguma rotina com o usuário ativado.
Bloco de código | ||
---|---|---|
| ||
function afterActivateUser(login) { } |
...
Parâmetro da função:
Propriedade | Descrição | Tipo |
login | Login do usuário ativado | String |
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterActivateUser(login) { // Busca um serviço customizado cadastrado no Fluig e invoca um método específico dele var provider = ServiceManager.getServiceInstance("CustomService"); var serviceLocator = provider.instantiate("com.fluig.sample.service.CustomService_Service"); var service = serviceLocator.getCustomServicePort(); service.activateUser(login); log.info("O usuário " + login + " foi ativado no serviço customizado."); } |
beforeLogin
Evento disparado antes do login de um usuário. Pode ser utilizado quando for necessário realizar validações antes do usuário ser autenticado no fluig, possibilitando o cancelamento do login caso seja lançada uma exceção através do uma exceção através do evento.
Aviso | ||
---|---|---|
| ||
O uso indevido do evento beforeLogin pode ocasionar inconsistência no login da plataforma, fazendo com que o usuário não consiga mais logar. Recomendamos atenção ao utilizar este evento. |
Bloco de código | ||
---|---|---|
| ||
function beforeLogin(login) { } |
...
Parâmetro da função:
Propriedade | Descrição | Tipo |
login | Login do usuário | String |
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeLogin(login) { // Busca um serviço customizado cadastrado no Fluig e invoca um método específico dele var provider = ServiceManager.getServiceInstance("CustomService"); var serviceLocator = provider.instantiate("com.fluig.sample.service.CustomService_Service"); var service = serviceLocator.getCustomServicePort(); // Caso o usuário esteja bloqueado pelo serviço customizado lança uma exceção informando // que o usuário está desativado no serviço customizado e cancela o login no Fluig if (service.isBlockedUser(login)) { throw "O usuário " + login + " está desativado no serviço customizado"; } } |
afterLogin
Evento disparado após o login de um usuário. Pode ser utilizado quando for necessário realizar alguma rotina quando o usuário é autenticado no fluig.
Bloco de código | ||
---|---|---|
| ||
function afterLogin(login) { } |
Parâmetro da função:
Propriedade | Descrição | Tipo |
login | Login do usuário | String |
...
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterLogin(login) { // Busca um serviço customizado cadastrado no Fluig e invoca um método específico dele var provider = ServiceManager.getServiceInstance("CustomService"); var serviceLocator = provider.instantiate("com.fluig.sample.service.CustomService_Service"); var service = serviceLocator.getCustomServicePort(); service.addUserSession(login); } |
...
Nota |
---|
O evento afterLogin funciona mesmo com a autenticação via Identity. O DesktopSSO ou a autenticação automática não interfere na execução do evento, porque ele é executado depois do login não importando como é feito. |
onLoginError
Evento disparado quando ocorrer um erro de login de um usuário. Este erro pode ser por login e senha inválidos ou usuário inativo. Pode ser utilizado quando for necessário realizar alguma rotina quando ocorrer um erro de login ou apresentar uma mensagem personalizada para o usuário.
Bloco de código | ||
---|---|---|
| ||
function onLoginError(login, errorCause) { } |
Parâmetro da função:
Propriedade | Descrição | Tipo |
login | Login do usuário | String |
errorCause | Motivo do erro de login, onde: 0 - Login e senha inválidos | Integer |
...
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function onLoginError(login, errorCause) { // Verifica se a causa de erro foi senha inválida (0 - Senha inválida, 1 - Usuário inativo) if (errorCause == 0) { // Busca um serviço customizado cadastrado no Fluig e invoca um método específico dele var provider = ServiceManager.getServiceInstance("CustomService"); var serviceLocator = provider.instantiate("com.fluig.sample.service.CustomService_Service"); var service = serviceLocator.getCustomServicePort(); service.registerLoginAttempt(login); // Utiliza o serviço customizado para verificar quantas tentativas de login o usuário já // realizou. Caso tenha ultrapassado 3 tentativas bloqueia o usuário neste serviço // customizad e lança uma exceção informando ao usuário que ele foi bloqueado. var loginAttempts = service.checkLoginAttempts(login); if (loginAttempts > 3) { service.blockUser(login); throw "Seu usuário foi bloqueado por ultrapassar 3 tentativas de login" } else { throw "Tentativa de login " + loginAttempts + " de 3" } } } |
onLogout
Evento disparado quando o usuário realizar logout. Pode ser utilizado quando for necessário realizar alguma rotina quando o usuário realiza o logout no portal através da opção Sair.
Bloco de código | ||
---|---|---|
| ||
function onLogout(login) { } |
...
Parâmetro da função:
Propriedade | Descrição | Tipo |
login | Login do usuário | String |
...
Exemplo de implementação:
Bloco de código | ||||
---|---|---|---|---|
| ||||
function onLogout(login) { // Busca um serviço customizado cadastrado no Fluig e invoca um método específico dele var provider = ServiceManager.getServiceInstance("CustomService"); var serviceLocator = provider.instantiate("com.fluig.sample.service.CustomService_Service"); var service = serviceLocator.getCustomServicePort(); service.removeUserSession(login); log.info("Usuário " + login + " efetuou logout"); } |
onNotify
Para interferir no envio de uma notificação padrão do fluig, deve ser utilizado o evento global onNotify, que é disparado no momento em que qualquer notificação do fluig é enviada. Nesse evento, podem ser feitas alterações como, por exemplo, adicionar outros destinatários ao e-mail, modificar os valores dos parâmetros utilizados no template de e-mail, etc.
...
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
function onNotify(subject, receivers, template, params) { if (template.match( == "TPLDOCUMENT_APPROVAL_PENDING") != null) { receivers.add("[email protected]"); } } |
...
Dica | ||
---|---|---|
| ||
A partir da versão fluig 1.5.13 o fluigAPI estárá habilitado para este evento. |
O evento onNotify está disponível na lista de eventos globais. Ao selecionar esse evento na lista de eventos disponíveis, a assinatura da função acima já será preenchida automaticamente. Este evento disponibiliza os seguintes parâmetros:
Parâmetro | Descrição |
---|---|
subject | É o assunto do e-mail. A alteração desta variável irá implicar que todos os usuários recebam o e-mail com o novo assunto configurado. Exemplo de utilização: subject.add("ASSUNTO"); |
receivers | Lista de e-mails destinatários. Também é possível adicionar outros e-mails, de usuários que não participam do processo. Inclusive, podem ser adicionados e-mails de usuários que não estão cadastrados no fluig, caso seja necessário notificar uma pessoa que não tenha acesso ao sistema. |
template | Permite validar qual tipo de e-mail está sendo enviado (por exemplo, template de documento em aprovação, documento expirando, etc). Com base nessa variável podemos distinguir quais e-mails queremos customizar. É recomendável que sempre seja verificado o código do template, para evitar que ocorram alterações em outros tipos de e-mail, que não necessitariam de customização. |
params | É um mapa de dados que permite alterar/incluir parâmetros para que sejam apresentados no e-mail. O nome dos parâmetros informados nesse mapa devem ser os mesmos que são utilizados dentro do arquivo de template. |
No exemplo que foi apresentado acima é validado se o template se refere ao "TPLDOCUMENT_APPROVAL_PENDING" (que corresponde a documento pendente de aprovação). Em caso positivo, um novo e-mail será adicionado na lista de destinatários. Ou seja, além do responsável pela aprovação, outra pessoa será notificada, recebendo uma cópia do e-mail. Como está sendo validado o código do template, os demais tipos de e-mail não serão afetados.
Os templates podem ser consultados dentro do diretório do volume, em: <VOLUME>\templates\tplmail. Se for necessário adicionar algum parâmetro no e-mail padrão, os templates podem ser editados diretamente nesse diretório.
...
Nota | ||
---|---|---|
| ||
|
afterReleaseProcessVersion
Evento disparado após a criação ou modificação nas configurações de um determinado processo
|
Dica | ||
---|---|---|
| ||
Quando o evento onNotify for utilizado como evento global, é necessário informar uma constraint extra informando o usuário para fixar as permissões, já que o evento onNotify não é executado por nenhum usuário mas sim pelo sistema. Vale lembrar ainda que quando for utilizar algum dataset interno do fluig, é necessário tambem informar uma constraint. Exemplo: var constraintUser = DatasetFactory.createConstraint("userSecurityId", "nome_do_usuario", "nome_do_usuario", ConstraintType.MUST); |
beforeSendNotification
Evento disparado antes do envio de uma notificação ao usuário. Pode ser utilizado quando for necessário adicionar alguma informação à nota ou alterar a prioridade de uma notificação, possibilitando o cancelamento do envio da notificação caso seja definida uma prioridade através do evento.
Informações | ||
---|---|---|
| ||
Por questões de segurança, somente os campos priority e note podem ser alterados. Outras alterações não serão consideradas. |
Nota | ||
---|---|---|
| ||
Caso o processo possua o evento "afterReleaseVersion" implementado, este evento global será desconsiderado na liberação de novas versões do processo em questãoseja lançada uma exceção através do evento a notificação não será enviada, mas esse não é o modo correto de cancelar o envio. Definir o campo priority como "NONE" impede que a notificação seja enviada sem a necessidade de lançar exceção. |
Abaixo segue um exemplo de como implementar esse evento:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
function afterReleaseProcessVersionbeforeSendNotification(processXMLnotification) { var pdv = getValue("ProcessDefinitionVersionDto"); var processInfo = "\n### Nova versão de processo liberada: ###"; processInfo += "\n User: " + getValue("WKUser"); processInfo += "\n processDescription: " + pdv.getProcessDescription(); processInfo += "\n processId: " + pdv.getProcessId(); processInfo += "\n version: " + pdv.getVersion(); log.info(processInfo + "\n"); } |
São disponibilizadas algumas propriedades referentes ao processo que esta sendo liberado, porém somente para consulta através do método getValue.
Propriedade | Descrição | Tipo |
WKCompany | Código da empresa | long |
WKUser | Usuário logado | String |
ProcessDefinitionVersion | Objeto com propriedades da versão do processo alterada | ProcessDefinitionVersionDto |
beforeSendNotification
Evento disparado antes do envio de uma notificação ao usuário. Pode ser utilizado quando for necessário adicionar alguma informação à nota ou alterar a prioridade de uma notificação, possibilitando o cancelamento do envio da notificação caso seja definida uma prioridade através do evento.
Informações | ||
---|---|---|
| ||
Por questões de segurança, somente os campos priority e note podem ser alterados. Outras alterações não serão consideradas. |
title | Importante |
---|
if (notification.eventType == "DENOUNCED_CONTENT") {
notification.priority = "NONE";
}
if (notification.eventType == "DOCUMENT_APPROVED") {
notification.priority = "NORMAL";
}
if (notification.eventType == "DOCUMENT_REPROVED") {
notification.priority = "HIGH";
}
if (notification.eventType == "LIKE") {
notification.priority = "LOW";
}
} |
São disponibilizadas algumas propriedades referentes à notificação que está sendo enviada.
Propriedade | Descrição | Tipo |
aliasSender | Alias de quem enviou a notificação. Pode vir nulo nos casos em que a notificação é enviada pelo sistema. | String |
aliasReceiver | Alias de quem vai receber a notificação. | String |
place | Lugar onde foi feita a ação que gerou a notificação. Pode vir nulo quando não for um lugar socializavel. | |
object | Objeto sobre o qual foi feita a ação que gerou o alerta. | |
eventType | Tipo do evento que gerou a notificação. | String |
metadata | Metadados da notificação. | Hashmap <String, String> |
priority | Prioridade da notificação. Valores válidos: NONE, LOW, NORMAL, HIGH. | String |
note | Nota enviada junto à notificação. | String |
Informações |
---|
Veja o exemplo (event-notification) no repositório do fluig clicando aqui. |
afterSendNotification
Evento disparado após o envio de uma notificação ao usuário. Pode ser utilizado quando for necessário registrar alguma informação, para auditoria, por exemplo.
Abaixo segue um exemplo de como implementar esse evento:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
function beforeSendNotification(notification) {
if (notification.eventType == "DENOUNCED_CONTENT") {
notification.priority = "NONE";
}
if (notification.eventType == "DOCUMENT_APPROVED") {
notification.priority = "NORMAL";
}
if (notification.eventType == "DOCUMENT_REPROVED") {
notification.priority = "HIGH";
}
if (notification.eventType == "LIKE") {
notification.priority = "LOW";
}
} |
| ||||
function afterSendNotification(notification){
log.info("notification as send for " + notification.aliasReceiver);
} |
São disponibilizadas algumas propriedades referentes à notificação que está sendo enviadafoi enviada.
Propriedade | Descrição | Tipo |
aliasSender | Alias de quem enviou a notificação. Pode vir nulo nos casos em que a notificação é enviada pelo sistema. | String |
aliasReceiver | Alias de quem vai receber a notificação. | String |
place | Lugar onde foi feita a ação que gerou a notificação. Pode vir nulo quando não for um lugar socializavel |
object
Objeto sobre o qual foi feita a ação que gerou o alerta.
eventType
Tipo do evento que gerou a notificação.
metadata
Metadados da notificação.
priority
Prioridade da notificação. Valores válidos: NONE, LOW, NORMAL, HIGH.
note
Nota enviada junto à notificação.
afterSendNotification
Evento disparado após o envio de uma notificação ao usuário. Pode ser utilizado quando for necessário registrar alguma informação, para auditoria, por exemplo.
Abaixo segue um exemplo de como implementar esse evento:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
function afterSendNotification(notification){
log.info("notification as send for " + notification.aliasReceiver);
} |
São disponibilizadas algumas propriedades referentes à notificação que foi enviada.
Propriedade | Descrição | Tipo |
aliasSender | Alias de quem enviou a notificação. Pode vir nulo nos casos em que a notificação é enviada pelo sistema. | String |
aliasReceiver | Alias de quem vai receber a notificação. | String |
place | Lugar onde foi feita a ação que gerou a notificação. Pode vir nulo quando não for um lugar socializavel. | |
object | Objeto sobre o qual foi feita a ação que gerou o alerta. | |
eventType | Tipo do evento que gerou a notificação. | String |
metadata | Metadados da notificação. | Hashmap <String, String> |
priority | Prioridade da notificação. | String |
note | Nota enviada junto à notificação. | String |
onDisplayTasks
Este evento é disparado antes de serem exibidas as tarefas das aba "Tarefas a concluir" , "Minhas solicitações", "Tarefas em pool", "Tarefas em consenso" e "Minhas tarefas sob gerência" na central de tarefas. Através dele é possível inserir, alterar ou remover itens da central de tarefas. O evento recebe como parâmetro uma lista de WorkflowTasksVO das tarefas existentes.
Exemplo adicionando uma tarefa personalizada ao final da lista de tarefas:. | ||
object | Objeto sobre o qual foi feita a ação que gerou o alerta. | |
eventType | Tipo do evento que gerou a notificação. | String |
metadata | Metadados da notificação. | Hashmap <String, String> |
priority | Prioridade da notificação. | String |
note | Nota enviada junto à notificação. | String |
Informações |
---|
Veja o exemplo (event-notification) no repositório do fluig clicando aqui. |
onDisplayTasks
Este evento é disparado antes de serem exibidas as tarefas das aba "Tarefas a concluir" , "Minhas solicitações", "Tarefas em pool", "Tarefas em consenso" e "Minhas tarefas sob gerência" na central de tarefas. Através dele é possível inserir, alterar ou remover itens da central de tarefas. O evento recebe como parâmetro uma lista de WorkflowTasksVO das tarefas existentes.
Exemplo adicionando, editando e removendo uma tarefa personalizada ao final da lista de tarefas:
Bloco de código | ||
---|---|---|
| ||
function onDisplayTasks(tasks) {
// Adiciona uma tarefa customizada
var newTask = new WorkflowTasksVO();
newTask.setCode("TOTVS");
newTask.setUrl("http://www.totvs.com");
newTask.setProcessDescription("Nova Tarefa");
newTask.setRequesterName("João da Silva");
newTask.setStateDescription("Atividade 1");
newTask.setColleagueName("Ana Maria");
newTask.setStartDateProcess("07/09/2025");
newTask.setDateExpires("07/10/2025");
tasks.add(newTask);
for (var i = 0; i < tasks.size(); i++) {
// Remove a solicitação com o id 1
if (tasks.get(i).getProcessInstanceId() == 1) {
tasks.remove(i);
i--; // Necessário para não pular um item após a remoção
} else {
// Altera a descrição de todos os processos para "Nova Tarefa alterada"
tasks.get(i).setProcessDescription("Nova Tarefa alterada");
}
| ||
Bloco de código | ||
| ||
function onDisplayTasks(tasks) {
var newTask = new WorkflowTasksVO();
newTask.setCode("Fluig");
newTask.setUrl("http://www.fluig.com");
newTask.setProcessDescription("Nova Tarefa");
newTask.setRequesterName("João da Silva");
newTask.setStateDescription("Atividade 1");
newTask.setColleagueName("Ana Maria");
newTask.setDateExpires("07/10/2025");
tasks.add(newTask);
} |
Disponibilizamos algumas informações para consulta através do método getValue.
Propriedade | Descrição | Tipo |
---|---|---|
WKUser | Código do usuário logado. | String |
WKUserLocale | Idioma do usuário logado. | String |
WKCompany | Número da empresa. | Int |
taskUserId | Código do usuário substituído, em caso de visualização da central como substituto. Nos demais casos retorna o usuário logado. | String |
taskType | Indicador do tipo de tarefas que estão sendo exibidas, “open” tarefas a concluir e “requests” para minhas solicitações. | String |
filter | Filtros utilizados. | Map<String, Object> |
order | Ordenação aplicada. | String |
maxResult | Número de resultados por página. | Int |
page | Número da página atual. | Int |
taskId | Em caso de pool, quando o taskType for pool, o taskId trará uma string contendo o tipo no caso ‘Role’ para papel ou ‘Group‘ para grupo e seu código. Exemplo: ‘Pool:Role:admin’ para um pool do papel ‘admin’. | String |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function onDisplayTasks(links){ log.info("Usuário: " + getValue("WKUser")); } |
onDisplayTasksSummary
Este evento é disparado antes de serem exibidos os contadores das abas e gráficos da central de tarefas e widgets de BPM. Através dele é possível alterar números de tarefas pendentes de cada tipo.
Exemplo alterando o número de tarefas abertas e no prazo:
Bloco de código | ||
---|---|---|
| ||
function onDisplayTasksSummary(resumeTasks) { resumeTasks.openTasks=20; } |
O objeto recebido como parâmetro contém:
Propriedade | Descrição | Tipo |
---|---|---|
expiredTasks |
Solicitações atrasadas. | Int | |
openTasks | Solicitações no prazo. | Int |
myRequests | Minhas solicitações. | Int |
toApprover | Aprovação de documentos pendentes. | Int |
myDocuments | Documentos aguardando aprovação. | Int |
checkout | Documento em checkout. | Int |
learningTasks | Atividades de Aprendizado. | Int |
Bloco de código | ||
---|---|---|
| ||
function onDisplayTasksSummary(resumeTasks) { resumeTasks.expiredTasks=10; resumeTasks.openTasks=20; resumeTasks.myRequests=30; resumeTasks.toApprover=40; resumeTasks.myDocuments=50; resumeTasks.checkout=60; resumeTasks.learningTasks=70; } |
Disponibilizamos algumas informações para consulta através do método getValue.
Propriedade | Descrição | Tipo |
---|---|---|
WKUser | Código do usuário logado. | String |
WKUserLocale | Idioma do usuário logado. | String |
WKCompany | Número da empresa. | Int |
taskUserId | Código do usuário substituído, em caso de visualização da central como substituto. Nos demais casos retorna o usuário logado. | String |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function onDisplayTasks(links){ log.info("Usuário: " + getValue("WKUser")); } |
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.
DocumentDto
Este objeto representa o 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 |
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 fluig. | 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 usuário 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: 0 à Pasta raiz 1 à Pasta 2 à Documento normal 3 à Documento externo 4 à Formulário 5 à Registro de formulário 7 à Anexo Workflow 8 à Novo Conteúdo 9 à Aplicativo 10 à Relatório portal à Site portalPage à Página de Site | String |
getExpirationDate() | Retorna a data de expiração. | java.util.Date |
getParentDocumentId() | Retorna o número da Pasta/Formulá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 usuário que publicou o documento. | String |
getCardDescription() | Retorna a descrição do registro de formulário, para documento do tipo 5. | String |
getDocumentPropertyNumber() | Retorna o formulário que foi usado como base para criação do registro de formulário, por isso só tem um valor quando o documento é do tipo 5 (registro de formulário). | int |
getDocumentPropertyVersion() | Retorna a versão do formulário em que o registro de formulário foi criado. | int |
getPrivateDocument() | Retorna se o documento/pasta está abaixo da pasta particular. | boolean |
getPrivateColleagueId() | Se é um documento particular retorna a matricula do usuário 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 |
String
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 formulá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 |
boolean
o tamanho físico do documento principal e anexos. | float |
getVersionOption() | Retorna |
String
getDeleted()
Retorna se o documento está na lixeira.
boolean
getDatasetName()
Retorna o documento do dataset , se o documento é um formulário.
String
getKeyWord()
a condição de versionamento do documento: 0 = Será mantida a versão 1 = Será criado nova revisão 2 = Será criado nova versão Importante lembrar que no momento da criação de um novo documento o valor sempre será 0. | int |
Bloco de código | ||||
---|---|---|---|---|
| ||||
var doc = getValue("WKDocument");
log.info("Número do documento: "+ doc.getDocumentId() + " - Versão: "+ doc.getVersion()); |
DocumentEditDto
Este objeto representa as propriedades editáveis de um documento, na tabela abaixo consta mais informações sobre ele:
Função | Descrição da função | Tipo do retorno |
---|---|---|
setKeyWord | Adiciona Palavras chaves no documento. Cada palavra é separada por vírgula. |
void |
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
setExpires | Define se o documento deve expirar | void |
setExpirationDate | Define a data de expiração. | void |
setValidationStartDate | Define a data a partir da qual o documento poderá ser visualizado. | void |
Retorna a condição de versionamento do documento:
0 = Será mantida a versão
1 = Será criado nova revisão
2 = Será criado nova versão
Importante lembrar que no momento da criação de um novo documento o valor sempre será 0.
Bloco de código | ||||
---|---|---|---|---|
| ||||
function beforeDocumentPublisher() { var docEdit = getValue("WKDocumentEdit"); var doc = getValue("WKDocument dataStartValidation = new Date(2022, 0, 1); var dataExpiracao = new Date(2022, 11, 31); docEdit.setKeyWord("testing"); log docEdit.info("Número do documento: "+ doc.getDocumentId() + " - Versão: "+ doc.getVersion()); |
...
setExpires(true);
docEdit.setExpirationDate(dataExpiracao);
docEdit.setValidationStartDate(dataStartValidation);
} |
Nota | ||
---|---|---|
| ||
Lembrando que no javascript, no construtor new Date, o valor do "Mês" começa com o index 0, sendo 0 = Janeiro e 11 = Dezembro, veja outros exemplos clicando aqui. |
ApproverDto
Este objeto 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 usuário ou o código do grupo que está aprovando este documento. É possível saber se vai retornar um usuário ou um grupo pelo tipo de aprovação. | String |
getApproverType() | Retorna o tipo da aprovação, onde: 0 à Usuário 1 à Grupo | int |
getLevelId() | Retorna o nível de aprovação, no caso de aprovação em níveis. | int |
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"; } } } |
DocumentSecurityConfigDto
Este objeto 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 usuário ou o código do grupo que está na segurança deste documento. É possível saber se vai retornar um usuário 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 à Usuário; 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údo. | boolean |
getSecurityLevel() | Retorna no nível de permissão/restrição, onde: -1 à 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çã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"; } } } |
RelatedDocumentDto
Este objeto representa os documentos relacionados 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 |
getRelatedDocumentId() | Retorna o número do documento que está relacionado ao documento publicado. | int |
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()); } } |
ProcessDefinitionVersionDto ÂncoraProcessDefinitionVersionDto ProcessDefinitionVersionDto
ProcessDefinitionVersionDto | |
ProcessDefinitionVersionDto |
Este objeto representa a definição de um processo e seus atributos. A tabela abaixo apresenta mais informações sobre ele:
Função | Descrição da Função | Tipo do Retorno |
getCompanyId() | Retorna o código da empresa | Long |
getProcessId() | Retorna o código do processo | Long |
getProcessDescription() | Retorna a descrição do processo | String |
getVersion() | Retorna a versão do processo | Integer |
getVersionDescription() | Retorna a descrição da versão do processo | String |
getFormId() | Retorna o código do formulário do processo | Integer |
getCategoryStructure() | Retorna a categoria do processo | String |
getFullCategoryStructure() | Retorna a estrutura completa da categoria do processo | String |
UserEventVO Âncora UserEventVO UserEventVO
Este objeto representa um usuário e seus atributos, na tabela abaixo consta mais informações sobre ele:
Função | Descrição da Função | Tipo do Retorno |
getId() | Retorna o identificador do usuário | Long |
getTenantId() | Retorna o código da empresa | Long |
getLocationId() | Retorna o código da localização à qual o usuário pertence | Long |
getFirstName() | Retorna o nome do usuário | String |
getLastName() | Retorna o sobrenome do usuário | String |
getFullName() | Retorna o nome completo do usuário | String |
getEmail() | Retorna se lista o conteúdo | String |
getLogin() | Retorna o e-mail do usuário | String |
getPassword() | Retorna a senha do usuário | String |
getIdpId() | Retorna o identificador associado ao fluig Identity | String |
getUserCode() | Retorna o código do usuário | String |
getUserType() | Retorna o tipo do usuário, onde: 0 - Normal | Integer |
getState() | Retorna o estado do usuário, onde: 0 - Não confirmado | Integer |
getTimeZone() | Retorna o Fuso Horário do usuário | String |
getRoles() | Retorna a lista dos códigos dos papéis aos quais o usuário pertence | List<String> |
getGroups() | Retorna a lista dos códigos dos grupos aos quais o usuário pertence | List<String> |
getData() | Retorna os dados adicionais do usuário | Map<String, String> |
setFirstName(String firstName) | Informa o nome do usuário | void |
setLastName(String lastName) | Informa o sobrenome do usuário | void |
setFullName(String fullName) | Informa o nome completo do usuário | void |
putData(String key, String value) | Adiciona um novo dado adicional ao usuário. Só pode ser utilizado em eventos before. | void |
WatchDTO
Este objeto representa as notificações de acompanhamento de comentários e suas propriedades, na tabela abaixo consta mais informações sobre ele:
Função | Descrição da Função | Tipo do Retorno |
getEntityId() | Retorna o código do Conteúdo. | String |
getUserId() | Retorna o código do usuário. | String |
getUserAlias() | Retorna o alias do usuário. | String |
getSociableId() | Retorna ocódigo sociable. | String |
getCreationDate() | Retorna a data de criação. | String |
getLastUpdateDate() | Retorna a data da última atualizaçã. | String |
getNumberComments() | Retorna o número de comentários. | String |
getNumberLikes() | Retorna o número de apoios. | String |
getNumberShares() | Retorna o número de compartilhamentos. | String |
getNumberWatchers() | Retorna o número de acompanhamentos. | String |
getNumberDenouncements() | Retorna o número de denúncias. | String |
getSocialWatchType() | Retorna o tipo (social) | String |
getPostAuthor() | Retorna o autor do conteúdo. | String |
getTags() | Retorna as tags. | String |
getText() | Retorna o texto. | String |
getDescription() | Retorna a descrição. | String |
getObjectClass() | Retorna a classe do objeto. | String |
getObjectId() | Retorna o objectId. | String |
getThumbURL() | Retorna a url do thumb | String |
SocialPostEventVO ÂncoraSocialPostEventVO SocialPostEventVO
SocialPostEventVO | |
SocialPostEventVO |
SocialPostEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getText() | texto do post | String |
getUser() | alias do usuário que está postando | String |
getVisibility() | visibilidade do post | String |
getPostId() | identificador do post | String |
getCreationDate() | data de criação do post | String |
getLastUpdateDate() | data de ultima atualização do post | String |
getSociables() |
objetos sociables relacionado a esse post. Ex: |
Imagens, |
Vídeos, |
Artigos, etc... | List<SociableEventVO> | |
getSocial() | objeto social onde o post foi feito. Pode ser timeline de um usuario ou um comunidade | SocialEventVO |
*getAttributes() | Atributos do Analytics em formato de Lista de Strings. Limite de 3 itens | List<String> |
*getFacts() | Fatos dos atributos do Analytics em formato de Lista de Strings. Limite de 3 itens | List<String> |
customData | Mapa em formato JSON onde pode-se persistir dados extras da publicação | Map JSON |
*Somente enviado no evento beforSocialPost e afterSocialPost, esses valores não são persistidos no fluig
SociableEventVO ÂncoraSociableEventVO SociableEventVO
SociableEventVO | |
SociableEventVO |
SociableEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getId() | identificador do objeto | String |
getCreationDate() | data de criação do objeto | String |
getLastUpdateDate() | ultima atualização do objeto | String |
getNumberLikes() | quantidade de curtidas | String |
getNumberShares() | quantidade de compartilhamentos | String |
getNumberComments() | quantidade de comentários | String |
getNumberDenouncements() | quantidade de denúncias | String |
getNumberWatchers() | quantidade de acompanhamentos | String |
getTags() | nomes marcadores | String |
getUrl() | endereço do objeto | String |
getSociableType() | tipo do objeto social | String |
getRemoved() | informa se o objeto foi removido | String |
*getPostAuthor() | retorna o alias do autor da publicação que foi comentada | String |
*getText() | retorna o texto da publicação que foi comentada | String |
**getDescription() | Nome do objeto comentado | String |
**getThumbURL() | url de ícone do objeto comentado. | String |
getSocial() | local aonde o comentário foi efetuado | SocialEvent |
*retornados apenas quando o comentário é sobre um post.
**retornado para os comentários de documentos e etc.
SocialEventVO ÂncoraSocialEventVO SocialEventVO
SocialEventVO | |
SocialEventVO |
SocialEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getId() | identificador do objeto | String |
getCreationDate() | data de criação do objeto | String |
getLastUpdateDate() | ultima atualização do objeto | String |
getAlias() | apelido do objeto social | String |
getName() | nome do objeto social | String |
getDescription() | descrição do objeto social | String |
getType() | tipo do objeto social | String |
getState() | status do objeto social | String |
getHidden() | informa se o objeto é oculto | String |
getPrivateContent() | informa se o conteúdo é privado | String |
getApprovalRequired() | informa se aprovação é requerida | String |
getCustomPage() | informação de página |
...
customizada | String |
SocialShareEventVO Âncora SocialShareEventVO SocialShareEventVO
SocialShareEventVO | |
SocialShareEventVO |
SocialShareEventVO |
...
SocialShareEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getSociable() | objeto sendo compartilhado | SociableEventVO |
getSocialPlace() | objeto que recebe o compartilhamento | SocialEventVO |
getUser() | alias do usuario que compartilha | String |
getText() | texto informado no compartilhamento | String |
getType() | tipo do objeto | String |
...
SocialCommentEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getSociable() | objeto sendo compartilhado | SociableEventVO |
getUser() | alias do usuário que comenta | String |
getText() | texto informado no comentário | String |
getCommentId() | id do comentário | String |
...
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getSociable() | objeto sendo compartilhado | SociableEventVO |
getSocialPlace() | objeto que recebe o compartilhamento | SocialEventVO |
getUser() | alias do |
usuario que |
compartilha | String |
getText() | texto informado no |
compartilhamento | String |
getType() |
tipo do objeto | String |
...
...
SocialCommentEventVO
...
Âncora
...
SocialCommentEventVO
SocialCommentEventVO |
...
SocialCommentEventVO
SocialCommentEventVO |
...
SocialCommentEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getSociable() | objeto sendo compartilhado | SociableEventVO |
getUser() | alias do usuário que comenta | String |
...
getText() |
texto informado no comentário | String |
getCommentId |
() |
...
id do comentário | String |
SocialDenounceEventVO Âncora
...
SocialDenounceEventVO
SocialDenounceEventVO |
...
SocialDenounceEventVO
SocialDenounceEventVO |
SocialDenounceEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|
getSociable() |
...
objeto sendo compartilhado | SociableEventVO | |
getUser() | alias do usuário que comenta | String |
getText() | texto informado no comentário | String |
getType() | Tipo de denúncia | String |
SocialLikeEventVO Âncora SocialLikeEventVO SocialLikeEventVO
SocialLikeEventVO | |
SocialLikeEventVO |
SocialLikeEventVO |
...
GenericAlertEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
objectId | Id do objeto relacionado | String |
objectClass | Classe que identifica o objeto relacionado | String |
link | Link que está disponível no objeto. Pode vir nulo nos casos em que não existe um link de acesso | String |
...
Propriedade / Método | Descrição | Tipo / Retorno |
---|
url
Url destino para tarefas personalizadas
code
Código para tarefas personalizadas
Descrição do processo
Código do usuário de abertura
Nome do usuário de abertura
Descrição da atividade atual
Nome do usuário responsável pela tarefa atual
Data de expiração
Descrição do anexo principal
Tarefa expirada?
Usuário já visualizou a tarefa?
Campo do formulário
Atualização do Analytics
Definição
É possível enviar dados ao analytics a partir dos eventos de customização.
Esse dados recebidos pelo evento não são persistidos no fluig mas podem ser modificados antes de serem enviados ao Analytics.
Esses valores são transmitidos no objeto SocialPostEventVO
Exemplo de uso
Bloco de código | ||||
---|---|---|---|---|
| ||||
analyticsUtil.updatePostData(String postId, String[] attributes, String[] facts); |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialPost(companyId, post){
analyticsUtil.updatePostData(post.getPostId(), post.getAttributes(), post.getFacts());
}
|
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 | ||
---|---|---|
| ||
@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:
Evento | Descrição |
PUBLISH | Um novo documento publicado. |
MODIFY | Documento é modificado |
DELETE | Documento é 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. |
CONVERTIONLONGTERM | Documento 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.
getSociable() | objeto sendo compartilhado | SociableEventVO |
getUser() | alias do usuário que comenta | String |
SocialCommunityRelationEventVO Âncora SocialCommunityRelationEventVO SocialCommunityRelationEventVO
SocialCommunityRelationEventVO | |
SocialCommunityRelationEventVO |
SocialCommunityRelationEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getSocial() | Social relacionado à comunidade | SocialEventVO |
getCommunity() | Social que representa a Comunidade | SocialEventVO |
SocialFollowEventVO Âncora SocialFollowEventVO SocialFollowEventVO
SocialFollowEventVO | |
SocialFollowEventVO |
SocialFollowEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getSocial() | Social que seguirá | SocialEventVO |
getFollowed() | Social que está sendo seguido | SocialEventVO |
SocialPictureEventVO Âncora SocialPictureEventVO SocialPictureEventVO
SocialPictureEventVO | |
SocialPictureEventVO |
SocialPictureEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
getLoggedUser() | Alias do usuário autenticado | String |
getAlias() | Alias do local aonde se está mudando a imagem (usuário| comunidade) | String |
getPath() | Path do diretório onde a imagem foi salva | String |
getPictureName() | Nome da imagem salva | String |
getWidth() | Largura da imagem | int |
getHeight() | Altura da imagem | int |
GenericAlertEventVO Âncora GenericAlertEventVO GenericAlertEventVO
GenericAlertEventVO | |
GenericAlertEventVO |
GenericAlertEventVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
objectId | Id do objeto relacionado | String |
objectClass | Classe que identifica o objeto relacionado | String |
link | Link que está disponível no objeto. Pode vir nulo nos casos em que não existe um link de acesso | String |
WorkflowTasksVO Âncora WorkflowTasksVO WorkflowTasksVO
WorkflowTasksVO | |
WorkflowTasksVO |
WorkflowTasksVO | ||
Propriedade / Método | Descrição | Tipo / Retorno |
---|---|---|
url | Url destino para tarefas personalizadas | String |
code | Código para tarefas personalizadas | String |
processId | Código do processo | String |
processDescription | Descrição do processo | String |
requesterId | Código do usuário de abertura | String |
requesterName | Nome do usuário de abertura | String |
stateDescription | Descrição da atividade atual | String |
colleagueName | Nome do usuário responsável pela tarefa atual | String |
dateExpires | Data de expiração | String |
attachDescription | Descrição do anexo principal | String |
expired | Tarefa expirada? | boolean |
know | Usuário já visualizou a tarefa? | boolean |
fieldValue1 | Campo do formulário | String |
fieldValue2 | Campo do formulário | String |
fieldValue3 | Campo do formulário | String |
fieldValue4 | Campo do formulário | String |
fieldValue5 | Campo do formulário | String |
fieldValue6 | Campo do formulário | String |
fieldValue7 | Campo do formulário | String |
fieldValue8 | Campo do formulário | String |
fieldValue9 | Campo do formulário | String |
fieldValue10 | Campo do formulário | String |
fieldValue11 | Campo do formulário | String |
fieldValue12 | Campo do formulário | String |
fieldValue13 | Campo do formulário | String |
fieldValue14 | Campo do formulário | String |
fieldValue15 | Campo do formulário | String |
Exemplo com usuário de aplicação
...
Nesse exemplo, a mensagem "Post criado via evento" é postada no mural
Bloco de código | ||
---|---|---|
| ||
function beforeSocialPost(companyId, vo) {
if (vo.getSocial().getType() == "USER" && vo.getUser() != "admin") {
var consumer = oauthUtil.getNewAPIConsumer("my_app_key", "my_app_secret",
"605da7f2-d087-4f4b-903e-486df9563956",
"2b192950-fe0c-4211-a4bf-5962c18432d85c077dfb-aa51-45a0-ab43-822a680070ab");
var userData = JSON.parse(consumer.get("/public/social/user/" + vo.getUser()));
if (userData.numberFollowers == 0) {
throw "Voce deve ser seguido por alguem para poder postar em sua timeline.";
}
}
} |
Exemplo com usuário logado
Bloco de código | ||
---|---|---|
| ||
function afterDocumentPublisher(){
var doc = getValue("WKDocument");
var user = getValue("WKUser");
var msgPost = "Novo documento: "+ doc.getDocumentId() + " - Versão: "+ doc.getVersion();
log.info(msgPost);
var jsonContent = "{\"text\":\"" + msgPost + "\",\"visibility\":\"PUBLIC\"}";
log.info(jsonContent);
var consumer = oauthUtil.getNewAPIConsumerAsCurrentUser("myapp", "myappsecret", "32718929-568b-4a64-9f67-bbeadf4c1fc3",
"eff7b746-384b-43ba-be3a-aed14da822a4b8352de0-62be-456e-a0d8-ab5c00a745bc");
consumer.post("/public/social/post/create", jsonContent);
} |
Atualização do Analytics
...
Definição
É possível enviar dados ao analytics a partir dos eventos de customização.
Esse dados recebidos pelo evento não são persistidos no fluig mas podem ser modificados antes de serem enviados ao Analytics.
Esses valores são transmitidos no objeto SocialPostEventVO
Exemplo de uso
Bloco de código | ||||
---|---|---|---|---|
| ||||
analyticsUtil.updatePostData(String postId, String[] attributes, String[] facts); |
Bloco de código | ||||
---|---|---|---|---|
| ||||
function afterSocialPost(companyId, post){
analyticsUtil.updatePostData(post.getPostId(), post.getAttributes(), post.getFacts());
}
| ||||
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.getPropertyNames();
while (es.hasMoreElements()) {
String prop = es.nextElement();
System.out.println(prop + ": " + mm.getObjectProperty(prop));
}
}
System.out.println("========Fim Document Listener========");
} catch (Exception e) {
e.printStackTrace();
}
}
} |