Você está na página 1de 14

15/6/2014 Customizao de Workflow - Fluig - TDN

http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 1/14
ndice

1 Customizao de Workflow
1.1 Propriedades Avanadas
1.2 Eventos do Processo
1.3 Customizao do Processo
1.4 Tratamento de Excees
1.5 Mecanismo de Atribuio
1.6 Como criar um Mecanismo de Atribuio
1.7 Parmetros Workflow para Customizao de Formulrios
1.8 Customizao de E-mail
1.8.1 Envio de E-mail Padro
1.8.2 Envio de E-mail Customizado
2 Third Party Trademarks
Customizao de Workflow
Propriedades Avanadas
As propriedades avanadas contm informaes especiais que podem alterar o comportamento padro do processo em algum ponto.
Elas devem ser utilizadas principalmente durante a fase de customizao ou conter "flags" especiais que alterem alguma lgica interna
(apenas em casos especiais).
O cadastro de propriedades avanadas do processo realizado pelo Fluig Studio, sendo necessrio que o diagrama do processo j esteja
criado. Para cadastrar uma propriedade avanada, necessrio abrir o processo para edio, e na viso Properties acessar a opo
Avanado:
Deve se utilizar os botes Adicionar, Editar e Excluir para a manuteno das propriedades avanadas do processo. Uma propriedade
avanada representada por nome e valor, onde o nome deve ser nico. Abaixo o formulrio para a criao de uma propriedade avanada:
Customizao de Workflow
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 2/14

Eventos do Processo
Os eventos de um processo so um conjunto de scripts carregados pela API de workflow. Tais scripts so desenvolvidos com o uso da
linguagem JavaScript e chamados ao longo da execuo do processo em momentos pr-determinados, como por exemplo a criao da
solicitao do processo ou a entrada em uma nova atividade.
A implementao dos eventos do processo realizada pelo Fluig Studio, sendo necessrio j existir um projeto Fluig com pelo menos um
diagrama de processo.
Para criar um novo evento do processo, clicar com o boto direito do mouse no projeto, acessar a opo New e em seguida a opo
Other. No assistente aberto, selecionar a opo "Script Evento Workflow", presente na pasta Fluig, e clicar no boto Next. Na nova tela
selecionar qual o evento que ser criado e relacionar ele a um processo j existente. Para finalizar, clicar no boto Finish:

Em todos os eventos do processo possvel obter informaes da API de Workflow. Cada evento possui acesso ao handle da API de
workflow atravs da varivel global hAPI. Os seguintes mtodos esto disponveis atravs da hAPI:
Mtodo Especificao
getCardValue("nomeCampo") Permite acessar o valor de um campo do formulrio do processo, onde:
nomeCampo: nome do campo do formulrio.
setCardValue("nomeCampo",
"valor")
Permite definir o valor de um campo do formulrio do processo, onde:
nomeCampo: nome do campo do formulrio;
valor: valor a ser definido para o campo do formulrio.
setAutomaticDecision(numAtiv,
listaColab, "obs")
Permite definir o fluxo de sada de uma atividade de forma automtica, onde:
numAtiv: nmero da atividade destino;
listaColab: lista (do tipo String) dos usurios que recebero a tarefa;
obs: observao da tarefa;
getActiveStates() Retorna uma lista das atividades ativas do processo.
getActualThread(numEmpresa,
numProcesso, numAtiv)
Retorna a thread da atividade que est ativa, lembrando que em caso de atividades paralelas,
retorna 0, 1, 2 e assim sucessivamente.
numEmpresa: nmero da empresa;
numProcesso: nmero da solicitao;
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 3/14
numAtiv: nmero da atividade.
Exemplo de uso para esta funo:

setDueDate(numProcesso,
numThread, "userId",
dataConclusao, tempoSeg)
Permite alterar o prazo de concluso para uma determinada atividade do processo, onde:
numProcesso: nmero da solicitao;
numThread: nmero da thread (normalmente 0, quando no se utiliza atividades paralelas);
userId: o usurio responsvel pela tarefa;
dataConclusao: a nova data de concluso;
tempoSeg: tempo que representa a nova hora de concluso, calculado em segundos aps a
meia-noite.
Recomendamos a utilizao deste mtodo no evento afterTaskCreate, pois ser
executado logo aps a criao da tarefa. Exemplo:
transferTask(transferUsers, "obs",
int numThread)
Transfere uma tarefa de um usurio para outro(s) usurio(s).
transferUsers: lista (do tipo String) de usurios;
obs: a observao;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function afterTaskCreate(colleagueId) {

var nrProxAtividade = getValue("WKNextState");
if (nrProxAtividade == "5"){ //atividade entre paralelas

var data = new Date();
var numEmpresa = getValue("WKCompany");

//seta o dia, ms (Janeiro 0) e ano
data.setDate(20);
data.setMonth(10);
data.setFullYear(2010);

// Recupera o numero da solicitao
var numProcesso = getValue("WKNumProces");

// Seta o prazo para as 14:00
hAPI.setDueDate(numProcesso,
hAPI.getActualThread(numEmpresa, numProcesso, nrProxAtividade),
colleagueId, data, 50400);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function afterTaskCreate(colleagueId) {
var data = new Date();

//seta o dia, ms (Janeiro 0) e ano
data.setDate(20);
data.setMonth(10);
data.setFullYear(2010);

// Recupera o numero da solicitao
var processo = getValue("WKNumProces");

// Seta o prazo para as 14:00
hAPI.setDueDate(processo, 0, colleagueId, data, 50400);
}
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 4/14
numThread: sequncia da thread, em caso de atividades paralelas.
transferTask(transferUsers, "obs") Transfere uma tarefa de um usurio para outro(s) usurio(s). Este mtodo no pode ser usado
em processos com atividades paralelas:
transferUsers: lista (do tipo String) de usurios;
obs: a observao.
startProcess(processId, ativDest,
listaColab, "obs", completarTarefa,
valoresForm, modoGestor)
Inicia uma solicitao workflow, onde:
processId: cdigo do processo;
ativDest: atividade de destino;
listaColab: lista (do tipo String) de usurios;
obs: texto da observao;
completarTarefa: indica se deve completar a tarefa (true) ou apenas salvar (false);
valoresForm: um Mapa com os valores do formulrio do processo;
modoGestor: acesso como gestor do processo (true/false).
Retorna um mapa com informaes da solicitao criada. Entre elas, o iProcess que o nmero
da solicitao criada.
setColleagueReplacement(userId) Seta um usurio substituto, onde:
userId: cdigo do usurio substituto.
setTaskComments("userId",
numProcesso, numThread, "obs")
Define uma observao para uma determinada tarefa do processo, onde:
userId: usurio responsvel pela tarefa;
numProcesso: nmero da solicitao de processo;
numThread: o nmero da thread (normalmente 0, quando no se utiliza atividades paralelas);
obs: a observao.
getCardData(numProcesso) Retorna um Mapa com todos os campos e valores do formulrio da solicitao.
numProcesso: nmero da solicitao de processo.
getAdvancedProperty("propriedade") Retorna o valor da propriedade avanada de um processo.
propriedade: nome da propriedade avanada.
calculateDeadLineHours(data,
segundos, prazo, periodId)
Calcula um prazo a partir de uma data com base no expediente e feriados cadastrados no
produto passando o prazo em horas:
data: Data inicial (tipo Date);
segundos: Quantidade de segundos aps a meia noite;
prazo: Prazo que ser aplicado em horas (tipo int);
periodId: Cdigo de Expediente.
Retorno: Array de Objeto, onde a primeira posio do array a data e a segunda a hora.
Exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function afterTaskCreate(colleagueId) {
var data = new Date();

//Calcula o prazo
var obj = hAPI.calculateDeadLineHours(data, 50000, 2,
"Default");
var dt = obj[0];
var segundos = obj[1];

//Recupera o numero da solicitao
var processo = getValue("WKNumProces");

//Altera o prazo do processo
hAPI.setDueDate(processo,0,colleagueId, dt, segundos);
}
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 5/14
calculateDeadLineTime(data,
segundos, prazo, periodId)
Calcula um prazo a partir de uma data com base no expediente e feriados cadastrados no
produto passando o prazo em minutos:
data: Data inicial (tipo Date);
segundos: Quantidade de segundos aps a meia noite;
prazo: Prazo que ser aplicado em minutos (tipo int).
periodId - Cdigo de Expediente
Retorno: Array de Objeto, onde a primeira posio do array a data e a segunda a hora.
Exemplo:
getUserTaskLink(numAtiv) Permite buscar o link para movimentao de uma determinada atividade, e utiliz-lo para enviar
um e-mail com template customizado, por exemplo.
numAtiv: nmero da atividade
Retorno: link para movimentao da solicitao.

Ateno
Este mtodo no retorna link para atividades que ainda no foram criadas, ou seja, no
pode ser utilizado em eventos como
afterTaskComplete(colleagueId,nextSequenceId,userList) para obter o link da atividade
com "nextSequenceId".
Exemplo:
1
2
3
4
5
6
7
8
9
10
11
12
13
function afterTaskCreate(colleagueId) {
var data = new Date();
//Calcula o prazo
var obj = hAPI.calculateDeadLineTime(data, 50000, 120,
"Default");
var dt = obj[0];
var segundos = obj[1];

//Recupera o numero da solicitao
var processo = getValue("WKNumProces");

// Altera o prazo do processo
hAPI.setDueDate(processo,0,colleagueId, dt, segundos);
}
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 6/14
Nos eventos existe a possibilidade de integrao com servios de dados. Tais servios podem ser WebServices, AppServer Progress e
Dataset.
O acesso a WebServices ou AppServer Progress deve ser previamente configurado no cadastro de Servios. Para mais detalhes
consulte em Integrao Com Aplicativos Externos, no captulo "Acessando WebServices a partir do Fluig".
Abaixo um exemplo de como executar o WebService de Colleague para criar um usurio no Fluig aps executar uma tarefa:
Os seguintes eventos so disparados pela API de Workflow:
Evento Descrio Parmetros
afterCancelProcess Ocorre aps o cancelamento da solicitao. Usurio corrente
(String);
Nmero do
processo
(Integer).
afterProcessCreate Ocorre logo aps a criao de um novo processo. Nmero do novo
1
2
3
4
5
6
7
8
9
10
11
12
13
function afterTaskCreate(colleagueId) {
var sequenceId = getValue("WKCurrentState");
if (sequenceId == 2) {
var destinatarios = new java.util.ArrayList();
destinatarios.add(colleagueId);

var parametros = new java.util.HashMap();
parametros.put("WDK_CompanyId", getValue("WKCompany"));
parametros.put("WDK_TaskLink",
hAPI.getUserTaskLink(sequenceId));

notifier.notify(getValue("WKUser"), "tplCustomizado",
parametros, destinatarios, "text/html");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function afterTaskComplete(colleagueId, nextSequenceId, userList) {

if (nextSequenceId == 2) {
//Busca o webservices de Colaborador
var colleagueServiceProvider = ServiceManager.getServiceInstance("Colleague");
var colleagueServiceLocator =
colleagueServiceProvider.instantiate("com.totvs.technology.ecm.foundation.ws.ECMColleagueServiceService"
var colleagueService = colleagueServiceLocator.getColleagueServicePort();

//Cria o ColleagueDto Verificar a lista de mtodos na visualizao do servio
var colleagueDto =
colleagueServiceProvider.instantiate("com.totvs.technology.ecm.foundation.ws.ColleagueDto");
colleagueDto.setCompanyId(1);
colleagueDto.setColleagueId("teste");
colleagueDto.setColleagueName("Usuario Teste");
colleagueDto.setActive(true);
colleagueDto.setVolumeId("Default");
colleagueDto.setLogin("teste");
colleagueDto.setMail("teste@empresa.com");
colleagueDto.setPasswd("teste");
colleagueDto.setAdminUser(false);
colleagueDto.setEmailHtml(true);
colleagueDto.setDialectId("pt_BR");

//Cria o colleagueDtoArray e adiciona
var colleagueDtoArray =
colleagueServiceProvider.instantiate("com.totvs.technology.ecm.foundation.ws.ColleagueDtoArray");
colleagueDtoArray.getItem().add(colleagueDto);

var result = colleagueService.createColleague("adm", "adm", 1, colleagueDtoArray);
log.info("Result: " + result);
}
}
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 7/14
Observao: Em caso de execuo deste evento um em sub-processo, no
ser possvel definir ou resgatar dados da ficha anexada ao sub-processo, pois
nessa situao a ficha ainda no est criada.
processo
(Integer).
afterProcessFinish Ocorre aps finalizada a solicitao. Nmero do
processo
(Integer).
afterReleaseVersion Ocorre aps a liberao de uma verso do processo. XML com a
definio do
processo
(String).
afterStateEntry Ocorre aps a entrada em uma nova atividade. Sequncia da
atividade
(Integer).
afterStateLeave Ocorre aps a sada de uma atividade. Sequncia da
atividade
(Integer).
afterTaskComplete Ocorre aps o usurio completar uma tarefa, porm as informaes de prxima tarefa e
usurios destino j foram salvas.
Usurio corrente
(String);
Sequncia da
prxima
atividade
(Integer);
Lista de
usurios destino
(List<String>).
afterTaskCreate Ocorre aps o usurio receber uma tarefa. Matrcula do
usurio (String).
afterTaskSave Ocorre aps salvar as informaes selecionadas pelo usurio. Usurio corrente
(String);
Sequncia da
prxima
atividade
(Integer);
Lista de
usurios destino
(List<String>).
beforeCancelProcess Ocorre antes do cancelamento da solicitao. Usurio corrente
(String);
Nmero do
processo
(Integer).
beforeStateEntry Ocorre antes da entrada em uma nova atividade. Sequncia da
atividade
(Integer).
beforeStateLeave Ocorre antes da sada de uma atividade. Sequncia da
atividade
(Integer).
beforeTaskComplete Ocorre antes que o usurio complete uma tarefa, porm as informaes de prxima
tarefa e usurios destino j foram salvas.
Usurio corrente
(String);
Seqncia da
prxima
atividade
(Integer);
Lista de
usurios destino
(List<String>).
beforeTaskCreate Ocorre antes que o usurio receba uma tarefa. Matrcula do
usurio (String).
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 8/14
beforeTaskSave Ocorre antes de salvar as informaes selecionadas pelo usurio. Usurio corrente
(String);
Sequncia da
prxima
atividade
(Integer);
Lista de
usurios destino
(List<String>).
calculateAgreement Ocorre aps o clculo do consenso (somente para atividades conjuntas) e permite
alterar os dados do consenso de uma atividade.
Exemplo:
currentState
(Integer):
atividade que
ter o consenso
alterado;
agreementData
(Map<String,
Object>): mapa
de dados com o
percentual
calculado, a
atividade destino
e os usurios de
destino. Para
obter os valores,
utilize o mtodo
"get" e para
atribuir um valor,
utilize o mtodo
"put".
onNotify Ocorre aps a movimentao da solicitao e antes de enviar as notificaes. Para mais
detalhes consulte
o captulo
Customizao de
E-mail.
setProcess Ocorre quando um processo "setado" na API.
Observao: A propriedade WKCompletTask no deve ser utilizada neste
evento, pois quando ele executado o produto ainda no tem a informao se
atividade foi ou no completada.
Nmero do
processo
(Integer).
subProcessCreated Ocorre quando um sub-processo criado. Nmero do sub-
processo
(Integer).
validateAvailableStates Ocorre aps montada a lista de tarefas disponveis para o usurio a partir da tarefa
atual.
Sequncia da
atividade atual
(Integer);
Lista das
sequncias das
atividades
(List<Integer>).
No necessrio criar todos os eventos do processo apenas aqueles que se estiver interessado.
Todos os eventos so executados de forma persistente.
Importante: No possvel capturar (hAPI.getCardValue) ou adicionar (hAPI.setCardValue) dados no formulrio na inicializao
do processo, sendo possvel somente a partir da segunda tarefa.
Para isso pode ser utilizado a seguinte lgica:
1
2
3
4
5
6
7
8
9
10
function calculateAgreement(currentState, agreementData) {
log.info("Consenso Atual: " +
agreementData.get("currentPercentage"));
log.info("Atividade Destino Atual: " +
agreementData.get("currentDestState"));
log.info("Usuario Destino Atual: " +
agreementData.get("currentDestUsers"));

//Altera o consenso
agreementData.put("currentPercentage", 100);
agreementData.put("currentDestState", 2);
agreementData.put("currentDestUsers",
"adm,teste,super");
}
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 9/14
Customizao do Processo
Com o uso de eventos, o Fluig permite que um processo seja customizado possibilitando a execuo de aes definidas pelo usurio,
tais como:
Validar o ato de completar uma atividade;
Tomar decises automaticamente;
Realizar integraes com outros sistemas;
Iniciar novas solicitaes automaticamente.
Existem algumas propriedades que contm informaes referentes solicitao que podem ser utilizadas na customizao do processo,
so elas:
Parmetro Descrio
WKDef Cdigo do processo
WKVersDef Verso do processo
WKNumProces Nmero da solicitao de processo
WKNumState Nmero da atividade
WKCompany Nmero da empresa
WKUser Cdigo do usurio corrente
WKUserComment Comentrio feito pelo usurio na atividade ou no cancelamento da solicitao
WKCompletTask Se a tarefa foi completada (true/false)
WKNextState Nmero da prxima atividade (destino)
WKCardId Cdigo do formulrio do processo
WKFormId Cdigo da definio de formulrio do processo
Alm dessas propriedades j alimentadas pelo produto, possvel criar propriedades customizadas que podem ser utilizadas nos
eventos. O produto disponibiliza a varivel globalVars, que um mapa de dados (Map<String, String>) e estar disponvel em todos os
eventos.
Para adicionar uma propriedade e seu valor, utilize o mtodo globalVars.put("name", "value"), onde "name" o nome da propriedade e
"value" o seu valor. Exemplo: globalVars.put("WDAprovador","adm");
Para recuperar os valores da varivel globalVars, utilize o mtodo globalVars.get("name"), onde "name" o nome da propriedade a ser
retornado o valor. Exemplo: globalVars.get("WDAprovador");

The license could not be verified: License Certificate has expired!
Tratamento de Excees
As excees podem ser tratadas nos seguintes eventos: beforeStateEntry, beforeTaskSave e beforeCancelProcess. O tratamento de
exceo no evento beforeStateEntry pode ser utilizado na inicializao de solicitaes, pois ele impede que a solicitao seja iniciada. O
tratamento de exceo no evento beforeTaskSave pode ser utilizado somente se a solicitao j estiver inicializada.
Abaixo apresentado os modelos para utilizao em cada um dos eventos:
1
2
3
4
5
function beforeStateEntry(sequenceId) {
if (sequenceId != "NUMERO_DA_ATIVIDADE_INICIAL") {
var campo = hAPI.getCardValue("campo1");
}
}
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 10/14
possvel consultar o campo observao de uma solicitao de processo, verificando se ele foi preenchido ou no. Para isto,
necessrio validar a propriedade WKUserComment no evento beforeTaskSave ou no evento beforeCancelProcess. Exemplo:
Mecanismo de Atribuio
Os mecanismos de atribuio so instrumentos utilizados durante um processo de workflow que permitem criar, segundo um critrio
estabelecido pelo prprio mecanismo, uma lista de possveis usurios para uma atividade. Esta lista pode ser utilizada em dois
momentos:
1. Na inicializao do processo, onde o sistema verifica se o usurio corrente faz parte desta lista e, portanto, pode inici-lo;
2. No momento do encaminhamento de uma tarefa, quando esta lista apresentada ao usurio corrente com opes de
encaminhamento da solicitao.
No primeiro caso, a lista gerada de acordo com o mecanismo de atribuio existente na primeira atividade do processo (que representa
a atividade inicial). Nas demais atividades adotado o segundo procedimento. Quando no houver um mecanismo de atribuio associado
a uma atividade (seja ela inicial ou no), todos os usurios so considerados vlidos.
O Fluig possui alguns mecanismos de atribuio padres, conforme abaixo:
Mecanismo
de
Atribuio
Descrio
Para um
Papel (Pool)
Permite atribuir tarefas a um papel e no apenas a um usurio. Assim, qualquer um dos usurios neste papel pode
assumir as tarefas para complet-las.
Para um
Grupo
(Pool)
Permite atribuir tarefas a um grupo e no apenas a um usurio. Assim, qualquer um dos usurios deste grupo pode
assumir as tarefas para complet-las.
Por
Associao
Permite compor lgicas complexas de atribuio por intermdio da associao de vrios mecanismos.
Por Campo
de
Formulrio
Permite atribuir tarefas ao usurio informado em um campo do formulrio do processo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function beforeStateEntry(sequenceId) {
var activity = getValue("WKNumState");
if (activity == 0 || activity == 1) {
//Outra condio.
throw "TRATAMENTO DE EXCEO";
}
}

function beforeTaskSave(colleagueId, nextSequenceId, userList) {
var activity = getValue("WKNumState");
if (activity != 0 && activity != 1) {
//Outra condio
throw "TRATAMENTO DE EXCEO";
}
}

function beforeCancelProcess(colleagueId, processId) {
//Condio.
throw "TRATAMENTO DE EXCEO";
}
1
2
3
4
5
6
7
8
9
10
11
function beforeTaskSave(colleagueId, nextSequenceId, userList) {
if (getValue("WKUserComment") == null || getValue("WKUserComment") == "") {
throw "A observao deve ser preenchida";
}
}

function beforeCancelProcess(colleagueId, processId) {
if (getValue("WKUserComment") == null || getValue("WKUserComment") == "") {
throw "A observao deve ser preenchida";
}
}
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 11/14
Por
Executor de
Atividade
Permite selecionar os usurios que executaram uma atividade anterior.
Por Grupo Permite filtrar apenas os usurios que faam parte de um determinado grupo.
Por Grupos
do Usurio
Permite filtrar apenas os usurios que pertenam a um dos grupos do usurio corrente, ou do usurio que iniciou o
processo (solicitante). Tambm permite filtrar apenas os usurios cujo grupo de trabalho seja o mesmo do usurio
(corrente ou solicitante).
Por Papel Permite filtrar apenas os usurios que possuam um determinado papel.
Por Usurio Permite atribuir tarefas a um usurio especfico.
Como criar um Mecanismo de Atribuio
A criao de um mecanismo de atribuio realizada pelo Fluig Studio, sendo necessrio j existir um projeto Fluig.
Utilize o passo-a-passo para conhecer o processo de criao de um mecanismo de atribuio de exemplo:
The license could not be verified: License Certificate has expired!
Parmetros Workflow para Customizao de Formulrios
Para processos que possuem uma definio de formulrio definida so passados alguns parmetros com informaes sobre o processo
para serem utilizados nos eventos da definio de formulrio, conforme abaixo:
Parmetro Descrio
WKDef Cdigo do processo
WKVersDef Verso do processo
WKNumProces Nmero da solicitao de processo
WKNumState Nmero da atividade movimentada
WKCurrentState Nmero da atividade atual
WKCompany Nmero da empresa
WKUser Cdigo do usurio corrente
WKUserPassword Senha do usurio corrente em MD5
WKCompletTask Se a tarefa foi completada (true/false)
WKNextState Nmero da prxima atividade (destino)
WKCardId Cdigo do formulrio do processo
WKFormId Cdigo da definio de formulrio do processo
Nos scripts dos eventos da definio de formulrio basta recuperar as informaes com o comando getValue, conforme exemplo:
Customizao de E-mail
possvel incluir customizaes de e-mail durante o andamento de um workflow. Existem duas modalidades de customizao nessa
categoria:
Envio e alterao de e-mail padro atravs do evento onNotify;
Envio de e-mail customizado em qualquer evento do workflow.
Envio de E-mail Padro
Para interferir no envio de um e-mail padro, deve ser utilizado o evento onNotify, que disparado no exato momento em que qualquer um
dos e-mails de processo enviado. Nesse evento, podem ser feitas alteraes, como por exemplo adicionar outros destinatrios ao e-mail
var vCodProcess = getValue("WKDef");
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 12/14
(alm daqueles que esto participando do processo), modificar os valores dos parmetros utilizados no template de e-mail, etc.
Abaixo se encontra um exemplo de como implementar esse evento:
O evento onNotify est disponvel na lista de eventos do processo. Portanto, ao selecionar esse evento na lista de eventos disponveis, a
assinatura da funo acima j ser preenchida automaticamente. Este evento disponibiliza os seguintes parmetros:
Parmetro Descrio
subject o assunto do e-mail. A alterao desta varivel ir implicar que todos os usurios recebam o e-mail com o novo
assunto configurado, inclusive aqueles que participam do processo. Exemplo de utilizao: subject.add("ASSUNTO");
receivers Lista de e-mails destinatrios. Tambm possvel adicionar outros e-mails, de usurios que no participam do processo.
Inclusive, podem ser adicionados e-mails de usurios que no esto cadastrados no Fluig, caso seja necessrio notificar
uma pessoa que no tenho acesso ao sistema.
template Permite validar qual tipo de e-mail est sendo enviado (por exemplo, template de nova tarefa, notificao de gestor, etc).
Com base nessa varivel podemos distinguir quais e-mails queremos customizar. recomendvel que sempre seja
verificado o cdigo do template, para evitar que ocorram alteraes em outros tipos de e-mail, que no necessitariam de
customizao.
params um mapa de dados que permite alterar/incluir parmetros para que sejam apresentados no e-mail. O nome dos
parmetros informados nesse mapa devem ser os mesmos que so utilizados dentro do arquivo de template.
No exemplo que foi apresentado acima est sendo validado se o template o TPL028 (que corresponde a Notificao do Gestor), em
caso positivo, um novo e-mail ser adicionado na lista de destinatrios. Ou seja, alm do gestor do processo, outra pessoa ser
notificada, recebendo uma cpia do e-mail que o gestor ir receber. Como est sendo validado o cdigo do template, os demais tipos de
e-mail no sero afetados.
Os templates podem ser consultados dentro do diretrio do volume, em: <VOLUME>\templates\tplmail. Se for necessrio adicionar algum
parmetro no e-mail padro, os templates podem ser editados diretamente nesse diretrio.
Envio de E-mail Customizado
Caso seja necessrio incluir um novo tipo de e-mail, alm daqueles que so disponibilizados pelo produto, o Fluig permite que o usurio
cadastre templates de e-mails customizados, atravs da opo Templates de Emails presente na aba Gerais do Painel de Controle.
Para incluir um novo Template, basta acionar a opo Adicionar no menu e preencher os dados solicitados. Nesta etapa tambm deve ser
feito upload do arquivo de template.
Para adicionar parmetros dentro de um arquivo de template (TXT ou HTML), deve-se utilizar a seguinte notao:
${NOME_DO_PARAMETRO}
Neste caso, ser utilizado o identificador "NOME_DO_PARAMETRO" durante a customizao para atribuir um valor a este parmetro. Os
templates disponveis no volume da empresa (<VOLUME>\templates\tplmail) podem ser consultados para mais exemplos de utilizao de
parmetros.
Aps cadastrar um novo template, possvel utiliz-lo para enviar e-mail a partir de qualquer um dos eventos do processo (exceto no
onNotify ver "Envio de E-mail Padro"). Para efetuar um envio de e-mail, em base de um template customizado, utilizado o objeto
notifier, chamando a funo "notify", conforme o cdigo abaixo:
1
2
3
4
5
function onNotify(subject, receivers, template, params) {
if (template.match("tpl028") != null) {
receivers.add("usuario@dominio.com");
}
}
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 13/14
Onde:
O primeiro parmetro que a funo notify recebe o cdigo/matrcula do usurio que ir enviar o e-mail (remetente).
O segundo parmetro o cdigo do template que foi cadastrado no Fluig.
O terceiro parmetro um mapa de dados (java.util.HashMap) que contm os parmetros que sero utilizados para preencher as
variveis do template.
Por padro, os parmetros WDK_VirtualDir (diretrio virtual) e WDK_AdviceUser (Nome do colaborador remetente) so adicionados
ao mapa de parmetros automaticamente e podem ser utilizados no template, sem que os valores sejam adicionados pela
customizao.
O quarto parmetro representa a lista de usurios que iro receber o e-mail (java.util.ArrayList). Esta lista de usurios consiste em
uma lista de cdigos de usurios cadastrados no Fluig.
O quinto e ltimo parmetro especifica qual ser o formato do e-mail enviado. Os valores aceitos so "text/html" e "text/plain".

Outra forma de executar o mtodo de envio de email informando o nmero da ficha, conforme exemplo:
Ateno: Obrigatoriamente o valor informado deve ser um formulrio. Outros tipos de documentos no sero tratados e ocorrer
erro na execuo do evento.

Ao executar este mtodo, automaticamente os parmetros abaixo sero adicionados na lista de parmetros e podem ser utilizados no
template:
Parmetro Descrio
WDK_CardContent Contedo HTML do formulrio (simula a visualizao)
WDK_DocumentAuthor Nome do Autor
WDK_DocumentComments Comentrio adicional
WDK_DocumentDescription Descrio do formulrio
WDK_DocumentIconImage Imagem do cone do formulrio
WDK_DocumentNumber Nmero do formulrio
WDK_DocumentUpdatedDate Data de atualizao do formulrio
WDK_DocumentVersion Verso do formulrio
WDK_DocumentViewLink Link para acesso ao formulrio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
try{
//Monta mapa com parmetros do template
var parametros = new java.util.HashMap();
parametros.put("NOME_USUARIO", "JOAO");
parametros.put("CODIGO_USUARIO", "01");

//Este parmetro obrigatrio e representa o assunto do e-mail
parametros.put("subject", "ASSUNTO");

//Monta lista de destinatrios
var destinatarios = new java.util.ArrayList();
destinatarios.add("CODIGO-DESTINATARIO");

//Envia e-mail
notifier.notify("MATRICULA-REMETENTE", "CODIGO-TEMPLATE", parametros, destinatarios, "text/html");

} catch(e){
log.info(e);
}
notifier.notify("MATRICULA-REMETENTE", NUMERO DO FORMULARIO, "CODIGO-TEMPLATE", parametros, destinatarios,
"text/html");
15/6/2014 Customizao de Workflow - Fluig - TDN
http://tdn.totvs.com/pages/viewpage.action?pageId=73082818#CustomizaodeWorkflow-CustomizaodeWorkflow 14/14
Third Party Trademarks
Progress and OpenEdge are trademarks or registered trademarks of Progress Software Corporation or one of its subsidiaries or affiliates in
the U.S. and other countries.
JavaScript is a trademark of Oracle Corporation.
Java is registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
Any other third party trademarks are the property of their respective owners.

Nenhum