Histórico da Página
Definições importantes
- As regras atuais de manipulação de adapters devem ser escritas e mantidos pelas equipes responsáveis pela entidade no RM.
- O projeto Eai TotvsMessage deve fornecer API's genéricas utilizadas para o desenvolvimento
- Não devem ser criados códigos com condicionais dentro do configurador conforme pacotes de integrações.
Objetivo
O configurador RM deve fornece recursos genéricos que se utilizam das informações definidas nos adapters
...
ou pacotes para a automatização da configuração das integrações bem como do diagnostico de ambiente, configurações e parâmetros.
Definições:
1) Pacotes de integrações:
Pacote de integração é um conjunto de configurações, parâmetros e adapters que são necessários para a integração de determinado
...
módulos do RM com outros sistemas. Exemplos de Pacotes: TOP x Protheus, TIN x Protheus, Folha de Pagamento x Protheus e etc.
1.1 Desenvolvimento de Pacote de Integração:
As equipes dos produtos deverão criar projetos nas suas solutions suas soluções contendo classes a serem utilizadas no processamento do configurador e diagnostico.
1.1.1 Criação dos projetos:
Os projetos a serem criados
...
...
deverão seguir o seguinte padrão de nomenclatura:
RM.{Segmento}.TotvsMessage.Adapter.dll, Onde: Segmento = Sigla do segmento
Exemplo: RM.Prj.TotvsMessage.Configurator.Server.dll
Criação da classe:
a) - Extensão de códigos:
- Herdar da classe: EaiPacoteConfiguratorBase
- Uso do atributo: ConfiguratorPacoteAttribute
EXEMPLO:
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
$/RM/Atual/Release/Prj-Projetos/RM.Prj.TotvsMessage.Configurator.Server [ConfiguratorPacoteAttribute(typeof(Properties.Resources), "d3593c4e-1a4c-58fb-b9c8-feaf13c2fa8b", nameof(Properties.Resources.sPrjCaptionPacoteEAI2sPrjCaptionPacoteMntEAI2))] public class PrjPacoteConfiguratorEai : EaiPacoteConfiguratorBasePrjTopMntProtheusPacoteConfiguratorEai : EaiPacoteConfiguratorBase { /// <summary> /// Configurador de Integrações EAI. /// </summary> public PrjTopMntProtheusPacoteConfiguratorEai(){} /// <summary> /// Retorna lista de configurador do EAI 2.0 utilizados pelo pacote. /// </summary> /// <returns></returns> public override EAIConfigurationProductResult ConfigurationsProduct() { return new EAIConfigurationProductResult(); } /// <summary> /// /// </summary> /// <returns></returns> public override EAIPackage GetEAIPackage() { return new EAIPackage() { integrationId = "1129d688-d724-5afb-9f55-c9f8ce498d57", name = Properties.Resources.sPrjCaptionPacoteMntEAI2, description = Properties.Resources.sPrjTitleConfigEAI2MNT, documentationUrl = "https://tdn.totvs.com/x/AYMOFQ", Adapters = getTransactions() }; } /// <summary> /// /// </summary> /// <returns></returns> private List<EAIPackageAdapter> getTransactions() { List<EAIPackageAdapter> result = new List<EAIPackageAdapter>() { new EAIPackageAdapter() { AdapterId=EaiAdapterTypeEnum.Equipment, Version = "1.002", Mode = EnabledModeEnum.emReceive }, new EAIPackageAdapter() { AdapterId=EaiAdapterTypeEnum.Activity, Version = "1.000", Mode = EnabledModeEnum.emReceive }, new EAIPackageAdapter() { AdapterId=EaiAdapterTypeEnum.Appointment, Version = "1.000", Mode = EnabledModeEnum.emSend }, new EAIPackageAdapter() { AdapterId=EaiAdapterTypeEnum.AssetMonthlyDirectCosts, Version = "1.000", Mode = EnabledModeEnum.emReceive }, new EAIPackageAdapter() { AdapterId=EaiAdapterTypeEnum.AssetMonthlyUnDirectCosts, Version = "1.000", Mode = EnabledModeEnum.emReceive } }; return result; } /// <summary> /// Defiição de parâmetros de pacote. /// </summary> /// <returns></returns> public override EAIPacoteApiParamsResult GetParamsPacote() { EAIPacoteApiParamsResult result = new EAIPacoteApiParamsResult(); List<EAIConfigSchemaEntity> configSchema = new List<EAIConfigSchemaEntity>(); result.paramsList = configSchema; return result; } /// <summary> /// Serviços necessários para integração Siga MNT /// </summary> /// <returns></returns> public override EAIPacoteApiServicesRequiredResult GetApiServicesRequired() { return new EAIPacoteApiServicesRequiredResult() { Services = new List<EAIPacoteApiServiceRequired>() { new EAIPacoteApiServiceRequired() { Name = "WSINTRMMNT.apw?WSDL", Type = CanalComunicacaoEnum.teSOAP } } }; } } |
2) Diagnostico de Conexão
Nesta etapa o configurador realizara a validação das informações de Servidor Portas bem como da disponibilidade de serviços necessários para a integração, como por exemplo EAIService que é um Web Service básico para integração bem como demais serviços que serão definidos no Pacote de integração.
Para a validação de Serviço o pacote devera implementar o método GetApiServicesRequired
3) Diagnostico de Compartilhamentos
Atualmente o analista responsável pelo desenvolvimento da integração pode usar diversos "entry Points" disparados em pontos durante o processamento da mensagem.
Códigos C# (.NET) são criados e armazenados em uma tabela de banco chamada GSourceCode. Esses códigos podem ser "vinculados" a esses pontos.
...
Para o correto funcionamento de integrações que envolvem Protheus com RM existem um conjunto de configurações de compartilhamentos, compatíveis, incompatíveis e recomendados. No EAI 2.0 cada adapter pode possuir um conjunto de configurações. Para isto os adapters devem implementar os seguintes métodos:
ValidateLevelCompanyBranch - Responsável por validação se uma dada configuração é valida, inválida e retornar a configuração recomendada. Este método alem de ser utilizado pelo Configurador também é utilizado no recebimento de mensagens.
Exemplo:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
/// <summary>
/// Valida o nível de compartilhamento da tabela.
/// Não é permitido a utilização de modo Exclusivo por Filial
/// Não é recomendado a utilização de registro compartilhado por empresa. (Replica)
/// </summary>
/// <param name="parms">EAIValidatedSharedModeParams</param>
/// <param name="result">EAIValidatedSharedModeResult</param>
/// <param name="sharedModeColigada">SharingModeEnum</param>
/// <param name="sharedModeFilial">SharingModeEnum</param>
/// <returns>Retorna EAIValidatedSharedModeResult</returns>
public override EAIValidatedSharedModeResult ValidateLevelCompanyBranch(EAIValidatedSharedModeParams parms, EAIValidatedSharedModeResult result, SharingModeEnum sharedModeColigada, SharingModeEnum sharedModeFilial)
{
string tableProtheus = "TV0"; // doNotLocalize
if (sharedModeColigada != SharingModeEnum.smCompartilhado)
{
result.ValidationMessage = string.Format(Properties.Resources.sPrjsharedModeValidated, tableProtheus);
}
if (sharedModeFilial == SharingModeEnum.smExclusivo)
{
result.ValidationMessage += string.Format(Properties.Resources.sPrjsharedModeValidated, tableProtheus);
result.Validated = false;
}
return result;
} |
AliasSharedMode
Este método define o conjunto de tabelas que devem ter seu compartilhamento validado pelo adapter, a partir destas tabelas o framework de configuração buscara seus compartilhamentos no Protheus e realizara a chamada do método de validação de compartilhamento do respectivo adapter.