...
As propriedades de extensão contêm informações especiais que podem alterar o comportamento padrão do processo em algum ponto. Elas devem ser utilizadas principalmente durante a fase de desenvolvimento personalizado sob a plataforma ou conter "flags" especiais que alterem alguma lógica interna (apenas em casos especiais).
...
Neste exemplo iremos criar atividades automáticas personalizadasdesenvolvidas sob a plataforma.
Na imagem a seguir é possível visualizar o atributo adicionado, definindo as atividades 2 e 4 (separadas por vírgula) como atividades automáticas do processo.
...
Nota |
---|
|
Não é possível capturar (hAPI.getCardValue) ou adicionar (hAPI.setCardValue) dados no formulário na inicialização do processo, sendo possível somente a partir da segunda tarefa. Para isso pode ser utilizada a seguinte lógica: Bloco de código |
---|
theme | Eclipse |
---|
language | javascript |
---|
firstline | 1 |
---|
linenumbers | true |
---|
| function beforeStateEntry(sequenceId) {
if (sequenceId != "NUMERO_DA_ATIVIDADE_INICIAL") {
var campo = hAPI.getCardValue("campo1");
}
} |
|
...
Com o uso de eventos, o fluig permite que um processo seja pesonalizado desenvolvido sob a plataforma, possibilitando a execução de ações definidas pelo usuário, tais como:
...
Existem algumas propriedades que contém informações referentes à solicitação que podem ser utilizadas na personalização no desenvolvimento do processo sob a plataforma, são elas:
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. |
WKCompany | Número da empresa. |
WKUser | Código do usuário corrente. |
WKUserComment | Comentário feito pelo usuário na atividade ou no cancelamento da solicitação. |
WKCompletTask | Se a tarefa foi completada (true/false). |
WKNextState | Número da próxima atividade (destino). |
WKCardId | Código do formulário do processo. |
WKFormId | Código da definição de formulário do processo. |
WKIdentityCompany | Identificador da empresa selecionada para Experiências de uso TOTVS. |
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. |
...
Além dessas propriedades já alimentadas pela plataforma, é possível criar propriedades personalizadas 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.
...
Deck of Cards |
---|
effectDuration | 0.5 |
---|
id | samples |
---|
history | false |
---|
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 personalização para um processo sob a plataforma: Bloco de código |
---|
theme | Eclipse |
---|
language | javascript |
---|
firstline | 1 |
---|
linenumbers | true |
---|
| function beforeTaskSave(colleagueId, nextSequenceId, userList) {
var ativAtual = getValue("WKNumState");
var process = parseInt(globalVars.get("process"));
var resp1 = hAPI.getCardValue("resp1_H");
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 != "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.");
}
}
} |
|
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 personalizaçãodesenvolvimento 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 |
---|
theme | Eclipse |
---|
language | javascript |
---|
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 |
---|
theme | Eclipse |
---|
language | js |
---|
firstline | 1 |
---|
linenumbers | true |
---|
| function afterProcessFinish(processId) {
// Servico <url_fluig>/webdesk/ECMWorkflowEngineService?wsdl
// Busca o webservice cadastrado com o código "WorkflowEngineService"
var workflowEngineServiceProvider = ServiceManager.getServiceInstance("WorkflowEngineService");
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("com.totvs.technology.ecm.workflow.ws.ObjectFactory");
// Cria um String[][]
var cardData = objectFactory.createStringArrayArray();
// Cria uma solicitação
workflowEngineService.simpleStartProcess("adm", "adm", 1, "process2", "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. |
|
|
...
Deck of Cards |
---|
startHidden | false |
---|
effectDuration | 0.5 |
---|
id | mecatrib |
---|
history | false |
---|
effectType | fade |
---|
|
Card |
---|
default | true |
---|
id | 1 |
---|
label | 1º Passo |
---|
| Para criar um novo mecanismo de atribuição personalizadodesenvolvido sob a plataforma, clicar com o botão direito do mouse no projeto do fluig, acessar a opção New e então a opção Other. No assistente aberto, selecionar a opção "Mecanismo customizado fluig" presente na pasta fluig e clicar no botão Next:
|
Card |
---|
| O assistente Novo mecanismo fluig é aberto. Informar o código e uma descrição e clicar no botão Finish:
|
Card |
---|
id | 3 |
---|
label | 3º Passo (Implementação) |
---|
| O arquivo JavaScript do mecanismo de atribuição é adicionado ao projeto na pasta mechanisms e aberto para edição. O script de personalização de mecanismo de atribuição desenvolvido sob a plataforma recebe como parâmetro o código do processo e o usuário corrente. Este script deve retornar uma lista dos usuários que podem assumir a tarefa. Abaixo, exemplo de implementação: Bloco de código |
---|
theme | Eclipse |
---|
language | javascript |
---|
firstline | 1 |
---|
linenumbers | true |
---|
| function resolve(process, colleague) {
var userList = new java.util.ArrayList();
var groupId = colleague.getGroupId();
var c1 = DatasetFactory.createConstraint("cdArea", groupId, groupId, ConstraintType.MUST);
var constraints = new Array(c1);
var dataset = DatasetFactory.getDataset("dsResponsaveisArea", null, constraints, null);
for (var i = 0; i < dataset.rowsCount; i++) {
userList.add(dataset.getValue(i, "cdUsuarioResp"));
}
return userList;
} |
Informações |
---|
É possível acessar Datasets e Serviços cadastrados no fluig na personalização no desenvolvimento do mecanismo de atribuição sob a plataforma. |
|
Card |
---|
id | 4 |
---|
label | Último Passo (Exportação) |
---|
|
Por fim, o mecanismo de atribuição personalizado desenvolvido sob a plataforma deve ser exportado para o servidor do fluig e ao realizar a exportação deve ser informado obrigatoriamente seu código e nome, e opcionalmente uma descrição:
|
|
Parâmetros workflow para
...
desenvolvimento de formulários sob a plataforma
Para processos que possuem uma definição de formulário são passados alguns parâmetros com informações sobre o processo para serem utilizados nos eventos da definição do formulário, conforme abaixo:
...