SAP Extensibility API
OutSystems SAP Extensibility APIは、エクステンションによるSAPリモート機能への接続と呼び出しのカスタマイズを可能にする.NET APIです。詳細については、OutSystemsエクステンションを開発する方法をご覧ください。
必要なファイル
このAPIを使用できるようにするには、エクステンション内に以下のファイルが必要です。
-
OutSystems.SAP.API.dll
: OutSystems SAP Extensibility APIメソッドを含むファイル。\Integration Studio\Extensibility\SAP\NETにあるプラットフォームのインストールフォルダ内にあります。 -
sapnco.dll
およびsapnco_utils.dll
: SAPとの通信用ドライバ。SAP Connector for Microsoft .NETにあります。このドライバをダウンロードしてインストールします。GACへのアセンブリのインストールについて尋ねられた場合、[None]を選択してください。インストールパスを記憶しておいてください。後で必要になります。
オプション: 拡張クラスに次の名前空間を含めることで、名前空間名全体を記述せずに名前空間で定義された要素にアクセスできるようになります。OutSystems.RuntimePublic.SAP
and SAP.Middleware.Connector
.
エクステンション
エクステンションを設定します。
- Integration Studioでエクステンションを作成します。
- 必要なアクションを作成します。
- [Edit Source Code .NET]ボタンでVisual Studioを開きます。
- プロジェクトのプロパティを編集し、プロジェクトのターゲットフレームワークを「.NET Framework 4.5.1」に設定します。
sapnco.dll
ファイルとsapnco_utils.dll
ファイルをエクステンションの\Source\NET\Bin\
ディレクトリにコピーします。- Visual Studioで、
\Source\NET\Bin\sapnco.dll
、\Source\NET\Bin\sapnco_utils.dll
、\Source\NET\Bin\OutSystems.SAP.API.dll
の各参照をプロジェクトに追加します。
.NETコードを実装します。
- Visual Studioで、アクションのロジックを実装してSAP Extensibility APIから必要な機能を使用します。
- Visual Studioを閉じます。
- Integration Studioで、[Resources]タブに移動します。
sapnco.dll
とsapnco_utils.dll
がグレーアウトされていない場合、これらをダブルクリックしてDeploy Actionを「Ignore」に設定します。 - エクステンションをパブリッシュします。
エクステンションを使用します。
- Service Studioで、必要なアクションへの依存関係をエクステンションから追加します。
- SAPコールバックアクションを使用して、エクステンションで実装されたアクションを呼び出します。
APIクラス参照
SAP Extensibility APIで使用できるクラスは以下のとおりです。
- SAPConnection: SAP接続の接続パラメータに対するアクセスと制御を提供します。
- SAPContext: SAPリモート関数の呼び出し時に、フロー制御を可能にします。
- SAPRequest: SAPリモート関数の呼び出し時に送受信されるパラメータ値にアクセスできます。
SAPConnectionクラス
SAPリモート関数呼び出しの呼び出し時に確立される接続に関する情報を含むオブジェクト。このクラスで使用できるメソッドを使用して、リモート関数呼び出しの呼び出し時に使用されるSAP接続の接続パラメータを確認したり変更したりできます。たとえば、開発環境で選択されたメソッドの代わりにSAPのログオンチケットを使用するように認証メソッドを変更できます。
接続構成を処理するには、エクステンションモジュールを作成してSAP接続のOnBeforeConnectionコールバックアクションでそのメソッドを使用します。
メソッド
メソッド | 説明 |
---|---|
static SAPConnection GetCurrent() |
SAP接続のOnBeforeConnectionコールバックアクション内で呼び出されたときに、接続を確立してSAPリモート関数を呼び出すために使用される構成を含むオブジェクトを返します。それ以外の場合はnullを返します。 |
SAP.Middleware.Connector.RfcConfigParameters GetRfcConfigParameters() | SAPリモート関数を呼び出すために確立された接続で使用される構成を含む、SAPコネクタSAP.Middleware.Connector.RfcConfigParametersオブジェクトを返します。 |
void SetRfcConfigParameters(SAP.Middleware.Connector.RfcConfigParameters rfcConfigParameters) |
SAPコネクタSAP.Middleware.Connector.RfcConfigParametersオブジェクトを、SAPリモート関数を呼び出すために確立された接続で使用される構成で設定します。 |
例
以下の例は、ユーザー名とパスワードの代わりにログオンチケットを使用してリモート関数を呼び出すために、SAPConnectionクラスを使用してSAPへの接続の構成を変更する方法を示しています。
using OutSystems.RuntimePublic.SAP; using SAP.Middleware.Connector; namespace OutSystems.SAPLogonTicketExtension { public class SAPLogonTicketExtension { public void SetTicketForAuthentication(string Ticket) { SAPConnection connection = SAPConnection.GetCurrent(); RfcConfigParameters configParameters = connection.GetRfcConfigParameters(); // Remove the user and password from the connection parameters. configParameters.Remove(RfcConfigParameters.User); configParameters.Remove(RfcConfigParameters.Password); // Set the ticket to use in the connection. configParameters[RfcConfigParameters.SAPSSO2Ticket] = Ticket; connection.SetRfcConfigParameters(configParameters); } } }
SAPContextクラス
SAPリモート関数呼び出しの呼び出し時の接続のコンテキストに関する情報を含むオブジェクト。このクラスで使用できるメソッドを使用して、SAPリモート関数呼び出しのフローを調整したり制御したりできます。たとえば、同じコンテキストでSAPリモート関数を1つだけではなく複数呼び出すように接続を調整できます。
接続のコンテキストを処理するには、エクステンションモジュールを作成してSAP接続のOnBeforeCallコールバックアクションとOnAfterCallコールバックアクションでそのメソッドを使用します。
メソッド
メソッド | 説明 |
---|---|
static void BeginContext() | ステートフルコールのシーケンスを開始し、同じコンテキストで2つ以上のリモート関数呼び出しをまとめることができます。 |
static void Commit() | リモート関数BAPI_TRANSACTION_COMMITを呼び出して、ステートフルコールのシーケンスでそれまでに行われた変更をコミットします。 |
static void EndContext() | ステートフルコールのシーケンスを終了します。beginContext()メソッドより後に配置する必要があります。 |
static void Rollback() | リモート関数BAPI_TRANSACTION_ROLLBACKを呼び出して、ステートフルコールのシーケンスでそれまでに行われた変更をロールバックします。 |
例
この例は、SAPContextクラスを使用してSAPとのステートフル接続を確立する方法を示しています。コンテキストの開始と終了を定義し、それまでに行われた変更のコミットとロールバックを行います。
using OutSystems.RuntimePublic.SAP; namespace OutSystems.SAPStatefulConnectionExtension { public class SAPStatefulConnectionExtension { // We'll call this extension method to start the stateful call //and before making any SAP RFC invocation. public void BeginContext() { SAPContext.BeginContext(); } // We can now make several calls to SAP RFCs //inside the started stateful call // After invoking all SAP RFCs we want, we'll invoke //this method, that commits the transaction. //Then, we also end the SAP stateful call context to free //resources. public void Commit() { SAPContext.Commit(); SAPContext.EndContext(); } // If any problem happens we want to rollback all //the changes made so far, and close the stateful call //context. public void Rollback() { SAPContext.Rollback(); SAPContext.EndContext(); } } }
SAPRequestクラス
SAPリモート関数呼び出しのリクエストに関する情報を含むオブジェクト。このクラスで使用できるメソッドを使用して、SAPリモート関数呼び出しとの間でやりとりされるパラメータを調整できます。たとえば、SAPから返されて受け取ったパラメータ値をエンドユーザーに異なって表示されるようにカスタマイズできます。
リモート関数パラメータを処理するには、エクステンションモジュールを作成してSAP接続のOnBeforeCallコールバックアクションとOnAfterCallコールバックアクションでそのメソッドを使用します。
メソッド
メソッド | 説明 |
---|---|
static SAPRequest GetCurrent() |
SAP接続のOnBeforeCallコールバックアクションまたはOnAfterCallコールバックアクション内で呼び出されたときに、現在のSAPリモート関数呼び出しに関する情報を含むオブジェクトを返します。それ以外の場合はnullを返します。 |
SAP.Middleware.Connector.IRfcFunction GetIRfcFunction() | 現在のSAPリクエストのメタデータおよびパラメータ値を含む、SAPコネクタSAP.Middleware.Connector.IRfcFunctionオブジェクトを返します。 |
例
この例は、SAPリモート関数の呼び出し時に入力パラメータ値を調整する方法を示しています。ここでは、Bapi_Customer_Getlistのリモート関数のメタデータを取得して、SAPに送信する顧客IDがこのパラメータに対応するSAPの内部値の9桁であることを確認します。9桁ではない場合、パラメータ値が9桁になるように末尾に0を追加します。
using System; using OutSystems.RuntimePublic.SAP; using SAP.Middleware.Connector; namespace OutSystems.SAPChangeParamsExtension { public class SAPChangeParamsExtension { public void ChangeInputParams() { SAPRequest request = SAPRequest.GetCurrent(); IRfcFunction func = request.GetIRfcFunction(); IRfcTable table = func.GetTable("IDRANGE"); foreach (IRfcStructure idRange_struct in table) { // Get the customer id parameter. String clientId_str = (string)idRange_struct.GetValue("LOW"); // Set the parameter with a 9-digit value. int clientId_number = Convert.ToInt32(clientId_str); clientId_str = clientId_number.ToString("D9"); idRange_struct.SetValue("LOW", clientId_str); } // Result for the following CUSTOMER values: // original: "1234" new value: "000001234" // original: "20548" new value: "000020548" // original: "521489653" new value: "521489653" } } }