Árvore de páginas

Versões comparadas

Chave

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

Índice

Índice
outlinetrue
stylenone
exclude.*ndice

 

Customização de

Desenvolvimento de Eventos

A customização O desenvolvimento de eventos é realizada 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”.

Os eventos de customização para o desenvolvimentos sobre a plataforma Fluig são criados 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.

...

Nota
titleAtenção

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.

 

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.

...

Bloco de código
languagejs
titleEstrutura do Evento
 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 Disponíveis

A seguir serão detalhados os eventos disponíveis no Fluig.

AddDocumentConvertionExt

Este evento permite customizar 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.

...

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

...

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
languagejava
titleExemplo
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");
                }
}

 

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
languagejava
titleExemplo
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
languagejava
titleExemplo
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
languagejava
titleExemplo
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
languagejava
titleExemplo
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
languagejava
titleExemplo
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
languagejava
titleExemplo
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
shareobjeto de socializaçãoCustomização de EventosSocialShareEventVO

 

 

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
shareobjeto de socializaçãoCustomização de EventosSocialShareEventVO



Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
commentobjeto de comentárioCustomização de EventosSocialCommentEventVO

 

 

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
commentobjeto de comentárioCustomização de EventosSocialCommentEventVO

 

 

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
postObjeto que representa a publicaçãoCustomização de EventosSocialPostEventVO

 

 

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
postobjeto de postCustomização de EventosSocialPostEventVO

 

 

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
postobjeto de postCustomização de EventosSocialPostEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
postobjeto de postCustomização de EventosSocialPostEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
denounce
objeto de postCustomização de EventosSocialDenounceEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
denounce
objeto de postCustomização de EventosSocialDenounceEventVO


Exemplo Prático 

Registrar em log as denúncias efetuadas para auditoria.

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
like
Objeto com dados do sociable curtidoCustomização de EventosSocialLikeEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
like
Objeto com dados do sociable curtidoCustomização de EventosSocialLikeEventVO


Exemplo Prático

Registrar em log para auditoria todas as publicações curtidas.

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
unlike
Objeto com dados do sociable descurtidoCustomização de EventosSocialLikeEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
unlike
Objeto com dados do sociable descurtidoCustomização de EventosSocialLikeEventVO


Exemplo Prático

Registrar em log para auditoria todas as publicações que deixaram de ser apoiadas.

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
comment
Objeto que contém as informações do comentárioCustomização de EventosSocialCommentEventVO


Exemplo Prático: Evitar que usuários removam seus comentários em uma publicação de campanha interna da empresa.

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
comment
Objeto que contém as informações do comentárioCustomização de EventosSocialCommentEventVO


Exemplo Prático

