Função: TWFProcess
A classe TWFProcess foi desenvolvida pontualmente para a utilização no Workflow, é responsável pela criação e gerenciamento do processo. Ou seja, quando existe o envio e retorno do e-mail. Como toda e qualquer classe, a TWFProcess é dividida em métodos e propriedades. Veremos alguns dos principais métodos e propriedades que iremos usar para criação de um processo.
Observação: No caso de um simples e-mail, aconselha-se utilizar:
- As classes TMailManager (Classe TMailManager) e TMailMessage (Classe TMailMessage);
- Corpo de e-mail HTML. Qualquer estilização e/ou ferramenta de mercado, considera-se customização.
TWFProcess ( [ ] ) --> Nil
Nome | Tipo | Descrição | Obrigatório | Referência |
Array of Record |
Métodos
:New(<cCodProc>,<cDescr>,<cProcID>)
O método New() é responsavel pela criação e inicialização da classe WFProcess.
Parâmetros:
1. cCodProc: Este parâmetro recebe o código do processo usado em “Cadastro de Processos”
2. cDescr: Este parâmetro recebe a descrição do processo que esta sendo criado no momento. Se não for informado, será usado a descrição contida no cadastro de processo localizada através do parâmetro anterior cCodProc.
3. cProcID: Este parâmetro recebe o ID do processo criado.
Exemplo:
oP := TWFProcess():New('PEDCOM','Aprovacao do Pedido de Compras')
:NewTask(<cDescr>,<cArqHtml>,<lCopiar>)
Este método é responsável por criar a seqüência de tarefas a serem executadas e identificar qual html será utilizado pelo processo.
Parâmetros:
1. cDescr: Este parâmetro recebe a descrição da tarefa.
2. cArqHtml: Este parâmetro recebe o caminho e o nome do arquivo html que fará uso no processo.
3. lCopiar: Este parâmetro do tipo lógico é responsável por copiar todos os campos utilizados em uma tarefa anterior para esta que esta sendo criado no momento.
Exemplo:
oP:NewTask('Criando Aprovacao', '\workflow\WFW120p.htm' )
:AttachFile(<cArquivo>)
Este método é responsável pela inclusão de arquivo anexos à mensagem. Os arquivos anexos deverão estar abaixo do root path do Protheus.
Parâmetros:
1. cArquivo: Caminho e nome do arquivo a ser anexo a mensagem.
Exemplo:
oP:AttachFile(“\Workflow\teste.txt”)
:Start(<cHtmlCopiarPara>) -> cProcessKey
Este método é responsável por construir todo o processo, gravar os registros nas tabelas do Workflow e enviar a mensagem para os destinatários. O valor de retorno é uma chave composta pela codificação ProcessID + TaskID e números aleatórios no total de 17 algarismos em hexadecimal.
Parâmetros:
1. cHtmlCopiarPara: Caminho onde o Workflow devera realizar uma copia do html final.
Exemplo:
cID := oP:Start(“\workflow\copia”)
if file( “\workflow\copia\” + cID)
conout(“Arquivo copiado com sucesso.”)
endif
:Finish()
Este método é responsável por finalizar o Processo. Após a finalização, este não estará mais disponível para execuções do tipo retorno e timeout.
Exemplo:
oP:Finish()
:Track(<cCodStatus>,<cDescr>,<cUsuario>)
Este método é responsável por incluir as descrições dos passos seguidos pelo fluxo do processo e apresentá-los na consulta da rastreabilidade.
Parâmetros:
1. cCodStatus: Codigo do status do processo.
2. cDescr: Descrição do passo ocorrido.
3. cUsuario: Nome do usuário a que se destinou a tarefa.
Exemplo:
oP:Track(“100200”, “Enviando o pedido para aprovacao”, “AprovadorA”)
Propriedades
:cTo, :cCC e :cBCC
Estas propriedades definem o endereço dos destinatários. Poderá ser informado mais que um destinatário ao mesmo tempo. Basta incluir um ponto-e-vírgula “;” entre eles. Se for informado uma palavra qualquer que não seja um endereço de e-mail válido, o Workflow irá considera que se trata de um diretório onde o html gerado devera ser gravado. Pode mesclar os tipos.
Exemplo:
oP:cTo := “[email protected];[email protected]”
oP:cCC := “[email protected];Aluno”
oP:cBCC := “[email protected]”
:cSubject
Esta propriedade define o assunto da mensagem.
Exemplo:
oP:cSubject := “Aprovado do pedido de compras no. 1028”
:cBody
Esta propriedade armazenará um texto que permanecera no corpo da mensagem. Caso seja utilizado, o html irá como anexo da mensagem.
Exemplo:
oP:cBody := “Testando...”
:bReturn
Esta propriedade contém o nome da função que será executada no momento em que o Workflow receberá a mensagem de resposta de um dos destinatários via e-mail ou serviço http.
Exemplo:
oP:bReturn := “U_Retorno”
:bTimeOut
Esta propriedade recebe um array de timeouts contendo nomes das funções e tempo de espera. Caso os tempo seja alcançado, será executado a função mencionadas no 1º item do array. Poderá especificar mais que 1 array de timeouts.
{ { <cFuncao>, <nDias>, <nHoras>, <nMinutos> }, { ... } }
Exemplo:
oP:bTimeOut := { { “TimeOut1”, 0, 5, 30 } }
ou
oP:bTimeOut := { { “TimeOut1”, 0, 5, 30 }, { “TimeOut2”, 1, 10, 0 } }
:fProcessID
Esta propriedade fornece o número ID do processo.
Exemplo:
cProcID := oP:fProcessID
:fTaskID
Esta propriedade fornece o número ID da tarefa criada para um determinado processo, através do método :NewTask().
Exemplo:
oP:NewTask( '100100', '\workflow\WFW120p.htm' )
cTaskID := oP:fTaskID
:oHTML
Este objeto é uma referência da classe de uso interno TWFHtml() e disponibiliza dois dos métodos mais importantes: RetByName() e ValByName().
:oHTML:RetByName( <cNome da macro> )
Esta propriedade tem como objetivo obter o conteúdo da “macro” quando as resposta retornarem para o Workflow. Este método somente deverá ser usada na função de retorno.
Exemplo:
cNome := oP:oHtml:RetByName( “Nome” )
Em uma tabela:
aCodigo := oP:oHtml:RetByName( “produto.Codigo” )
:oHTML:ValByName(<cMacro>,<uConteudo>)
Este método por objetivo atribuir ou obter um valor à uma “macro” existente no html. Este deverá ser usado somente no momento em que estiver assinalando valores ao html ou na função de timeouts. Na função de timeouts o uso é necessário por motivo de não ter recebido nenhuma resposta.
Parâmetros:
1. cMacro: Nome da macro (palavra chave) encontrada no html, identificada entre os símbolos “%” e “!”.
2. uConteudo: Valor a ser atribuido à macro.
Exemplo:
Assinalando um valor:
oP:oHtml:ValByName( “Nome”, “Aluno1” )
Usando na função de timeout:
cNome := oP:oHtml:ValByName( “Nome” )
Atribuindo um valor a uma tabela:
AAdd( oP:oHtml:ValByName( “produto.codigo” ), SB1->SB1_COD )