Recevoir des appels tRFC entrants dans SAP à l’aide du modèle de service WCF
Vous pouvez utiliser l’adaptateur Microsoft BizTalk pour mySAP Business Suite en tant que serveur RFC transactionnel (tRFC) pour recevoir des appels tRFC entrants de SAP. Pour les CRF entrants, l’adaptateur SAP prend en charge plusieurs CRFC dans la même unité de travail logique SAP (LUW).
Les sections de cette rubrique fournissent des informations sur l’utilisation de l’adaptateur en tant que serveur tRFC dans le modèle de service WCF.
Vous trouverez plus d’informations sur l’utilisation de l’adaptateur SAP en tant que serveur tRFC dans les rubriques suivantes :
Pour obtenir une vue d’ensemble de la prise en charge des CRFC sur l’adaptateur SAP, consultez Operations on tRFCs in SAP. Vous devez lire cette rubrique avant de continuer.
Pour plus d’informations sur les schémas de message pour les opérations de serveur tRFC, consultez Operations on tRFCs in SAP.
Contrat de service WCF pour un tRFC
Vous utilisez le plug-in Visual Studio Add Adapter Service ou l’outil Utilitaire de métadonnées ServiceModel (svcutil.exe) pour générer un contrat de service WCF pour les TFC que vous souhaitez recevoir du système SAP. Le contrat généré pour une TRFC entrante est similaire à celui généré pour une RFC entrante, sauf que :
Les opérations tRFC sont exposées sous le nœud TRFC.
Le contrat de service WCF (interface) généré pour les TFC entrants est nommé « Trfc ». Vous devez spécifier cette interface lorsque vous ajoutez le point de terminaison de service à l’hôte du service. Il s’agit également de l’interface que votre service WCF doit implémenter.
public interface Trfc { // CODEGEN: Generating message contract since the wrapper namespace (http://Microsoft.LobServices.Sap/2007/03/Trfc/) of message Z_RFC_MKD_ADDRequest does not match the default value (http://Microsoft.LobServices.Sap/2007/03/) [System.ServiceModel.OperationContractAttribute(Action="http://Microsoft.LobServices.Sap/2007/03/Trfc/Z_RFC_MKD_ADD", ReplyAction="http://Microsoft.LobServices.Sap/2007/03/Trfc/Z_RFC_MKD_ADD/response")] Z_RFC_MKD_ADDResponse Z_RFC_MKD_ADD(Z_RFC_MKD_ADDRequest request); }
Le contrat de message de requête pour les opérations TRFC a un paramètre GUID. Il s’agit du GUID qui correspond au TID SAP pour le tRFC. Dans les opérations de serveur tRFC, l’adaptateur gère tous les appels pour valider, restaurer et confirmer le TID par le système SAP. Il n’y a donc aucune raison d’utiliser explicitement ce GUID. Toutefois, vous pouvez l’utiliser pour récupérer le TID SAP à partir de l’adaptateur SAP en appelant SapAdapterUtilities.ConvertGuidToTid. Cela peut être utile pour vous aider à résoudre les problèmes sur le système SAP.
[System.Diagnostics.DebuggerStepThroughAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] [System.ServiceModel.MessageContractAttribute(WrapperName="Z_RFC_MKD_ADD", WrapperNamespace="http://Microsoft.LobServices.Sap/2007/03/Trfc/", IsWrapped=true)] public partial class Z_RFC_MKD_ADDRequest { ... public Z_RFC_MKD_ADDRequest(string DEST, System.Nullable<int> X, System.Nullable<int> Y, System.Guid TransactionalRfcOperationIdentifier) { this.DEST = DEST; this.X = X; this.Y = Y; this.TransactionalRfcOperationIdentifier = TransactionalRfcOperationIdentifier; } }
Comment faire Activer l’adaptateur pour agir en tant que serveur tRFC ?
Pour permettre à l’adaptateur d’agir en tant que serveur tRFC, vous devez définir la propriété de liaison TidDatabaseConnectionString sur le chaîne de connexion de la base de données TID. Vous devez effectuer cette opération avant d’ouvrir l’hôte de service. Il s’agit de la base de données dans laquelle l’adaptateur stocke l’ID de transaction SAP (TID) pour chaque TRFC. Pour plus d’informations sur cette propriété de liaison, consultez En savoir plus sur l’adaptateur BizTalk pour mySAP Business Suite Binding Properties.
Comment faire inscrivez-vous à la transaction pour les CRF entrants ?
Une unité logique de travail SAP (LUW) peut contenir plusieurs crfc. Sur le système SAP, un LUW est identifié par un ID de transaction unique (TID). L’adaptateur crée une transaction pouvant être validée pour chacun des TID que le système SAP utilise lorsqu’il appelle des appels tRFC sur l’adaptateur. Lorsque le système SAP appelle un tRFC sur l’adaptateur ; l’adaptateur fait passer la transaction associée au TID SAP à votre service. Vous pouvez accéder à cette transaction en tant que transaction ambiante à partir de votre méthode d’opération. En s’inscrivant dans cette transaction ambiante, les actions effectuées dans l’opération peuvent participer à sap LUW.
Pour inscrire la transaction ambiante dans une méthode d’opération, vous devez :
Annotez la méthode d’opération avec la propriété TransactionScopeRequired de l’attribut OperationBehavior . Cela indique à WCF que vous souhaitez accéder à la transaction ambiante à partir de l’opération.
Créez une étendue de transaction en annotant la méthode d’opération avec la propriété TransactionAutoComplete de l’attribut OperationBehavior ou en utilisant explicitement un Objet TransactionScope à l’intérieur de la méthode d’opération.
L’exemple suivant montre un service qui implémente deux opérations. Les deux méthodes d’opération sont annotées avec la propriété TransactionScopeRequired pour accéder à la transaction ambiante.
Z_TRFC_EXAMPLE1 s’inscrit explicitement dans la transaction à l’aide d’un objet TransactionScope .
Z_TRFC_EXAMPLE2 est annoté avec la propriété TransactionAutoComplete pour s’inscrire dans la transaction
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, UseSynchronizationContext = false)]
class Z_Example_ServiceContractClass : Trfc
{
// This operation method explicitly creates a TransactionScope to enlist in the ambient transaction
// You must explictly call ts.Complete to complete the transaction before you return from the operation
// Otherwise the transaction is aborted.
// You can throw an exception or return without calling ts.complete to abort the transacation
[OperationBehavior(TransactionScopeRequired = true)]
public Z_TRFC_EXAMPLE1Response Z_TRFC_EXAMPLE1(Z_TRFC_EXAMPLE1Request request)
{
using (TransactionScope ts = new TransactionScope(TransactionScopeOption.Required))
{
// Process tRFC
...
Z_TRFC_EXAMPLE1Response response = new Z_TRFC_EXAMPLE1Response();
response.TransactionalRfcOperationIdentifier = request.TransactionalRfcOperationIdentifier;
return response;
//since there is no ts.Complete(), this is equivalent to a rollback.
}
}
// This operation method sets the TransactionAutoComplete property of the OperationBehavior attribute
// to enlist in the transaction. There is no need to explictly create a TransactionScope in the code.
// If the method returns with no unhandled exceptions, the transaction completes; otherwise it aborts
// You can throw an exception to abort the transaction.
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public Z_TRFC_EXAMPLE2Response Z_TRFC_EXAMPLE2(Z_TRFC_EXAMPLE2Request request)
{
// Process tRFC
...
Z_TRFC_EXAMPLE2Response response = new Z_TRFC_EXAMPLE2Response();
response.TransactionalRfcOperationIdentifier = request.TransactionalRfcOperationIdentifier;
return response;
//if there is no unhandled exception, the transaction completes when the operation returns.
}
}
Voir aussi
Développer des applications en utilisant le modèle de service WCF