Ottenere metadati usando WS-Metadata Exchange in SAP
Come associazione personalizzata di Windows Communication Foundation (WCF), l'adapter Microsoft BizTalk per mySAP Business Suite espone un endpoint WS-Metadata Exchange (MEX) che è possibile usare per recuperare i metadati per operazioni specifiche dall'adapter Microsoft BizTalk per mySAP Business Suite.
WCF offre un'infrastruttura avanzata per l'esportazione, la pubblicazione, il recupero e l'importazione di metadati su un servizio. I servizi WCF, ad esempio l'adapter, usano i metadati per descrivere come interagire con gli endpoint di servizio in modo che gli strumenti, come svcutil.exe, possano generare automaticamente codice client per l'utilizzo del servizio. WCF rappresenta i metadati per un servizio come istanza del tipo MetadataSet , fortemente legato al formato di serializzazione dei metadati definito in WS-Metadata Exchange (MEX). È possibile creare un oggetto MetadataSet per le operazioni di destinazione nell'adattatore usando metadatiExchangeClient.
Il supporto WCF per lo scambio di metadati è un argomento esteso e oltre l'ambito di questa documentazione. Per altre informazioni sul supporto per i metadati in WCF, vedere "Metadati" nella documentazione WCF in https://go.microsoft.com/fwlink/?LinkId=105634. Per una descrizione particolarmente valida dell'architettura, delle classi e degli spazi dei nomi esposti da WCF per i metadati, vedere "Panoramica dell'architettura dei metadati" in https://go.microsoft.com/fwlink/?LinkId=105635. È consigliabile acquisire familiarità con il contenuto correlato al recupero dei metadati da un servizio WCF in questi argomenti WCF prima di procedere.
Gli argomenti seguenti contengono informazioni su come usare metadatiExchangeClient per recuperare i metadati dalla scheda SAP.
Uso di metadatiExchangeClient per recuperare i metadati
Per usare metadatiExchangeClient , è necessario specificare un URI di connessione e un'associazione (SAPBinding). L'URI di connessione identifica le operazioni per cui si desidera recuperare i metadati.
Le sezioni seguenti contengono informazioni su come specificare l'URI di connessione, le proprietà di associazione importanti e come usare metadataExchangeClient per recuperare i metadati dalla scheda.
URI di connessione
Per usare MetadataExchangeClient , è necessario specificare un URI di connessione SAP che specifica un endpoint MEX e l'operazione o le operazioni per cui si desidera recuperare i metadati. Specificare un endpoint MEX e le operazioni di destinazione nell'URI di connessione nel modo seguente:
È necessario includere il parametro "wsdl" nella stringa di query. Se è il primo parametro nella stringa di query, viene specificato subito dopo il punto interrogativo (?). Se non è il primo parametro, deve essere preceduto da un ampersand (&).
È necessario seguire il parametro "wsdl" per uno o più parametri "op". Ogni parametro "op" è preceduto da un ampersand (&) e specifica l'azione del messaggio (ID nodo) di un'operazione di destinazione.
Ad esempio, l'URI di connessione seguente è destinato all'operazione Send per il SALESORDER_CREATEFROMDAT201 IDOC e all'IDOC SALESORDER_CREATEFROMDAT202. I parametri "wsdl" e "op" sono evidenziati.
"sap://User=YourUserName;Passwd=YourPassword;Client=800;Lang=EN;@a/YourSAPHost/00?wsdl&op=http://Microsoft.LobServices.Sap/2007/03/Idoc/3/SALESORDER_CREATEFROMDAT201//620/Send&op=http://Microsoft.LobServices.Sap/2007/03/Idoc/3/SALESORDER_CREATEFROMDAT202//620/Send"
Nota
Non è necessario includere i parametri del listener nell'URI di connessione per le operazioni in ingresso. L'adapter si connette come client per recuperare i metadati dal sistema SAP.
È anche possibile usare le costanti definite in Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants
per specificare le operazioni quando si crea un URI di connessione. Questo argomento viene illustrato nell'esempio di codice alla fine di questo argomento.
In che modo si passa questo URI di connessione all'oggetto MetadataExchangeClient dipende dai metodi di overload usati per creare il client e recuperare i metadati dalla scheda.
Per altre informazioni sull'URI di connessione SAP, vedere Creare l'URI di connessione di sistema SAP.
Proprietà di associazione
Quando si crea MetadataExchangeClient, è necessario specificare un SAPBinding.
Esistono diverse proprietà di associazione che influiscono sul modo in cui la scheda genera metadati. Le proprietà sono riportate di seguito:
GenerateFlatfileCompatibleIdocSchema
ReceiveIDocFormat
EnableSafeTyping
FlatFileSegmentIndicator
È necessario assicurarsi che queste proprietà di associazione siano impostate sui valori necessari per l'applicazione prima di richiamare il metodo GetMetadata in MetadataExchangeClient. Per altre informazioni sulle proprietà di associazione dell'adapter SAP, vedere Informazioni sull'adapter BizTalk per le proprietà di associazione di mySAP Business Suite.
Esempio
Nell'esempio seguente viene usato un oggetto MetadataExchangeClient per creare una descrizione del servizio (documento WSDL) per le operazioni di BAPI_TRANSACTION_COMMIT e BAPI_TRANSACTION_ROLLBACK.
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.ObjectModel;
// Needed for WCF and SAP adapter
using System.ServiceModel;
using Microsoft.ServiceModel.Channels;
using Microsoft.Adapters.SAP;
// Needed for MetadataExchangeClient class
using System.ServiceModel.Description;
// Needed for ServiceDescription class
using System.Web.Services;
namespace SapMetadataExchangeClient
{
class Program
{
static void Main(string[] args)
{
//Create a binding
SAPBinding binding = new SAPBinding();
//Create a metadata exchange client that will retrieve metadata according to the WS-MEX standard.
MetadataExchangeClient client = new MetadataExchangeClient(binding);
client.SoapCredentials.UserName.UserName = "YourUserName";
client.SoapCredentials.UserName.Password = "YourPassword";
//Set up an endpoint address and specify the operation for which we want metadata.
string connectionUri = "sap://Client=800;lang=EN@A/YourSAPHost/00?wsdl&op="
+ Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants.RfcActionPrefix
+ "BAPI_TRANSACTION_COMMIT"
+ "&op="
+ Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants.RfcActionPrefix
+ "BAPI_TRANSACTION_ROLLBACK";
EndpointAddress address = new EndpointAddress(connectionUri);
//Get the metadata.
MetadataSet ms = client.GetMetadata(address);
// Check for the metadata set size.
Collection<MetadataSection> documentCollection = ms.MetadataSections;
if (documentCollection != null && documentCollection.Count > 0)
{
//Get the WSDL from the metadata set
System.Web.Services.Description.ServiceDescription wsdl = (System.Web.Services.Description.ServiceDescription)documentCollection[0].Metadata;
//Save the WSDL to a file.
wsdl.Write("BapiTx.wsdl");
}
}
}
}
Vedere anche
Recupero dei metadati a livello di codice da SAP Recupero di metadatiin SAP tramite IMetadataRetrievalContract