Este artigo foi traduzido por máquina.

BizTalk

Dados de EDI em lote no BizTalk Server 2010

Mark Beckner

 

Com a capa de Data Interchange (EDI) expandedElectronic­bilities disponíveis no Microsoft BizTalk Server 2010, mais empresas estão olhando como aproveitá-lo dentro de seus ambientes. O processamento em lotes de dados EDI é algumas das funcionalidades mais valiosas que a plataforma pode oferecer, ainda pode ser confuso e complexo de ser implementado. Usando as etapas descritas neste artigo, você vai aprender rapidamente e facilmente extrair dados de um banco de dados de origem e executar mapeamento e processamento em lotes usando vários cenários. Informações sobre como configurar o adaptador de SQL para recuperar dados usando FOR XML está incluído na discussão.

Visão geral da solução

Trabalhando com dados em lote no BizTalk Server 2010 pode ser bastante complexo, mas grande parte dessa complexidade pode ser removido se você pensa por meio de sua arquitetura e decidir o melhor lugar para lidar com os vários aspectos do processamento em lotes. Para compreender os componentes primários de processamento em lotes, você está indo trabalhar através da criação e configuração de cada um. Você vai começar com a criação de um procedimento armazenado que extrai os dados de origem em um formato facilmente consumível pelo BizTalk — e em um formato que permite várias opções de como você pode querer lotes de seus dados. Em seguida, você verá criando um esquema e opções para mapear os dados para o formato de destino de EDI. Finalmente, você vai configurar processamento em lotes em um acordo de parte do BizTalk para que os dados podem ser criados e gravados em um arquivo. Para trabalhar com essa solução, você precisará BizTalk Server 2010, o Visual Studio 2010 e o SQL Server 2008 R2.

Extração de dados do SQL Server usando FOR XML e XMLNAMESPACES

Há uma opção poderosa quando consultar dados do SQL Server para usam no BizTalk. Esta opção é FOR XML, que permite que os dados a serem recuperados em um formato XML específico. XML é a base na qual todos os dados no BizTalk se baseia. Quando extraído como XML, os dados de um procedimento armazenado podem ser imediatamente prontos para o consumo por orquestrações e mapas sem a necessidade de gerar artefatos complexos que são geralmente necessários ao comunicar-se através dos vários adaptadores SQL. A abordagem de FOR XML tem algumas grandes vantagens:

  • Ele permite ao desenvolvedor escrever peças essenciais da arquitetura de integração sem ter que aprender o BizTalk SQL Server.
  • Campos adicionais podem ser adicionados aos resultados e incorporados no BizTalk componentes com relativa facilidade.
  • É uma maneira eficiente para processar dados e reduz o número de componentes que devem ser desenvolvidas.
  • Ele pode ser formatado para coincidir com esquemas de alvo para simplificar o mapeamento.

Há uma série de opções relacionadas ao uso de FOR XML no SQL Server. A forma mais adequada de usá-lo quando se lida com dados criados para o BizTalk é para declarar um namespace específico usando XMLNAMESPACES e formatar o XML especificamente como deseja que ele usando o modo PATH (em oposição a deixar que o SQL Server automaticamente o nome para você, usando o modo AUTO). XMLNAMESPACES é uma cláusula simples que pode ser adicionada antes da instrução SELECT que cria o XML e o modo de caminho garante que você pode criar qualquer tipo de hierarquia e combinação de atributos e elementos que você precisa em ordem para processar os dados no formato apropriado.

Figura 1 mostra um exemplo de um procedimento armazenado usando FOR XML PATH e XMLNAMESPACES. Ele primeiro declara o namespace que o documento XML terá e, em seguida, formata o XML. A melhor abordagem a ser tomada quando construir a estrutura do seu XML é olhar para o que será esse XML mapeado no BizTalk. Se você pode corresponder à estrutura de seu esquema de destino com a esquema da fonte, o mapeamento entre os dois vai ser muito mais simples. Por exemplo, se você estiver criando uma estrutura de funcionários para mapear para um destino estrutura empregado, verifique a fonte de hierarquia dos empregados (nome, data de nascimento, endereços, telefones e assim por diante) coincidir com o destino hierarquia de funcionários.

