2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SAP Public CloudでFioriからファイルアップロードする方法 ②

Posted at

SAP Public CloudでFioriからファイルアップロードする方法①の続きです。

1. データモデル

今回のサンプルでは、下記のようなデータモデルを設計しました。
Root Entity:ファイルアップロードの履歴を保持
Child Entity:その履歴に紐づくアップロードファイルの明細を保持
Root と Child の関係は 0..* となっており、1つのアップロード履歴に対して複数の明細(ファイル)を登録できる構成です。
このように 履歴と明細を分けることで、
いつ・誰が・どんな処理でアップロードしたか(履歴)
実際にアップロードされたファイルや付随情報(明細)
をそれぞれ整理して管理できるようになります。
image.png

2. CDSview

2.1 Root Entity

Interface view
ファイルアップロードの「履歴」を表すRoot Entityです。
@Semantics.largeObject を付与することで、Fiori FileUploaderから取り込んだファイルをBase64形式で受け取ることが可能になります。

@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '##GENERATED #'
define root view entity ZR_PRFILEHEAD
  as select from ztprfilehead as header
  
  composition  [0..*] of ZR_PRFILEITEM as _item
  
{
  key key_uuid as KeyUUID,
    @Semantics.largeObject:{
        mimeType: 'Mimetype',
        fileName: 'Filename',
        acceptableMimeTypes: ['application/vnd.openxmlformats', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','text/csv','text/html'],
        contentDispositionPreference: #ATTACHMENT
  }
  attachment as Attachment,
  @Semantics.mimeType: true
  mimetype as Mimetype,
  filename as Filename,
  upload as Upload,
  execute_file as ExecuteFile,
  status as Status,
  process_number as ProcessNumber,
  success_number as SuccessNumber,
  error_number as ErrorNumber,
  @Semantics.user.createdBy: true
  local_created_by as LocalCreatedBy,
  @Semantics.systemDateTime.createdAt: true
  local_created_at as LocalCreatedAt,
  @Semantics.user.localInstanceLastChangedBy: true
  local_last_changed_by as LocalLastChangedBy,
  @Semantics.systemDateTime.localInstanceLastChangedAt: true
  local_last_changed_at as LocalLastChangedAt,
  @Semantics.systemDateTime.lastChangedAt: true
  last_changed_at as LastChangedAt,
  
  _item
  
}

2.2 Child Entity

Interface view
こちらはファイルの内容を保持するChild Entityです。
取込んだCSVやExcelの1行ごとのデータを格納するイメージになります。

@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: '##GENERATED #'
define view entity ZR_PRFILEITEM
  as select from ztprfileitem as item
  
  association to parent ZR_PRFILEHEAD as _header
    on _header.KeyUUID = $projection.KeyUUID
  
{
  key key_uuid as KeyUUID,
  key item_uuid as ItemUUID,
  product as Product,
  @Semantics.quantity.unitOfMeasure: 'Baseunit'
  requestedquantity as Requestedquantity,
  baseunit as Baseunit,
  plant as Plant,
  purchasingorganization as Purchasingorganization,
  purchasinggroup as Purchasinggroup,
  status  as Status,
  message as Message,
  criticality as Criticality,
  @Semantics.systemDateTime.createdAt: true
  local_created_at as LocalCreatedAt,
  @Semantics.user.localInstanceLastChangedBy: true
  local_last_changed_by as LocalLastChangedBy,
  @Semantics.systemDateTime.localInstanceLastChangedAt: true
  local_last_changed_at as LocalLastChangedAt,
  @Semantics.systemDateTime.lastChangedAt: true
  last_changed_at as LastChangedAt,
  
  _header
  
}

3. Behavior Definition

Behavior Definition (BDEF) では、アップロード処理の流れを制御します。
getDataFile:ファイルを取り込んだ際に Child Entity に展開する処理
execute_filedata:保存ボタン押下時に標準データの登録を行う処理

managed implementation in class ZCL_PRFILEHEAD unique;
strict ( 2 );
with draft;

define behavior for ZR_PRFILEHEAD alias header
persistent table ztprfilehead
draft table ZDPRFILEHEAD
etag master LocalLastChangedAt
lock master total etag LastChangedAt
authorization master( global )

{
  field ( readonly )
   KeyUUID,
   Status,
   ProcessNumber,
   SuccessNumber,
   ErrorNumber,
   LocalCreatedAt,
   LocalCreatedBy,
   LastChangedAt,
   LocalLastChangedAt,
   LocalLastChangedBy;

  field ( numbering : managed )
   KeyUUID;


  create;
  update;
  delete;

  draft action Edit;
  draft action Activate;
  draft action Discard;
  draft action Resume;
  draft determine action Prepare;

  // ファイルデータ読込
  determination getDataFile on modify { field Attachment; }

  // ファイルデータ登録
  determination execute_filedata on save { create; }

  // リカバリ実行
  action ( features : instance ) recovery_execute result [1] $self;


  association _item { create; with draft; }

  mapping for ZTPRFILEHEAD
  {
    KeyUUID = KEY_UUID;
    Attachment = ATTACHMENT;
    Mimetype = MIMETYPE;
    Filename = FILENAME;
    Upload = UPLOAD;
    ExecuteFile = EXECUTE_FILE;
    Status = STATUS;
    ProcessNumber = PROCESS_NUMBER;
    SuccessNumber = SUCCESS_NUMBER;
    ErrorNumber = ERROR_NUMBER;
    LocalCreatedBy = LOCAL_CREATED_BY;
    LocalCreatedAt = LOCAL_CREATED_AT;
    LocalLastChangedBy = LOCAL_LAST_CHANGED_BY;
    LocalLastChangedAt = LOCAL_LAST_CHANGED_AT;
    LastChangedAt = LAST_CHANGED_AT;
  }
}

define behavior for ZR_PRFILEITEM alias item
persistent table ztprfileitem
draft table ZDPRFILEITEM
lock dependent by _header
authorization dependent by _header

{
  field ( readonly )
   KeyUUID,
   LocalCreatedAt,
   LastChangedAt,
   LocalLastChangedAt,
   LocalLastChangedBy;

  field ( numbering : managed )
   ItemUUID;

  update;
  delete;

  association _header;

  mapping for ZTPRFILEITEM
  {
    KeyUUID = KEY_UUID;
    ItemUUID = ITEM_UUID;
    Product = PRODUCT;
    Requestedquantity = REQUESTEDQUANTITY;
    Baseunit = BASEUNIT;
    Plant = PLANT;
    Purchasingorganization = PURCHASINGORGANIZATION;
    Purchasinggroup = PURCHASINGGROUP;
    Status = status;
    Message = message;
    Criticality = criticality;
    LocalCreatedAt = LOCAL_CREATED_AT;
    LocalLastChangedBy = LOCAL_LAST_CHANGED_BY;
    LocalLastChangedAt = LOCAL_LAST_CHANGED_AT;
    LastChangedAt = LAST_CHANGED_AT;
  }
}

4. まとめ

ここまでで、SAP Public Cloudにおける「Fioriからファイルアップロード」を実現するために必要なデータモデル → CDS View → Behavior Definitionの流れを紹介しました。

データモデル

履歴(Root)と明細(Child)の2階層構造でファイルを管理できるように設計しました。

CDS View

@Semantics.largeObject を使うことで、Fiori FileUploaderからBase64形式のファイルを受け取り、保持する仕組みを用意しました。

Behavior Definition

ファイルアップロードや取込処理を「determination」で制御し、Child Entityへデータを展開する動作定義を行いました。

③では、Behavior Definition内のABAPソースコードを紹介したいと思います!

前回記事
【SAP Public Cloud】Fioriからファイルアップロードする方法①

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?