Customizao de Workflow Copyright 2009 TOTVS S.A. Todos os direitos reservados. Nenhuma parte deste documento pode ser copiada, reproduzida, traduzida ou transmitida por qualquer meio eletrnico ou mecnico, na sua totalidade ou em parte, sem a prvia autorizao escrita da TOTVS S.A., que reserva-se o direito de efetuar alteraes sem aviso prvio. A TOTVS S.A no assume nenhuma responsabilidade pelas conseqncias de quaisquer erros ou inexatides que possam aparecer neste documento. TOTVS S.A. Av. Santos Dumont, 831, Joinville, SC, Brasil, CEP 89.222-900
3
Customizao de Workflow ndice Customizao Workflow .................................................................... 4 Propriedades Avanadas ............................................................................... 4 Eventos do Processo ..................................................................................... 6 Customizao do Processo ......................................................................... 13 Tratamento de Excees ............................................................................. 16 Mecanismo de Atribuio............................................................................. 17 Como Criar Um Mecanismo de Atribuio .................................................. 18 Parmetros Workflow para Customizao de Fichrios .............................. 23 Customizao de E-mail .............................................................................. 23 Third Party Trademarks ................................................................... 27
4
Customizao de Workflow
Customizao 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). Para cadastrar uma propriedade avanada deve-se acessar a opo Configurao de Processos no menu Workflow. Selecione o processo desejado de acesse a opo Editar. A seguinte tela ser apresentada:
Clique sobre a aba Avanado e ser apresentado o cadastro de Propriedades Avanadas do processo. A seguinte tela ser apresentada:
5
Customizao de Workflow
Use os botes Adicionar, Editar e Excluir para a manuteno dos eventos desejados. Uma propriedade avanada representada por nome e valor. Onde o nome deve ser nico. Abaixo o formulrio para a criao de uma propriedade avanada.
6
Customizao de Workflow
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 um momentos pr-determinados, como por exemplo a criao de um processo ou a entrada em uma nova atividade. Para criar a lista de eventos do processo deve-se acessar a opo Configurao de Processos no menu Workflow. Clique sobre a aba Avanado e posteriormente clique sobre a aba Eventos. A seguinte tela ser apresentada.
Importante 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 da ficha do processo, onde: nomeCampo: o nome do campo da ficha. setCardValue(nomeCampo,valor) Permite definir o valor de um campo da ficha do processo, onde: nomeCampo: o nome do campo da ficha; valor: o valor a ser definido para o campo da ficha. setAutomaticDecision(numAtiv, listaColab, obs) Permite definir o fluxo de sada de uma atividade de forma automtica, onde:
7
Customizao de Workflow
numAtiv: o nmero da atividade destino; listaColab: a lista dos colaboradores que recebero a tarefa do tipo String; obs: a 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: o nmero da empresa; numProcesso: o nmero da solicitao; numAtiv: o nmero da atividade.
setDueDate(numProcesso, numThread, userId, dataConclusao, tempoSeg) Permite alterar o prazo de concluso para uma determinada atividade do processo, onde: numProcesso: o nmero da solicitao; numThread: o nmero da thread (normalmente 0, quando no se utiliza atividades paralelas); userId: o usurio responsvel pela tarefa; dataConclusao: a nova data de concluso. tempoSeg: o 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:
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); }
transferTask(transferUsers, obs, int numThread) Transfere uma tarefa de um usurio para outro(s) usurio(s). transferUsers: uma lista de colaboradores do tipo String. obs: a observao. 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, onde: transferUsers: uma lista colaboradores
8
Customizao de Workflow
do tipo String; obs: a observao. startProcess(processId, ativDest, listaColab, obs, completarTarefa, valoresFicha, modoGestor ) Inicia uma solicitao workflow, onde: processId: Cdigo do processo ativDest: Atividade de destino listaColab: uma lista de colaboradores de destino do tipo String; obs: Texto da observao completarTarefa: Indica se deve completar a tarefa (true) ou apenas salvar (false) valoresFicha: Um Mapa com os valores da ficha do processo modoGestor: Acesso como gestor do processo (true/false). Retorna um mapa com informaes da solicitao criada. Entre eles 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; 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. 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 (Date) segundos: Quantidade de segundos aps a meia noite prazo: Prazo que ser aplicado em horas (Varivel int). periodId - Cdigo de Expediente
Retorno: Array de Objeto, onde a primeira posio do array a data e a segunda a hora.
Exemplo: function afterTaskCreate(colleagueId) { var data = new Date();
//Calcula o prazo var obj = hAPI.calculateDeadLineHours(data, 50000, 2, "Default");
9
Customizao de Workflow
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); }
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 (Date) segundos: Quantidade de segundos aps a meia noite prazo: Prazo que ser aplicado em minutos (Varivel int). periodId - Cdigo de Expediente
Retorno: Array de Objeto, onde a primeira posio do array a data e a segunda a hora.
Exemplo: 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); }
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 o Guia de Integrao ECM, no captulo Acessando WebServices a partir do TOTVS | ECM. Abaixo um exemplo de como executar o WebService de Colleague para criar um usurio aps executar uma tarefa: function afterTaskComplete(colleagueId,nextSequenceId,userList) { if (nextSequenceId == 2) { // Busca o webservices de Colaborador var colleagueServiceProvider = ServiceManager.getServiceInstance("Colleague");
10
Customizao de Workflow
var colleagueServiceLocator = colleagueServiceProvider.instantiate("com.datasul.technology.webdesk.foundation.ws. ColleagueServiceServiceLocator"); var colleagueService = colleagueServiceLocator.getColleagueServicePort();
// Cria o ColleagueDto Verificar a lista de mtodos na visualizao do servio var colleagueDto = colleagueServiceProvider.instantiate("com.datasul.technology.webdesk.foundation.ws. ColleagueDto"); colleagueDto.setCompanyId(1); colleagueDto.setColleagueId("teste1"); colleagueDto.setColleagueName("Usuario Teste 1"); colleagueDto.setActive(true); colleagueDto.setVolumeId("Default"); colleagueDto.setLogin("teste1"); colleagueDto.setMail("teste1@teste.com"); colleagueDto.setPasswd("b09c600fddc573f117449b3723f23d64"); //String adm em MD5 colleagueDto.setAdminUser(false); colleagueDto.setEmailHtml(true); colleagueDto.setDefaultLanguage("pt"); colleagueDto.setDialectId("pt");
// adiciona ao array var listColleague = new Array( ); listColleague[0] = colleagueDto; // cria o colleagueDtoArray e adiciona var colleagueDtoArray = colleagueServiceProvider.instantiate("com.datasul.technology.webdesk.foundation.ws. ColleagueDtoArray"); colleagueDtoArray.setItem(listColleague);
var result = colleagueService.createColleague("adm", "admin", 1, colleagueDtoArray);
log.info("Result: " + result); } }
Os seguintes eventos so disparados pela API de Workflow:
afterCancelProcess Ocorre aps o cancelamento da solicitao. Parmetros: Usurio corrente (CHARACTER) e Nmero do processo (INTEGER).
Observao: Ao retornar a varivel WKNumState quando o processo estar em atividades paralelas. Ser retornado todas as atividades ativas separadas pelo carcter virgula. afterProcessCreate Ocorre logo aps a criao de um novo processo. Parmetros: Nmero do novo processo (INTEGER). 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.
11
Customizao de Workflow
afterProcessFinish Ocorre aps finalizada a solicitao. Parmetros: Nmero do processo (INTEGER). afterReleaseVersion Ocorre aps a liberao de uma verso do processo workflow. Parmetros: XML com a definio do processo (CHARACTER). afterStateEntry Ocorre aps a entrada em uma nova atividade. Parmetros: Seqncia da atividade (INTEGER). afterStateLeave Ocorre aps a sada de uma atividade. Parmetros: Seqncia da atividade (INTEGER). afterTaskComplete Ocorre aps o usurio completar uma tarefa, porm as informaes de prxima tarefa e colaboradores destino j foram salvas. Parmetros: Usurio corrente (CHARACTER), Seqncia da prxima atividade (INTEGER) e lista de usurios destino (CHARACTER). afterTaskCreate Ocorre aps o usurio receber uma tarefa. Parmetros: Matrcula do usurio (CHARACTER). afterTaskSave Ocorre aps salvar as informaes selecionadas pelo usurio. Parmetros: Usurio corrente (CHARACTER), Seqncia da prxima atividade (INTEGER) e lista de usurios destino (CHARACTER). beforeCancelProcess Ocorre antes do cancelamento da solicitao. Parmetros: Usurio corrente (CHARACTER) e Nmero do processo (INTEGER). beforeStateEntry Ocorre antes da entrada em uma nova atividade. Parmetros: Seqncia da atividade (INTEGER). beforeStateLeave Ocorre antes da sada de uma atividade. Parmetros: Seqncia da atividade (INTEGER). beforeTaskComplete Ocorre antes que o usurio complete uma tarefa, porm as informaes de prxima tarefa e colaboradores destino j foram salvas. Parmetros: Usurio corrente (CHARACTER), Seqncia da prxima atividade (INTEGER) e lista de usurios destino (CHARACTER). beforeTaskCreate Ocorre antes que o usurio receba uma tarefa. Parmetros: Matrcula do usurio (CHARACTER). beforeTaskSave Ocorre antes de salvar as informaes selecionadas pelo usurio. Parmetros: Usurio corrente (CHARACTER), Seqncia da prxima atividade (INTEGER) e lista de usurios destino (CHARACTER). calculateAgreement Ocorre aps o clculo do consenso (somente para atividades conjuntas) e permite alterar os dados do consenso de uma atividade. Parmetros: currentState (INTEGER): atividade que ter o consenso alterado. AgreementData (ARRAYLIST): mapa de dados com o percentual calculado, a atividade destino e os usurios de destino. Para obter os valores, utilize o mtodo get. Para atribuir um valor, utilize o mtodo put. Exemplo:
function calculateAgreement (currentState, agreementData) { log.debug("Consenso Atual: " +
// Altera o consenso agreementData.put("currentPercentage", 100); agreementData.put("currentDestState", 2); agreementData.put("currentDestUsers", "adm,teste,super"); } onNotify Ocorre aps a movimentao da solicitao e antes de enviar as notificaes. Para mais detalhes consulte o captulo Customizao de E- mail abaixo. Observao: Caso no Processo Workflow esteja cadastrado o evento "onNotify", o comportamento do produto tambm ser de ignorar a validao de e-mails iguais para o remetente e destinatrio. setProcess Ocorre quando um processo setado na API. Parmetros: Nmero do processo (INTEGER). 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. subProcessCreated Ocorre quando um sub-processo criado. Parmetros: Nmero do sub-processo (INTEGER). validateAvailableStates Ocorre aps montada a lista de tarefas disponveis para o usurio a partir da tarefa atual. Parmetros: Seqncia da atividade atual (INTEGER) e input- output lista das seqncias das atividades (ARRAYLIST).
Recomendaes: 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 fichrio na inicializao do processo. Somente a partir da segunda tarefa, para isso pode ser utilizado a seguinte lgica: function beforeStateEntry(sequenceId){ if(sequenceId != NUMERO_DA_ATIVIDADE_INICIAL ){ var campo = hAPI.getCardValue(campo1); } }
13
Customizao de Workflow
Customizao do Processo Com o uso de eventos, o ECM 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
Existem algumas propriedades que contm informaes referentes solicitao que podem ser utilizadas na customizao do processo, so elas: WKDef Cdigo do processo. WKVersDef Verso do processo. WKNumProces Nmero do processo. WKNumState Nmero da atividade. WKCompany Nmero da Empresa. WKUser Usurio Corrente. WKUserComment Comentrio feito pelo usurio na atividade ou no cancelamento da solicitao. WKUserPassword Senha do Usurio corrente em MD5 WKCompletTask Se a tarefa foi completada (true/false) WKNextState Nmero da prxima atividade (destino). WKCardId Cdigo da ficha do processo. WKFormId Cdigo do fichrio do processo. WKManagerMode Se quem est visualizando o processo gestor do processo WKMobile Se a atividade est sendo inicializada via mobile (true/false).
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 (HashMap<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. Ex: 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. Ex: globalVars.get("WDAprovador");
Exemplo 1: Para validar se o usurio est completando uma atividade corretamente, basta utilizar o evento beforeTaskComplete e retornar alguma mensagem caso queira disparar um erro. Por exemplo, segue parte de um cdigo de customizao criado pelo ECM: function beforeTaskComplete(colleagueId,nextSequenceId,userList){ var ativAtual = getValue("WKNumState"); var users = new java.util.ArrayList(); var usersTmp = new java.util.ArrayList();
14
Customizao de Workflow
var cUsers; var process = parseInt(globalVars.get("process")); var User1 = hAPI.getCardValue("resp1_H"); var eficacia1 = hAPI.getCardValue("eficaz1"); var controle1 = hAPI.getCardValue("controle1"); var eficaz = true; var codgrupo; log.info("ATIVIDADE---> " + ativAtual + " - " + nextSequenceId);
Exemplo 2: Para fazer com que uma deciso seja tomada automaticamente, os seguintes procedimentos devem ser executados: 1. Configurar em Propriedades Avanadas a propriedade AutomaticTasks conforme descrito anteriormente com a lista de todas as atividades que tero deciso delegada via customizao (Ex.: AutomaticTasks=3,6,10). 2. Implementar o evento beforeStateEntry e executar e chamar a o mtodo setAutomaticDecision da hAPI, passando como parmetros o prximo estado, o prximo usurio (ou lista de usurios) e a observao. function beforeStateEntry(sequenceId) { var userList = new java.util.ArrayList(); userList.add(Administrator); hAPI.setAutomaticDecision(new java.lang.Integer(8), userList, Observao); }
ATENO: As atividades com deciso automtica tambm podem ser criadas via editor de processos. Para mais informaes consulte o Manual de Referncia do ECM.
15
Customizao de Workflow
Exemplo 3: Para iniciar uma nova solicitao de um outro processo ao finalizar uma solicitao devem ser executados os seguintes procedimentos: 1. Criar um servio no ECM em que a URL seja o webservice de WorkflowEngineService . (Ex.: http://localhost:8080/webdesk/WorkflowEngineService?wsdl ) 2. Implementar o evento afterProcessFinish utilizando o exemplo abaixo. Sendo process2 o novo processo a ser inicializado function afterProcessFinish(processId){ var func = { run: function(){ a(); } }; var r = new java.lang.Runnable(func); var t = new java.lang.Thread(r); t.start(); log.info("Iniciei a thread"); return; }
function a(){ try { var atividade = getValue("WKNumState"); var user = getValue("WKUser"); var processo = getValue("WKNumProces"); log.info("########## Atividade: " + atividade); log.info("########## inicio webservice workflow");
var workflow = ServiceManager.getService("WorkflowEngineService"); var serviceHelper = workflow.getBean(); var serviceLocator = serviceHelper.instantiate("com.datasul.technology.webdesk.workflow.ws.WorkflowEngineServiceS erviceLocator"); var service = serviceLocator.getWorkflowEngineServicePort(); log.info("########## carregou servio workflow"); log.info("########## Carrega Colaboradores do segundo processo"); var stringArray = service.getAvailableUsersStart("adm", "adm", 1, "process2", 0, 0);
var field1 = serviceHelper.instantiate("com.datasul.technology.webdesk.workflow.ws.KeyValueDto"); field1.setKey("nome"); field1.setValue("valorNome");
var field2 = serviceHelper.instantiate("com.datasul.technology.webdesk.workflow.ws.KeyValueDto"); field2.setKey("cid"); field2.setValue("valorCidade");
var resultArr = serviceHelper.instantiate("com.datasul.technology.webdesk.workflow.ws.KeyValueDtoArray"); resultArr.setItem(new Array(field1, field2));
log.info("########## Inicia StartProcess");
var userArray = serviceHelper.instantiate("net.java.dev.jaxb.array.StringArray");
Tratamento de Excees As excees podem ser tratadas nos seguintes eventos: beforeStateEntry, beforeTaskSave e beforeCancelProcess. O tratamento da exceo no evento beforeStateEntry pode ser utilizado somente na inicializao de solicitaes, pois ele impede que a solicitao seja iniciada. O tratamento da exceo no evento beforeTaskSave pode ser utilizado somente se a solicitao j estiver inicializada. Abaixo segue os modelos para utilizao em cada um dos eventos:
function beforeStateEntry(sequenceId){ var activity = getValue("WKNumState"); if (activity == 0 || activity == 1){ //outra condio. throw "TRATAMENTO DA 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 DA EXCEO" }
possvel consistir o campo observao de uma solicitao workflow, verificando se ele foi preenchido ou no. Para isto, necessrio validar a propriedade WKUserComment no evento beforeTaskSave ou no evento beforeCancelProcess.
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"; }
17
Customizao de Workflow
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 colaboradores 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 de start). 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. Na inicializao do ECM so criados alguns mecanismos automaticamente, conforme abaixo:
Associado Permite compor lgicas complexas de atribuio por intermdio da associao de vrios mecanismos. Campo Formulrio Permite atribuir tarefas ao colaborador informado em um campo do formulrio do processo. Executor Atividade Permite selecionar os colaboradores que executaram uma atividade anterior. Grupo Permite filtrar apenas os colaboradores que faam parte de um determinado grupo. Grupos Colaborador Permite filtrar apenas os colaboradores que pertenam a um dos grupos do colaborador corrente, ou do colaborador que iniciou o processo (solicitante). Tambm permite filtrar apenas os colaboradores cujo grupo de trabalho seja o mesmo do colaborador (corrente ou solicitante). Papel Permite filtrar apenas os colaboradores que possuam um determinado papel no Workflow. Pool Grupo Permite atribuir tarefas a um grupo de colaboradores e no apenas a um colaborador. Assim, qualquer um dos colaboradores deste grupo pode assumir as tarefas para complet-las. Pool Papel Permite atribuir tarefas a um papel e no apenas a um colaborador. Assim, qualquer um dos colaboradores neste papel pode assumir as tarefas para complet-las. Usurio Permite atribuir tarefas a um colaborador especfico.
18
Customizao de Workflow
Como Criar Um Mecanismo de Atribuio O mecanismo de atribuio geralmente composto de duas partes, a tela de configurao e o script de resoluo do mecanismo de atribuio.
Para criar um mecanismo de atribuio basta acessar o Painel de Controle, na opo Workflow e clicar sobre Mecanismos de Atribuio. A seguinte tela ser apresentada:
A tela apresenta todos os mecanismos de atribuio padro do ECM e tambm os mecanismos customizados. Para criar um novo mecanismo de atribuio clique sobre o boto Adicionar, ento a seguinte tela ser apresentada:
19
Customizao de Workflow
O mecanismo de atribuio dever possuir obrigatoriamente seu cdigo, o nome e a descrio da configurao. A tela de configurao opcional, mas caso for utiliz-la, deve-se obrigatoriamente importar o componente AssignmentSelectedEvent.swc que fica dentro do diretrio de instalao do ECM (Ex: <INSTALL_ECM>\server\default\deploy\Webdesk3EE.ear) dentro do pacote EAR existe um pacote ecm-web.war, abra o arquivo e copie o SWC para o seu projeto e importe como biblioteca. Aps, sua tela deve estender o mdulo WebdeskModule, veja um exemplo de tela abaixo:
[Bindable] private var arr:ArrayCollection = new ArrayCollection([ {value:"asd1",label:"Informtica"}, {value:"asd2",label:"RH"}, {value:"asd3",label:"Produto"}]);
private function init():void { if (super.xmlFromDatabase != null) { var xml:XML = new XML(super.xmlFromDatabase); var area:String = String(xml.area); this.tiNome.text = String(xml.nome);
for each (var current:Object in this.arr) { if (current.value == area) { this.cbArea.selectedItem = current; break; } } } }
private function saveMecan():void { var event:AssignmentSelectedEvent = new AssignmentSelectedEvent(); event.xmlString = "<Custom>" + " <nome>"+this.tiNome.text+"</nome>" + " <area>"+this.cbArea.selectedItem.value+"</area>" + "</Custom>";
this.dispatchEvent(event); this.closeWindow(); }
private function closeWindow():void { this.dispatchEvent(new CloseWindowEvent()); } ]]> </mx:Script>
A tela de configurao dever montar o XML que consiste da configurao do mecanismo de atribuio. Na resoluo de uma atividade do processo o XML de configurao ser enviado ao script de descrio da configurao o ltimo campo da tela. Exemplo baseado na tela acima:
OBS: possvel acessar Datasets e WebServices apartir da funo. Alm do XML o script tambm recebe como parmetros o cdigo do processo e o usurio corrente. Por fim, o script de configurao retorna a lista de usurios e o fluxo de sada da atividade selecionado. Para persistir o XML de configurao criado pela tela basta lanar o evento AssignmentSelectedEvent e atribuir o XML de configurao na propriedade xmlString. Dica: caso a compilao normal pela GUI de desenvolvimento no esteja efetuando as importaes corretamente, segue sugesto de compilao do projeto: mxmlc -debug=false -optimize=true -warnings=false -load-config flex- config-mxmlc.xml -source-path=. <ARQUIVO>.mxml -output <ARQUIVO>.swf
function resolve(process,colleague,configXML){
var newXML = new XML(configXML); var userList = new java.util.ArrayList();
if (newXML.area.toString()=="asd1") { userList.add('adm'); } else if (newXML.area.toString()=="asd2") { userList.add('1'); } else { userList.add('10'); }
return userList; }
22
Customizao de Workflow
Arquivo FLEX-CONFIG-MXMLC.XML:
Por fim, o arquivo SWF do mecanismo de atribuio deve ser publicado no ECM como um documento. Para selecionar o documento no momento da publicao basta clicar sobre o cone ao lado do campo Tela de Configurao.
<fonts> <local-fonts-snapshot>C:/Arquivos de programas/Adobe/Flex Builder 3 Plug-in/sdks/2.0.1/frameworks/localFonts.ser</local-fonts-snapshot> </fonts>
<!-- list of SWC files or directories that contain SWC files --> <library-path> <path-element>C:/Arquivos de programas/Adobe/Flex Builder 3 Plug- in/sdks/2.0.1/frameworks/libs</path-element> <path-element>C:/Arquivos de programas/Adobe/Flex Builder 3 Plug- in/sdks/2.0.1/frameworks/locale/en_US</path-element> <path-element>AssignmentSelectedEvent.swc</path-element> </library-path>
Para processos que possuem um fichrio padro definido so passados alguns parmetros com informaes sobre o processo para serem utilizados nas customizaes do fichrio, conforme abaixo: WKDef Cdigo do processo. WKVersDef Verso do processo. WKNumProces Nmero do processo. WKNumState Nmero da atividade. WKCompany Nmero da Empresa. WKUser Usurio Corrente.
Estas informaes so passadas como parmetros da URL do programa que permite o encaminhamento das atividades, portanto no programa de customizao do fichrio basta recuperar as informaes com o comando getValue, conforme exemplo:
var vCodProcess = getValue("WKDef");
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 (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.
function onNotify(subject, receivers, template, params) { if (template.match("tpl028")!=null) { receivers.add("usuario@dominio.com"); } }
24
Customizao de Workflow
O evento onNotify est disponvel na lista de eventos do Workflow. 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:
1. 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"); 2. Receivers: Lista de e-mails destinatrios. Tambm possvel adicionar outros e-mails, de usurios que no participam do workflow. Inclusive, podem ser adicionados e-mails de usurios que no esto cadastrados no ECM, caso seja necessrio notificar uma pessoa que no tenho acesso ao sistema. 3. 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. 4. 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 ECM permite que o usurio cadastre templates customizados, atravs do cone Templates na categoria GED ou Painel de Controle, na tela principal do sistema. Para incluir um novo Template, basta clicar no boto adicionar e preencher os dados solicitados. Nesta etapa tambm deve ser feito upload do arquivo de template.
25
Customizao de Workflow
Para adicionar parmetros dentro de um arquivo de template (TXT ou HTML), deve-se utilizar a seguinte notao:
${NOME_USUARIO}
Neste caso, ser utilizado o identificador NOME_USUARIO 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 Workflow (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:
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("MATRICULA-DESTINATARIO");
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 atravs do cone de Templates. 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 na template, sem que os valores sejam adicionados pela customizao.
26
Customizao de Workflow
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/matrculas de colaboradores cadastrados no ECM. 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: notifier.notify("MATRICULA-REMETENTE", NMERO DA FICHA, "CODIGO- TEMPLATE", parametros, destinatarios, "text/html"); ATENO: Obrigatoriamente o valor informado deve ser uma ficha. Outros tipos de documentos no sero tratados e ocorrer erro na execuo do evento. Ao executar este mtodo, automaticamente os parmetros abaixo sero adicionados a lista de parmetros e podem ser utilizados na template:
WDK_CardContent Contedo HTML da ficha (simula a visualizao) WDK_DocumentAuthor Nome do Autor WDK_DocumentComments Comentrio adicional WDK_DocumentDescription Descrio da ficha WDK_DocumentIconImage Imagem do cone da ficha WDK_DocumentNumber Nmero da ficha WDK_DocumentUpdatedDate Data de atualizao da ficha WDK_DocumentVersion Verso da ficha WDK_DocumentViewLink Link para acesso a ficha
27
Customizao de Workflow
Third Party Trademarks
Adobe, Flash, Flex, Flex Builder, PostScript and Reader are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.
Apache is a trademark of The Apache Software Foundation.
Apple is a trademark of Apple Inc., registered in the U.S. and other countries
Firefox and Mozilla are registered trademarks of the Mozilla Foundation.
Google, Android and Google Chrome are trademarks of the Google Inc.
IOS is a trademark or registered trademark of Cisco in the U.S. and other countries and is used under license
JavaScript is a trademark of Oracle Corporation.
Liferay, Liferay Portal, and the Liferay logo are trademarks or registered trademarks of Liferay, Inc., in the United States and other countries.
Linux is the registered trademark of Linus Torvalds in the U.S. and other countries.
Microsoft, Active Directory, Excel, Internet Explorer, Outlook, PowerPoint, SQL Server, Windows and Windows Vista are either registered trademarks or trademarks of Microsoft Corporation in the United States and/or other countries.
MySQL is a trademark of Oracle Corporation and/or its affiliates.
openDBcopy is an open-source project by Anthony Smith, published under the terms of the GNU General Public License
OpenLDAP is a registered trademark of the OpenLDAP Foundation
Oracle, Java and OpenOffice.org are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
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.
Red Hat and JBoss are registered trademarks of Red Hat, Inc. in the United States and other countries.
This product includes software developed by the Visigoth Software Society (http://www.visigoths.org/).
Any other third party trademarks are the property of their respective owners.