Figura 1 procedimento armazenado usando FOR XML e XMLNAMESPACES

    CREATE PROCEDURE [dbo].[GetData] AS
    BEGIN
     -- define the namespace and prefix
     WITH XMLNAMESPACES('http://sql.claims.extract' as "ns0")
     -- top level is set to NULL
     SELECT NULL
           ,(SELECT ClaimData.ClaimType As [ns0:ClaimType]
                 ,ClaimData.ClaimNo As [ns0:ClaimNo]
                 ,ClaimData.DateFrom As [ns0:DateFrom]
                 ,(SELECT first As [ns0:FName]
                         ,last As [ns0:LName]
                         ,birth As [ns0:BDate]
                  FROM Members
                  WHERE Members.ID = ClaimData.MemberID
                  FOR XML PATH('ns0:Member'), TYPE)
           FROM ClaimData 
         FOR XML PATH('ns0:Claim'), TYPE)
       FOR XML PATH('ns0:ClaimExtract'), TYPE
    END

Além de formatar os dados, você deve considerar adicionar regras de negócio no procedimento armazenado. A lógica mais você pode adicionar a este nível, mais fácil a solução será a manter e a desenvolver — não há necessidade de recompilar o código ou passar por procedimentos de testes complexos. Basta atualizar o procedimento armazenado e que estão a ser aplicadas as regras de negócios correta para o conjunto de resultados de teste. Em muitos casos, regras de negócios podem ser incorporado no procedimento armazenado, em vez de tentar lidar com eles através de motor de regras de negócios (BRE) no BizTalk. Criação de uma arquitetura de BizTalk forte começa, garantindo que a tecnologia mais adequada é usada em cada fase.

Configurar um adaptador de SQL para extrair dados

Agora que você tem um procedimento armazenado que retorna XML, a próxima etapa é configurar o BizTalk Server para recuperar os dados. Isso pode ser feito usando o adaptador padrão de SQL que vem com o produto. Desenvolvedores podem encontrar trabalhando com o adaptador de SQL para ser extremamente pesado. Na minha experiência, isso geralmente requer a geração de um número de esquemas que são usados para mapear os resultados para vários artefatos alvo e é geralmente fácil de manter e alargar, nem intuitiva para trabalhar com. No entanto, em alguns casos — como é o eu vou olhar agora — ele é incrivelmente simple de usar e oferece um grande serviço.

No caso de extrair dados XML diretamente de um procedimento armazenado, existem vários benefícios excelentes que usando o adaptador de SQL fornece: ele é fácil de configurar, requer não esquemas adicionais do BizTalk e pode ser configurado para executar em um agendamento. Embora você vai encontrá-lo útil para a extração de dados de FOR XML, em geral você deve usar um Microsoft.Classe de NET Framework para interagir com o SQL Server.

Para usar o adaptador de SQL para chamar o procedimento armazenado, começa com a criação de um novo local de receber do BizTalk. O local receber deve ser do tipo "SQL", e o pipeline pode ser definido como o pipeline de PassThruReceive padrão. Existem vários campos que merecem discussão:

  • Nome de elemento de raiz do documento este é um nó de recipiente para o conjunto de resultados. Você já pode ter um elemento de raiz definido no resultado XML definido pelo procedimento armazenado, mas o adaptador vai envolvê-la em um nó adicional. Isso é útil se você precisar dividir o conjunto de resultados em documentos individuais usando um esquema de envelope — mas não cada solução precisa fazer isso.
  • Documento alvo Namespace This namespace é usado pelo esquema. Você pode fazer algo semelhante ao que você tem como o namespace declarado no procedimento armazenado.
  • Comando SQL é o comando de EXEC (execução) que você usa para chamar o procedimento armazenado. No caso do procedimento armazenado descrito anteriormente, esse valor seria EXEC GetData. Você pode facilmente adicionar parâmetros. Por exemplo, se você quisesse chamar GetData para um parceiro de negociação específicas e para um número específico de registros, você poderia inserir EXEC GetData 'TradingPartnerName', '100'.

Uma vez que o local receba e porta de recebimento associado foram criados, você pode criar um simples porta de envio que assina a porta de recebimento e gravará o XML a uma queda de arquivo. Para fazer isso, basta defina o BTS.ReceivePortName no filtro da porta de envio para o nome da porta de recebimento que você criou para o adaptador de SQL. Uma vez que tudo está habilitado e em execução, você deve ver uma saída similar ao mostrado na Figura 2.

