行項目を記録する方法は、トランザクション コードによって異なります。記録している t-コードの詳細については、『ステップ バイ ステップ ガイド』または Winshuttle サポート サイトをご覧ください。
複数行のトランザクション
一部の SAPトランザクションでは、複数行のデータを同時に処理する必要があります。たとえば、FB50、F-65、ME21、VA01、CS01、CA01、および FB70。
これらのトランザクションの多くでは、SAP はデータを次の 2 つの部分に分けています。
- ヘッダー セクション: ヘッダーには、日付など、トランザクション全体で一定のままであるデータが含まれています。
- 1 つ以上の明細または詳細セクション: 各明細セクションには通常、仕訳明細など、SAPトランザクションのグリッド状の領域に入力される反復データが含まれています。注: 繰り返しできるパターンがわかるように 2 つの明細を記録しておくと便利です。 ME21N などの一部の t-コードは、最初の明細を完了するまでフィルター機能を利用できないため、2 つの明細を必要とします。
明細を含むスクリプトを記録した後、明細の周りにループを作成します。次に、ループ用にデータ ファイルを設定します。
ループ ID 列の値は、行のデータがヘッダー セクションの一部であるか詳細行の一部であるかをトランザクションに通知します。
基本的なループを追加するための詳しい手順の説明は、「Excel でループを追加する」と「Access でループを追加する」にあります。
インデックス付きループ
インデックス付きループは、SAP グリッドに位置、検索、またはフィルターのオプションがない場合に役立ちます。
インデックス ループは、グリッド内に空白行が見つかるまでスクロール アクションを模倣し、エントリが既存のデータを上書きしないようにします。これは、通常のループで使用できるアクションが SAP にない場合に特に役立ちます。
インデックス付きループは、GUI スクリプト モードで記録されたスクリプトにのみ挿入できます。
インデックス付きループを使用して、アクションの検索または選択を実行することはできません。代わりに、通常のループでインデックス フィールド条件を使用できます。
インデックス付きループを使用するには、インデックス フィールドを指定する必要があります。Studio 12.x は、グリッド内のその列に基づいてインデックス付きループを作成します。
- [ループ] ボックスでループを設定する場合は、[インデックス ベースのループ] をオンにします。
- [インデックス フィールド] ボックスでフィールドを選択します。
スクリプトが実行されると、Studio はそのフィールドに SAP の値が含まれていない行を探し、その行にデータをアップロードします。
複数のループ
Transaction で複数のループを使用してデータをアップロードする場合に、最良の結果を得るには、次の手順を実行します。トランザクションの記録中に、トランザクションに複数の明細を入力して、マップで繰り返しの目に見えるパターンを作成します。ループを追加した後、マップの余分な明細の行を無効にします。異なるループに同じ識別子列を使用する場合は、ループごとに異なる識別子値を使用します。たとえば、最初のループには D1、2 番目のループにはD2 を使用します。ループが異なる識別子列を参照している場合は、同じ識別子を使用できます。
トランザクションに同じレベルの個別の明細のセットが含まれている場合は、同じシートの同じレベルに複数のループを作成できます。一部の行には両方のループの情報が含まれるため、ループごとに個別のループ ID 列があり、ループごとに異なるループ ID 値があります。
同じレベルのループにはインデントは必要ありません。
たとえば、同じレベルに 3 つのループを含むスクリプトのループ ID 列の値は次のとおりです。
ネストされたループ
ネストされたループのマップ
Transaction は、追加の明細データを含むスクリプトを自動的にマップしません。
スクリプトをマップするには、Excel データ ファイルの列をクリックして、マップのフィールドにドラッグします。マップするフィールドごとに繰り返します。または、[自動マップ] をクリックします。
注: ネストされたループを持つスクリプトでは、2 つのネストされたループの間に少なくとも 1 つのフィールドを挿入する必要があります (フィールドは、BDC カーソルを除いて何でもかまいません)。これにより、スクリプトが確実に検証されます。
ワークブックを準備してネストされたループを実行する
ネストされたループをアップロードする場合、Excel ブックのヘッダー データと詳細または明細データを別の行に配置する必要があります。単純なループに似ていますが、ネストされたループ用に余分な行があります。
列ベースのマッピングのループ データ レイアウト
H - ヘッダー行 D - ループ 1 の複数の行項目 D1- ループ 2 の複数行項目 DD1 D1
マップでループ、条件、およびその他のブロックを使用する
ループと条件付きの行のコピー、切り取りと、If 条件への Else ブロックの追加
ループと条件を含む行を切り取り、コピー、貼り付けできます。ループまたは条件を編集するには、そのすべての部分を選択します。ループまたは条件をログ列に貼り付けることはできません。
ループ ブロック全体を切り取り、コピーして貼り付けることができます。
If ブロック全体を切り取り、コピーして貼り付けることができます。
ループのヘッダー行だけをコピーして貼り付けることができます。
また、If 条件ブロックのヘッダー行だけをコピーして貼り付けることができます。
以下は、 ループの貼り付けられたヘッダー行と If 条件ブロックです。
コピーした行をマップ行の最後に貼り付けたり、最後の行にフィールドと画面を挿入したりできます。
BAPI ベースのスクリプトの場合、任意の画面の最後のフィールドの後に貼り付けることもできます。
[前に貼り付け] オプションと [後に貼り付け] オプションに加えて、空白行を追加できます。
Else ブロックは、ループ内で定義されている If 条件に追加できます。
複数のシートでデータをループする
スクリプトに複数のループが存在する場合にデータをより明確に表示するために、さまざまなループのデータをさまざまな Excel データシートに配置できます。
- マスター シート: 適用されたループに対応するヘッダー データを含む Excel シート
- ループ識別子列: 結合キーを含むヘッダー シートの列
- 明細シート: 適用されたループに対応する明細データを含む Excel シート
- ループ識別子列: 結合キーを含む明細シートの列
すべてのシートに表示される任意の列に結合キーを割り当てることができます。
複数シートのループをマップする
- [マップ] タブの [データ セット] パネルで、必要な数の新しいシートを追加します。
- 最初のシートをクリックします。マップで、最初のループの項目を選択します。
- [ループの作成] ボタンをクリックします。注: ネストされたループを定義する前に、同じレベルにあるすべてのループを定義してください。
- [ループ タイプ] で、 [複数シート ループ] をクリックします。
- ヘッダーと明細に適切なシートを選択し、対応する結合キー列を指定します。 注: スクリプト ファイルを公開する場合、公開されるシートには、スクリプトに含まれているものと同じシート名が含まれている必要があります。
- フィールドをそれぞれの Excel ワークシートにマップします。
- データ ソースが変更されると、プレビューは無題に戻ります。シートを手動で追加するか、適切な名前を含むシートを開きます。
- Studio を閉じる前に、データ ファイルのプレビューを保存します。保存しないと、データシートが削除される可能性があります。
無効なマッピング
- ループを、そのループの一部ではない列にマップすることはできません。
- 複数のシートが存在する場合は検証できません。
- シートの処理時に条件が検証された場合。
- 列ベースのマッピングのみを使用できます。
- 拡張ログは利用できません。通常のログのみがヘッダー シートに書き込まれます。