SAP S/4HANA を拡張する方法として新たに登場した「開発者拡張 (Developer extensibility)」が、SAP S/4HANA Cloud, private editionおよび SAP S/4HANA (オンプレミスを意味します)でも利用可能になったことをご存じでしょうか?
- SAP S/4HANA Cloud, public edition: 2208 リリースから使用可能
- SAP S/4HANA Cloud, private edition および SAP S/4HANA: SAP S/4HANA 2022 リリースから使用可能
これで SAP S/4HANA 全てのABAPプラットフォームで開発者拡張が使用できるようになり、SAP S/4HANA Cloud, public editionと同じ拡張手法を使用することができます。
このブログ投稿では、SAP S/4HANA (オンプレミス)における開発者拡張とその使いどころについてご紹介します。なお、SAP S/4HANA Cloud, private editionでも状況は同じです。
開発者拡張の概要についてはこちらのブログ投稿で紹介していますので、ご参照ください。
オンプレミスにおける開発者拡張の実装ルール
ABAPクラウド開発モデルとは?
SAP S/4HANA で開発者拡張が一般リリースとなりましたが、開発者拡張の実装ルールは SAP S/4HANA Cloud, public edition の場合と同様です。コアとカスタムコードを分離するために、従来の実装ルールより制限が多い新しい実装ルールへの準拠が必要となります。これにより、アップグレードを阻害せず、クラウドにも対応したカスタムコードの実装が可能となります。
新しい実装ルールの主なポイントとしては、下記の3点が挙げられます。
- SAP オブジェクトの使用制限 – リリース済オブジェクト (Public API) のみ使用可能
Release contract という属性でリリースステータスが定義され、未リリースのオブジェクトは使用できず、構文エラーになります。 - SAP オブジェクトの拡張は事前に定義されリリースされている拡張ポイントのみ
モディフィケーションは許可されていません。 - Restricted ABAP Language (Cloud-optimized ABAP language)
使用できる ABAP 構文・オブジェクトタイプが制限され、クラウド環境に不要・不適切な ABAP 構文は使用できません。開発者拡張では、ABAP言語バージョン:ABAP for Cloud Development を使用する必要があります。
これらの新しい実装ルールに準拠したクラウド対応の開発は、従来のクラシックな開発モデルに対して、ABAPクラウド開発モデル (ABAP cloud development model) とも呼ばれています。ABAPクラウド開発モデルに準拠した拡張手法としては、下記の3つが提供されています。
①キーユーザ拡張
②開発者拡張
③Side-by-Side拡張
SAP S/4HANA Cloud, public edition では ABAPクラウド開発モデルでの拡張・開発が必須となりますが、SAP S/4HANAでは必要に応じて使うことができます。
開発者拡張は SAP S/4HANAでどういう時に使える?
オンプレミスの場合、開発者拡張はあくまで開発・拡張手法の1つのオプションでしかありません。オンプレミスでは、従来のクラシック拡張を引き続き使うことができますし、新たに開発者拡張を使うこともできます。同一システム内で両方の拡張手法を並行して使うことができます。
では、どういう時に、開発者拡張を含むABAPクラウド開発モデルを採用するのがよいと考えられるでしょうか?
1つ目は、将来、パブリッククラウド化を考えている場合です。
SAP S/4HANA Cloud, public edition では従来のクラシック拡張・開発は使用できず、ABAP クラウド開発モデルでの拡張・開発が必須です。そのため、パブリッククラウドに移行するには、既存のカスタムコードを全てABAPクラウド開発モデルで作り直す必要があります。オンプレミス上で、開発者拡張を利用して、既存のカスタムコードを少しずつクラウド対応に改修・再開発していくことができます。
2つ目は、よりスムーズにアップグレードを行いたい場合です。
SAPソフトウェアのアップデートが自動で行われる SAP S/4HANA Cloud, public edition では、アップグレードをスムーズに行うために、下記の2つのルールが導入されています。
・モディフィケーションの禁止
・リリース済オブジェクト (Public API) および SAP拡張ポイントのみ使用可能
このルールをオンプレミス上で実現する手段として、開発者拡張を使用することができます。
開発者拡張を SAP S/4HANA で使う時のポイントは?
Three-tier extensibility model
オンプレミスの場合、通常、カスタムコードの多くが従来のクラシック拡張手法で実装されており、これら既存のカスタムコードとの共存が前提となります。また、今後、リリース済オブジェクトは順次用意されていく方針ですが、全ての開発要件を開発者拡張(あるいはキーユーザ拡張、Side-by-Side拡張)で満たせるとは限りません。
そのため、ABAPクラウド開発モデルを導入していくには、従来のクラシック拡張手法も使用しつつ、拡張を3階層で考えるとよい (three-tier extensibility model) とされています。
詳細は、2022年10月に新しく発表された SAP S/4HANA 拡張ガイド 第5章で紹介されていますので、ぜひ、ご参照ください。
- 第 1 層 – クラウド開発
ABAPクラウド開発モデルに準拠し、SAP S/4HANA Cloud, public editionの開発モデルに相当します。新しいアプリケーションや拡張を実装する際に、最初の選択肢として検討します。
- 第 2 層 – クラウド API の有効化
リリース済オブジェクト(Public API)が用意されていない場合、未リリースのオブジェクト(例えば BAPI など)をラップするカスタムオブジェクトを作成します。ラッパオブジェクトを第1層のクラウド開発で使用できるように、クラウド開発用にリリースしておきます。将来、未リリースオブジェクトに代わるリリース済オブジェクトがSAPから提供されたら、ラッパオブジェクトの代わりにリリース済オブジェクトを使用し、ラッパオブジェクトは廃止します。これにより、完全に第1層に移行することができます。
- 第 3 層 – 従来の開発
ABAP クラウド開発モデルに準拠しない、従来のクラシック拡張のカスタムコードです。よりスムーズなアップグレードを実現するには、この層での開発を削減・回避することが肝要です。
不要なカスタムコードの削除
しかし、第3層 – 従来の開発による既存のカスタムコードをABAPクラウド開発モデルに準拠させるには、開発者拡張を使用したとしてもほぼ作り直しとなり、多大な工数を要することが予想されます。そのため、ABAPクラウド開発モデルに移行する前に、不要なカスタムコードは可能な限り削除・廃止することが推奨されています。既存コードの分析には、Custom Code Migration App を使用できます。
SAP ERP システム時代のカスタムコードの約30-60%がもう使用されていない、という統計*も出ており、不要なカスタムコードを削除することは、ABAPクラウド開発モデルへの比較的容易な第1歩とも言えます。
詳細は、SAP S/4HANA 拡張ガイド 第6章もご参照ください。
* 出典:Custom Extensions in SAP S_4HANA Implementations – A Practical Guide for Senior IT Leadership (Page 24)
できるところから少しずつ
それでも残るカスタムコードについては、できるところから少しずつ開発者拡張の実装ルールを取り入れることもできます。
例えば、モディフィケーションはリリース済 BAdI (Cloud BAdI) に変更する、DBテーブルへのアクセスはリリース済CDS ビューに置き換える、その他未リリースのオブジェクトもリリース済オブジェクトに置き換えるなどが考えられます。
SAPノート 3088062 – Identifying local APIs for S/4HANA Cloudでは既存オブジェクトの代替となるリリース済オブジェクト (local Public API) について紹介されていますので、ご参照ください。
開発者拡張を SAP S/4HANA で使うには?
Three-tier extensibility model を実現するためにも、開発者拡張を SAP S/4HANAで実装するには、従来のクラシック拡張と分けて、ABAPクラウド開発用のソフトウェア・コンポーネントを用意することが推奨されています (SAP Help Portal 参照)。
まず、ABAP 言語バージョン:ABAP for Cloud のソフトウェア・コンポーネントを作成します。
ABAP for Cloud のソフトウェア・コンポーネントの配下のパッケージ、および、オブジェクトは、全て ABAP言語バージョン:ABAP for Cloud Development で作成されます。
これらのオブジェクトは、ABAPクラウド開発モデルの実装ルールに準拠する必要があり、カスタムコード内で使用できるオブジェクトは以下に制限されます。
- 同じソフトウェア・コンポーネント内のオブジェクト
- リリース済の SAP オブジェクト
- 従来のクラシック拡張を使用して作成されたオブジェクトのうち、クラウド開発用にリリースされたオブジェクト(Three-tier modelの第2層に相当)
また、従来のクラシック拡張で使っているソフトウェア・コンポーネント内のオブジェクトを個別に、ABAP言語バージョン:ABAP for Cloud Development に変更することも可能です。
これにより、オブジェクト単位で開発者拡張を利用し、クラウド開発(Three-tier model の第1層に相当)を行うことができます。
ABAP言語バージョンの詳細については、ABAP – Keyword Documentation > ABAP Language Versions でご確認いただけます。
まとめ
将来的にパブリッククラウド化を検討していたり、アップグレードをよりスムーズに行いたいという場合、開発者拡張は拡張・開発手法の有力な選択肢となります。
オンプレミスで開発者拡張を使用できる準備も整い、今後、リリース済オブジェクトも増えていく予定ですので、機会があれば、実際にどんなものか触れてみてください。
参考情報
Extend SAP S/4HANA in the cloud and on premise with ABAP based extensions – Guidelines for extension project managers, key users, and ABAP developers
Learn About Our ABAP Platform Extensibility Strategy [AD106] | SAP Teched 2022
Developer Extensibility | SAP Help Portal
SAP Blog 投稿:ABAP Extensibility のフォローはこちらのタグから
SAP Community:ABAP Extensibility のトピックページはこちらのリンクから
Q&A:ABAP Extensibility に関する Q&A はこちらのタグから
コメント欄にてフィードバックや感想などの共有もお待ちしています。