Versões comparadas

Chave

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

01. Apresentação

Este documento tem por objetivo apresentar os passos necessários para disponibilizar no DataServer da linha RM a integração com o Totvs Assinatura Eletrônica. 

02. Configuração

Para configurar o RM x Totvs Assinatura Eletrônica é necessário informar nos parâmetros globais o caminho das API's do Totvs Assinatura Eletrônica.

03. Habilitar Meu DataServer

Para habilitar a utilização do Totvs Assinatura Eletrônica basta informar a propriedade "AllowTotvsSign" com o valor "True" na Action equivalente ao dataServer desejado.
Sendo assim, será disponibilizado a opção do Totvs Assinatura Eletrônica em sua TooBarfuncionalidade.

Bloco de código
languagec#themeRDark
titleExemploCódigo exemplo
collapsetrue
$/RM/Atual/Release/Prj-Projetos/using RM.Prj.TotvsMessage.Configurator.Server


  [ConfiguratorPacoteAttribute(typeof(Properties.Resources),    "d3593c4e-1a4c-58fb-b9c8-feaf13c2fa8b", nameof(Properties.Resources.sPrjCaptionPacoteMntEAI2))]
  public class PrjTopMntProtheusPacoteConfiguratorEai : EaiPacoteConfiguratorBaseImb.Parametros;
using RM.Imb.Recursos;
using RM.Lib.Client;
using RM.Lib.WinForms;
 
partial class ImbContratoLocAction
  {
    /// <summary>
    /// Configurador Inicialização da action de contrato de locação   Integrações EAI.
    /// </summary>
    private publicvoid PrjTopMntProtheusPacoteConfiguratorEaiInitializeComponent(){}

    /// <summary>{
    /// Retorna listacomponents de= configurador do EAI 2.0 utilizados pelo pacote.
    /// </summary>
    /// <returns></returns>
new System.ComponentModel.Container();
      DataServerName = "ImbContratoLocData";     
      publicFormName override EAIConfigurationProductResult ConfigurationsProduct()
= "ImbContratoLocForm";     {
      returnAllowTotvsSign new= EAIConfigurationProductResult()true; 
     }
  }

Resultado:

Image Added

04. Vinculo Processos

Após habilitar a utilização do Totvs Assinatura Eletrônica, é possível condicionar a execução de processo de acordo com o status do documento anexado a entidade principal.

Exemplo

Imagine que temos um contrato de locação de imóvel em elaboração e o usuário do sistema, enviou o "documento / contrato" para o locatário assinar via Totvs Assinatura eletrônica. 
E o usuário do RM, pode efetivar o contrato no RM antes mesmo do locatário assinar o documento.

Demanda:

Como devo codificar, para condicionar o sucesso do processo de "Efetivação do Contrato" com a assinatura do documento. Ou seja,  preciso que seja a apresentando mensagem de erro tratado para o usuário do RM caso ele tente efetivar o contrato para o documento não assinado.


04.1 Disponibilização dos processos

Para disponibilizar os processo para o usuário possa vincular com o documento, basta preencher a propriedade "ProcessValidationTotvsSignActions"

Bloco de código
languagec#
titleCódigo exemplo
collapsetrue
using RM.Imb.Parametros;
using RM.Imb.Recursos;
using  /// <summary>
    /// RM.Lib.Client;
using RM.Lib.WinForms;

namespace RM.Imb.Aluguel.ContratoLoc
{
  partial class ImbContratoLocAction
  {
    /// </summary><summary>
    /// <returns></returns>
    public override EAIPackage GetEAIPackage()
    {Inicialização da action de contrato de locação    
    /// </summary>
    private void return new EAIPackageInitializeComponent()
      {
      components  integrationId = "1129d688-d724-5afb-9f55-c9f8ce498d57", 
        name = Properties.Resources.sPrjCaptionPacoteMntEAI2,new System.ComponentModel.Container();

        descriptionDataServerName = Properties.Resources.sPrjTitleConfigEAI2MNT,"ImbContratoLocData";
      FormName  documentationUrl = "https://tdn.totvs.com/x/AYMOFQ",ImbContratoLocForm";
      // Libera Adapterso = getTransactions()
      };Totvs Assinatura eletrônica para o dataServer
    }

  AllowTotvsSign  /// <summary>
    /// 
= true;

      /// </summary>
Processo de efetivar contrato /// <returns></returns>de locação
    private List<EAIPackageAdapter> getTransactions()
ProcessActions.Add("ImbEfetivarContLocAction", true);


