Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: DocumentEditDto
Painel
borderColor

...

...

#e8f6f0

...

bgColor

...

#e8f6f0

...

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
width854
urlhttps://www.youtube.com/watch?v=BWkCv6tBeTI&index=23
height480
 

SocialPostEventVO

Informações

Veja o exemplo em nosso repositório aqui.

Desenvolvimento de Eventos

HTML
<style type="text/css">
    .lms * {
      -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
      box-sizing: border-box;
    }

    .lms-text-center {
      text-align: center;
    }

    .lms-full-height {
      height: 100%;
    }

    /* Component LMS Callout */

    .lms-callout {
      border: none;
      padding: 0px;

      display: -moz-box;
      -moz-flex-flow: row wrap;
      -moz-justify-content: center;
      -moz-align-items: center;

      display: -ms-flexbox;
      -ms-flex-flow: row wrap;
      -ms-justify-content: center;
      -ms-align-items: center;
      
      display: -webkit-flex;
      display: -webkit-box;
      -webkit-flex-flow: row wrap;
      -webkit-justify-content: center;
      -webkit-align-items: center;

      display: flex;
      flex-flow: row wrap;      
      justify-content: center;
      align-items: center;
    }
  
    .lms-callout .lms-callout-image {
      width: 24px;
    }

    .lms-callout .lms-callout-body {
      width: calc(100% - 24px);
      padding-left: 20px;
    }

	.lms-callout .lms-callout-citacao {
      border: 0px solid;
      border-left-width: 3px;
      border-left-color: #f36f21;
	  margin: 4px;
	  margin-left: 25px;
	  padding-left: 8px;
      font-size: 13px;
	}

    .lms-callout .lms-callout-thumb {
      width: 24px;
      height: 24px;
    }

    .lms-callout .lms-callout-text {
      color: #58595b;
      line-height: 1.75;
      margin: 0;
    }
</style>
<div class="lms">
	<div class="lms-callout">
		<div class="lms-callout-image">
			<img class="lms-callout-thumb" src="http://tdn.totvs.com/download/thumbnails/286221066/pratica.png" width="24" height="24">
		</div>
		<div class="lms-callout-body">
			<p class="lms-callout-text"><b>COLOQUE EM PRÁTICA!</b><br>Essa página contém as instruções principais e exemplos de implementação, servindo como ponto de partida para seu desenvolvimento. Os exemplos devem ser analisados e adaptados para cada cenário e necessidade específica, lembrando que as implementações realizadas são de responsabilidade do cliente e não possuem suporte do time TOTVS Fluig.</p>
		</div>
	</div>
</div>

Índice

Índice
outlinetrue
exclude.*ndice
stylenone


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
width854
urlhttps://www.youtube.com/watch?v=BWkCv6tBeTI&index=23
height480
 

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
titleAtenção

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.

Image Added

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:

Image Added

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
languagejava
            log.info("Testando o log info");

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


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.

Nota
titleAtenção

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
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 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
languagejava
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
languagejava
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
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){
}

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

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
titleAtenção

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.

Image Removed

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:

Image Removed

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
languagejava
            log.info("Testando o log info");

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

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.

