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


...

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.

...


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

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.

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’.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: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;
}


O objeto recebido como parâmetro contém:Disponibilizamos algumas informações para consulta através do método getValue.

Propriedade

Descrição

Tipo

WKUser

Código do usuário logado

expiredTasksSolicitações atrasadas

.

IntString
openTasksSolicitações no prazo.Int
myRequestsMinhas solicitações.Int
toApproverAprovação de documentos pendentes.Int
myDocumentsDocumentos aguardando aprovação.Int

WKUserLocale

Idioma do usuário logado.

String
WKCompanyNúmero da empresacheckoutDocumento em checkout.IntlearningTasks
taskUserIdCódigo do usuário substituído, em caso de visualização da central como substituto. Nos demais casos retorna o usuário logado.StringAtividades de Aprendizado.Int
Bloco de código
languagejs
titleExemplo
function onDisplayTasksSummaryonDisplayTasks(resumeTaskslinks) {
	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:

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:

o volume onde o documento foi publicado, se estiver em branco ele utiliza o volume do pai.Retorna as palavras chaves do

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

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

getApprovedDategetPublisherId()

Retorna a data de Aprovação.

java.util.Date

matricula do usuário que publicou o documento.

String

getCardDescriptiongetLastModifiedDate()

Retorna a Data da última modificação.

java.util.Date

descrição do registro de formulário, para documento do tipo 5.

String

getDocumentPropertyNumbergetDocumentType()

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

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

getExpiresgetApproved()

Retorna se o documento está em aprovaçãoexpirado.

boolean

getValidationStartDategetVolumeId()

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 documentoo volume onde o documento foi publicado, se estiver em branco ele utiliza o volume do pai.

String

getCardDescriptiongetInheritSecurity()

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

se herda segurança do pai.

boolean

getUpdateIsoProperties()

Retorna se atualiza as propriedades da cópia controlada.

boolean

getLastModifiedTimegetDocumentPropertyVersion()

Retorna a versão do formulário em que o registro de formulário foi criado.

int

hora da última modificação em milissegundos.

String

getDeletedgetPrivateDocument()

Retorna se o documento /pasta está abaixo da pasta particularestá na lixeira.

boolean

getPrivateColleagueIdgetDatasetName()

Retorna o documento do dataset , se o documento é um formulário.

String

getKeyWord()

Retorna as palavras chaves do documento. Cada palavra é separada por vírgulaSe é um documento particular retorna a matricula do usuário onde este documento está alocado.

String

getIndexedgetImutable()

Retorna se o documento já foi indexadoa versão/revisão é inalterável.

boolean

getPrioritygetDraft()

Retorna a prioridade do documento.

int

se o documento está em edição, para documento do tipo “Novo Conteúdo”.

boolean

getInternalVisualizergetUserNotify()

Retorna se notifica os usuários que tenham esse assunto de interesseutiliza visualizador interno.

boolean

getExpiresgetPhisicalFileSize()

Retorna se o documento está expiradotamanho físico do documento principal e anexos.

booleanfloat

getVolumeId
getVersionOption()

Retorna

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()

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 documento. Cada palavra é separada por vírgula.
String
void

getImutable()

Retorna se a versão/revisão é inalterável.

boolean

getDraft()

Retorna se o documento está em edição, para documento do tipo “Novo Conteúdo”.

boolean

getInternalVisualizer()

Retorna se utiliza visualizador interno.

boolean

getPhisicalFileSize()

Retorna o tamanho físico do documento principal e anexos.

float

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

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:

...

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
getSociablegetSociables()objeto sociable objetos sociables relacionado a esse post. Ex: ImagemImagens, VídeoVídeos, ArtigoArtigos, etc...List<SociableEventVO>
getSocial()objeto social onde o post foi feito. Pode ser timeline de um usuario ou um comunidadeSocialEventVO
*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

...