Como Receber Mensagens do SAP a partir de uma RFC Destination – WCF Adapter

Esse post foi baseado no original Receiving Inbound RFC Calls by Using BizTalk Server.

Apesar da mudança com o novo Adaptador WCF-SAP estar sendo bem sofrida, uma coisa boa é que agora podemos receber mensagens em XML numa porta request-response. O que era impossível com o antigo BizTalk Adapter 2.0 for mySAP Suite Business, que só utilizava IDOC em formato Flat File.

Vamos começar olhando como deve ser a declaração da RFC no SAP:

FUNCTION Z_RFC_ADD.
*"------------------------------------------------------------------
*"
*"Local interface:
*"  IMPORTING
*"     VALUE(X) TYPE  INT4
*"     VALUE(Y) TYPE  INT4
*"     VALUE(DEST) TYPE  CHAR20 DEFAULT 'SAPADAPTER'
*"  EXPORTING
*"     VALUE(RESULT) TYPE  INT4
*"------------------------------------------------------------------
CALL FUNCTION 'Z_RFC_ADD' DESTINATION DEST
EXPORTING X = X
Y = Y
IMPORTING RESULT = RESULT.

ENDFUNCTION.



O Próximo passo é Criar o Schema em um projeto do Biztalk para essa RFC:
  • Então com o botão direito no projeto clicar em Add –> Add Generated Items –> Consume Adapter Service. Abrirá a seguinte tela de Wizard.
image
  • Selecionar a opção sapBinding no combo Select a Binding.
  • Clicar no botão Configure, na Tab URI Property, navegar até as propriedades do Application Server,  e digitar:
    • Aplication Serer Host: Nome ou IP do Servidor SAP. (Ex. 10.1.2.3).
    • System Number: Ambiente do SAP correspondente. (Ex. 04).
    • Client: Ambinete do SAP correspondente. (Ex. 150).
    • Language: Linguagem do SAP. (Ex. PT).
  • Nas propriedades RFC Server, colocar.
    • Gateway Host: Nome ou IP do Servidor SAP. (Ex: 10.1.2.3)
    • Gateway Service: Nome do serviço de gateway. (Ex. sapgw04)
    • Program Id: Nome do Programa que vai iniciar o processo. (Ex. BIZTALK_RFC)
  • Não esquecer de digitar o usuário e senha na Tab Security.
  • Clicar no botão Connect.
Se tudo estiver certo, vai habilitar o combo Select contract type, e deverá ser escolhido a opção Service(Inbound Operation).
Na caixa Search in category, colocar o nome ou parte do nome da RFC para ser realizado a busca.
Clicar no botão Add e depois em OK.

image

Vai ser gerado 3 arquivos: Rfc.xsd, Type.xsd e o binding WcfReceivePort_SAPBinding_Custom.bindinginfo.xml.

Guarde o arquivo de binding, pois com o novo adapter WCF, é complicado configurá-lo na munheca e é bem mais fácil usar esse arquivo para criar a porta.

Já acabou? Não, calma que esta na metade.

Agora, é preciso criar um projeto em Biztalk e add um orchestration que deve ser parecer com a figura a seguir.

orch

Notem que é uma receive port, do tipo request-response. Com um construct no meio, isso porque será necessário criar a mensagem de retorno para a RFC.

Colocar o seguinte código no Message Assignment:

xmlDoc.LoadXml( "<Z_RFC_ADDResponse xmlns=\"http://Microsoft.LobServices.Sap/2007/03/Rfc/\">" + "<RESULT>" + c + "</RESULT>" + "</Z_RFC_ADDResponse>" ); MessageOut = xmlDoc; MessageOut(WCF.Action) = "http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADD/response";

Sendo que o xmlDoc é uma variavel do tipo xmlDocument e o MessaOut é a mensagem de Response que sera criada.

Se o WCF.Action nao for setado ele se tornará:  http://Microsoft.LobServices.Sap/2007/03/Rfc/Z_RFC_ADDResponse o que não é o esperado pelo sapBinding.

Compile e faça o deploy do projeto.
Para criar a receive port Fisica, basta usar o binding criado junto com o schema..
Tenha certeza que o pipeline que está sendo usado é o XMLReceive e o XMLTransmit.

Ufa! Agora acabou. Realmente muito útil esse post, espero que possa servir para mais alguém..

Queria agradecer a ajuda do meu amigo JULIO TAVARES, que tirou várias duvidas com relação a RFC Destination e Program ID pelo lado do SAP.

Até..

Seja o primeiro a comentar ;)

Postar um comentário

BizTalk 360

Visitas

Arquivo do blog