0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CAP Node.jsで汎用モジュール(RFC)を呼び出し

Last updated at Posted at 2025-08-04

はじめに

CAP Node.jsには@sap/cds-rfcというプラグインがあり、これを使うとABAPサーバにあるリモート可能な汎用モジュールを呼び出すことができます。つまり、CAPからBAPIなどが呼び出せるということです。さっそく使い方を確認してみましょう。

環境

  • SAP Business Application Studio (BAS)
  • ABAP Cloud Developer Trial 2023

参考

1. 事前準備

以下の設定を行います。

  1. RFC接続のための設定
  2. SAPのNPMレジストリにアクセスするための認証情報を取得

1.1. RFC接続のための設定

1.1.1. Cloud Connectorの設定

Cloud ConnectorにRFC用の接続設定を登録します。
image.png

以下の汎用モジュール(およびプリフィックス)を許可します。

  • BAPI_
  • RFC_
  • DOCU_GET

image.png

1.1.2. Destinationの登録

以下のDestinationを登録します。
image.png

Additional Propertiesに色々入っていますが、自分で設定したのは以下のプロパティで、他は自動で設定されました。

  • jco.client.ashost
  • jco.client.client
  • jco.client.lang
  • jco.client.sysnr

2.1. SAPのNPMレジストリにアクセスするためのテクニカルユーザを作成

CAPでRFCを呼び出すためのプラグインである@sap/cds-rfcが、裏では@sap-rfc/node-rfc-libraryを使用しており、このライブラリはSAPの専用レジストリにあります。そのため、レジストリにアクセスするためのテクニカルユーザを作成しておく必要があります。
以下のドキュメントの"Create a Technical User"のセクションの説明に沿って、S-userに対応するテクニカルユーザを登録します。

Managing Technical Users in Repository-Based Shipment Channel

余談ですが、このユーザはSAP Build Processs AutomationのDesktop Agentをダウンロードするときにも使われます。

2. CAPプロジェクトの登録

Service Centerから汎用モジュールを取り込むためには、"Full-Stack Application Using Productivity Tools"のテンプレートで作成したBASのスペースを使用する必要があります。
image.png

汎用モジュールに接続するために以下の設定を行います。

  1. プロジェクトの登録
  2. Service Centerから汎用モジュールを取り込み
  3. @sap/cds-rfcをインストール
  4. サービスおよびイベントハンドラの定義
  5. デプロイ
  6. ハイブリッドモードで実行

作成したリポジトリは以下です。

2.1. プロジェクトの登録

以下のコマンドでプロジェクトを登録します。

cds init <プロジェクト名>

2.2. Service Centerから汎用モジュールを取り込み

Storyboardを開き、External Resourcesを追加します。
image.png

Service Centerが開くので、ラジオボタンから"Function"を選択し、事前に登録したRFC用のDestinationを選択します。
image.png

ABAPサーバへのログインを求められるので、ユーザ、パスワードを入力して接続します。

Destinationに正しい認証情報を登録していても認証を求められます。

image.png

認証すると、Classic APIsに汎用モジュールの一覧が表示されます。

Classic APIsに表示されるのは接続先の環境に登録されている汎用モジュールというわけではなく、Cloudification Repositoryに"Classic API"として登録されている汎用モジュールのようです。

image.png

今回はClassic APIではない汎用モジュールを使用するので、"All APIs"から直接指定しました。
image.png

汎用モジュールをクリックすると右側に詳細が表示され、"Add to Project"をクリックするとプロジェクトに追加されます。
image.png

このとき、Repository-Based Shipment Channel Credentialsを求められます。2.1.で作成したユーザ名と、Basic Auth Passwordをコピーして設定します。

image.png

image.png

プロジェクトのルートに.npmrcというファイルが作成されます。ここにNPMレジストリにアクセスするための認証情報が設定されています。

@sap-rfc:registry=https://73554900100900009091.npmsrv.repositories.cloud.sap
//73554900100900009091.npmsrv.repositories.cloud.sap/:_auth="MDAwMDQ5...=="

2.3. @sap/cds-rfcをインストール

以下のコマンドで必要なモジュールをインストールします。

npm install @sap/cds-rfc @sap-rfc/node-rfc-library

2.4. サービスおよびイベントハンドラの定義

以下のサービスを定義します。

using { abaptrialRFC as rfc } from './external/abaptrialRFC';


service rfcService
{
    action createBP (header: rfc.DDIC.BAPI_EPM_BP_HEADER) returns rfc.BAPI_EPM_BP_CREATE.ResultType;
}

アクションcreateBPはBAPIを使ってEPMモデルのビジネスパートナーを登録します。引数および戻り値の型は、汎用モジュールを取り込んだときに作成された以下のcdsファイルで定義されたものを使用しています。

image.png

イベントハンドラを以下のように実装します。

const cds = require('@sap/cds')

module.exports = class rfcService extends cds.ApplicationService { async init() {
 const rfc = await cds.connect.to('abaptrialRFC');

  this.on ('createBP', async (req) => {
    console.log('On createBP', req.data)
    const result = await rfc.BAPI_EPM_BP_CREATE({HEADERDATA: req.data.header});
    console.log('result: ', result);
    return result;
  })

  return super.init()
}}

cds.connect.to()で指定しているのは、汎用モジュールを取り込んだときに定義されたpackage.jsonのrequiresセクションで設定された名前です。

image.png

2.5. デプロイ

以下のコマンドでデプロイ用の設定を追加します。

cds add destination,connectivity
cds add xsuaa --for production
cds add mta

以下のコマンドでデプロイします。

npm install
cds up //ビルドとデプロイを実施

2.6. ハイブリッドモードで実行

以下のコマンドでdestinationサービスをバインドします。

cds bind -2 <destinationサービスインスタンス>

.cdsrc-private.jsonに以下の設定を追加します。


    "abaptrialRFC": {
      "credentials": {
        "destinationBack": "<destination名>", 
        "connectivity_subaccount": "<サブアカウントのID>", 
        "connectivity_proxy_host": "localhost",
        "connectivity_proxy_port": "20001",
        "ashost": "<destinationに設定したashost>",
        "client": "<destinationに設定したclient>",
        "sysnr": "<destinationに設定したsysnr>",
        "connectivity_location_id": "<destinationに設定したLocation ID>",
        "user": "<ABAPサーバログインユーザ>",
        "passwd": "<ABAPサーバログインユーザのパスワード>"
      }
    }

test/test.httpファイルを作成します。

@server=http://localhost:4004
@username=alice
@password=


### createBP
# @name createBP_POST
POST {{server}}/odata/v4/rfc/createBP
Content-Type: application/json
Authorization: Basic {{username}}:{{password}}

{
  "header": {
    "BP_ROLE": "01",
    "EMAIL_ADDRESS": "test3@example.com", //メールアドレスは一意にする必要があるので毎回変えること
    "COMPANY_NAME": "COMPANY_NAME",
    "CURRENCY_CODE": "JPY",
    "CITY": "CITY",
    "STREET": "STREET",
    "COUNTRY": "JP",
    "ADDRESS_TYPE": "02"
  }
}

BPマスタが登録され、レスポンスが返ってきました。
image.png

おわりに

本記事では、CAP Node.jsのプラグインを利用して汎用モジュールを呼び出す方法を紹介しました。現時点ではCAP JavaについてはRFC連携はサポートされておらず、SAP Cloud SDKを利用した呼び出しも非推奨になっています。将来的にCAP Javaでも同様の機能が提供されることを期待します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?