Registrar em log para auditoria todos os comentários com a hashtag "protesto". 

Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
relation
Objeto que contém as informações de participaçãoCustomização de EventosSocialCommunityRelationEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
relation
Objeto que contém as informações de participaçãoCustomização de EventosSocialCommunityRelationEventVO
Bloco de código
languagejs
titleExemplo de Implementação
function afterCommunityParticipation(companyId, relation){
    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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
relation
Objeto que contém as informações de participaçãoCustomização de EventosSocialCommunityRelationEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
relation
Objeto que contém as informações de participaçãoCustomização de EventosSocialCommunityRelationEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
follow
Objeto que contém as informações de seguirCustomização de EventosSocialFollowEventVO
Bloco de código
languagejs
titleExemplo de Implementação
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.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
follow
Objeto que contém as informações de seguirCustomização de EventosSocialFollowEventVO
Bloco de código
languagejs
titleExemplo de Implementação
function afterSocialFollow(companyId, follow){
    log.info("afterSocialFollow Social Alias: " + follow.getSocial().getAlias() + " Followed Alias: " + follow.getFollowed().getAlias());
}

 

beforeSocialUnfollow

O evento é disparado antes da efetivação de deixar de seguir uma pessoa.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
follow
Objeto que contém as informações de seguirCustomização de EventosSocialFollowEventVO
Bloco de código
languagejs
titleExemplo de Implementação
function beforeSocialUnfollow(companyId, follow){
    log.info("beforeSocialUnfollow Social Alias: " + follow.getSocial().getAlias() + " Followed Alias: " + follow.getFollowed().getAlias());
}

 

afterSocialUnfollow

O evento é disparado após a efetivação de deixar de seguir uma pessoa.

...

PropriedadeDescriçãoTipo
companyIdCódigo da Empresaint
follow
Objeto que contém as informações de seguirCustomização de EventosSocialFollowEventVO
Bloco de código
languagejs
titleExemplo de Implementação
function afterSocialUnfollow(companyId, follow){
    log.info("afterSocialUnfollow Social Alias: " + follow.getSocial().getAlias() + " Followed Alias: " + follow.getFollowed().getAlias());
}


OnNotify

Para interferir no envio de um e-mail padrão do Fluig, deve ser utilizado o evento global onNotify, que é disparado no momento em que qualquer um dos e-mails  do Fluig é enviado. 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.

...

 

 

Nota
titleImportante
  • O evento global onNotify possui bind de variáveis para acesso à log, datasetManager, DatasetFactory, DatasetBuilder, ConstraintType e ServiceManager.
  • Recomenda-se verificar a lista de parâmetros (params) recebida antes de utilizá-los, pois estes variam de acordo com o template utilizado.
  • Quando um workflow possuir evento onNotify, o evento global onNotify será ignorado para os e-mails daquele processo.
  • É imprescindível a validação pelo código do template antes de qualquer implementação, pois TODOS os e-mails passarão por esta customização quando o evento estiver registrado.

 

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:

...

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

 

ApproverDto

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

...

Bloco de código
languagejava
titleExemplo
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:

...

Bloco de código
languagejava
titleExemplo
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:

...

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

 

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
Âncora
SocialPostEventVO
SocialPostEventVO

SocialPostEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getText()texto do postString
getUser()alias do usuário que está postandoString
getVisibility()visibilidade do postString
getPostId()identificador do postString
getCreationDate()data de criação do postString
getLastUpdateDate()data de ultima atualização do postString
getSociable()objeto sociable relacionado a esse post. Ex: Imagem, Vídeo, Artigo, etc...Customização de EventosSociableEventVO
getSocial()objeto social onde o post foi feito. Pode ser timeline de um usuario ou um comunidadeCustomização de EventosSocialEventVO
*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>
customDataMapa em formato JSON onde pode-se persistir dados extras da publicaçãoMap JSON

*Somente enviado no evento beforSocialPost e afterSocialPost, esses valores não são persistidos no Fluig


SociableEventVO
Âncora
SociableEventVO
SociableEventVO

SociableEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getId()identificador do objetoString
getCreationDate()data de criação do objetoString
getLastUpdateDate()ultima atualização do objetoString
getNumberLikes()quantidade de curtidasString
getNumberShares()quantidade de compartilhamentosString
getNumberComments()quantidade de comentáriosString
getNumberDenouncements()quantidade de denúnciasString
getNumberWatchers()quantidade de acompanhamentosString
getTags()nomes marcadoresString
getUrl()endereço do objetoString
getSociableType()tipo do objeto socialString
getRemoved()informa se o objeto foi removidoString
*getPostAuthor()retorna o alias do autor da publicação que foi comentadaString
*getText()retorna o texto da publicação que foi comentadaString
**getDescription()Nome do objeto comentadoString
**getThumbURL()url de ícone do objeto comentado.String
getSocial()local aonde o comentário foi efetuadoSocialEvent

...

**retornado para os comentários de documentos e etc.


SocialEventVO
Âncora
SocialEventVO
SocialEventVO

SocialEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getId()identificador do objetoString
getCreationDate()data de criação do objetoString
getLastUpdateDate()ultima atualização do objetoString
getAlias()apelido do objeto socialString
getName()nome do objeto socialString
getDescription()descrição do objeto socialString
getType()tipo do objeto socialString
getState()status do objeto socialString
getHidden()informa se o objeto é ocultoString
getPrivateContent()informa se o conteúdo é privadoString
getApprovalRequired()informa se aprovação é requeridaString
getCustomPage()informação de página customizadaString


SocialShareEventVO
Âncora
SocialShareEventVO
SocialShareEventVO

SocialShareEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getSociable()objeto sendo compartilhadoCustomização de EventosSociableEventVO
getSocialPlace()objeto que recebe o compartilhamentoCustomização de EventosSocialEventVO
getUser()alias do usuario que compartilhaString
getText()texto informado no compartilhamentoString
getType()tipo do objetoString


SocialCommentEventVO
Âncora
SocialCommentEventVO
SocialCommentEventVO

SocialCommentEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getSociable()objeto sendo compartilhadoCustomização de EventosSociableEventVO
getUser()alias do usuário que comentaString
getText()texto informado no comentárioString
getCommentId()id do comentárioString

 

SocialDenounceEventVO
Âncora
SocialDenounceEventVO
SocialDenounceEventVO

SocialDenounceEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getSociable()objeto sendo compartilhadoCustomização de EventosSociableEventVO
getUser()alias do usuário que comentaString
getText()texto informado no comentárioString
getType()Tipo de denúnciaString

 

SocialLikeEventVO
Âncora
SocialLikeEventVO
SocialLikeEventVO

SocialLikeEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getSociable()objeto sendo compartilhadoCustomização de EventosSociableEventVO
getUser()alias do usuário que comentaString


SocialCommunityRelationEventVO
Âncora
SocialCommunityRelationEventVO
SocialCommunityRelationEventVO

SocialCommunityRelationEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getSocial()Social relacionado à comunidadeCustomização de EventosSocialEventVO
getCommunity()Social que representa a ComunidadeCustomização de EventosSocialEventVO


SocialFollowEventVO
Âncora
SocialFollowEventVO
SocialFollowEventVO

SocialFollowEventVO
Propriedade / MétodoDescriçãoTipo / Retorno
getSocial()Social que seguiráCustomização de EventosSocialEventVO
getFollowed()Social que está sendo seguidoCustomização de EventosSocialEventVO


Consumo da API Pública em Eventos

A partir dos eventos é possível executar ações no Fluig.

As ações disponíveis são as mesmas da API Pública (chamadas REST) e são disparadas através de um objeto consumer.

 

Utilizando um objeto consumer

Para obter uma instância de consumer é necessário solicitar ao objeto de ambiente oauthUtil executando o método getNewAPIConsumer ou getNewAPIConsumerAsCurrentUser.

...

Essas informações de parâmetros são fornecidas pelo Fluig em Painel de Controle, na aba WCM, item Oauth Provider.

 

O método get

Esse método realiza uma chamada GET na API Publica, passando como argumento uma URI válida da API (ver documentação da API).

Ex: consumer.get("/public/social/community/comunidade1");

 

O método post

Esse método realiza uma chamada POST na API Publica, passando como argumento uma URI válida da API (ver documentação da API) e os dados enviados em formato JSON.

Ex: consumer.post("/public/social/post/create/with/upload", "{\"text\":\"Post criado via evento\",\"visibility\":\"PUBLIC\"}");

 

Exemplo com usuário de aplicação

Nesse exemplo, a mensagem "Post criado via evento" é postada no mural

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

...

Esses valores são transmitidos no objeto SocialPostEventVO

 

Exemplo de uso

Bloco de código
languagejs
titleAssinatura do método
 analyticsUtil.updatePostData(String postId, String[] attributes, String[] facts);
Bloco de código
languagejs
titleUtilização no Evento
function afterSocialPost(companyId, post){
    analyticsUtil.updatePostData(post.getPostId(), post.getAttributes(), post.getFacts());
}


Customização de Eventos JMS

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

...