コンテンツフレーム起動

データベースプログラムの編集 文書を SAP ライブラリストラクチャに組み込む

論理データベースのデータベースプログラムを表示または変更するには、論理データベースビルダの第一画面で データベースプログラムを選択するか、または別のコンポーネントからデータベースプログラムにナビゲートします。プログラム名は SAPDB<ldb> となり、<ldb> は論理データベース名を表します。 

データベースプログラムの構造

初めて編集するデータベースプログラムを開くと、このデータベースプログラムがシステムによって生成されます。生成されたデータベースプログラムは、生成された一連のインクルードプログラムによって構成されるために、汎用グループのように見えます。このため、論理データベースに大量のノードが含まれる場合でも、分かりやすい構造となります。以前の論理データベースにはインクルードが使用されておらず、代わりに 1 つのメインプログラムだけで構成されていました。

このグラフィックは添付のテキストに説明されていますメインプログラム SAPDB<ldb> には、通常、以下のインクルードプログラムが含まれます。

        DB<ldb>TOP

グローバル宣言を保持します。

        DB<ldb>XXX.

個々のサブルーチンのためのインクルードプログラムを保持します。

        DB<ldb>F<001>DB<ldb>F<002> ...

その他の機能のためのユーザ定義インクルードプログラムです。

インクルードプログラム DB<ldb>XXX には、通常、以下のインクルードプログラムが含まれます。

        DB<ldb>001DB<ldb>002

論理データベースの各ノードに対する PUT_<node> および AUTHORITY_CHECK_<node> サブルーチンを保持します。

        DB<ldb>FXXX

選択画面の初期化、PBOPAI など、その他のほぼすべてのサブルーチンを保持します。

        DB<ldb>SXXX

検索ヘルプを処理するための FORM PUT_<ldb>_SP サブルーチンを保持します。

NODES およびTABLES 文、または自動生成されたインクルードプログラムおよびサブルーチンの規定の名前は 変更しないでください。ただし、追加のインクルードおよびサブルーチンを定義したり、データの読込に使用する ABAP 文を変更したりすることは可能です。ユーザ定義インクルードプログラムは、論理データベースに正しく転送されるように、命名規則DB<ldb>F<nnn>  に従う必要があります。

生成された ABAP プログラムの完全例

 例

論理データベース TEST_LDB が、以下の構造を持つとします。

このグラフィックは添付のテキストに説明されています

すべてのノードは、データベーステーブルです。選択インクルードには、以下の選択内容が定義されているとします。

  SELECT-OPTIONS: SLIFNR  FOR LFA1-LIFNR.

  SELECT-OPTIONS: SBUKRS  FOR LFB1-BUKRS.

  SELECT-OPTIONS: SGJAHR  FOR LFC1-GJAHR.

  SELECT-OPTIONS: SBELNR  FOR BKPF-BELNR.

以下に、自動生成されたデータベースプログラムとそのインクルードプログラムにおける重要な行を示します。プログラムには、ユーザやパフォーマンスに対するヒントもコメント行として含まれますが、この例では表示していません。

メインプログラムSAPDBTEST_LDB

*----------------------------------------------------------*  
*      DATABASE PROGRAM OF LOGICAL DATABASE TEST_LDB            
*----------------------------------------------------------*  

INCLUDE DBTEST_LDBTOP .    " header            
INCLUDE DBTEST_LDBXXX .    " all system routines        
* INCLUDE DBTEST_LDBF001 ." user defined include      

インクルードプログラムDBTEST_LDBTOP

PROGRAM SAPDBTEST_LDB DEFINING DATABASE TEST_LDB.  

TABLES : LFA1,                                  
         LFB1,                                  
         LFC!,                                  
         BKPF.                                  

* data: ...          "user defined variables  

インクルードプログラムDBTEST_LDBXXX

*----------------------------------------------------------*  
*      Automatically generated file                
* contains all necessary system routines of the database program
*      !!!!!DO NOT CHANGE MANUALLY !!!!!           
*----------------------------------------------------------*  

INCLUDE DBTEST_LDBN001 ." Node LFA1                    
INCLUDE DBTEST_LDBN002 ." Node LFB1                      
INCLUDE DBTEST_LDBN003 ." Node LFC1                      
INCLUDE DBTEST_LDBN004 ." Node BKPF                    
INCLUDE DBTEST_LDBFXXX ." INIT, PBO, PAI                  
INCLUDE DBTEST_LDBSXXX ." search help                

