- Criado por Fábio Augusto Amaral Melo Nunes, última alteração por Erlon Cesar Lima De Freitas em 18 set, 2020
Objetivo
Demonstrar o que é necessário para realizar a criação de uma nova atividade de fórmula visual.
Como Funciona
Para criação de uma nova atividade de Fórmula Visual são necessários os seguintes passos:
Referenciar as DLLs "RM.Lib.dll,RM.Lib.WinForms.dll e RM.Lib.Workflow.Activities.dll" ao projeto.
A classe implementada deve herdar da classe RMSActivity, ou outra herança desta, como RMSDynamicActivity.
- Implementar sua regra de negócio internamente ao método "Execute", a ser sobrescrito (override).
No Exemplo abaixo demonstra uma classe que executa um processo
Exemplo: CancelarMovimentoActivity.cs
Exemplo de como utilizar um DataServer através da atividade
No Exemplo abaixo é executado um ReadView do DataServer Informado.
Exemplo: ExemploDataServerActivity.cs
4. Manipulando um dataServer de metadados via atividade customizada:
O código exemplo abaixo utiliza as funcionalidades do dataServer para manipular uma tabela de Metadados.
Foram utilizados os recursos de ReadView (para leitura da lista de registros da tabela de metadados),
ReadRecord (para leitura de um registro do metadados) e SaveRecord para enviar os dados para o dataServer do metadados.
Foram simuladas as operações de inclusão de um novo registro, alteração do registro existente e exclusão registro em questão.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using RM.Lib.WinForms; using RM.Lib.Workflow; using RM.Lib; using System.Data; namespace RM.ExemploAtividadeCustom { [RMSDescription(typeof(Properties.Resources), "sActivityTeste")] [RMSActivityCategory(typeof(Properties.Resources), "sCategoryIntegracao")] public class ConTotvsMessageActivity : RMSActivity { //Implementação da regra de execução da atividade de FV. protected override void OnExecute() { // verifica se o serviço esta disponível... if (this.BrokerService == null) throw new RMSWorkflowException("Serviço não disponível!"); //Cria uma nova instancia do DataServer gerado pela ferramenta de medatados. //No exemplo abaixo, foi gerado o dataServer de metadados "RMSPRJ3249920Server". O nome desse dataserver //poderá ser consultado no arquivo "_Broker.dat" localizado dentro do diretório de instalação das dlls do Rm. IRMSDataServer dataServerProduto = (IRMSDataServer)this.BrokerService.CreateServer("RMSPRJ3249920Server"); //Cria uma instancia da classe RMSContext para informar a coligada e usuario. RMSContext context = new RMSContext(); context.CodColigada = 1; context.CodUsuario = "mestre"; //Objeto ownerData em caso de existencia do mesmo em um dataServer. object ownerData = null; //Exemplo de filtro a ser enviado para o método readView. string filter = "Codigo like '%000%' "; //Leitura da visão dos dados. //Método READVIEW: Esse método retornará os dados fornecidos pelo DataServer através do filtro passado //e contexto. Esse método é o mesmo que é executado em todas as visões do RM. DataSet dsView = dataServerProduto.ReadView(context, new object[] { filter }, ownerData); if (dsView.Tables[0].Rows.Count == 3) RM.Lib.RMSException.Throw("Foram encontrados 3 registros!"); //Inclusão de um novo registro //Busca um registro inexistente. DataSet dsNewRecord = dataServerProduto.ReadRecord(context, null, ownerData); //Preenche os dados do registro. DataRow r = dsNewRecord.Tables[0].NewRow(); r["CodColigada"] = "1"; r["Id"] = "1"; r["Codigo"] = "00010"; r["Descricao"] = "Produto teste"; dsNewRecord.Tables[0].Rows.Add(r); //Executa o método abaixo para enviar o registro para o DataServer dataServerProduto.SaveRecord(context, ref dsNewRecord, ownerData); //READRECORD: Esse método retornará apenas um registro. Esse método é o mesmo que é executado ao realizar a edição //ou inclusão de um novo registro.Ele retornará o registro com as seguintes chaves: //CodColigada = 1 e Id = 1 DataSet dsRecord = dataServerProduto.ReadRecord(context, new object[] { 1, 1 }, ownerData); if (dsRecord.Tables[0].Rows.Count == 0) RM.Lib.RMSException.Throw("Registro não encontrado!"); //Realiza uma alteração no registro,,, dsRecord.Tables[0].Rows[0]["Descricao"] = "Produto teste alterado"; //Executa o método abaixo para enviar o registro para o DataServer dataServerProduto.SaveRecord(context, ref dsRecord, ownerData); //Execlui o registro. dsRecord.Tables[0].Rows[0].Delete(); dataServerProduto.SaveRecord(context, ref dsRecord, ownerData); } } }
Esse exemplo foi criado utilizando um dataServer simples criado através do recurso de Metadados do RM.
Lembrando que ao utilizar esse mesmo exemplo com algum outro dataServer do RM, poderão existir particularidades que impeça correto funcionamento do exemplo.
Logo, não garantimos que o exemplo se aplicará em qualquer dataServer do RM.
Lembrando também que a construção de uma atividade customizada é de total responsabilidade do cliente.
Atenção
Ao executar o SaveRecord os registros serão, Inseridos, Atualizados ou Removidos de acordo com o rowState do DataSet informado no SaveRecord.
Para a compilação e execução deste projeto pode ser necessário seguir os passos:
- Atualizar as referências das DLLs do RM Utilizadas "RM.Lib.dll, RM.Lib.WinForms.dll , RM.Lib.Workflow.Activities.dll, RM.Mov.Processos.Intf" com o caminho das mesmas direcionando para o local da Biblioteca RM.
Efetuar "Clean Solution"
Efetuar o "Build Solution" em modo Release.
- Copiar a DLL "Gerada" para a pasta da Biblioteca RM.
Efetuar o cadastro da Atividade de Fórmula Visual acesse o menu ,,, clique no botão Incluir, será exibida a seguinte tela.
Preencha os campos
Nome da Classe: RM.Spx.Exemplo.Activities.CancelarMovimentoActivity
Nome do Assembly: RM.Spx.Exemplo.Activities
Após salvar a atividade estará disponível para utilização.
Observação
Ao retirar a dll referente à atividade criada, da pasta, onde os binários estão localizados, [RM.Net], por exemplo, da próxima vez que a fórmula visual for executada, apenas as atividades válidas, ou seja, apenas as atividades vinculadas às dll's existentes na pasta [RM.Net] serão efetivamente executadas. Ao abrir uma fórmula visual será observado, que apenas as atividades válidas estarão presentes no design da mesma.
Desta forma não temos como garantir o correto funcionamento da fórmula visual, caso a dll de alguma atividade seja retirada da pasta [RM.Net].
Para maiores informações:
Canais de Atendimento
Chamado: Através do Portal TOTVS - www.suporte.totvs.com.br
Telefônico: 4003-0015 Escolhendo as opções 2-2-3-9-5 (Framework) ou 2-2-3-9-4 (BI)
Produto | Framework |
---|---|
Versão | 11.82.XX e 12.01.XX |
Processo | Fórmula Visual |
Subprocesso | Criando uma nova atividade |
Status do Documento: | Produção |
---|---|
Data: | 04/09/2014 |
Versão: | 11.82.XX e 12.01.XX |
Versão Anterior: | 11.82.XX e 12.01.XX |
Autores: |