Figura 2 exemplo resultado da chamada do adaptador SQL procedimento armazenado

<DataResultSet xmlns="http://SQLExtract.DataResultSet">
  <ns0:ClaimExtract xmlns:ns0="http://sql.claims.extract">
    <ns0:Claim xmlns:ns0="http://sql.claims.extract">
      <ns0:ClaimType>Institutional</ns0:ClaimType>
      <ns0:ClaimNo>ABC100</ns0:ClaimNo>
      <ns0:DateFrom>2012-01-01T00:00:00</ns0:DateFrom>
      <ns0:Member xmlns:ns0="http://sql.claims.extract">
        <ns0:FName>John</ns0:FName>
        <ns0:LName>Doe</ns0:LName>
        <ns0:BDate>1975-01-28T00:00:00</ns0:BDate>
      </ns0:Member>
    </ns0:Claim>
    <ns0:Claim xmlns:ns0="http://sql.claims.extract">
      <ns0:ClaimType>Institutional</ns0:ClaimType>
      <ns0:ClaimNo>XYZ200</ns0:ClaimNo>
      <ns0:DateFrom>2012-01-05T00:00:00</ns0:DateFrom>
      <ns0:Member xmlns:ns0="http://sql.claims.extract">
        <ns0:FName>Jane</ns0:FName>
        <ns0:LName>Doe</ns0:LName>
        <ns0:BDate>1976-10-08T00:00:00</ns0:BDate>
      </ns0:Member>
    </ns0:Claim>
  </ns0:ClaimExtract>
</DataResultSet>

Criando um esquema de resultados da consulta

A criação do BizTalk real XSD com base em XML obtido o procedimento armazenado o adaptador SQL pode ser realizada através do uso de um assistente. Para criar o esquema, siga estas etapas:

  1. Botão direito do mouse seu projeto do BizTalk Visual Studio que você deseja adicionar o esquema para e selecione Add | Itens gerados.
  2. Na janela que se abre, clique em gerar esquemas.
  3. Na caixa de diálogo gerar esquemas, defina a propriedade de tipo de documento "XML bem formado." Observe que, por padrão, este não é disponível inicialmente. Um erro estalará acima que arquivo deve ser executado para habilitar essa funcionalidade de estrutura de tópicos.
  4. Defina o arquivo de entrada a uma instância de XML mostrado na Figura 3 e clique em OK.

The Generated XSD
Figura 3 O XSD gerado

Essas etapas irão adicionar dois XSDs ao seu projeto. Você pode decidir como você deseja usá-los, e você também pode combiná-los em um único XSD se preferir. Um exemplo de esquema do nível superior é mostrado na Figura 3.

Mapeamento e opções de processamento em lotes

Agora você tem os dados de origem, prontos para ser mapeado para seu formato de EDI. Pensei que necessidades ser posta a melhor forma de formato e lote o EDI documentos que vão ser enviados. Alguns parceiros comerciais podem exigir vários registros dentro de um único grupo de ST/SE, enquanto outros podem exigir único registros dentro deste agrupamento. Poderia haver limitações impostas sobre o número total de registros dentro de um único documento ou um único ST/SE, e provavelmente haverá requisitos ao redor quando um lote Obtém criado e entregue. O formato de documento (especificação de alegação de cuidados de saúde) 837 fornece um excelente exemplo. Parceiros comerciais podem, por exemplo, exigir um máximo de 2.500 declarações estar presentes dentro de cada grupo de ST/SE e um máximo de 20 ST/SEs individuais estejam presentes dentro de um único documento. Avaliar os requisitos das diversas partes com as quais você está trocando informações vai levar você para determinar a melhor estruturar o caminho dos dados pelo BizTalk.

Como para o real BizTalk mapa e lotes associados, duas opções básicas estão disponíveis. Um é para mapear seus dados para o esquema de EDI de destino em um único grupo de ST/SE; a segunda é para mapear vários registros de fonte de dados para um único grupo de ST/SE. Dependendo de qual rota você precisa levar, talvez você precise configurar um esquema de envelope para dividir os dados de origem e você terá algumas diferenças em seu mapeamento e em suas configurações de lote.

