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?

【RAP入門】Factory Actionとは?Createとの違い・使いどころを解説

Posted at

1.はじめに

RAP(ABAP RESTful Application Programming Model)を学んでいると、factory actionという見慣れないキーワードに出会います。
例えば、Fiori app「受注管理」のBehavior Definitioinを見ることができます。

  static factory action CreateWithReference deep parameter D_SalesDocCreateWithRefDocP [1];

名前から「新規作成系のアクションっぽい?」と想像できますが、
実際にはCreateでもActionでもない、中間的な立ち位置の機能です。
この記事では、
・Factory Actionの概要
・Create/Actionとの違い
・定義・実装の流れ
・使いどころと注意点
を初心者にも分かるように整理していきます。

2.Factory Actionとは?

RAPでは、エンティティに対する操作を大きく3種類に分類できます:

区分 対象 用途
Create/Update/Delete エンティティ 標準的なCRUD操作 新規登録・変更・削除
Action 既存エンティティ 独自処理・状態遷移 Approve, Cancel
Factory Action 新規エンティティ(=未存在) 独自の生成ロジック CreateFromTemplate, CreateWithReference

つまり、「新しいエンティティを生成する」ためのActionがFactory Actionです。
通常のCreateと違って、生成の仕方を開発者が自由に制御できます。

3.Factory Actionを使うと何が嬉しい?

Createは「ユーザが入力した内容をそのまま登録」しますが、Factory Actionは「事前ロジックで値を加工・決定」してから作成します。
たとえば:
・既存データをもとに一部値をコピーして新規作成
・バリデーションや前処理を通して初期データを返す
・システム内部ルールに従って初期値をセット
など、“Createでは表現できない生成シナリオ”に対応できます。

4.定義方法(Behavior Definition)

define behavior for ZI_SalesOrder alias SalesOrder
~~~
{
~~~
    factory action CreateWithTemplate parameter ZD_SALESORDER_TEMPLATE [1];
~~~
}

ここでの意味:

要素 説明
factory action 通常の action ではなく「生成系」であることを明示
parameter Factory Action実行時に、ユーザから受け取る入力データを定義します。Fiori Elementsの場合、このパラメータ構造に基づいてポップアップ入力画面が自動生成され、ユーザが値を入力できます。
[1] 単一入力(配列ではない)

5.実装方法(Behavior Implementation)


METHOD CreateWithTemplate.


  " 例: テンプレートIDから雛形データを取得
  SELECT SINGLE * FROM zsales_template
    WHERE TemplateID = @keys[ 1 ]-%param-template_id
    INTO @DATA(ls_template).

  lt_SalesOrder = VALUE #( ( %cid = keys[ 1 ]-%cid
                             %is_draft = '01'
                             %data = VALUE #( Product     = ls_template-Product
                                              Plant       = ls_template-Plant
                                            ) ) ).

  MODIFY ENTITIES OF ZI_SalesOrder IN LOCAL MODE
    ENTITY SalesOrder
    CREATE FIELDS ( Product Plant )
    WITH lt_SalesOrder
    MAPPED DATA(mapped_create).

    mapped-SalesOrder   =  mapped_create-SalesOrder.
    
ENDMETHOD.

・%paramに外部入力(テンプレートIDなど)が入ります。

6.まとめ

・Factory Action = 「生成専用のAction」
・Createより柔軟に生成ロジックを定義できる
・コピー・テンプレート生成・初期値付与などに最適
・Fiori Elementsでも自動的に呼び出し可能

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?