    {
  //Disponibilização de processo na List<EAIPackageAdapter>tela resultde =envio new List<EAIPackageAdapter>()
   de documento do Totvs Assinatura
       { ProcessValidationTotvsSignActions.Add(new EAIPackageAdapterRMSProcessTotvsSignInfo() { AdapterId=EaiAdapterTypeEnum.Equipment,
      {
        ActionName = nameof(ImbEfetivarContLocAction),
          VersionLabelProcess = "1.002", Mode = EnabledModeEnum.emReceive },Properties.Resources.SImbCaptinEfetivacaoContratoTotvsSign
      });

      ProcessValidationTotvsSignActions.Add(new EAIPackageAdapterRMSProcessTotvsSignInfo() { AdapterId=EaiAdapterTypeEnum.Activity,
      {
        ActionName = nameof(ImbContratoLocEscalonamentoAction),
          VersionLabelProcess = "1.000", Mode = EnabledModeEnum.emReceive },Properties.Resources.SImbCaptinEfetivacaoEscalonamentoTovsSign
      });

      ProcessValidationTotvsSignActions.Add(new EAIPackageAdapterRMSProcessTotvsSignInfo() { AdapterId=EaiAdapterTypeEnum.Appointment,
      {
        ActionName = nameof(ImbEfetivarAditivoContLocBaseAction),
          VersionLabelProcess = "1.000", Mode = EnabledModeEnum.emSend },Properties.Resources.SImbCaptinEfetivacaoAditivoTovsSign
      });

      ProcessValidationTotvsSignActions.Add(new EAIPackageAdapterRMSProcessTotvsSignInfo() { AdapterId=EaiAdapterTypeEnum.AssetMonthlyDirectCosts,
      {
        ActionName = nameof(ImbEncerrarContLocAction),
          VersionLabelProcess = "1.000", Mode = EnabledModeEnum.emReceive },Properties.Resources.SImbCaptinEfetivacaoEncerramentoTovsSign
            new EAIPackageAdapter() { AdapterId=EaiAdapterTypeEnum.AssetMonthlyUnDirectCosts,
                          Version = "1.000", Mode = EnabledModeEnum.emReceive }
          };

      return result;
    }


});
    }


Resultado:

Os processo que foram preenchidos na action na lista ProcessValidationTotvsSignActions são apresentando no cadastro do documento.

Image Added

Observação:

Caso a "action" não possua processos definidos não será exibido a página de seleção, os processos marcados para validar assinatura eletrônica serão gravados na tabela GINTEGRACAOTOTVSSIGNRESTRICAO


04.2 Validação dos processos

Após a exposição dos processo, os mesmo são exibidos para o usuário RM na aba de validações . Mas ainda não é suficiente, pois você tem apenas quais os processo foram marcados pelo usuário para "Validar" na tela do documento. Precisamos dessa informação em camada server para que o analista codifique sua validação. 

Foi disponibilizado método na framework  cujo sua responsabilidade e retornar informações referente documento anexado ao seu "DataServer" Principal. Sendo assim, você pode consumir esse método e implementar sua validação. Você deverá adicionar em seu Facade, uma chamada para o método "RetornarDadosArquivo(actionName, serverName, pkValues)" disponível na interface IGlbTotvsSignMod. E agora e utilizar o seu metodo que criou em seu facade.


Bloco de código
languagec#
titleCódigo exemplo
collapsetrue
using RM.Glb.TotvsSign;
using RM.Glb.TotvsSign.IService;
using RM.Lib.Server;
using System.Collections.Generic;

namespace RM.Imb.Aluguel.Facade
{
  public class ImbAluguelTotvsSignFacade : RMSFacade
  {
    /// <summary>
    /// Defiição de parâmetros de pacote.
    /// </summary>
    /// <returns></returns>
    public override EAIPacoteApiParamsResult GetParamsPacote()
    {
      EAIPacoteApiParamsResult result = new EAIPacoteApiParamsResult();<param name="actionName">Action que deseja localizar</param>
    /// <param name="serverName">Nome do dataserver que foi o anexo do documento: Exemplo: ImbContratoLocData</param>
    ///  List<EAIConfigSchemaEntity> configSchema = new List<EAIConfigSchemaEntity>();
      result.paramsList = configSchema;

<param name="pkValues">Pk da entidade Principal. Exemplo:1;45 Coligada =1 e CodContrato=45</param>
    /// <returns></returns>
 return result;
  public  }

    /// <summary>List<ImbDocumentSignItem> RetornarDocumentoTotvsSign(string actionName, string serverName, List<string> pkValues)
    ///{
 Serviços necessários para integração Siga MNT
List<ImbDocumentSignItem> retorno =  /// </summary>new List<ImbDocumentSignItem>();
    /// <returns></returns>
 using (var totvsSign public override EAIPacoteApiServicesRequiredResult GetApiServicesRequired()= CreateModule<IGlbTotvsSignMod>("GlbTotvsSignMod"))
    {
      return new EAIPacoteApiServicesRequiredResult(if (totvsSign.IsConfiguracaoIntegracaoTotvsSign())
        {
        Services = new List<EAIPacoteApiServiceRequired>(  totvsSign.RetornarDadosArquivo(actionName, serverName, pkValues)
            { new EAIPacoteApiServiceRequired() { Name = "WSINTRMMNT.apw?WSDL", Type = CanalComunicacaoEnum.teSOAP  } }
?.ForEach(doc => retorno.Add(doc));
        }
      return }retorno;
    }
  }

04. Vinculo Processos

...