...
Bloco de código |
---|
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.WorkflowEngineServiceServiceLocator"); var service = serviceLocator.getWorkflowEngineServicePort(); log.info("########## carregou serviço 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"); userArray.setItem(new Array(user)); log.info("########## Usuario: " + userArray.getItem(0)); try { var ret = service.startProcessClassic("adm", "adm", 1, "process2", 2, userArray , "webservice chamada", "adm", false, null,resultArr, null, true); } catch(e) { log.info("########## Erro startProcess: " + e); } } catch(x) { log.info("########## Erro Process: " + x); } } |
As exceções podem ser tratadas nos seguintes eventos: beforeStateEntry, beforeTaskSave e beforeCancelProcess. O tratamento da exceção no evento beforeStateEntry pode ser utilizado somente na inicialização de solicitações, pois ele impede que a solicitação seja iniciada. O tratamento da exceção no evento beforeTaskSave pode ser utilizado somente se a solicitação já estiver inicializada. Abaixo segue os modelos para utilização em cada um dos eventos:
...
Associado | Permite compor lógicas complexas de atribuição por intermédio da associação de vários mecanismos. |
Campo Formulário | Permite atribuir tarefas ao colaborador informado em um campo do formulário do processo. |
Executor Atividade | Permite selecionar os colaboradores que executaram uma atividade anterior. |
Grupo | Permite filtrar apenas os colaboradores que façam parte de um determinado grupo. |
Grupos Colaborador | Permite filtrar apenas os colaboradores que pertençam a um dos grupos do colaborador corrente, ou do colaborador que iniciou o processo (solicitante). Também 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 não 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 não apenas a um colaborador. Assim, qualquer um dos colaboradores neste papel pode assumir as tarefas para completá-las. |
Usuário | Permite atribuir tarefas a um colaborador específico. |
O mecanismo de atribuição geralmente é composto de duas partes, a tela de configuração e o script de resolução do mecanismo de atribuição.
...
Deck of Cards | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||
|
OBS: É possível acessar Datasets e WebServices apartir da função.
Além do XML o script também recebe como parâmetros o código do processo e o usuário corrente. Por fim, o script de configuração retorna a lista de usuários e o fluxo de saída da atividade é selecionado.
Para persistir o XML de configuração criado pela tela basta lançar o evento AssignmentSelectedEvent e atribuir o XML de configuração na propriedade “xmlString”.
Dica: caso a compilação normal pela GUI de desenvolvimento não esteja efetuando as importações corretamente, segue sugestão de compilação do projeto:
mxmlc -debug=false -optimize=true -warnings=false -load-config flex-config-mxmlc.xml -source-path=. <ARQUIVO>.mxml -output <ARQUIVO>.swf
Arquivo FLEX-CONFIG-MXMLC.XML:
Bloco de código |
---|
<?xml version="1.0" encoding="utf-8"?>
<flex-config xmlns="http://www.adobe.com/2006/flex-config">
<metadata>
<title>TOTVS | ECM</title>
<language>EN</language>
</metadata>
<compiler>
<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>
<debug>true</debug>
</compiler>
<use-network>true</use-network>
</flex-config> |
Por fim, o arquivo SWF do mecanismo de atribuição deve ser publicado no ECM como um documento. Para selecionar o documento no momento da publicação basta clicar sobre o ícone ao lado do campo “Tela de Configuração”.
Para processos que possuem um fichário padrão definido são passados alguns parâmetros com informações sobre o processo para serem utilizados nas customizações do fichário, conforme abaixo:
WKDef | Código do processo. |
WKVersDef | Versão do processo. |
Número do processo. | Número do processo. |
WKNumState | Número da atividade. |
WKCompany | Número da Empresa. |
WKUser | Usuário Corrente. |
Estas informações são passadas como parâmetros da URL do programa que permite o encaminhamento das atividades, portanto no programa de customização do fichário basta recuperar as informações com o comando getValue, conforme exemplo:
var vCodProcess = getValue("WKDef");
É possível incluir customizações de e-mail durante o andamento de um Workflow. Existem duas modalidades de customização nessa categoria:
Envio e alteração de e-mail padrão através do evento onNotify.
Envio de e-mail customizado em qualquer evento do Workflow.
Envio de E-mail Padrão
Para interferir no envio de um e-mail padrão, 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 alterações, como por exemplo: adicionar outros destinatários ao e-mail (além daqueles que estão participando do processo), 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 |
---|
function onNotify(subject, receivers, template, params) {
if (template.match("tpl028")!=null) {
receivers.add("[email protected]");
}
} |
O evento onNotify está disponível na lista de eventos do Workflow. Portanto, 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:
1. 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, inclusive aqueles que participam do processo. Exemplo de utilização: subject.add("ASSUNTO");
2. Receivers: Lista de e-mails destinatários. Também é possível adicionar outros e-mails, de usuários que não participam do workflow. Inclusive, podem ser adicionados e-mails de usuários que não estão cadastrados no ECM, caso seja necessário notificar uma pessoa que não tenho acesso ao sistema.
3. Template: Permite validar qual tipo de e-mail está sendo enviado (por exemplo, template de nova tarefa, notificação de gestor, 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.
4. 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 está sendo validado se o template é o TPL028 (que corresponde a Notificação do Gestor), em caso positivo, um novo e-mail será adicionado na lista de destinatários. Ou seja, além do gestor do processo, outra pessoa será notificada, recebendo uma cópia do e-mail que o gestor irá receber. 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.
Envio de E-mail Customizado
Caso seja necessário incluir um novo tipo de e-mail, além daqueles que são disponibilizados pelo produto, o ECM permite que o usuário cadastre templates customizados, através do ícone “Templates” na categoria GED ou Painel de Controle, na tela principal do sistema.
Para incluir um novo Template, basta clicar no botão adicionar e preencher os dados solicitados. Nesta etapa também deve ser feito upload do arquivo de template.
Para adicionar parâmetros dentro de um arquivo de template (TXT ou HTML), deve-se utilizar a seguinte notação:
${NOME_USUARIO}
Neste caso, será utilizado o identificador “NOME_USUARIO” durante a customização para atribuir um valor a este parâmetro.
Os templates disponíveis no volume da empresa (<VOLUME>\templates\tplmail) podem ser consultados para mais exemplos de utilização de parâmetros.
Após cadastrar um novo template, é possível utilizá-lo para enviar e-mail a partir de qualquer um dos eventos do Workflow (exceto no onNotify – ver “Envio de E-mail Padrão”).
Para efetuar um envio de e-mail, em base de um template customizado, é utilizado o objeto “notifier”, chamando a função “notify”, conforme o código abaixo:
Bloco de código |
---|
try{
//Monta mapa com parâmetros do template
var parametros = new java.util.HashMap();
parametros.put("NOME_USUARIO", "JOAO");
parametros.put("CODIGO_USUARIO", "01");
//Este parâmetro é obrigatório e representa o assunto do e-mail
parametros.put("subject", "ASSUNTO");
//Monta lista de destinatários
var destinatarios = new java.util.ArrayList();
destinatarios.add("MATRICULA-DESTINATARIO");
//Envia e-mail
notifier.notify("MATRICULA-REMETENTE", "CODIGO-TEMPLATE",
parametros, destinatarios, "text/html");
} catch(e){
log.info(e);
} |
O primeiro parâmetro que a função notify recebe é o código/matrícula do usuário que irá enviar o e-mail (remetente).
O segundo parâmetro é o código do template que foi cadastrado através do ícone de Templates.
O terceiro parâmetro é um mapa de dados (java.util.HashMap) que contém os parâmetros que serão utilizados para preencher as variáveis do template.
Por padrão, os parâmetros WDK_VirtualDir (diretório virtual) e WDK_AdviceUser (Nome do colaborador remetente) são adicionados ao mapa de parâmetros automaticamente e podem ser utilizados na template, sem que os valores sejam adicionados pela customização.
O quarto parâmetro representa a lista de usuários que irão receber o e-mail (java.util.ArrayList). Esta lista de usuários consiste em uma lista de códigos/matrículas de colaboradores cadastrados no ECM.
O quinto e último parâmetro especifica qual será o formato do e-mail enviado. Os valores aceitos são “text/html” e “text/plain”.
Outra forma de executar o método de envio de email é informando o número da ficha, conforme exemplo:
notifier.notify("MATRICULA-REMETENTE", NÚMERO DA FICHA, "CODIGO-TEMPLATE", parametros, destinatarios, "text/html");
ATENÇÃO: Obrigatoriamente o valor informado deve ser uma ficha. Outros tipos de documentos não serão tratados e ocorrerá erro na execução do evento.
Ao executar este método, automaticamente os parâmetros abaixo serão adicionados a lista de parâmetros e podem ser utilizados na template:
WDK_CardContent | Conteúdo HTML da ficha (simula a visualização) |
WDK_DocumentAuthor | Nome do Autor |
WDK_DocumentComments | Comentário adicional |
WDK_DocumentDescription | Descrição da ficha |
WDK_DocumentIconImage | Imagem do ícone da ficha |
WDK_DocumentNumber | Número da ficha |
WDK_DocumentUpdatedDate | Data de atualização da ficha |
WDK_DocumentVersion | Versão da ficha |
WDK_DocumentViewLink | Link para acesso a ficha |
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.