インクルードプログラムDBTEST_LDB001

*----------------------------------------------------------*
* Call event GET LFA1
*----------------------------------------------------------*

FORM PUT_LFA1.

* SELECT * FROM LFA1
*   INTO LFA1
*   INTO TABLE ?(choose one!)

*   WHERE LIFNR = ?.

    PUT LFA1.

* ENDSELECT.

ENDFORM.                               "PUT_LFA1

*----------------------------------------------------------*
* Authority Check for node LFA1
*----------------------------------------------------------*

* FORM AUTHORITY_CHECK_LFA1.
*   AUTHORITY-CHECK ...
* ENDFORM.                             "AUTHORITY_CHECK_LFA1

インクルードプログラムDBTEST_LDB002 およびDBTEST_LDB003

DBTEST_LDB001 に似ていますが、LFB1 および LFC1 ノードが対象となります。

インクルードプログラムDBTEST_LDB004

*----------------------------------------------------------*
* Call event GET BKPF
*----------------------------------------------------------*

FORM PUT_BKPF.

* STATICS FLAG.
* IF FLAG = SPACE.
*   FLAG = 'X'.
*** Declarations for field selection for node BKPF ***
*   STATICS BKPF_FIELDS TYPE RSFS_TAB_FIELDS.

*   MOVE 'BKPF' TO BKPF_FIELDS-TABLENAME.
*   READ TABLE SELECT_FIELDS WITH KEY BKPF_FIELDS-TABLENAME
*     INTO BKPF_FIELDS.

* ENDIF.

* SELECT (BKPF_FIELDS-FIELDS) INTO CORRESPONDING FIELDS OF
*     BKPF / TABLE ?" (choose one of them)
*     FROM BKPF
*   WHERE BUKRS = LFB1-BUKRS
*     AND BELNR IN SBELNR
*     AND GJAHR = ?.

    PUT BKPF.

ENDFORM.                               "PUT_BKPF

*----------------------------------------------------------*
* Authority Check for node BKPF
*----------------------------------------------------------*

* FORM AUTHORITYCHECK_BKPF.
*   AUTHORITY-CHECK ...
* ENDFORM.                             "AUTHORITY_CHECK_BKPF

インクルードプログラムDBTEST_LDBFXXX

*----------------------------------------------------------*
* BEFORE_EVENT will be called before event EVENT
* Possible values for EVENT: 'START-OF-SELECTION'
*----------------------------------------------------------*
* FORM BEFORE_EVENT USING EVENT.

*   CASE EVENT.
*     WHEN 'START-OF-SELECTION'
*
*   ENDCASE.

* ENDFORM.                              "BEFORE_EVENT

*----------------------------------------------------------*
* AFTER_EVENT will be called after event EVENT
* Possible values for EVENT: 'END-OF-SELECTION'
*----------------------------------------------------------*
* FORM AFTER_EVENT USING EVENT.

*    CASE EVENT.
*     WHEN 'END-OF-SELECTION'
*
*   ENDCASE.

* ENDFORM.                              "AFTER_EVENT

*-----------------------------------------------------------*  
* Initialize global data for multiple processing of          
* one logical database.
* Set returncode:
*      0 -> all data are initialized, multiple processing o.k.  
*  other -> no multiple processing allowed                  
*------------------------------------------------------------*
FORM  LDB_PROCESS_INIT CHANGING SUBRC LIKE SY-SUBRC.        
                      
ENDFORM.                    "LDB_PROCESS_INIT        

*------------------------------------------------------------*
* LDB_PROCESS_CHECK_SELECTIONS is called                    
* after select-options and parameters are filled              
*------------------------------------------------------------*

FORM  LDB_PROCESS_CHECK_SELECTIONS CHANGING SUBRC LIKE SY-SUBRC    
                                            MSG LIKE SYMSG.      
                                
ENDFORM.                    "LDB_PROCESS_CHECK_SELECTIONS  

*----------------------------------------------------------*
* Initialize selection screen (processed before PBO)
*----------------------------------------------------------*
FORM INIT.

ENDFORM.
                               "INIT.

*----------------------------------------------------------*
* PBO of selection screen (processed always after ENTER)
*----------------------------------------------------------*
FORM PBO.


ENDFORM.                                "PBO.

*----------------------------------------------------------*
* PAI of selection screen (processed always after ENTER)
*----------------------------------------------------------*
FORM PAI USING FNAME MARK.