Nota
titleAtenção

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
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 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
languagejava
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
languagejava
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
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(fieldsafterWatchContent(companyId, watchDTO){	
}

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.

...


Sendo os parâmetros:

Propriedade

Descrição

Tipo

companyId

Código da Empresa

int

watchDTO

Dados do registro

WatchDTO

Bloco de código
languagejava
titleExemplo
function displayCustomMetadata(fields afterWatchContent(companyId, watchDTO){
	if(watchDTO.getSocialWatchType() == "POST"){
	log.info("Valor do Campo 1: 		throw "O usuário "+watchDTO.getUserAlias()+" vai ser notificado sobre o post " + watchDTO.getText() + " do autor " + fieldswatchDTO.getValuegetPostAuthor("campo1")) ;
	}
}


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

function beforeUnwatchContent(companyId, watchDTO){
}


Sendo os parâmetros:

Propriedade

Descrição

Tipo

companyId

Código da Empresa

int

watchDTO

Dados do registro

WatchDTO

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
languagejava
titleExemploExemplo
function beforeUnwatchContent(companyId, watchDTO){
	if(watchDTO.getSocialWatchType() == "COMMUNITY"){
		
		throw "Você não pode deixar de ser notificado sobre a comunidadefunction displayCustomMetadata(fields){
	log.info("Usuário: " + getValue("WKUser"));watchDTO.getDescription() ;
	}
}

...


AfterUnwatchContent

Utilizado quando ao deixar de acompanhar algum conteúdo se deseja recuperar informações do registro e usar antes da após a ação de "deixar de acompanhar". Por exemplo, ao deixar de acompanhar um documentopost, é possível recuperar suas informações e usá-las em um datasetinformar o usuário que aquele post possui muitos seguidores.

Bloco de código
languagejava
titleExemplo
function beforeWatchContentafterUnwatchContent(companyId, watchDTO){
}


Sendo os parâmetros:

...

Bloco de código
languagejava
titleExemplo
function beforeWatchContentafterUnwatchContent(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){	
}
POST" && watchDTO.getNumberWatchers() < 3 ){
		log.erro("O post   \"" + watchDTO.getText() + "\" do autor " + watchDTO.getPostAuthor() + " deixou de ser polemico" )
	}
}


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.

Bloco de código
languagejs
function beforeCreateUser(user) {
}
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

UserEventVO


Exemplo de implementação:

Bloco de código
languagejs
linenumberstrue
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
languagejs
function afterCreateUser(user) {
}


Parâmetro da funçãoSendo os parâmetros:

WatchDTO

Propriedade

Descrição

Tipo

companyId

Código da Empresa

int

watchDTO

Dados do registro

user

Objeto que contém as informações do usuário

UserEventVO


Exemplo de implementação:

Bloco de código
languagejavajs
titlelinenumbersExemplotrue
function afterWatchContentafterCreateUser(companyId,user) 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){
}

Sendo os parâmetros:

Propriedade

Descrição

Tipo

companyId

Código da Empresa

int

watchDTO

Dados do registro

WatchDTO

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){
}

Sendo os parâmetros:

...

Propriedade

...

Descrição

...

Tipo

...

companyId

...

Código da Empresa

...

int

...

watchDTO

...

Dados do registro

...

WatchDTO

// 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ú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

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" )
	}
}

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 atualização ou adicionar dados adicionais programaticamente.

Bloco de código
languagejs
function beforeCreateUserbeforeUpdateUser(user) {
}
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

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:

Bloco de código
languagejs
linenumberstrue
function beforeCreateUser(user) {
// Verifica se foi alterada a senha 
informada atende os requisitos mínimos var passwordPattern = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,16})"; if (!
do usuário
if (user.getPassword()
.matches(passwordPattern)
 != null) {
	
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
languagejs
function afterCreateUser(user) {
doSomething();
}
 
// Verifica se a atualização do usuário foi realizada por ele próprio
if (user.getLogin().equals(getValue("WKUser"))) {
	doSomething();
}


Parâmetro da função:

Propriedade

Descrição

Tipo

user

Objeto que contém as informações do usuário

UserEventVO

...

Bloco de código
languagejs
linenumberstrue
function afterCreateUserbeforeUpdateUser(user) {
	// InstânciaVerifica umse clientefoi daalterada APIa públicasenha 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ú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.

Bloco de código
languagejs
function beforeUpdateUser(user) {
}

...

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:

Bloco de código
languagejs
linenumberstrue
// Verifica se foi alterada a senha do usuário
if (user.getPassword() != null) {
	doSomething();
}
 
// Verifica se a atualização do usuário foi realizada por ele próprio
if (user.getLogin().equals(getValue("WKUser"))) {
	doSomething();
}
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 ser utilizado quando for necessário realizar alguma rotina com o usuário atualizado, como exemplo a atualização de recursos adicionais do usuário.

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

UserEventVO

...

:

Bloco de código
languagejs
linenumberstrue
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 (!
a senha do usuário
if (user.getPassword()
.matches(passwordPattern)
 != null) {
	
throw "A senha
doSomething();
}
 
// Verifica se a atualização do usuário foi 
não
realizada 
atendeu
por 
os
ele 
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 ser utilizado quando for necessário realizar alguma rotina com o usuário atualizado, como exemplo a atualização de recursos adicionais do usuário.

Bloco de código
languagejs
function afterUpdateUser(user) {
}

...

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:

Bloco de código
languagejs
linenumberstrue
// Verifica se foi alterada a senha do usuário
if (user.getPassword() != null) {
	doSomething();
}
 
// Verifica se a atualização do usuário foi realizada por ele próprio
if (user.getLogin().equals(getValue("WKUser"))) {
	doSomething();
}
próprio
if (user.getLogin().equals(getValue("WKUser"))) {
	doSomething();
}


Parâmetro da função:

Propriedade

Descrição

Tipo

user

Objeto que contém as informações do usuário

UserEventVO


Exemplo de implementação:

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

Parâmetro da função:

...

Propriedade

...

Descrição

...

Tipo

...

user

...

Objeto que contém as informações do usuário

...

UserEventVO

Exemplo de implementação:

Bloco de código
languagejs
linenumberstrue
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
languagejs
function beforeDeactivateUserafterDeactivateUser(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
languagejs
linenumberstrue
function beforeDeactivateUserafterDeactivateUser(login) {
	// Busca Instânciaum umserviço clientecustomizado dacadastrado APIno públicaFluig doe Fluig.invoca Oum usuáriométodo aplicativoespecífico utilizadodele
	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
languagejs
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
languagejs
linenumberstrue
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();

    // 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 sejaesteja moderadordesativado deno algumaserviço comunidadecustomizado lança uma exceção informando que
	// que o usuário está édesativado moderadorno deserviço comunidadescustomizado e não pode ser ativado no desativado
	Fluig
    if (moderateCommunities.length > 0service.isDeactivatedUser(login)) {
		throw "O usuário " + login + " nãoestá podedesativado serno desativadoserviço porcustomizado sere moderadornão naspode comunidades:ser ativado!" ;
				+ moderateCommunities.join(", ") + ".";
	}
}

...


afterActivateUser

Evento disparado depois da desativação ativação de um usuário. Pode ser utilizado quando for necessário realizar alguma rotina com o usuário desativadoativado.

Bloco de código
languagejs
function afterDeactivateUserafterActivateUser(login) {
}


Parâmetro da função:

Propriedade

Descrição

Tipo

login

Login do usuário desativadoativado

String


Exemplo de implementação:

Bloco de código
languagejs
linenumberstrue
function afterDeactivateUserafterActivateUser(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.deactivateUseractivateUser(login);

	log.info("O usuário " + login + " foi desativadoativado no serviço customizado.");
}

...


beforeLogin

Evento disparado antes da ativação 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 evento.

Aviso
titleAtenção!

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
languagejs
function beforeActivateUserbeforeLogin(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
languagejs
linenumberstrue
function beforeActivateUserbeforeLogin(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 desativadobloqueado nopelo serviço customizado lança uma exceção informando
	// que o usuário está desativado no serviço customizado e nãocancela podeo serlogin ativado no Fluig
    if (service.isDeactivatedUserisBlockedUser(login)) {
		throw "O usuário " + login + " está desativado no serviço customizado e não pode ser ativado!";
    }
}

...


afterLogin

Evento disparado depois da ativação após o login de um usuário. Pode ser utilizado quando for necessário realizar alguma rotina com  quando o usuário ativadoé autenticado no fluig.

Bloco de código
languagejs
function afterActivateUserafterLogin(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
languagejs
linenumberstrue
function afterActivateUserafterLogin(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.activateUseraddUserSession(login);

	log.info("O usuário " + login + " foi ativado no serviço customizado.");
}

beforeLogin

}
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 inativoEvento 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 evento.

...

titleAtenção!

...

alguma rotina quando ocorrer um erro de login ou apresentar uma mensagem personalizada para o usuário.

Bloco de código
languagejs
function beforeLoginonLoginError(login, errorCause) {
}


Parâmetro da função:

String

Propriedade

Descrição

Tipo

login

Login do usuário

Descrição

Tipo

login

Login do usuário

String

errorCause

Motivo do erro de login, onde:

0 - Login e senha inválidos
1 - Usuário inativo 

Integer


Exemplo de implementação:

Bloco de código
languagejs
linenumberstrue
function beforeLogin(login) {
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);
	    
	// Caso o usuário esteja// bloqueadoUtiliza peloo serviço customizado para lançaverificar umaquantas exceção informando
	// quetentativas de login o usuário está desativado no serviço customizado// erealizou. cancelaCaso otenha loginultrapassado no3 Fluig
tentativas bloqueia o usuário 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
languagejs
function afterLogin(login) {
}

Parâmetro da função:

...

Propriedade

...

Descrição

...

Tipo

...

login

...

Login do usuário

...

String

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

Exemplo de implementação:

Bloco de código
languagejs
linenumberstrue
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árioo usuário realiza o logout no portal através da opção Sair.

Bloco de código
languagejs
function onLoginErroronLogout(login, errorCause) {
}


Parâmetro da função:

Integer

Propriedade

Descrição

Tipo

login

Login do usuário

String

errorCause

Motivo do erro de login, onde:

0 - Login e senha inválidos
1 - Usuário inativo 


Exemplo de implementação:

Bloco de código
languagejs
linenumberstrue
function onLoginError(login, errorCause) {
	// Verifica se a causa de erro foi senha inválida (0 - Senha inválida, 1 - Usuário inativo)
	if (errorCause == 0onLogout(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.registerLoginAttemptremoveUserSession(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
languagejs
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
languagejs
linenumberstrue
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.

Abaixo se encontra um exemplo de como implementar esse evento:

Bloco de código
languagejavascript
themeEclipse
linenumberstrue
function onNotify(subject, receivers, template, params) {
    if (template == "TPLDOCUMENT_APPROVAL_PENDING") {
        receivers.add("[email protected]");
    }
}
Nota
titleAtenção

A partir da versão 1.3.3 do fluig, recomenda-se fazer a validação do template utilizando template == "TPLDOCUMENT_APPROVAL_PENDINGao invés da função match(), evitando assim redundâncias na customização, pois o match() pode retornar como válido para mais de um template em casos como TPLNEW_TASK e TPLNEW_TASK_POOL_GROUP.

Dica
titleDica

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:

...

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.

Abaixo se encontra um exemplo de como implementar esse evento:

Bloco de código
languagejavascript
themeEclipse
linenumberstrue
function onNotify(subject, receivers, template, params) {
    if (template == "TPLDOCUMENT_APPROVAL_PENDING") {
        receivers.add("[email protected]");
    }
}
Nota
titleAtenção

A partir da versão 1.3.3 do fluig, recomenda-se fazer a validação do template utilizando template == "TPLDOCUMENT_APPROVAL_PENDINGao invés da função match(), evitando assim redundâncias na customização, pois o match() pode retornar como válido para mais de um template em casos como TPLNEW_TASK e TPLNEW_TASK_POOL_GROUP.

Dica
titleDica

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âmetroDescriçã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");
receiversLista 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.
templatePermite 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
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.
Dica
titleDica

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
titleObservação

Por questões de segurança, somente os campos priority e note podem ser alterados. Outras alterações não serão consideradas.

Nota
titleImportante

Caso seja 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
languagejavascript
themeEclipse
linenumberstrue
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";
    }
}


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.

GenericAlertEventVO

object

Objeto sobre o qual foi feita a ação que gerou o alerta.

GenericAlertEventVO  

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

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

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
titleObservação

Por questões de segurança, somente os campos priority e note podem ser alterados. Outras alterações não serão consideradas.

Nota
titleImportante

Caso seja 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
languagejavascript
themeEclipse
linenumberstrue
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";
    }
}

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.

GenericAlertEventVO

object

Objeto sobre o qual foi feita a ação que gerou o alerta.

GenericAlertEventVO  

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

registrar alguma informação, para auditoria, por exemplo.

Abaixo segue um exemplo de como implementar esse evento:

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

GenericAlertEventVO

object

Objeto sobre o qual foi feita a ação que gerou o alerta.

GenericAlertEventVO  

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


Disponibilizamos algumas informações para consulta através do método getValue

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
languagejavascript
themeEclipse
linenumberstrue
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

WKUser

Código do usuário logado

aliasSender

Alias de quem enviou a notificação. Pode vir nulo nos casos em que a notificação é enviada pelo sistema.

String

WKUserLocale

Idioma do usuário logado

aliasReceiver

Alias de quem vai receber a notificação.

String
WKCompanyNúmero da empresa

place

Lugar onde foi feita a ação que gerou a notificação. Pode vir nulo quando não for um lugar socializavel.GenericAlertEventVOInt

object

Objeto sobre o qual foi feita a ação que gerou o alerta.

GenericAlertEventVO  

taskUserIdCódigo do usuário substituído, em caso de visualização da central como substituto. Nos demais casos retorna o usuário logado.String
taskTypeIndicador do tipo de tarefas que estão sendo exibidas, “open” tarefas a concluir e “requests” para minhas solicitações

eventType

Tipo do evento que gerou a notificação.String
metadatafilter

Metadados da notificaçãoFiltros utilizados.

Hashmap <StringMap<String, String>Object>
priorityorderPrioridade da notificaçãoOrdenação aplicada.String
maxResultNúmero de resultados por página

note

Nota enviada junto à notificação.StringInt
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:
pageNúmero da página atual.Int
taskIdEm 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
languagejs
titleExemplo
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
languagejs
function onDisplayTasksSummary(resumeTasks) {
	resumeTasks.openTasks=20;
}


O objeto recebido como parâmetro contém:

Propriedade

Descrição

Tipo
expiredTasks


Solicitações atrasadas.Int
openTasksSolicitações no prazo.Int
myRequestsMinhas solicitações.Int
toApproverAprovação de documentos pendentes.Int
myDocumentsDocumentos aguardando aprovação.Int
checkoutDocumento em checkout.Int
learningTasksAtividades de Aprendizado.Int
Bloco de código
languagejs
function onDisplayTasksSummary(resumeTasks) {
	resumeTasks.expiredTasks=10;
	resumeTasks.openTasks=20;
	resumeTasks.myRequests=30;
	resumeTasks.toApprover=40;
	resumeTasks.myDocuments=50;
	resumeTasks.checkout=60;
	resumeTasks.learningTasks=70;
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");
		}
	}


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
WKCompanyNúmero da empresa.Int
taskUserIdCódigo do usuário substituído, em caso de visualização da central como substituto. Nos demais casos retorna o usuário logado.String
taskTypeIndicador 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>
orderOrdenação aplicada.String
maxResultNúmero de resultados por página.Int
pageNúmero da página atual.Int
taskIdEm 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’, em caso de visualização da central como substituto. Nos demais casos retorna o usuário logado.String
Bloco de código
languagejs
titleExemplo
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
languagejs
function onDisplayTasksSummary(resumeTasks) {
	resumeTasks.openTasks=20;
}

O objeto recebido como parâmetro contém:

Propriedade

Descrição

TipoexpiredTasksSolicitações atrasadas.IntopenTasksSolicitações no prazo.IntmyRequestsMinhas solicitações.InttoApproverAprovação de documentos pendentes.IntmyDocumentsDocumentos aguardando aprovação.IntcheckoutDocumento em checkout.IntlearningTasksAtividades de Aprendizado.Int
Bloco de código
languagejs
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
WKCompanyNúmero da empresa.Int
taskUserIdCó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
languagejs
titleExemplo
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:


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 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 o tamanho físico do documento principal e anexos.

float

getVersionOption()

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.

int
Bloco de código
languagejava
titleExemplo
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çãoDescrição da funçãoTipo do retorno
setKeyWordAdiciona Palavras chaves no

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 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
void
getImutable()
setExpires

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

getVersionOption()

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.

int
Define se o documento deve expirarvoid
setExpirationDateDefine a data de expiração.void
setValidationStartDateDefine a data a partir da qual o documento poderá ser visualizado.void
Bloco de código
languagejava
titleExemplo
function beforeDocumentPublisher() {      
  var docEdit = getValue("WKDocumentEdit");
  
  var dataStartValidation = new Date(2022, 0, 1);
  var dataExpiracao = new Date(2022, 11, 31);
  
  docEdit.setKeyWord("testing");
  docEdit.setExpires(true);
  docEdit.setExpirationDate(dataExpiracao);
  docEdit.setValidationStartDate(dataStartValidation);
} 
Nota
titleAtenção

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.

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:

...