O método getValue é utilizado para obter dados específicos associados aos eventos de personalização. Através deste método, é possível acessar diferentes propriedades dependendo do tipo de evento.
Esta documentação fornece uma visão geral do método getValue e orientações sobre como utilizá-lo com base nas propriedades de diversos tipos de eventos.
Parâmetros nos eventos de documentos e formulário
Os eventos de formulário possuem bastante variações nos parâmetros disponíveis por evento, por isso, consulte a documentação do evento para conhecer os parâmetros disponíveis.
Parâmetros específicos para eventos de processo
Com o uso de eventos, o fluig permite que um processo seja desenvolvido sob a plataforma, possibilitando a execução de ações definidas pelo usuário, tais como:
- Validar o ato de completar uma atividade;
- Tomar decisões automaticamente;
- Realizar integrações com outros sistemas;
- Iniciar novas solicitações automaticamente.
Existem alguns parâmetros que contém informações referentes à solicitação que podem ser utilizados no desenvolvimento do processo sob a plataforma, são eles:
...
...
Parâmetro | Descrição |
---|
WKDef | Código do processo. |
WKVersDef | Versão do processo. |
WKNumProces | Número da solicitação de processo. |
WKNumState | Número da atividade. Nota |
---|
| Para realizar a busca pelo número da atividade, indica-se o uso do parâmetro WKNumState. Caso utilize um campo de formulário, uma segunda chamada pode ser feita para atualizar este campo, o que pode causar inconsistências inesperadas. |
|
WKCompany | Número da empresa. |
WKUser | Código do usuário corrente. |
WKUserComment | A partir do fluig 1.5 é possível adicionar Complementos em uma solicitação. Este recurso permite inserir diversas observações na mesma solicitação. Ou seja, não temos mais apenas um comentário por atividade. Os complementos em solicitações permitem que um usuário adicione comentários ou anexos em uma solicitação aberta sendo ou não responsável pela tarefa corrente com a finalidade de evitar comunicação por outros meios que não ficarão registrados no histórico do processo. Por isso a forma de retornar a informação mudou para a variável WKUserComment. Agora ela recebe um texto com todas as observações feitas pelos usuários na atividade corrente. Exemplo do valor atual da variável WKUserComment: " Nome do usuário - 09/03/2017 - 10:46 - Observação feita pelo usuário Nome do usuário - 09/03/2017 - 10:45 - Nova observação feita pelo usuário " OBS: Esse parâmetro irá retornar apenas os comentários da atividade corrente.
A partir da Atualização 1.5, para resgatar os complementos (observação) de uma tarefa, deve ser utilizado o método da API Pública: https://api.fluig.com/resource_WorkflowRest.html#path__2.0_workflows_findObservations_-processInstanceId-_-stateSequence-_-threadSequence-.html Documentação que explica como utilizar a indicada para auxiliar na utilização da API publica em eventos: http://tdn.totvs.com/x/hRwSCw0Xo-Dg |
WKCompletTask | Se a tarefa foi completada ("true"/"false"). |
WKNextState | Número da próxima atividade (destino). |
WKCardId | Código do registro de formulário do processo. |
WKFormId | Código do formulário do processo. |
WKIdentityCompany | Identificador da empresa selecionada para Experiências de uso TOTVS. Esse parâmetro corresponde à empresa que está selecionada quando as experiências de uso TOTVS estão ativas. Nesse cenário, quando o usuário clica na imagem do perfil (canto superior direito), uma das opções que aparece é "Trocar empresa". Ao clicar nessa opção aparecerá uma ou mais empresas nas quais o usuário está configurado no Identity. O parâmetro WKIdentityCompany corresponde à empresa selecionada nessa opção de Trocar empresa, e uma forma de verificar o valor que está definido é através do painel de controle, nos dados adicionais do usuário, com a chave "UX-APP-COMPANY". |
WKMobile | Identifica se a ação foi realizada através de um dispositivo mobile. |
WKIsService | Identifica se a solicitação de cancelamento foi realizada através de um serviço. Esta variável só pode ser consultada nos eventos beforeCancelProcess e afterCancelProcess. |
WKUserLocale | Identifica o idioma corrente do usuário. |
WKManagerMode | Identifica se o processo está sendo movimentado pela visão do gestor do processo ou não. Importante notar que esse parâmetro apenas retorna true/false caso o formulário esteja sendo movimentado por um processo workflow. Caso ele esteja sendo aberto e alterado pela navegação de documentos este parâmetro é nulo. |
WKReplacement | Código do usuário substituto Informações |
---|
| Para processos que estejam sendo acessados por um usuário substituto, o usuário logado será o retorno do parâmetro WKReplacement |
|
WKIsTransfer | Permite verificar se o usuário está ou não transferindo uma tarefa. |
Além dessas propriedades já alimentadas pela plataforma, é possível criar propriedades desenvolvidas sob a plataforma que podem ser utilizadas nos eventos. O produto disponibiliza a variável globalVars, que é um mapa de dados (Map<String, String>) e estará disponível em todos os eventos.
Para adicionar uma propriedade e seu valor, utilize o método globalVars.put("name", "value"), onde "name" é o nome da propriedade e "value" o seu valor. Exemplo: globalVars.put("WDAprovador","adm");
...
WKCurrentMovto | Permite a movimentação do processo. |
WKActualThread | Retorna a Thread atual do processo. |
takeTask | Identifica se a atividade foi assumida. |
Deck of Cards |
---|
effectDuration | 0.5 |
---|
history | false |
---|
id | samples |
---|
effectType | fade |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | Exemplo 1 |
---|
| Para validar se o usuário está completando uma atividade corretamente, basta utilizar o evento beforeTaskSave e retornar alguma mensagem caso queira disparar um erro. Por exemplo, segue parte de um código de desenvolvimento de um processo sob a plataforma: Bloco de código |
---|
language | javascript |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
linenumbers | true |
---|
| function beforeTaskSave(colleagueId, nextSequenceId, userList) {
var ativAtualatividadeAtual = getValue("WKNumState");
var process = parseInt(globalVars.get("process"));
var resp1tipo = hAPI.getCardValue("resp1_Htipo");
var eficacia1 = hAPI.getCardValue("eficaz1");
var controle1 = hAPI.getCardValue("controle1");
var eficaz = true;
var users = new java.util.ArrayList();
if (ativAtual == 7 && nextSequenceId == 12) {
if (resp1 != "" && eficacia1 != "1" && eficacia1 !responsavel == "2") {
if (verificaUsuario(users, resp1)) {
users.add(resp1);
}
}
hAPI.setAutomaticDecision(8, users, "Decisao tomada automaticamente pelo Fluig.");
} else if (ativAtual == 9 && nextSequenceId == 13) {
if (resp1 != "" && eficacia1 == "2" && controle1 == ""){
eficaz = false;
}
if (eficaz) {
var codGrupo = buscaGrupo(process, "Qualidade");
users.add("Pool:Group:" + codGrupo);
hAPI.setAutomaticDecision(6, users , "Decisao tomada automaticamente pelo Fluig.")throw "Antes de salvar esta solicitação, você deve informar o 'Tipo' no formulário";
}
}
} |
| Card |
---|
| Para fazer com que uma decisão seja tomada automaticamente, os seguintes procedimentos devem ser executados: - Adicionar na Extensão do Processo a propriedade AutomaticTasks com a lista de todas as atividades que terão decisão delegada via desenvolvimento sob a plataforma. Exemplo: AutomaticTasks=3,6,10.
- Implementar o evento beforeStateEntry e executar o método "setAutomaticDecision" da hAPI, passando como parâmetros a próxima atividade, o próximo usuário (ou lista de usuários) e uma observação.
Bloco de código |
---|
| language | javascript |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
linenumbers | true |
---|
| function beforeStateEntry(sequenceId) {
var userList = new java.util.ArrayList();
userList.add("adm");
hAPI.setAutomaticDecision(6, userList, "Decisao tomada automaticamente pelo Fluig."); Informações |
---|
As atividades com decisão automática também podem ser criadas via editor de processo. |
Card |
---|
| Para iniciar uma nova solicitação de um outro processo ao finalizar uma solicitação podem ser executados os seguintes procedimentos: - Cadastrar um serviço no fluig em que a URL seja o WSDL do serviço ECMWorkflowEngineService.
- Implementar o evento afterProcessFinish utilizando o exemplo abaixo, sendo ‘process2’ o novo processo a ser inicializado.
Bloco de código |
---|
language | js |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
linenumbers | true |
---|
| function afterProcessFinish(processId) {
var user = "adm";
var pass = "1b09d18a-dbc2-4146-ac33-8864dc283120";
var companyId = parseInt(getValue("WKCompany"));
var processId = "process2";
var serviceName = "WorkflowEngineService";
// Servico <url_fluig>/webdesk/ECMWorkflowEngineService?wsdl
// Busca o webservice cadastrado com o código "WorkflowEngineService"
var workflowEngineServiceProvider = ServiceManager.getServiceInstance("WorkflowEngineService"serviceName);
var workflowEngineServiceLocator = workflowEngineServiceProvider.instantiate("com.totvs.technology.ecm.workflow.ws.ECMWorkflowEngineServiceService");
var workflowEngineService = workflowEngineServiceLocator.getWorkflowEngineServicePort();
// Cria o ProcessAttachmentDtoArray
var processAttachmentDtoArray = workflowEngineServiceProvider.instantiate("com.totvs.technology.ecm.workflow.ws.ProcessAttachmentDtoArray");
// Cria o ObjectFactory
var objectFactory = workflowEngineServiceProvider.instantiate("net.java.dev.jaxb.array.ObjectFactory");
// Cria um String[][]
var cardData = objectFactory.createStringArrayArray();
// Cria uma solicitação
workflowEngineService.simpleStartProcess("adm"user, "adm"pass, 1companyId, "process2"processId, "Comment", processAttachmentDtoArray, cardData);
} |
Informações |
---|
Existem outros métodos parar iniciar uma solicitação, consulte-os aqui. Lembre-se de consultar a classe ObjectFactory do serviço, essa classe possui diversos métodos para criar instância de objetos necessários para utilização do serviço. |
|
Card |
---|
| Exemplo para barrar o usuário de movimentar a solicitação com o campo "nome" vazio. Caso o mesmo salve a solicitação, a ação será permitida. Bloco de código |
---|
language | js |
---|
theme | Eclipse |
---|
firstline | 1 |
---|
linenumbers | true |
---|
| function beforeTaskSave(colleagueId, nextSequenceId, userList) {
var completTask = getValue("WKCompletTask"); // 'true' - Completando a tarefa; 'false' - Salvando a tarefa
var fieldName = hAPI.getCardValue("name");
if (completTask == 'true' && (!fieldName || !fieldName.trim()) {
throw("Não é permitido movimentar uma solicitação com o campo 'Nome' vazio!");
}
} |
|
Card |
---|
| Exemplo que permite verificar se o usuário está ou não transferindo uma tarefa: Bloco de código |
---|
language | js |
---|
theme | Eclipse |
---|
linenumbers | true |
---|
| function beforeTaskCreate(colleagueId) {
var isTransfer = getValue("WKIsTransfer");
if (isTransfer !== null) {
if (JSON.parse(isTransfer)) {
throw "Não é permitido transferir a atividade!";
}
}
} |
|
|