* CASE FNAME.
*   WHEN 'SLIFNR  '.
*   WHEN 'SBUKRS  '.
*   WHEN 'SBELNR  '.
*   WHEN 'SGJAHR  '.
*   WHEN '*'.
* ENDCASE.
ENDFORM.                                "PAI

インクルードプログラムDBTEST_LDBSXXX

*************************************************************  
* !!! PLEASE DO NOT CHANGE MANUALLY (BEGIN OF BLOCK) !!!!!!*  
*-----------------------------------------------------------*  
* Data structures for search pattern selection                
*
* !!!PLEASE DO NOT CHANGE MANUALLY (END OF BLOCK) !!!!!!!! *  
*************************************************************  

*-----------------------------------------------------------*  
* PUT_TEST_LDB_SP.                                          
* Processed when search pattern selection is used,          
* i.e. user input into PARAMETERS p_sp AS SEARCH PATTERN
* STRUCTURE.

*-----------------------------------------------------------*  

* FORM PUT_TEST_LDB_SP.                              

* ENDFORM.                             "PUT_EXAMPLE_SP  

ほとんどのサブルーチンの機能については、論理データベースの構造セクションで説明しています。

ABAP 文の先頭のコメント記号(*) はオプションであり、削除することができます。また、疑問符は、適切な式に置き換えるためのものです。プログラムの構文をチェックすると、命名規則に従うすべてのインクルードプログラム、および選択インクルードもチェックされます。

PUT_<node> サブルーチンでは、ノードの一次キー項目に対する条件が WHERE 句に設定された SELECT 文が生成されます。これらの文は、Open SQL 文のパフォーマンスルールには準拠していないことに注意してください。特に、サブツリーの PUT_<node> サブルーチンでは、ネストされた SELECTED ループ構造が生成されてしまうので、この使用は避けてください。代わりに、データをいったん内部テーブルにバッファしてから、PUT 文を使用してこのデータを適切なアプリケーションプログラムに渡すことができます。ただし技術的な理由により、PUT <node> 文は、PUT_<node> で始まる名前を持つサブルーチン内で常に発生させる必要があります。

選択に、ノードに対する動的選択または項目選択が含まれる場合は、対応する文が PUT_NODE サブルーチン内で生成され、自動生成された SELECT 文が調整されます (BKPF ノードの例を参照)。次のセクションでは、動的選択でのユーザ入力を処理し、GET 文の後で列の指定を行う方法について説明します。

生成されたデータオブジェクトおよびサブルーチン

一部の内部テーブルとその他のサブルーチンは自動生成され、プログラム内で使用できるようになります。

        GET_EVENT 内部テーブルには、GET 文でユーザから要求された論理データベースのノードが保持されます。このテーブルは、次のように生成されます。

DATA: BEGIN OF GET_EVENTS OCCURS 10,
        NODE(10),
        KIND,
      END OF GET_EVENTS.

各行は、NODE 項目内の、論理データベースのノード名を保持します。KIND 項目は、ノードがユーザに要求されたかどうか、またその要求方法を示します。 

         KIND = 'X': ノードが GET およびGET LATE 文内で指定されたことを示します。

         KIND = 'G': ノードが GET のみで指定されたことを示します。

         KIND = 'L': ノードが GET LATE のみで指定されたことを示します。

         KIND = 'P': ノードが GETGET LATE のどちらにも指定されなかったことを示します。ただし、下位ノードが GET または GET LATE 内で指定されています。

         KIND = '  ': ノードが GETGET LATE のどちらにも指定されなかったことを示します。下位ノードも指定されていません。

        BEFORE_EVENTAFTER_EVENT、および PUT_<ldb>_SP サブルーチンは、データベースプログラム内でコメントとして生成されます (上記の例を参照)。このコメントは修正でき、また、コメント記号 (*) を削除して有効化することもできます。BEFORE_EVENT は、EVENT パラメータに指定されたイベントが処理される前に呼び出されます。AFTER_EVENT は、EVENT パラメータに指定されたイベントが処理された後に呼び出されます。PUT_<ldb>_SP は、検索ヘルプが選択に使用される場合に、PUT_<root> の代わりに値を処理するために呼び出されます。<root> は、論理データベースのルートノードを示します。

 

データベースプログラムの動的選択

データベースプログラムの項目選択

データベースプログラムの検索ヘルプ

非依存呼出とデータベースプログラム

 

 

 

コンテンツフレーム終了