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 : EaiPacoteConfiguratorBase |
...
PrjTopMntProtheusPacoteConfiguratorEai : 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.1
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. Esse mecanismo continuará existindo pois integrações totalmente customizadas devem ainda utilizar esse modelo.