Como Receber Mensagens do SAP a partir de uma RFC Destination – WCF Adapter | BizTalk Brasil
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.
*"     VALUE(X) TYPE  INT4
*"     VALUE(Y) TYPE  INT4
*"     VALUE(DEST) TYPE  CHAR20 DEFAULT 'SAPADAPTER'
*"     VALUE(RESULT) TYPE  INT4
CALL FUNCTION 'Z_RFC_ADD' DESTINATION DEST
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. 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.
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.
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é..