Um registro por individuais ST/SE começar observando o cenário onde os dados de origem serão divididos e loteados como único registros dentro dos grupos individuais de ST/SE. Os dados de origem de exemplo mostrados na Figura 3 tem dois créditos nele. O objetivo é levar as reivindicações individuais (<ns0:Claim>) e dividi-los para fora para que eles podem ser mapeados individualmente para o esquema de destino 837. Depois que mapeado, os dados podem ser loteados como ele chega no BizTalk. Para dividir os dados, você precisará criar um esquema de envelope:

  • Defina a propriedade de Envelope no esquema para "Sim".
  • Defina o XPath de corpo no segmento de raiz do documento para o nó que contém os nós de reivindicação — neste caso, o nó ClaimExtract.
  • Implante o esquema de envelope. No momento em que é recebido um arquivo em um local receber com pipeline XMLReceive padrão implementado, ele será dividido. Não é necessário fazer referência ao esquema de envelope em qualquer lugar.
  • Se você configurar uma porta de envio para inscrever-se para a porta de recebimento que está recebendo o doc para dividir, a porta de envio irá escrever os arquivos XML de pedido individuais. Você pode usar estes como a fonte de seu mapeamento para seu esquema de EDI de destino. A porta de envio deve ter o mapa da fonte para a transação de EDI nele.

Neste momento há muitos documentos EDI individuais empilhados em um diretório de arquivos. Você agora pode configurar um segundo local de recebimento /­combinação de porta de envio que faz o processamento em lotes, como segue:

  • Em seu local receba, deverá receber Pipeline EdiReceive. Ele vai pegar os documentos EDI individuais que foram apenas escritos pela primeira combinação de Receive/Send.
  • Em sua porta de envio, defina os filtros conforme Figura 4. Observe que o EDI.BatchName e o EDI.DestinationPartyName são definidos como as informações da parte que será configurado nas próximas etapas. Esta porta de envio, com EDISend especificado como um pipeline, pode ser definida para gravar em um arquivo Soltar — a saída será os dados em lote.

Filters on the Batching Send Port
Figura 4 filtros na porta de envio do lote

  • Crie um novo acordo que representa a troca de dados com o parceiro de negociação que vai receber os documentos em lote e parte do BizTalk. Os principais campos para configurar são:
    • No separador de identificadores, defina o remetente e o receptor identificações com valores apropriados. O DestinationPartyName deve coincidir com o que você definir no filtro de porta de envio.
    • Nas guias configurações de Host Local e Envelopes, configure as propriedades para os documentos EDI específicos que você está lidando.
    • Na guia Configuração do lote, defina as seguintes propriedades:
      • Defina o nome de lote igual a que você configurá-lo para o filtro de porta de envio.
      • Defina o filtro de lote com duas propriedades:
        • BTS.ReceivePortName = = [O nome da sua porta onde os documentos EDI individuais estão chegando de recebimento]
        • EDI.ST01! = 997
      • Defina a opção de lançamento. Isso será muito provavelmente baseado no cronograma (entregar documentos têm enfileirados ao longo das últimas 24 horas) ou no número total (enviar esse lote quando há um total de 2.500 itens em fila). Se lançando na propriedade "número máximo de transações define em", defina a lista suspensa ao grupo.
      • Uma vez que as propriedades foram definidas, clique em Iniciar para ativar o processamento em lotes. Pode demorar vários minutos antes que o lote seja completamente iniciado. Continue a clicar no botão Atualizar até aparece a mensagem "Batching é ativado". Deve haver uma instância de orquestração lote executado no BizTalk (isso pode ser visto através de instâncias em execução do relatório BizTalk grupo Hub). Esta orquestração é parte do BizTalk EDI aplicativo que é instalado com os componentes do EDI no BizTalk — isso não é algo que você tem que escrever.
    • Clique em OK para guardar todas as definições.

Uma vez que tudo é configurado, se alistou, iniciado e ativado, reinicie a instância de host do BizTalk. Isto irá assegurar que tudo está fresco na memória. Em seguida, solte os documentos individuais de ST/SE sobre o local receber e o lote será produzido, uma vez que o mecanismo de liberação aciona (por exemplo, se você especificou 2.500 como o número de conjuntos de transação, em seguida, você deve descartar 2.500 documentos individuais).

