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:

  1. Referenciar as DLLs "RM.Lib.dll,RM.Lib.WinForms.dll e RM.Lib.Workflow.Activities.dll" ao projeto.

  2. A classe implementada deve herdar da classe RMSActivity, ou outra herança desta, como RMSDynamicActivity.



  3. 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:

  1. Atualizar as referências das DLLs do RM Utilizadas "RM.Lib.dllRM.Lib.WinForms.dll , RM.Lib.Workflow.Activities.dll, RM.Mov.Processos.Intf" com o caminho das mesmas direcionando para o local da Biblioteca RM.
  2. Efetuar "Clean Solution"

  3. Efetuar o "Build Solution" em modo Release.

  4. Copiar a DLL "Gerada" para a pasta da Biblioteca RM.
  5. 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:

@FRAMEWORK

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: