- リリース ノート
- 基本情報
- インストール
- 構成
- Integrations
- 認証
- アプリおよびディスカバリー アクセラレータを使用する
- AppOne のメニューとダッシュボード
- AppOne の設定
- TemplateOne 1.0.0 のメニューとダッシュボード
- TemplateOne 1.0.0 セットアップ
- TemplateOne のメニューとダッシュボード
- TemplateOne 2021.4.0 のセットアップ
- Purchase-to-Pay Discovery Accelerator のメニューとダッシュボード
- Purchase to Pay Discovery Accelerator の設定
- Order to Cash Discovery Accelerator のメニューとダッシュボード
- Cash Discovery Accelerator の設定への注文
- 基本コネクタ (AppOne 用)
- SAP コネクタ
- SAP Order to Cash Connector for AppOne
- SAP Purchase to Pay Connector for AppOne
- SAP Connector for Purchase to Pay Discovery Accelerator
- SAP Connector for Order-to-Cash Discovery Accelerator
- Superadmin
- ダッシュボードとグラフ
- テーブルとテーブル項目
- アプリケーションの整合性
- 使い方 ....
- SQL コネクタを使用する
- 便利なリソース
SAP システムに Z_XTRACT_IS_TABLE 関数モジュールをインストールする
Z_XTRACT_IS_TABLE
関数モジュールを SAP システムに追加する必要があります。
Z_XTRACT_IS_TABLE
関数モジュールが必要です。 たとえば、この関数モジュールの名前が SAP システムで変更されている場合、SAP 接続文字列の FunctionModule
パラメーター (任意) で正しい名前を指定できます。
新しい関数グループを追加するには、以下の手順に従います。
手順 |
操作 |
---|---|
1 |
SAP GUI を開きます。 |
2 |
左上のコマンド フィールドに
SE37 を入力します。
|
3 |
五島 メニューに移動し、[ 関数グループ] -> [グループを作成] を選択します。 |
4 |
関数グループの名前を入力します。 注: 名前は
Z で始まる必要があります (例: Z_PM_DATA_EXTRACTION )。
|
5 |
[ Short Text] フィールドに、関数グループの説明を入力します (例: ProcessMining Data Extraction)。 |
6 |
[保存] をクリックします。 |
関数グループが作成されたら、SE37 GUI ウィンドウから関数モジュールを追加できます。
Z_XTRACT_IS_TABLE 関数モジュールをインストールするには、以下の手順に従います。
手順 |
操作 |
---|---|
1 |
[ Function Module (関数モジュール )] フィールドに
Z_XTRACT_IS_TABLE を入力し、[ Create] をクリックします。
|
2 |
[属性 ] タブに移動し、[ Processing Type ] オプション リストで [ Remote-Enabled Module (リモート有効モジュール )] オプションを選択します。 |
3 |
[ インポート ] タブに移動し、以下に示すようにインポート パラメーターを定義します。 注:
LIKE 演算子が使用されていないという警告が表示される可能性があります。 この警告は無視してリストを確認できます。 Enter キーをクリックして、引き続き使用することを確認します。 リスト全体を読み取ると、コードは受け入れられます。
|
4 |
[ Tables ] タブに移動し、以下に示すようにテーブル パラメーターを定義します。 注:
LIKE 演算子が使用されていないという警告が表示される可能性があります。 この警告は無視してリストを確認できます。 Enter キーをクリックして、引き続き使用することを確認します。 リスト全体を読み取ると、コードは受け入れられます。
|
5 |
[ 例外 ] タブに移動して、以下に示すように例外を定義します。 |
6 |
[ ソース コード ] タブに移動し、
Z_XTRACT_IS_TABLE の ABAP コードを入力します。
注: 以下に表示されているコードをコピーして貼り付けることができます。
|
7 |
関数モジュールを保存してアクティブ化します。 |
[ソース コード] タブに貼り付ける ABAP コードについては、以下の コード テキストをご 覧ください。
FUNCTION Z_XTRACT_IS_TABLE.
*"
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(QUERY_TABLE) LIKE DD02L-TABNAME
*" VALUE(DELIMITER) LIKE SONV-FLAG DEFAULT SPACE
*" VALUE(NO_DATA) LIKE SONV-FLAG DEFAULT SPACE
*" VALUE(ROWSKIPS) LIKE SOID-ACCNT DEFAULT 0
*" VALUE(ROWCOUNT) LIKE SOID-ACCNT DEFAULT 0
*" TABLES
*" OPTIONS STRUCTURE RFC_DB_OPT
*" FIELDS STRUCTURE RFC_DB_FLD
*" DATA STRUCTURE CHAR8000
*" EXCEPTIONS
*" TABLE_NOT_AVAILABLE
*" TABLE_WITHOUT_DATA
*" OPTION_NOT_VALID
*" FIELD_NOT_VALID
*" NOT_AUTHORIZED
*" DATA_BUFFER_EXCEEDED
*"-------------------------------------------
"
CALL FUNCTION 'VIEW_AUTHORITY_CHECK'
EXPORTING
VIEW_ACTION = 'S'
VIEW_NAME = QUERY_TABLE
EXCEPTIONS
NO_AUTHORITY = 2
NO_CLIENTINDEPENDENT_AUTHORITY = 2
NO_LINEDEPENDENT_AUTHORITY = 2
OTHERS = 1.
IF SY-SUBRC = 2.
RAISE NOT_AUTHORIZED.
ELSEIF SY-SUBRC = 1.
RAISE TABLE_NOT_AVAILABLE.
ENDIF.
* --------------------------------------------
* find out about the structure of QUERY_TABLE
* --------------------------------------------
DATA BEGIN OF TABLE_STRUCTURE OCCURS 10.
INCLUDE STRUCTURE DFIES.
DATA END OF TABLE_STRUCTURE.
"DATA TABLE_HEADER LIKE X030L.
DATA TABLE_TYPE TYPE DD02V-TABCLASS.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
TABNAME = QUERY_TABLE
* FIELDNAME = ' '
* LANGU = SY-LANGU
* LFIELDNAME = ' '
* ALL_TYPES = ' '
* GROUP_NAMES = ' '
IMPORTING
* X030L_WA =
DDOBJTYPE = TABLE_TYPE
* DFIES_WA =
* LINES_DESCR =
TABLES
DFIES_TAB = TABLE_STRUCTURE
* FIXED_VALUES =
EXCEPTIONS
NOT_FOUND = 1
INTERNAL_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
RAISE TABLE_NOT_AVAILABLE.
ENDIF.
IF TABLE_TYPE = 'INTTAB'.
RAISE TABLE_WITHOUT_DATA.
ENDIF.
* -------------------------------------------
* isolate first field of DATA as output field
* (i.e. allow for changes to structure DATA!)
* -------------------------------------------
DATA LINE_LENGTH TYPE I.
FIELD-SYMBOLS <D>.
ASSIGN COMPONENT 0 OF STRUCTURE DATA TO <D>.
* If this line leads to a syntax error
* please just delete the 'in character mode'
DESCRIBE FIELD <D> LENGTH LINE_LENGTH in character mode.
* -------------------------------------------
* if FIELDS are not specified, read all available fields
* -------------------------------------------
DATA NUMBER_OF_FIELDS TYPE I.
DESCRIBE TABLE FIELDS LINES NUMBER_OF_FIELDS.
IF NUMBER_OF_FIELDS = 0.
LOOP AT TABLE_STRUCTURE.
MOVE TABLE_STRUCTURE-FIELDNAME TO FIELDS-FIELDNAME.
APPEND FIELDS.
ENDLOOP.
ENDIF.
* -------------------------------------------
* for each field which has to be read, copy structure information
* into tables FIELDS_INT (internal use) and FIELDS (output)
* -------------------------------------------
DATA: BEGIN OF FIELDS_INT OCCURS 10,
FIELDNAME LIKE TABLE_STRUCTURE-FIELDNAME,
TYPE LIKE TABLE_STRUCTURE-INTTYPE,
DECIMALS LIKE TABLE_STRUCTURE-DECIMALS,
LENGTH_SRC LIKE TABLE_STRUCTURE-INTLEN,
LENGTH_DST LIKE TABLE_STRUCTURE-LENG,
OFFSET_SRC LIKE TABLE_STRUCTURE-OFFSET,
OFFSET_DST LIKE TABLE_STRUCTURE-OFFSET,
END OF FIELDS_INT,
LINE_CURSOR TYPE I.
LINE_CURSOR = 0.
* for each field which has to be read ...
LOOP AT FIELDS.
READ TABLE TABLE_STRUCTURE WITH KEY FIELDNAME = FIELDS-FIELDNAME.
IF SY-SUBRC NE 0.
RAISE FIELD_NOT_VALID.
ENDIF.
* compute the place for field contents in DATA rows:
* if not first field in row, allow space for delimiter
IF LINE_CURSOR <> 0.
IF NO_DATA EQ SPACE AND DELIMITER NE SPACE.
MOVE DELIMITER TO DATA+LINE_CURSOR.
ENDIF.
LINE_CURSOR = LINE_CURSOR + STRLEN( DELIMITER ).
ENDIF.
* ... copy structure information into tables FIELDS_INT
* (which is used internally during SELECT) ...
FIELDS_INT-FIELDNAME = TABLE_STRUCTURE-FIELDNAME.
FIELDS_INT-LENGTH_SRC = TABLE_STRUCTURE-INTLEN.
* FIELDS_INT-LENGTH_DST = TABLE_STRUCTURE-LENG.
* modified by Theobald, 2007-11-20
FIELDS_INT-LENGTH_DST = TABLE_STRUCTURE-OUTPUTLEN.
FIELDS_INT-OFFSET_SRC = TABLE_STRUCTURE-OFFSET.
FIELDS_INT-OFFSET_DST = LINE_CURSOR.
FIELDS_INT-TYPE = TABLE_STRUCTURE-INTTYPE.
FIELDS_INT-DECIMALS = TABLE_STRUCTURE-DECIMALS.
* compute the place for contents of next field in DATA rows
* LINE_CURSOR = LINE_CURSOR + TABLE_STRUCTURE-LENG.
* modified by Theobald, 2007-11-20
LINE_CURSOR = LINE_CURSOR + TABLE_STRUCTURE-OUTPUTLEN.
IF LINE_CURSOR > LINE_LENGTH AND NO_DATA EQ SPACE.
RAISE DATA_BUFFER_EXCEEDED.
ENDIF.
APPEND FIELDS_INT.
* ... and into table FIELDS (which is output to the caller)
FIELDS-FIELDTEXT = TABLE_STRUCTURE-FIELDTEXT.
FIELDS-TYPE = TABLE_STRUCTURE-INTTYPE.
FIELDS-LENGTH = FIELDS_INT-LENGTH_DST.
FIELDS-OFFSET = FIELDS_INT-OFFSET_DST.
MODIFY FIELDS.
ENDLOOP.
* end of loop at FIELDS
* -------------------------------------------
* read data from the database and copy relevant portions into DATA
* -------------------------------------------
* output data only if NO_DATA equals space (otherwise the structure
* information in FIELDS is the only result of the module)
IF NO_DATA EQ SPACE.
DATA: BEGIN OF WORK, BUFFER(30000), F TYPE F, END OF WORK.
FIELD-SYMBOLS: <WA> TYPE ANY, <COMP> TYPE ANY.
ASSIGN WORK TO <WA> CASTING TYPE (QUERY_TABLE).
IF ROWCOUNT > 0.
ROWCOUNT = ROWCOUNT + ROWSKIPS.
ENDIF.
SELECT * FROM (QUERY_TABLE) INTO <WA> WHERE (OPTIONS).
IF SY-DBCNT GT ROWSKIPS.
* copy all relevant fields into DATA (output) table
LOOP AT FIELDS_INT.
IF FIELDS_INT-TYPE = 'P'.
ASSIGN COMPONENT FIELDS_INT-FIELDNAME
OF STRUCTURE <WA> TO <COMP>
TYPE FIELDS_INT-TYPE
DECIMALS FIELDS_INT-DECIMALS.
ELSE.
ASSIGN COMPONENT FIELDS_INT-FIELDNAME
OF STRUCTURE <WA> TO <COMP>
TYPE FIELDS_INT-TYPE.
ENDIF.
MOVE <COMP> TO
<D>+FIELDS_INT-OFFSET_DST(FIELDS_INT-LENGTH_DST).
ENDLOOP.
* end of loop at FIELDS_INT
APPEND DATA.
IF ROWCOUNT > 0 AND SY-DBCNT GE ROWCOUNT. EXIT. ENDIF.
ENDIF.
ENDSELECT.
ENDIF.
ENDFUNCTION.
FUNCTION Z_XTRACT_IS_TABLE.
*"
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(QUERY_TABLE) LIKE DD02L-TABNAME
*" VALUE(DELIMITER) LIKE SONV-FLAG DEFAULT SPACE
*" VALUE(NO_DATA) LIKE SONV-FLAG DEFAULT SPACE
*" VALUE(ROWSKIPS) LIKE SOID-ACCNT DEFAULT 0
*" VALUE(ROWCOUNT) LIKE SOID-ACCNT DEFAULT 0
*" TABLES
*" OPTIONS STRUCTURE RFC_DB_OPT
*" FIELDS STRUCTURE RFC_DB_FLD
*" DATA STRUCTURE CHAR8000
*" EXCEPTIONS
*" TABLE_NOT_AVAILABLE
*" TABLE_WITHOUT_DATA
*" OPTION_NOT_VALID
*" FIELD_NOT_VALID
*" NOT_AUTHORIZED
*" DATA_BUFFER_EXCEEDED
*"-------------------------------------------
"
CALL FUNCTION 'VIEW_AUTHORITY_CHECK'
EXPORTING
VIEW_ACTION = 'S'
VIEW_NAME = QUERY_TABLE
EXCEPTIONS
NO_AUTHORITY = 2
NO_CLIENTINDEPENDENT_AUTHORITY = 2
NO_LINEDEPENDENT_AUTHORITY = 2
OTHERS = 1.
IF SY-SUBRC = 2.
RAISE NOT_AUTHORIZED.
ELSEIF SY-SUBRC = 1.
RAISE TABLE_NOT_AVAILABLE.
ENDIF.
* --------------------------------------------
* find out about the structure of QUERY_TABLE
* --------------------------------------------
DATA BEGIN OF TABLE_STRUCTURE OCCURS 10.
INCLUDE STRUCTURE DFIES.
DATA END OF TABLE_STRUCTURE.
"DATA TABLE_HEADER LIKE X030L.
DATA TABLE_TYPE TYPE DD02V-TABCLASS.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
TABNAME = QUERY_TABLE
* FIELDNAME = ' '
* LANGU = SY-LANGU
* LFIELDNAME = ' '
* ALL_TYPES = ' '
* GROUP_NAMES = ' '
IMPORTING
* X030L_WA =
DDOBJTYPE = TABLE_TYPE
* DFIES_WA =
* LINES_DESCR =
TABLES
DFIES_TAB = TABLE_STRUCTURE
* FIXED_VALUES =
EXCEPTIONS
NOT_FOUND = 1
INTERNAL_ERROR = 2
OTHERS = 3
.
IF SY-SUBRC <> 0.
RAISE TABLE_NOT_AVAILABLE.
ENDIF.
IF TABLE_TYPE = 'INTTAB'.
RAISE TABLE_WITHOUT_DATA.
ENDIF.
* -------------------------------------------
* isolate first field of DATA as output field
* (i.e. allow for changes to structure DATA!)
* -------------------------------------------
DATA LINE_LENGTH TYPE I.
FIELD-SYMBOLS <D>.
ASSIGN COMPONENT 0 OF STRUCTURE DATA TO <D>.
* If this line leads to a syntax error
* please just delete the 'in character mode'
DESCRIBE FIELD <D> LENGTH LINE_LENGTH in character mode.
* -------------------------------------------
* if FIELDS are not specified, read all available fields
* -------------------------------------------
DATA NUMBER_OF_FIELDS TYPE I.
DESCRIBE TABLE FIELDS LINES NUMBER_OF_FIELDS.
IF NUMBER_OF_FIELDS = 0.
LOOP AT TABLE_STRUCTURE.
MOVE TABLE_STRUCTURE-FIELDNAME TO FIELDS-FIELDNAME.
APPEND FIELDS.
ENDLOOP.
ENDIF.
* -------------------------------------------
* for each field which has to be read, copy structure information
* into tables FIELDS_INT (internal use) and FIELDS (output)
* -------------------------------------------
DATA: BEGIN OF FIELDS_INT OCCURS 10,
FIELDNAME LIKE TABLE_STRUCTURE-FIELDNAME,
TYPE LIKE TABLE_STRUCTURE-INTTYPE,
DECIMALS LIKE TABLE_STRUCTURE-DECIMALS,
LENGTH_SRC LIKE TABLE_STRUCTURE-INTLEN,
LENGTH_DST LIKE TABLE_STRUCTURE-LENG,
OFFSET_SRC LIKE TABLE_STRUCTURE-OFFSET,
OFFSET_DST LIKE TABLE_STRUCTURE-OFFSET,
END OF FIELDS_INT,
LINE_CURSOR TYPE I.
LINE_CURSOR = 0.
* for each field which has to be read ...
LOOP AT FIELDS.
READ TABLE TABLE_STRUCTURE WITH KEY FIELDNAME = FIELDS-FIELDNAME.
IF SY-SUBRC NE 0.
RAISE FIELD_NOT_VALID.
ENDIF.
* compute the place for field contents in DATA rows:
* if not first field in row, allow space for delimiter
IF LINE_CURSOR <> 0.
IF NO_DATA EQ SPACE AND DELIMITER NE SPACE.
MOVE DELIMITER TO DATA+LINE_CURSOR.
ENDIF.
LINE_CURSOR = LINE_CURSOR + STRLEN( DELIMITER ).
ENDIF.
* ... copy structure information into tables FIELDS_INT
* (which is used internally during SELECT) ...
FIELDS_INT-FIELDNAME = TABLE_STRUCTURE-FIELDNAME.
FIELDS_INT-LENGTH_SRC = TABLE_STRUCTURE-INTLEN.
* FIELDS_INT-LENGTH_DST = TABLE_STRUCTURE-LENG.
* modified by Theobald, 2007-11-20
FIELDS_INT-LENGTH_DST = TABLE_STRUCTURE-OUTPUTLEN.
FIELDS_INT-OFFSET_SRC = TABLE_STRUCTURE-OFFSET.
FIELDS_INT-OFFSET_DST = LINE_CURSOR.
FIELDS_INT-TYPE = TABLE_STRUCTURE-INTTYPE.
FIELDS_INT-DECIMALS = TABLE_STRUCTURE-DECIMALS.
* compute the place for contents of next field in DATA rows
* LINE_CURSOR = LINE_CURSOR + TABLE_STRUCTURE-LENG.
* modified by Theobald, 2007-11-20
LINE_CURSOR = LINE_CURSOR + TABLE_STRUCTURE-OUTPUTLEN.
IF LINE_CURSOR > LINE_LENGTH AND NO_DATA EQ SPACE.
RAISE DATA_BUFFER_EXCEEDED.
ENDIF.
APPEND FIELDS_INT.
* ... and into table FIELDS (which is output to the caller)
FIELDS-FIELDTEXT = TABLE_STRUCTURE-FIELDTEXT.
FIELDS-TYPE = TABLE_STRUCTURE-INTTYPE.
FIELDS-LENGTH = FIELDS_INT-LENGTH_DST.
FIELDS-OFFSET = FIELDS_INT-OFFSET_DST.
MODIFY FIELDS.
ENDLOOP.
* end of loop at FIELDS
* -------------------------------------------
* read data from the database and copy relevant portions into DATA
* -------------------------------------------
* output data only if NO_DATA equals space (otherwise the structure
* information in FIELDS is the only result of the module)
IF NO_DATA EQ SPACE.
DATA: BEGIN OF WORK, BUFFER(30000), F TYPE F, END OF WORK.
FIELD-SYMBOLS: <WA> TYPE ANY, <COMP> TYPE ANY.
ASSIGN WORK TO <WA> CASTING TYPE (QUERY_TABLE).
IF ROWCOUNT > 0.
ROWCOUNT = ROWCOUNT + ROWSKIPS.
ENDIF.
SELECT * FROM (QUERY_TABLE) INTO <WA> WHERE (OPTIONS).
IF SY-DBCNT GT ROWSKIPS.
* copy all relevant fields into DATA (output) table
LOOP AT FIELDS_INT.
IF FIELDS_INT-TYPE = 'P'.
ASSIGN COMPONENT FIELDS_INT-FIELDNAME
OF STRUCTURE <WA> TO <COMP>
TYPE FIELDS_INT-TYPE
DECIMALS FIELDS_INT-DECIMALS.
ELSE.
ASSIGN COMPONENT FIELDS_INT-FIELDNAME
OF STRUCTURE <WA> TO <COMP>
TYPE FIELDS_INT-TYPE.
ENDIF.
MOVE <COMP> TO
<D>+FIELDS_INT-OFFSET_DST(FIELDS_INT-LENGTH_DST).
ENDLOOP.
* end of loop at FIELDS_INT
APPEND DATA.
IF ROWCOUNT > 0 AND SY-DBCNT GE ROWCOUNT. EXIT. ENDIF.
ENDIF.
ENDSELECT.
ENDIF.
ENDFUNCTION.
ABAP コードを貼り付けた後、関数モジュールをアクティブ化する前に、コードに構文エラーがないかチェックすることをお勧めします。
ABAP コードを確認するには、以下の手順に従います。
手順 |
操作 |
---|---|
1 |
[SAP ソース コード ] タブの [
CTRL+F2 ] をクリックします。
|
エラーがない場合は、関数モジュールをアクティブ化できます。