Muitos registros por individuais ST/SE O próximo cenário olhar é mapear vários registros em grupos individuais de ST/SE. Novamente, os dados de origem do exemplo mostrados na Figura 3 tem dois créditos nele. O novo objectivo é tomar as pretensões individuais (o <ns0:Claim> é o nó raiz para um único crédito) e mapeá-los tanto para um esquema único alvo 837. Depois que mapeado, os dados também podem ser entregues como é, em um único documento com um único ST/SE, ou pode ser loteado semelhante ao exemplo anterior em um documento com várias ST/SEs, cada um com vários registros de crédito.

Comece com alterando o procedimento armazenado que você escreveu (ver Figura 1). Agora, ele simplesmente traz de volta todos os registros no banco de dados. Você precisará adicionar um parâmetro para limitar o número de registros que voltar. Por exemplo, se você quiser ser capaz de colocar 5.000 registros em uma única ST/SE, em seguida, você precisará pegar apenas 5.000 registros em uma hora no seu banco de dados de origem. Você pode adicionar parâmetros adicionais, tais como "Trading Partner ID," para restringir ainda mais o que está voltando e fazer o procedimento armazenado reutilizáveis entre várias partes. Depois de adicionado, você pode modificar as configurações do adaptador de SQL para passar parâmetros adicionais. Eventualmente você defina o adaptador de SQL para executar em um ciclo recorrente (a cada hora, por exemplo), extração de 5.000 registros cada vez.

Em seguida, altere o mapeamento. Qualquer mapeamento você põr no lugar para a fonte para o esquema de EDI de destino agora precisa ser modificada com um loop. No caso de 837, por exemplo, você vai querer definir uma functoid de laço com a fonte sendo o <ns0:Claim> (do esquema no Figura 3) e o destino sendo o TS837_2000A_Loop, que constitui o nível superior de uma reivindicação de destino.

Agora que seu mapeamento estiver concluído, você pode optar por configurar processamento em lotes dentro do partido de BizTalk ou não. Se você simplesmente deseja entregar os 5.000 pedidos em um único ST/SE em um único documento, seu trabalho é feito — basta configurar uma porta de envio e enviar os dados usando o pipeline de EDISend. Se você desejar definir o processamento em lotes, a configuração será o mesmo que o que você trabalhou através deste artigo.

Opções de liberação do lote

Você tem um número de opções disponíveis para liberar seus lotes. Conforme indicado anteriormente, os dois mais comuns são a lotes em uma agenda específica de lançamento e a libertar quando for atingido um número específico de transações. O Agendador permite uma variedade de configurações de hora em hora, diárias e semanais. Por exemplo, se você precisa entregar qualquer registros têm a espera cada dia à meia-noite, independentemente da contagem, você configuraria o lote para liberar de uma programação diária à meia-noite. A opção para liberar um lote com base em um número específico de transações é facilmente configurada — basta especificar o que é o número. Opções de lotes adicionais incluem liberando sobre um número especificado de caracteres em um intercâmbio e um gatilho de versão externa.

O lançamento externo disparador pode ser acionado usando uma mensagem de controle caiu na caixa de mensagem.

Grande simplificação

Como você construir seu processo de lotes no BizTalk, certifique-se que você está construindo algo que é tão simples quanto possível. Um monte de soluções BizTalk são sobrecarregados por excessivas orquestrações, esquemas, DLLs referenciados e outros artefatos. Os desenvolvedores geralmente irão decidir que eles precisarão criar uma orquestração de lote personalizada para lidar com o que eles sentem é uma situação única. Sempre centrar-se sobre a viabilidade a longo prazo de sua solução. Pode um desenvolvedor de seis meses a contar agora olhar para o que estavam fazendo e compreender como trabalhar com ele? Em geral, você pode construir um processo para extrair dados de BizTalk e entregá-lo aos diversos parceiros de negociação com um ou nenhum orquestração, um esquema que representa os dados de origem, um esquema que representa os dados de destino e um mapa por partido. Se você estiver criando componentes mais do que isso, dar um passo para trás e reavaliar sua solução. Você provavelmente vai descobrir que você pode fazer alguns grande simplificação.

Mark Beckner é o fundador da Inotek Consulting Group LLC (inotekgroup.com). Ele trabalha em toda a pilha de Microsoft, incluindo o BizTalk, SharePoint, Dynamics CRM e geral.Desenvolvimento de NET Framework.

Graças ao seguinte especialista técnico para revisão deste artigo: Karthik Bharathy