Páginas filhas
  • Integração RM x SmartLink Behavior Sharing - Visão desenvolvedor

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

  1. Criar um projeto (classLibrary .NET) na solution do segmento em questão, com o seguinte padrão de nome: RM.[Segmento].XXX.SmartLink.Service.
    1. Exemplo: RM.Glb.SGDP.SmartLink.Service.dll
  2. Adicionar referência para a dll "RM.Lib.SmartLink.dll";
  3. Criar uma classe herdando da ancestral "RMSSmartLinkConsumerMessageBase".

  4. A classe "RMSSmartLinkConsumerMessageBase" herda da classe RMSObject da Lib. Consequentemente, as classes de "consumers" poderão chamar os métodos "CreateFacade" e "CreateModule" dentro de suas estruturas.
  5. Carimbar a classe com o atributo "RMSSmartLinkConsumerMessageAttr". Nesse atributo, devem ser informados os dados abaixo:

    PropriedadeDescrição
    Cod.SistemaIdentificador da aplicação
    ComandoNome do Comando da mensagem



  6. Para realização de tratamento de exceções no caso de ocorrer erro no processamento da mensagem
    Quando for considerado um erro e um nova tentativa de processamento deve ser realizada: 
    A classe RMSSmartLinkConsumerMessageException ou outra, pode ser utilizada.
    Neste caso a mensagem será reenfileirada e novas tentativas de processamento serão realizadas.

    Sendo considerado que a mensagem deve ser descartada, ou seja, esta mensagem não deve ser processada neste momento ou apenas sob intervenção manual:
    A classe RMSSmartLinkConsumerFatalException, deverá ser utilizada e informado o motivo.
    Neste caso a mensagem será colocada em um fila de espera (DLQ) e somente será reprocessada por uma intervenção manual ou será descartada.

  7. Código fonte de exemplo (extraído da classe "GlbSGDPConsumerDataCommandMessage" localizada na solution de Globais, projeto "RM.Glb.SGDP.SmartLink.Service":

    Bloco de código
    languagec#
    firstline1
    linenumberstrue
    using RM.Glb.SGDP.SmartLink.Service.Domain.Interfaces;
    using RM.Lib;
    using RM.Lib.SmartLink.Domain;
    using RM.Lib.SmartLink.Domain.Consumer;
    using RM.Lib.SmartLink.Domain.Interfaces;
    using RM.Lib.SmartLink.Domain.Publisher;
    using System;
    using System.Runtime.Serialization;
    
    namespace RM.Glb.SGDP.SmartLink.Service.Domain
    {
      /// <summary>
      /// Regras de implementação do mecanismo de processamento da mensagem SGDDataCommand do SGDP
      /// </summary>
      [RMSSmartLinkConsumerMessageAttr(CodSistema.Glb, "SGDPDataCommand")]
      public class GlbSGDPConsumerDataCommandMessage : RMSSmartLinkConsumerMessageBase
      {
        protected override ConsumerMessageExecuteResult DoExecute(string message)
        {
          logService.NotifyLogInfo(Properties.Resources.sconTotvsAppInicioExecucaoDoConsumerSGDPDataCommandConsumer);
          ConsumerMessageExecuteResult result = new ConsumerMessageExecuteResult();
          IGlbSGDPResolverService resolver = GlbSGDPResolveFactory.NewSGDPResolve(this.DBS, this.logService);
          IGlbSGDPPublisherMessageService publisher = new GlbSGDPPublisherMessageService(this.SmartLinkPublisherService, resolver, logService);
    
          ExecuteDataCommandParms par = new ExecuteDataCommandParms();
          par.Message = message;
          try
          {
            var execDataResult = resolver.ExecuteSGDPDataCommand(par);
            logService.NotifyLogInfo(Properties.Resources.sconTotvsAppJSonSGDPDataResponseCommandForamGerados, 
              Properties.Resources.sconTotvsAppQuantidadeDeJSonsGerados, execDataResult?.JsonResults?.Count);
            result.CorrelatedID = execDataResult.RequestId;
            if (execDataResult?.JsonResults != null)
            {
              foreach (var jsonResult in execDataResult.JsonResults)
              {
                AddResponseDataCommandParms parResponse = new AddResponseDataCommandParms();
                parResponse.Message = jsonResult;
                parResponse.CorrelatedId = execDataResult.RequestId;
                publisher.AddResponseDataCommand(parResponse);
              }
            }
          }
          catch(Exception ex)
          {
            logService.NotifyLogError(new GlbSGDPConsumerDataCommandMessageException(
              Properties.Resources.sconTotvsAppErroAoProcessarSGDDataCommand, ex));
          }
          logService.NotifyLogInfo(Properties.Resources.sconTotvsAppFimExecucaoDoConsumerSGDPDataCommandConsumer);
          return result;
        }
      }
    
      [Serializable]
      public class GlbSGDPConsumerDataCommandMessageException : RMSApplicationException
      {
        public GlbSGDPConsumerDataCommandMessageException() : base()
        {
        }
    
        public GlbSGDPConsumerDataCommandMessageException(string message) : base(message)
        {
        }
    
        public GlbSGDPConsumerDataCommandMessageException(string message, Exception ex) : base(message, ex, string.Empty)
        {
        }
    
        public GlbSGDPConsumerDataCommandMessageException(SerializationInfo info, StreamingContext context)
      : base(info, context)
        {
        }
      }
    }

...