Integração do Workflow com Seniortools
É possível configurar uma perspectiva para operar integrada ao Workflow. Desta forma ela poderá receber e enviar dados ao Workflow fazendo parte de um processo.
Nota
Para saber mais sobre a criação de perspectivas pelo Senior Developer, consulte o tópico Componentes de Customização > Interface > Perspectivas e Visões customizadas.
Configuração da perspectiva
A configuração das propriedades de workflow serão informadas dentro da cláusula workflow da perspectiva. Através desta integração é possivel definir variáveis e cursores que formarão esta integração, conforme exemplo abaixo:
workflow : {
fields : [{
name : "WF_UserName",
type : "STRING",
size : "100",
mode : "INPUT_OUTPUT"
},{
name : "WF_QntdDias",
type : "INTEGER",
size : "100",
mode : "INPUT_OUTPUT"
},{
name : "WF_Status",
type : "BOOLEAN",
mode : "OUTPUT"
}],
concurrenceErrorHandler : "trataConcorrencia",
cursors : [{
id : "crPendency",
mode : "OUTPUT",
data : "ALL",
concurrence : {
mode : "NONE"
}
}]
}
Importação e exportação de variáveis do processo
É possível importar variáveis para a perspectiva, bem como exportar variáveis para o processo através da configuração da cláusula fields da configuração da perspectiva para workflow. As variáveis utilizadas na clausula fields devem estar definidas no Modelo de Processo.
Para cada variável declarada na perspectiva devem ser informadas os seguintes atributos:
- name: Nome da variável, no caso de uma variável de input, deve coincidir com o nome da variável exportada pelo processo;
- type: Tipo da variáve;
- size: Tamanho da variável (opcional);
- mode: Modo de tráfego da variável entre a perspectiva e o processo, podendo ter os seguintes valores:
- INPUT: apenas recebe valores do processo;
- OUTPUT: apenas exporta valores para o processo;
- INPUT_OUTPUT: importa e exporta valores para o processo.
Nota
- Veja o exemplo da cláusula fields no exemplo acima.
- Caso um cursor receba como INPUT uma massa de dados incompatível, uma mensagem de erro lançada.
- As variáveis criadas estarão disponíveis como campos no cursor de pendências, os quais podem ser acessados com o mesmo nome que foram declarados no processo.
- Caso uma variável definida não seja atribuida pelo processo seu valor será null
- Caso ocorra atribuição de tipos incompatíveis uma exceção deve ser lançada.
Integração de dados de cursores
Dados de cursores podem ser importados para a perspectiva e exportados para o processo. Isto deverá ser feito através da configuração da cláusula cursors.
Pode-se definir um cursor para manipulação de pendências, o qual deve ser proveniente do SystemComponent de Workflow, e deve ser declarado na perspectiva que se integrará ao workflow.
Quando exportados para o processo, cada cursor será exportado como uma variável do tipo lista de objetos. O nome da variável que representa cada cursor será o informado na propriedade id do cursor.
Para cada cursor declarado devem ser informados os seguintes atributos:
- id: Identificador do cursor cujos dados transitarão no processo. Deve ser um cursor declarado na perspectiva;
- parameterName: Nome do parâmetro que representa os dados do cursor no processo.
- mode: Modo de tráfego de dados entre um cursor da perspectiva e o processo. Seus valores possíveis são:
- INPUT: Somente recebe informações do processo;
- OUTPUT: Somente retorna informações ao processo;
- INPUT_OUTPUT: Recebe e retorna informação do processo;
- NONE: Não recebe nem envia informações, utilizado para a definição de filtro dos cursores.
- data: Define quais dados do cursor serão exportados . Seus valores possíveis são:
- CHANGES: Somente registros alterados serão enviados ao processo e estas alterações serão aplicadas quando um cursor receber estes dados como INPUT;
- ALL: Todos os registros visíveis ao cursor serão exportados para o processo.
- concurrence: Clausula que agrupa os atributos relativos ao tratamento de concorrência na importação de dados de cursores provenientes do processo, os quais são:
- mode: Modo do controle de concorrência, podendo ter os seguintes valores:
- NONE : Controle de concorrência desabilitado, nenhuma verificação será feita. Os dados que estão no processo irão prevalecer sobre os dados existentes na base;
- ALL_FIELDS: Utiliza todos os campos do registro para a comparação;
- KEY: Utiliza os campos chave para a comparação;
- CUSTOM: Deve-se informar quais campos serão utilizados para comparação.
- fields: Define quais campos farão parte do controle de concorrência.
- mode: Modo do controle de concorrência, podendo ter os seguintes valores:
- link: define a ligação entre os cursores, a qual é utilizada para restrição dos dados importados e exportados. O cursor base para a exportação de dados sempre será o de pendências.
Nota
Caso um cursor trafegado não tenha ligação com os demais, todos os registros deste cursor serão exportados para o processo. Neste caso, não é suportada a função de controle multi-pendência obtida através da definição do cursor de pendência na perspectiva.
Operação tratadora de erros de concorrência
Uma operação de SystemComponent pode ser elegida para tratamento de erros de concorrência na importação de dados de cursores trafegados em um processo. A operação disparada é definida através do atributo concurrenceErrorHandler, o qual deverá receber como valor o identificador de uma operação declarada na perspectiva.
SystemComponent de Workflow
O SystemComponent de Workflow provê as principais funcionalidades para integração com workflow. Ele é fornecido pela classe com.senior.workflow.sc.SCWorkflow.
Através deste SystemComponente é possível:
Estas operações podem ser executadas individualmente ou em Lote.
Iniciar um processo
Fornecido através do método startProcess, o qual pode ser utilizado com as seguintes assinaturas:
startProcess (processName : String, inputData : String, processKey : String);
startProcess (processName : String, workflowParams : WorkflowParams, processKey : String);
startProcess (processName : String, workflowParams : WorkflowParams)
Segue abaixo a descrição dos parâmetros:
| Parâmetro | Descrição |
| processName | Nome do processo a ser iniciado. |
| inputData | Dados de entrada do processo. |
| workflowParams | Mesma função do inputData. |
| processKey | Chave que vai representar a instância a ser iniciada desse processo. Esse campo pode ter no máximo 30 caracteres. |
Início de processo sem chave própria:
//Cria os parâmetros de envio
WorkflowParams params = new WorkflowParams();
//Adiciona o parâmetro do nome do usuário
params.addParamField("WF_UserName", "senior", WorkflowDataType.STRING);
//Adiciona o parâmetro do identificador do usuário
params.addParamField("WF_UserCode", 1, WorkflowDataType.LONG);
//Adiciona o parâmetro de quantidade de dias de férias
params.addParamField("WF_QntdDias", 1, WorkflowDataType.INTEGER);
try {
//Iniciamos o processo
ScWorkflow.startProcess("Ferias", params);
} catch (WorkflowException e) {
throw new RuntimeException("Falha ao iniciar processo", e);
}
Início de processo com chave prórpia:
long identificadorUsuario = 1;
//Cria os parâmetros de envio
WorkflowParams params = new WorkflowParams();
//Adiciona o parâmetro do nome do usuário
params.addParamField("WF_UserName", "senior", WorkflowDataType.STRING);
//Adiciona o parâmetro do identificador do usuário
params.addParamField("WF_UserCode", identificadorUsuario , WorkflowDataType.LONG);
//Adiciona o parâmetro de quantidade de dias de férias
params.addParamField("WF_QntdDias", 1, WorkflowDataType.INTEGER);
try {
//Iniciamos o processo, com a chave sendo o identificador do usuário
//Assim garantimos que só temos um processo de férias por vez para este usuário
ScWorkflow.startProcess("Ferias", params, Integer.toString(identificadorUsuario));
} catch (WorkflowException e) {
throw new RuntimeException("Falha ao iniciar processo", e);
}
Responder processo
Este método permite notificar o Workflow da resposta de uma das partes do processo. Segue abaixo o método utilizado:
responseProcess (workflowParams : WorkflowParams);
Segue abaixo a descrição do parâmetro:
| Parâmetro | Descrição |
| workflowParams | Contém os dados de retorno do processo (massa de dados, identificador do processo, token, etc.). |
//Cria os parâmetros de envio
//O token é controlado pelo framework
WorkflowParams params = new WorkflowParams(token);
//Adiciona o parâmetro do nome do usuário
params.addParamField("WF_UserName", "senior", WorkflowDataType.STRING);
//Adiciona o parâmetro do identificador do usuário
params.addParamField("WF_UserCode", identificadorUsuario , WorkflowDataType.LONG);
//Adiciona o parâmetro de quantidade de dias de férias
try {
//Responde ao processo
ScWorkflow.responseProcess(params);
} catch (WorkflowException e) {
throw new RuntimeException("Falha ao cancelar processo", e);
}
É possível exportar automaticamente todos os dados configurados como OUTPUT ou INPUT_OUTPUT para o processo, sendo que caso uma perspectiva trate uma única pendência não é necessário informar o token para resposta como no exemplo acima.
Neste caso, todas as variáveis definidas para exportação são respondidas como parâmetros de workflow para o processo e todos os cursores definidos para exportação são respondidos automaticamente como um único parâmetro chamado seniortools_data para o processo.
@ViewOperation(name="respondeProcesso")
public void respondeProcesso(){
SCWorkflow.responseProcess();
}
Nota
Caso algum parâmetro seja setado através do SystemComponente de workflow, esta irá sobrescrever os valores definidos na perspectiva.
Cancelar um processo
Fornecido através do método cancelProcess, o qual pode ser utilizado com as seguintes assinaturas:
cancelProcess (processId : String, motivo : String);
cancelProcess (processId : String, processName : String, motivo : String);
cancelProcess (token : String, motivo : String);
Segue abaixo a descrição do parâmetro:
| Parâmetro | Descrição |
| processId | Identificador único do processo. |
| motivo | Motivo informado para o cancelamento. |
| processName | Nome do processo a ser cancelado. Importante Este campo não é identificador. |
| token | Representa uma parte da instância do processo, por exemplo: uma tarefa específica. |
Cancelamento de processo através do identificador único do processo:
try {
//Cancela o processo pelo seu identificador
ScWorkflow.cancelProcess(1, "Motivo de cancelamento.");
} catch (WorkflowException e) {
throw new RuntimeException("Falha ao cancelar processo", e);
}
Cancelamento de processo através da chave única do processo:
try {
//Cancela o processo pela sua chave única
String chaveProcesso = "chave_passada_no_start_processo";
ScWorkflow.cancelProcess(chaveProcesso , "Motivo de cancelamento.");
} catch (WorkflowException e) {
throw new RuntimeException("Falha ao cancelar processo", e);
}
Executar operações em lote
A execução de operações em lote permite executar várias operações de iniciar, responder e cancelar processo em um único momento sobre os processos de Workflow.
Segue abaixo algumas características da execução em lote:
- Para as operações (iniciar, responder e cancelar processo) estão disponíveis as mesmas assinaturas de método as quais são disponibilizadas individualmente.
- O lote pode conter operações de tipos diferentes desde que sejam dos tipos acima listados.
- O lote agrega as funções adicionadas junto com as já adicionadas desde a sua criação.
- O lote executa efetivamente todas as operações através da chamada da função performBatch(), executando as operações na ordem em que foram adicionadas.
...
SCWorkflow sc = new SCWorkflow();
SCWorkflowBatchInput batch1 = sc.newBatchInput();
batch1.addStartProcess("Ferias", params, Integer.toString(identificadorUsuario));
batch1.addStartProcess("Ferias", params);
batch1.addCancelProcess(chaveProcesso , "Motivo de cancelamento.");
batch1.addCancelProcess(1, "Motivo de cancelamento.");
batch1.addResponseProcess(params);
sc.performBatch(batch1);

English
Español


