ブログ

  • SAP FIORIの紹介

    SAP FIORIの紹介

    FIORIとは

    FIORIとはSAPのアプリケーションの設計システムのことで、洗練されたUIとどのデバイスからもアクセスできる点が大きな特徴です。ユーザーはこの特徴を活用して、リアルタイムで経営状況を把握できるようになります。

    FIORIの利点

    SAP FIORIを使用することにより、生産性とデータ品質を向上させ、ユーザーの満足度を高めることができます。

    ・最適化されたネイティブモバイルアプリとレスポンシブWEBアプリ

    ・スピーディーなアプリカスタマイズ

    FIORIでできること

    ビジネス目標の達成

    ユーザーが早期にSAPを使えるようになり、スピーディーに作業を完了させることができます。

    新しいソリューションのイノベーション

    テンプレート、ツール、ガイドラインが容易されており、一貫したデザインのアプリ構築が可能になります。

    高速アプリ構築

    高速アプリ構築のためのガイドラインを読む

    https://experience.sap.com/fiori-design-web/

    アプリ構築のためのドキュメント

    YouTube Channelhttps://www.youtube.com/@sapdesign2010/videos
    FIORI Communityhttps://community.sap.com/topics/fiori
    Design guidelinehttps://experience.sap.com/fiori-design/
    Apps Reference Libraryhttps://fioriappslibrary.hana.ondemand.com/sap/fix/externalViewer/
    SAP UI5https://ui5.sap.com/
    Web Componentshttps://sap.github.io/ui5-webcomponents/
    FIORI Elementshttps://experience.sap.com/fiori-design-web/smart-templates/
  • APPEND命令まとめ

    APPEND命令まとめ

    APPEND命令とは

    APPEND命令とは、内部テーブルにデータを格納できる命令です。この命令では、内部テーブルの一番下の行に格納されていきます。

    以下が基本的な記述方法になります。構造から内部テーブルへ格納するのが一般的です。

    APPEND (構造) TO (内部テーブル).

    この命令では構造から内部テーブルに1行分格納することができます。

    APPEND INITIAL (構造) TO (内部テーブル).

    内部テーブルの先頭行にレコードを格納したい場合は「INITIAL」を使います。

    フィールドシンボルを割り当てて内部テーブルに格納する

    構造から内部テーブルに格納するだけでなく、フィールドシンボルを割り当てて内部テーブルに格納することもできます。

    APPEND LINE TO (内部テーブルA) ASSIGNING (フィールドシンボル).

    (フィールドシンボル)-項目A = XXX.

    (フィールドシンボル)-項目B = XXX.

    直接値を指定して格納する

    APPEND VALUE #( 項目A = ‘XXX’ 項目B = ‘YYY’ ) TO 内部テーブル.

    この命令は「#」によって構造体が自動で作成され、内部テーブルに追加したいデータをカッコ内に記述します。

    APPEND命令ではデータを内部テーブルの最後の行に追加しています。

    LOOP文を使って複数行格納する

    内部テーブルから別の内部テーブルへデータを格納したい場合、LOOP文とAPPEND命令を組み合わせて使用することができます。

    LOOP AT (内部テーブルA) INTO (構造).

    APPEND (構造) TO (内部テーブルB).

    ENDLOOP.

    APPEND文のみで複数行格納する

    内部テーブルから別の内部テーブルに複数行格納する際にAPPEND命令だけを使うこともできます。

    APPEND LINES OF (内部テーブルA) TO (内部テーブルB).

    https://help.sap.com/doc/saphelp_nw70/7.0.12/ja-JP/fc/eb36c8358411d1829f0000e829fbfe/content.htm?no_cache=true

  • 構造宣言・データ宣言

    構造宣言・データ宣言

    構造宣言

    構造の作成

    パターン
    1から作成する(基本形)
    TYPES:
      BEGIN OF TY_S_DATA,
        A TYPE CHAR1,
        B TYPE CHAR1,
      END OF TY_S_DATA.
    
    パターン
    DBテーブルと同じ項目を参照して構造を作成する
    TYPES:
      BEGIN OF TY_S_DATA,
        A TYPE FLIGHT-A,
        B TYPE FLIGHT-B,
      END OF TY_S_DATA.

    テーブル型の作成

    TYPES:
      BEGIN OF TY_S_DATA,
        A TYPE CHAR1,
        B TYPE CHAR1,
      END OF TY_S_DATA,
    
      TY_T_DATA TYPE STANDARD TABLE OF TY_S_DATA.

    TY_T_DATAはテーブル型。

    データ宣言

    ワークエリアの作成

    パターン
    構造型を参照する
    TYPES:
      BEGIN OF TY_S_DATA,
        A TYPE CHAR1,
        B TYPE CHAR1,
      END OF TY_S_DATA.
    DATA: GW_WORKAREA TYPE TY_S_DATA.
    パターン
    DBテーブルを参照する
    DATA:GW_EORKAREA TYPE FLIGHT.

    FLIGHTはDBテーブル名かアドオンテーブル名となる

    内部テーブルの作成

    パターン
    テーブル型を参照
    TYPES:
      BEGIN OF TY_S_DATA,
        A TYPE CHAR1,
        B TYPE CHAR1,
      END OF TY_S_DATA,
    
      TY_T_DATA TYPE STANDARD TABLE OF TY_S_DATA.
    
    DATA: GT_TABLE TYPE TY_T_DATA.
    パターン
    テーブル型を参照しない
    TYPES:
      BEGIN OF TY_S_DATA,
        A TYPE CHAR1,
        B TYPE CHAR1,
      END OF TY_S_DATA.
    
    DATA: GT_TABLE TYPE STANDARD TABLE OF TY_S_DATA.
    パターン
    DBテーブルを参照
    DATA: GT_TABLE TYPE STANDARD TABLE OF FLIGHT.
  • ALVツールバーにボタンを追加する

    ALVツールバーにボタンを追加する

    ALVツールバーとは

    ALVの標準の機能であり、アプリケーションツールバーの略です。ALVツールバーには様々な機能ボタンが表示され、ユーザーはボタンを押すことで出力された画面のデータを並べ替えたりデータをエクセルに出力したりすることが可能です。

    ツールバーにボタンを追加する手順

    ALVツールバーには、ボタンを追加して任意の機能を作成することができます。

    手順は以下の通りです。

    STEP
    GUIステータスでボタンを作成

    STEP
    ボタンを呼び出すサブルーチンを作成

    STEP
    ALVで出力する。

    GUIステータスでボタンを作成

    トランザクションコード41でボタンを作成します。

    STEP
    ADDONプログラムのステータスを作成する

    STEP
    ボタンを作成する

    まず、REUSE_ALV_GRID_DISPLAYで使用されているGUIステータスですが、プログラムID:SAPLKKBL、ステータス:STANDARD_FULLSCREENとなっています。これを自分のテストプログラムにコピーし、実行ボタンをつけます。

    ボタンを呼び出すサブルーチンを作成

    ボタンを作成したら、プログラム内にサブルーチンを作成します。

    FORM PF_STATUS
     USING I_EXTAB TYPE SLIS_T_EXTAB.
      SET PF-STATUS 'LIST'.
    ENDFORM.

    サブルーチン内でこのように記述することでプログラム内にGUIステータスを作成することができます。

    「LIST」の部分はアドオンプログラムのステータス名です。名前は自由に決めて大丈夫です。

    SET PF-STATUSの記述によって機能ボタンを呼び出すことが可能になるが、不要な機能が含まれている場合がある。その場合、「EXCLUDING」を指定することで不要なコードを削除することができる。

    FORM PF_STATUS
      USING I_EXTAB TYPE SLIS_T_EXTAB.
      SET PF_STATUS 'LIST' EXCLUDING I_EXTAB.
    ENDFORM.

    USINGパラメーターの記述がないとエラーになるので、要注意!

    ALVで出力する

    ①「REUSE_ALV_GRID_DISPLAY」の汎用モジュールにあるi_callback_pf_status_setパラメータにGUIステータスを記述したサブルーチン名を渡します。

    ② i_callback_user_command パラメーターにボタンが押された際の処理を記述したサブルーチン名を渡します。

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
     EXPORTING
       i_callback_program                = sy-repid
       i_callback_pf_status_set          = 'PF_STATUS'
       i_callback_user_command           = 'HANDLE_USER_COMMAND'
       is_layout                         = s_alv_layout_cat
       it_fieldcat                       = it_alv_field_cat
       i_default                         = 'X'
       i_save                            = 'A'
       it_events                         = it_alv_event_cat
      TABLES
        t_outtab                          = gt_zprice
    * EXCEPTIONS
    *   PROGRAM_ERROR                     = 1
    *   OTHERS                            = 2
              .
    
    *---------------------------------------------------------------------*
    *       FORM SET_PFSTATUS                                             *
    *---------------------------------------------------------------------*
    *       ........                                                      *
    *---------------------------------------------------------------------*
    *  -->  EXTAB                                                         *
    *---------------------------------------------------------------------*
    FORM PF_STATUS USING extab TYPE slis_t_extab.
      SET PF-STATUS 'LIST'.
    ENDFORM.

    ▼参考サイト①

    ▼参考サイト②

    Q&A

    上記の処理を実装してもボタンが表示されなかった

    アプリケーションツールバーの設定画面(T-code41)で機能コードの先頭に&をつける

    まとめ

    今回は、ALVで追加ボタンを作成してALVツールバーに表示する方法を紹介しました。

    ここまでだとALVの表示画面でボタンを押しても何も機能しません。(ボタンを押したときの処理作成していないからです)

    ということで、次はボタンを押したときの機能の実装方法について紹介していきます。

  • FOR ALL ENTRIES IN の使い方

    FOR ALL ENTRIES IN の使い方

    FOR ALL IN ENTRIES 命令は、主にSELECT文を使用する際に別の内部テーブルの項目を抽出条件として記述したいときに使われます。

    FOR ALL ENTRIES INの特徴

    抽出条件に他の内部テーブルの項目を指定できる。

    抽出条件とは、SELECT文ではWHERE句のことを指します。

    この命令を使うことで、他のテーブルの項目を抽出条件として指定できます。

    基本的な文法

    SELECT field1 field2
      FROM dbtable
      FOR ALL ENTRIES IN itab
      WHERE field1 = itab-field1 AND
            field2 = itab-field2
      INTO TABLE result.
    

    この例では、dbtableテーブルからfield1とfield2の項目をresultテーブルに格納します。

    <抽出条件>

    • dbtableテーブルのfield1の項目とitabテーブルのfield1の項目が等しい
    • dbtableテーブルのfield2の項目とitabテーブルのfield2の項目が等しい

    この命令を使う際には以下のことに注意する必要があります。

    • 内部テーブルを複製する必要がある
    • ソート、重複削除をする必要がある
    • ORDER BYと同時に指定することはできない。
  • GoogleI/O’23の注目ポイント

    GoogleI/O’23の注目ポイント

    Bardがついに日本語化

    Googleから先日GoogleI/O’23 にてAIや新製品について発表がありました。

    ついにGoogleが提供するAIサービスであるBardが日本語対応と同時に世界180か国で利用可能になりました。

    Google I/O ‘23

    GoogleI/O’23

    GoogleI/O’23で注目すべきポイントは

    • Bard
    • Google検索
    • デバイス

    この3つだと思います。YouTubeの動画は日本語字幕で視聴できるため、早めに情報を取得しておきましょう。

    Bard

    BardはWaitListの廃止、日本語対応、API(拡張機能)、GooGleサービスとの統合。今回の発表はかなり興味深い内容となりました。「ChatGPTに後れを取っているわけではなく、同じことができるぞ」というGoogleの主張が垣間見えました。

    また、他のAIサービスとの差別化ポイントとして、Googleサービスとの統合と情報ソースの正確性が挙げられます。GmailやスプレッドシートなどのサービスとAIの連携が直接とれるようになります。

    さらに、情報のリンクを分かりやすく表示したりBardで生成した画像に情報ソースやプロンプトを付け加える機能が紹介されました。

    Google検索

    近い将来、Google検索の体験も大きく変わります。

    標準でAIが検索(質問)に回答してくれて、その下に従来の検索結果を表示する形式になるようです。

    検索方法も単語ではなく、完全にテキストベースに代わると思います。

    デバイス

    今回以下の3つの製品が発表されました。

    • Pixcel Tablet
    • Pixcel Fold
    • Pixcel 7a

    Googleのエコシステムもかなり充実してきたようで、ようやくAppleのエコシステムから離れる準備ができそうです。

  • SQL

    SQL

    OPENSQL

    ABAPプログラミングで用いられるSQLはOPENSQLといいます。

    SQLは、データベースから内部テーブルにデータを抽出する際に使う命令です。

    OPEN SQLは複雑なSQLを記述することなく、データベーステーブルからデータを抽出することができます。

    基本的なSELECT文

    READ、SELECT

    READとSELECTの特徴をまとめています。

    READ文は内部テーブルからデータを読み取るのに対し、SELECT文はデータベースからデータを読み取ります。

    READ

    • READステートメントは、内部テーブルからデータを読み取るために使用されます。
    • プログラムの実行中にデータを操作し、処理するために使用される一時的なデータ構造です。
    • READ TABLE itab INTO wa WHERE ... または READ TABLE itab WITH KEY ... といった形式で使用されます。
    • READは、指定された条件に一致する内部テーブルの最初のレコードを見つけるのに役立ちます。見つかった場合は、そのレコードをワークエリアやフィールドシンボルに割り当てます。
    • READステートメントは通常、線形検索またはバイナリ検索を使用して、内部テーブル内のデータを検索します。

    SELECT

    • SELECTステートメントは、データベーステーブルからデータを読み取るために使用されます。
    • データベーステーブルは、永続的なデータストレージであり、プログラムの実行間にデータが保持されます。
    • SELECT ... FROM dbtab WHERE ... INTO TABLE itab といった形式で使用されます。
    • SELECTは、指定された条件に一致するデータベーステーブルのレコードを抽出し、内部テーブルに格納するのに役立ちます。
    • SELECTステートメントは、データベースからデータを取得するためのクエリを実行します。

    複数のテーブルを内部結合してデータを取得する方法はこちらの記事で紹介しています。

    フィールドシンボル

    フィールドシンボルとは、変数のことで内部テーブルの1つ1つのレコードにフィールドシンボルを割り当てることができます。

    フィールドシンボルは、データオブジェクトへの動的な参照を提供し、メモリ内のデータを簡単にアクセスおよび操作できる

    フィールドシンボルを用いることで、ワークエリアを定義しなくてもよいためメモリを節約することができます。

    ・フィールドシンボルはワークエリアと同じようなものと考えてよい。

    LOOP処理

    LOOP AT (内部テーブル) ASSIGNING FIELD-SYMBOL(<xxx>).

  • プロンプト

    用語解説

    これからSAPに関する用語を入力します。
    以下の条件に従って回答してください。
    
    #条件1
    ・【概要の説明】
    ・【使う場面】
    ・【専門用語の解説】
    この3つの解説文を作成してください。
    
    #条件2
    ・マークダウン形式で出力
    ・英語圏の情報は日本語に訳す

    プログラミング

    あなたはプロのABAPエンジニアです。これからソースコードを入力するので、エラーがあればその解説を行ってください。
    また、ソースコードに関する質問を送る場合があります。その時は質問に対して丁寧に回答し、専門用語の解説も行うこと。
  • ALV出力の基本

    ALV出力の基本

    ALVはデータの一覧表示方法の一つです。ALVを使うと、データの表示や表示機能を簡単に実装できます。

    AVL出力の流れ

    STEP
    データの取得

    ・構造、ワークエリア、内部テーブル、プログラムID、カタログを定義する。

    ・SQLでデータベースの値を内部テーブルに格納する。

    STEP
    フィールドカタログの設定

    A. 汎用モジュール”REUSE_ALV_FIELDCATALOG_MERGE

    B.  手入力で項目を指定

    STEP
    プログラムIDを渡す

    XXX = SY-REPID.

    STEP
    ALV出力

    ・汎用モジュール”REUSE_AVL_GRID_DISPLAY“(必須)

    フィールドカタログとは

    ALV出力に表示される各列の情報を定義する構造のことです。

    この記事では、フィールドカタログの設定が手入力になっていますが、汎用モジュールでフィールドカタログを設定することができます。

    用語解説

    プログラムID

    プログラムIDは、現在実行中のABAPプログラムの一意な識別子です。システムフィールドSY-REPIDを使用して取得できます。プログラムIDは、フィールドカタログの生成やALV出力の設定に関連する関数モジュールの呼び出し時に使用されます。プログラムIDを指定することで、関数モジュールは現在実行中のプログラムに関連する情報を取得し、正確なフィールドカタログやALV出力の設定を行うことができます。

    プログラムIDは現在実行中のプログラムを識別するためのもの

    カタログ

    カタログは、ALV出力に表示される各列の情報を定義するための構造体です。具体的には、SLISタイププールで定義されたSLIS_FIELDCAT_ALV型の内部テーブル(例:lt_fieldcat)で構成されています。カタログには、列のタイトル、データ型、列幅、表示・非表示、ソート順序などの情報が含まれています。

    ALV出力の例①

    以下にALV出力の例を挙げています。

    この例では、フィールドカタログを手入力で作成する必要があります。

    REPORT ZALV_SAMPLE.
    TYPE-POOLS: SLIS. " SLISタイププールを使用するための宣言
    
    TYPES: BEGIN OF ty_sflight,
             carrid TYPE sflight-carrid,
             connid TYPE sflight-connid,
             fldate TYPE sflight-fldate,
           END OF ty_sflight.
    
    DATA: lt_sflight TYPE STANDARD TABLE OF ty_sflight, " 内部テーブル
          wa_sflight TYPE ty_sflight, " ワークエリア
          lt_fieldcat TYPE SLIS_T_FIELDCAT_ALV, " フィールドカタログの内部テーブル
          wa_fieldcat TYPE SLIS_FIELDCAT_ALV, " フィールドカタログのワークエリア
          gd_repid TYPE sy-repid. " プログラムID
    
    * 1. データの取得
    SELECT * FROM sflight
      INTO TABLE lt_sflight
      UP TO 50 ROWS.
    
    * 2. フィールドカタログの作成
    CLEAR wa_fieldcat.
    wa_fieldcat-fieldname = 'CARRID'.
    wa_fieldcat-seltext_l = 'Airline Carrier'.
    APPEND wa_fieldcat TO lt_fieldcat.
    
    CLEAR wa_fieldcat.
    wa_fieldcat-fieldname = 'CONNID'.
    wa_fieldcat-seltext_l = 'Connection Number'.
    APPEND wa_fieldcat TO lt_fieldcat.
    
    CLEAR wa_fieldcat.
    wa_fieldcat-fieldname = 'FLDATE'.
    wa_fieldcat-seltext_l = 'Flight Date'.
    APPEND wa_fieldcat TO lt_fieldcat.
    
    * 3. プログラムIDの取得
    gd_repid = sy-repid.
    
    * 4. ALV出力
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program = gd_repid
        it_fieldcat        = lt_fieldcat
      TABLES
        t_outtab           = lt_sflight.
    

    解説①

    この例では、以下の手順でALV出力を実現しています。

    1. データの取得:sflightテーブルからデータを選択し、内部テーブルlt_sflightに格納しています。
    2. フィールドカタログの作成:各列について、フィールド名(fieldname)と列のタイトル(seltext_l)を設定し、フィールドカタログの内部テーブルlt_fieldcatに追加しています。
    3. プログラムIDの取得:sy-repidを使用して現在のプログラムIDを取得し、gd_repidに格納しています。
    4. ALV出力:REUSE_ALV_GRID_DISPLAY関数モジュールを呼び出し、必要なパラメータ(プログラムID、フィールドカタログ、データを含む内部テーブル)を渡してALV出力を表示しています。

    ALV出力の例②

    この例では、汎用モジュールを使ってフィールドカタログの設定を自動で行います。

    REPORT ZALV_SAMPLE_AUTO.
    TYPE-POOLS: SLIS. " SLISタイププールを使用するための宣言
    
    TYPES: BEGIN OF ty_sflight,
             carrid TYPE sflight-carrid,
             connid TYPE sflight-connid,
             fldate TYPE sflight-fldate,
           END OF ty_sflight.
    
    DATA: lt_sflight TYPE STANDARD TABLE OF ty_sflight, " 内部テーブル
          lt_fieldcat TYPE SLIS_T_FIELDCAT_ALV, " フィールドカタログの内部テーブル
          gd_repid TYPE sy-repid. " プログラムID
    
    * 1. データの取得
    SELECT * FROM sflight
      INTO TABLE lt_sflight
      UP TO 50 ROWS.
    
    * 2. プログラムIDの取得
    gd_repid = sy-repid.
    
    * 3. フィールドカタログの自動生成
    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
      EXPORTING
        i_program_name     = gd_repid
        i_internal_tabname = 'TY_SFLIGHT'
      CHANGING
        ct_fieldcat        = lt_fieldcat.
    
    * 4. ALV出力
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
        i_callback_program = gd_repid
        it_fieldcat        = lt_fieldcat
      TABLES
        t_outtab           = lt_sflight.
    

    例②の解説

    1. データの取得:sflightテーブルからデータを選択し、内部テーブルlt_sflightに格納しています。
    2. プログラムIDの取得:sy-repidを使用して現在のプログラムIDを取得し、gd_repidに格納しています。
    3. フィールドカタログの自動生成:REUSE_ALV_FIELDCATALOG_MERGE関数モジュールを呼び出し、プログラムIDと内部テーブルのタイプ名(TY_SFLIGHT)を渡すことで、フィールドカタログを自動生成し、lt_fieldcatに格納しています。
    4. ALV出力:REUSE_ALV_GRID_DISPLAY関数モジュールを呼び出し、必要なパラメータ(プログラムID、フィールドカタログ、データを含む内部テーブル)を渡してALV出力を表示しています。

    ボタンを追加する

    ALVの基本的な表示に加えて、ボタンを追加することも可能です。

    詳しくはこちらの記事で紹介しています。