Obtenir des métadonnées dans SAP à l’aide de IMetadataRetrievalContract
L’adaptateur Microsoft BizTalk pour mySAP Business Suite expose un point de terminaison IMetadataRetrievalContractque vous pouvez utiliser pour parcourir et rechercher des artefacts système SAP et pour récupérer des métadonnées sous la forme d’un document WSDL (Web Services Description Language) pour les opérations.
L’interface IMetadataRetrievalContract est implémentée par le Kit de développement logiciel (SDK) De l’adaptateur métier (LOB) Microsoft Windows Communication Foundation (WCF) et fournit des fonctionnalités de navigation, de recherche et de récupération des métadonnées. En plus de l’interface IMetadataRetrievalContract , le Kit de développement logiciel (SDK) de l’adaptateur LOB WCF expose la classe MetadataRetrievalClient , qui implémente l’interface. Vous pouvez utiliser un canal IMetadataRetrievalContract ou metadataRetrievalClient pour utiliser des métadonnées ; les méthodes exposées pour parcourir, rechercher et récupérer les métadonnées sont les mêmes dans chaque cas.
Les sections suivantes fournissent des informations sur l’utilisation de l’interface IMetadataRetrievalContract .
The IMetadataRetrievalContract Interface
Le tableau suivant fournit des informations sur les classes importantes utilisées lorsque vous utilisez l’interface IMetadataRetrievalContract .
Classe ou interface | Description |
---|---|
Interface IMetadataRetrievalContract (Microsoft.ServiceModel.Channels) |
Définit les méthodes Browse, Search et GetMetadata . Vous appelez ces méthodes à l’aide d’un canal IMetadataRetrievalContract ou d’un MetadataRetrievalClient pour utiliser les métadonnées de l’adaptateur. |
MetadataRetrievalClient , classe (Microsoft.ServiceModel.Channels) |
Implémente l’interface IMetadataRetrievalContract . Vous pouvez créer un instance de cette classe et le configurer pour votre système SAP en fournissant un SAPBinding et une EndpointAddress. Vous pouvez ensuite appeler ses méthodes pour travailler avec des métadonnées. |
MetadataRetrievalNode, classe (Microsoft.ServiceModel.Channels) |
Représente un nœud de métadonnées sur l’adaptateur. Les méthodes Browse et Search retournent des nœuds de ce type, et la méthode GetMetadata prend les nœuds de ce type en tant que paramètre. |
Classe ServiceDescription (System.Web.Services.Description) |
Fournit un moyen de créer et de mettre en forme un fichier de document WSDL valide. La méthode GetMetadata retourne un objet ServiceDescription . |
Pour plus d’informations sur l’interface IMetadataRetrievalContract , la classe MetadataRetrievalClient et la classe MetadataRetrievalNode ; consultez la référence managée Microsoft.ServiceModel.Channels à l’adresse https://go.microsoft.com/fwlink/?LinkId=105566.
ID des nœuds de métadonnées
L’adaptateur organise ses métadonnées sous la forme d’une arborescence hiérarchique de nœuds. Dans cette arborescence, il existe deux types de nœuds de métadonnées :
Les nœuds d’opération représentent les opérations que l’adaptateur surface sur les artefacts SAP. Les nœuds d’opération sont les feuilles de l’arborescence.
Les nœuds de catégorie représentent des artefacts SAP et des regroupements d’artefacts SAP qui ne correspondent pas directement à une opération sur l’adaptateur. Les nœuds de catégorie sont les branches de l’arborescence ; ils contiennent d’autres nœuds de catégorie et/ou des nœuds d’opération. Par exemple, les groupes fonctionnels RFC ou les objets métier SAP sont représentés en tant que nœuds de catégorie.
Chaque nœud de métadonnées mis en évidence par l’adaptateur est identifié par un ID de nœud unique. Pour plus d’informations sur les ID de nœud de métadonnées exposés par l’adaptateur, consultez ID de nœud de métadonnées. Vous utilisez ces ID de nœud pour spécifier des artefacts SAP cibles lorsque vous utilisez l’interface IMetadataRetrievalContract pour parcourir, rechercher et récupérer des métadonnées. Vous pouvez utiliser les constantes définies dans
Microsoft.Adapters.SAP.SAPAdapterConstants.MetadataConstants
etMicrosoft.Adapters.SAP.SAPAdapterConstants.ActionConstants
pour vous aider à construire des ID de nœud de métadonnées.
Propriétés de liaison
Que vous utilisiez un canal IMetadataRetrievalContract ou un IMetadataRetrievalClient pour travailler avec des métadonnées, vous devez spécifier un SAPBinding lorsque vous créez le instance.
Plusieurs propriétés de liaison affectent la façon dont l’adaptateur génère des métadonnées. Ces propriétés sont :
GenerateFlatfileCompatibleIdocSchema
ReceiveIDocFormat
EnableSafeTyping
FlatFileSegmentIndicator
Vous devez vous assurer que ces propriétés de liaison sont définies sur les valeurs requises pour votre application avant d’ouvrir l’objet de récupération des métadonnées. Pour plus d’informations sur les propriétés de liaison de l’adaptateur SAP, consultez En savoir plus sur l’adaptateur BizTalk pour mySAP Business Suite Binding Properties.
Nœuds de métadonnées de navigation
Vous utilisez la méthode Browse pour retourner tous les nœuds de métadonnées contenus dans un nœud parent. L’exemple suivant recherche les trois premiers groupes fonctionnels RFC sur le système SAP. Dans cet exemple, le client est un instance de MetadataRetrievalClient.
// The first parameter is the node ID.
// The second parameter is the start index.
// The third parameter is the maximum number of nodes to return.
IMetadataRetrievalNode[] nodes = client.Browse(Microsoft.Adapters.SAP.SAPAdapterConstants.MetadataConstants.RfcSection, 0, 3);
Important
Vous pouvez uniquement parcourir les nœuds de catégorie ; vous ne pouvez pas parcourir les nœuds d’opération.
Recherche de nœuds de métadonnées
Vous utilisez la méthode Search pour effectuer une recherche de nœuds contenus par un nœud parent. Vous pouvez spécifier le caractère générique de l’astérisque (*). Ce caractère correspond à zéro ou plusieurs caractères. L’exemple suivant montre une recherche pour tous les RFC qui contiennent la chaîne « BAPI ». Dans cet exemple, le client est un instance de MetadataRetrievalClient.
// Search for all nodes that contain "BAPI" under the RFC node.
// The parameters are the parent node ID, the search expression, and
// the maximum number of nodes to return.
IMetadataRetrievalNode[] nodes = client.Search(Microsoft.Adapters.SAP.SAPAdapterConstants.MetadataConstants.RfcSection, "*BAPI*", int.MaxValue);
Important
La recherche n’est prise en charge que sur un ensemble limité de nœuds. Pour plus d’informations sur les nœuds sur lesquels la recherche est prise en charge et sur le caractère générique pris en charge dans les expressions de recherche, consultez ID de nœud de métadonnées.
Récupération des métadonnées (WSDL) pour les opérations
Vous utilisez la méthode GetMetadata pour récupérer une description de service (document WSDL) pour un groupe de nœuds d’opération. L’exemple suivant récupère une description de service pour le BAPI_TRANSACTION_COMMIT RFC. Dans cet exemple, le client est un instance de MetadataRetrievalClient. Notez que l’ID de nœud d’un nœud d’opération est équivalent à l’action de message pour cette opération.
// Get a WSDL document that specifies a contract that contains the
// BAPI_TRANSACTION_COMMIT operation.
MetadataRetrievalNode[] nodes = new MetadataRetrievalNode[1];
nodes[0] = new MetadataRetrievalNode();
nodes[0].NodeId = Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants.RfcActionPrefix + "BAPI_TRANSACTION_COMMIT";
nodes[0].IsOperation = true;
System.Web.Services.Description.ServiceDescription description = client.GetMetadata(nodes);
Important
Vous devez spécifier uniquement les nœuds d’opération dans la méthode GetMetadata .
Utilisation d’un MetadataRetrievalClient
La création et l’utilisation d’un MetadataRetrievalClient sont pratiquement les mêmes que n’importe quel autre client WCF. Vous créez le client en spécifiant un point de terminaison et un instance de SAPBinding. Vous pouvez effectuer cette opération de manière déclarative dans la configuration ou impérativement dans votre code. Vous appelez ensuite les méthodes de MetadataRetrievalClient pour parcourir, rechercher et récupérer les métadonnées de l’adaptateur.
L’exemple suivant montre comment utiliser un MetadataRetrievalClient pour parcourir, rechercher et récupérer des métadonnées à partir de l’adaptateur SAP.
using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using Microsoft.Adapters.SAP;
using Microsoft.ServiceModel.Channels;
using System.Web.Services.Description;
namespace SapMetaDataBrowseClient
{
class NodeWriter
{
// This method writes the value of a collection of metadata retrieval nodes
// to the console.
public void Write(string title, MetadataRetrievalNode[] nodes)
{
Console.WriteLine(title);
Console.WriteLine();
//Write all the nodes returned to the console.
foreach (MetadataRetrievalNode node in nodes)
{
Console.WriteLine("NodeId = " + node.NodeId);
Console.WriteLine("\tDirection = " + node.Direction.ToString());
Console.WriteLine("\tIsOperation = " + node.IsOperation.ToString());
Console.WriteLine("\tDisplayName = " + node.DisplayName);
Console.WriteLine("\tDescription = " + node.Description);
}
Console.WriteLine();
}
}
class Program
{
static void Main(string[] args)
{
MetadataRetrievalClient browser = null;
NodeWriter nodeWriter = new NodeWriter();
try
{
// Create a binding
SAPBinding binding = new SAPBinding();
EndpointAddress address = new EndpointAddress("sap://Client=800;lang=EN@A/YourSAPHost/00");
browser = new MetadataRetrievalClient(binding, address);
browser.ClientCredentials.UserName.UserName = "YourUserName";
browser.ClientCredentials.UserName.Password = "YourPassword";
browser.Open();
// Return the nodes directly under the root.
// The parameters are the parent node ID, the start index, and the maximum number
// of nodes to return.
MetadataRetrievalNode[] nodes = browser.Browse(MetadataRetrievalNode.Root.NodeId, 0, int.MaxValue);
nodeWriter.Write("Browse results for the root node:", nodes);
// Return first 3 RFC group nodes.
nodes = browser.Browse(Microsoft.Adapters.SAP.SAPAdapterConstants.MetadataConstants.RfcSection, 0, 3);
nodeWriter.Write(String.Format("Browse results for the first {1} nodes of {0}:", Microsoft.Adapters.SAP.SAPAdapterConstants.MetadataConstants.RfcSection, nodes.Length), nodes);
// Search for first 3 nodes that begin with "BAPI_TRANSACTION" under the RFC node.
// The parameters are the parent node ID, the search expression, and the maximum number
// of nodes to return.
nodes = browser.Search(Microsoft.Adapters.SAP.SAPAdapterConstants.MetadataConstants.RfcSection, "*BAPI_TRANSACTION*", 3);
nodeWriter.Write(String.Format("Search results for \"*BAPI_TRANSACTION*\" under {0} node:", Microsoft.Adapters.SAP.SAPAdapterConstants.MetadataConstants.RfcSection), nodes);
// Get a WSDL document that specifies a contract that contains the operations
// found in the search and write it to a file.
// You could explicitly specify operations as in the following:
// nodes[0] = new MetadataRetrievalNode();
// nodes[0].NodeId = Microsoft.Adapters.SAP.SAPAdapterConstants.ActionConstants.RfcActionPrefix + "BAPI_TRANSACTION_COMMIT";
// nodes[0].IsOperation = true;
// Note that the operation NodeId is equivalent to the message action.
System.Web.Services.Description.ServiceDescription description = browser.GetMetadata(nodes);
description.Write("SampleContract.wsdl");
}
catch (Exception ex)
{
Console.WriteLine("Exception is: " + ex.Message);
}
finally
{
if (browser != null)
{
if (browser.State == CommunicationState.Opened)
browser.Close();
else
browser.Abort();
}
}
}
}
}
L’exemple suivant montre la sortie de ce programme sur la console. Vous pouvez voir la structure des nœuds de récupération de métadonnées retournés pour chaque méthode. Le programme écrit également un document WSDL qui décrit un contrat de service composé des nœuds retournés par la recherche à un fichier. (Pour la plupart des installations SAP, la description du service contient les opérations BAPI_TRANSACTION_COMMIT et BAPI_TRANSACTION_ROLLBACK.)
Browse results for the root node:
NodeId = http://Microsoft.LobServices.Sap/2007/03/BAPISECTION/000001
Direction = Outbound
IsOperation = False
DisplayName = BAPI
Description = BAPI
NodeId = http://Microsoft.LobServices.Sap/2007/03/IDOCSECTION/
Direction = Inbound, Outbound
IsOperation = False
DisplayName = IDOC
Description = IDOC
NodeId = http://Microsoft.LobServices.Sap/2007/03/RFCSECTION/
Direction = Inbound, Outbound
IsOperation = False
DisplayName = RFC
Description = RFC
NodeId = http://Microsoft.LobServices.Sap/2007/03/TRFCSECTION/
Direction = Inbound, Outbound
IsOperation = False
DisplayName = TRFC
Description = TRFC
Browse results for the first 3 nodes of http://Microsoft.LobServices.Sap/2007/03
/RFCSECTION/:
NodeId = http://Microsoft.LobServices.Sap/2007/03/RFCGROUP/A
Direction = Inbound, Outbound
IsOperation = False
DisplayName = Asset Accounting
Description = Asset Accounting
NodeId = http://Microsoft.LobServices.Sap/2007/03/RFCGROUP/S
Direction = Inbound, Outbound
IsOperation = False
DisplayName = Basis
Description = Basis
NodeId = http://Microsoft.LobServices.Sap/2007/03/RFCGROUP/B
Direction = Inbound, Outbound
IsOperation = False
DisplayName = Business Information Warehouse
Description = Business Information Warehouse
Search results for "*BAPI_TRANSACTION*" under http://Microsoft.LobServices.Sap/2
007/03/RFCSECTION/ node:
NodeId = http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_TRANSACTION_COMMIT
Direction = Inbound, Outbound
IsOperation = True
DisplayName = BAPI_TRANSACTION_COMMIT
Description = Execute external Commit when using BAPIs
NodeId = http://Microsoft.LobServices.Sap/2007/03/Rfc/BAPI_TRANSACTION_ROLLBACK
Direction = Inbound, Outbound
IsOperation = True
DisplayName = BAPI_TRANSACTION_ROLLBACK
Description = Execute external Rollback when using BAPIs
Utilisation d’un canal IMetadataRetrievalContract
Vous pouvez également créer un canal IMetadataRetrievalContract , puis utiliser ce canal pour parcourir, rechercher et récupérer des métadonnées à partir de l’adaptateur. (Les signatures de méthode sont les mêmes que pour la classe MetadataRetrievalClient .) L’exemple suivant montre comment procéder.
…
//Create a binding and endpoint address.
SAPBinding binding = new SAPBinding();
EndpointAddress address = new EndpointAddress("sap://Client=800;lang=EN@A/YourSAPHost/00");
//Create and open a channel factory that will return an IMetadataRetrievalContract object, on which browse, search, and get can be performed.
ChannelFactory<IMetadataRetrievalContract> factory = new ChannelFactory<IMetadataRetrievalContract>(binding, address);
factory.Credentials.UserName.UserName = "YourUserName";
factory.Credentials.UserName.Password = "YourPassword";
factory.Open();
//Obtain an IMetadataRetrievalContract channel from the factory.
IMetadataRetrievalContract channel = factory.CreateChannel();
//Perform a search using the channel.
MetadataRetrievalNode[] nodes = channel.Search(Microsoft.Adapters.SAP.SAPAdapterConstants.MetadataConstants.RfcSection, "BAPI_TRANSACTION*", int.MaxValue);
…
Voir aussi
Récupération des métadonnées par programmation à partir de SAP