CData Sync で SAP 連携:実機でつまずく 5 つのポイントと解決法【2026年版】

by 松本勝成 | June 19, 2026 | Last Updated: June 19, 2026

SAP への接続自体は完了した。それなのに「目的のテーブルが一覧に出てこない」「差分連携が効かず毎回全件になる」「同期先を作り直したいのに 0 件しか返ってこない」——SAP のデータ連携を実機で進めると、SAP 固有の前提や仕様に由来する壁に当たることがあります。

本記事では、CData Sync で SAP(RFC 接続)からデータを同期する際につまずきやすい 5 つのポイントについて、「現象」「原因」「対応方法」を整理して解説します。

前提知識:ジョブとタスク CData Sync では、接続元・接続先・スケジュールをまとめた単位を「ジョブ」、ジョブ内の個々のテーブル同期を「タスク」と呼びます。本記事の手順はこの 2 つの用語を前提とします。ジョブの種類(標準ジョブ/CDC ジョブ)や差分検出の仕組みは、別記事「CData Sync: 標準ジョブと CDC ジョブの違いとは」で詳しく解説しています。

CData Sync × SAP 連携の全体アーキテクチャ(RFC 経路と OData 経路)


ポイント1:目的のテーブルが一覧に表示されない

現象

接続には成功しているのに、取り込みたい SAP テーブルやビューがオブジェクト一覧に現れません。

原因

SAP ERP コネクタは、SAP のディクショナリテーブル DD02L(テーブル定義の一覧)から取得したオブジェクトのうち、接続プロパティ TableMode で指定された条件に該当するものを表示します。 既定値の TransparentApplication では次の条件に一致するものが表示対象になります。

  • TABCLASS = 'TRANSP'(トランスペアレントテーブル)かつ CONTFLAG = 'A'(マスタ/トランザクションデータ)

このため、カスタマイズテーブル(CONTFLAG = 'C' など)、プールテーブル(TABCLASS = 'POOL')、ビュー(TABCLASS = 'VIEW')は、既定では一覧に表示されません。

対応方法

表示範囲を広げるには、主に 3 つの方法があります。

  1. TableMode = Custom + カスタムテーブルフィルタ 「高度な設定」タブの Miscellaneous セクションにある「Custom Table Filter」に、DD02L への絞り込み条件(WHERE 句、WHERE の語は不要)を指定します。透過テーブル・カスタマイズテーブル・プールテーブル・ビューをまとめて対象にする例:

(TABCLASS = 'TRANSP' AND CONTFLAG IN ('A','C')) OR TABCLASS IN ('POOL','VIEW')

末尾に AND AS4LOCAL = 'A' を加えると、アクティブ(リリース済み)の定義に限定できます。

  1. Views プロパティで名指し指定 対象が決まっている場合は、接続プロパティ Views にカンマ区切りで列挙します(例:Views=SKA1,T077S)。

  2. TableMode = All すべてのオブジェクトを表示します。

フィルタを広げるほど一覧の取得に時間がかかります。必要な範囲に絞ることを推奨します。

TableMode の既定フィルタと Custom Table Filter で広がる表示範囲の対比


ポイント2:CDS View が取り込めない

現象

SAP の CDS View(Core Data Services View)を取り込もうとしても、一覧に表示されない、あるいはエンティティ名を指定しても取得できません。

原因

従来型の CDS View は、1 つの定義から「CDS エンティティ」と、ABAP ディクショナリ互換の「SQL ビュー名」(最大 16 文字、@AbapCatalog.sqlViewName で指定)の両方が生成されます。RFC(Remote Function Call)接続でデータを取得する際は、CDS エンティティ名(例:I_SalesOrderItem)ではなく SQL ビュー名を通じてアクセスします。

対応方法

  • Views プロパティ、または Custom Table Filter に SQL ビュー名を指定します。

  • SQL ビュー名が名前空間付き(/XXX/ で始まりスラッシュを含む)の場合は既定で一覧から除外されるため、TABNAME LIKE '/XXX/%' のような条件を Custom Table Filter に明示します。

  • SQL ビュー名を持たない CDS View エンティティ(SAP S/4HANA 2020 以降に多い)を取得する場合は、対象を OData サービスとして公開し、SAP Gateway コネクタで取得します。CDS View を OData サービスとして公開する手順は、SAP S/4HANA で CDS ビューを作成・OData サービスとして公開してみるで解説しています。

RFC と OData では取得できる対象が異なるため、取り込みたい CDS View に SQL ビュー名があるかを先に確認します。


ポイント3:1 行 512 バイトの壁

現象

列数の多い(行幅の広い)テーブルを取得しようとすると、次のようなエラーで失敗します。

You have selected to return 744 bytes worth of data per row.
However, SAP only allows 512 bytes to be returned. Select fewer columns to avoid this error.
If you need to select more than 512 bytes of data, you can install the Z_CUSTOM_READ_TABLE
function to SAP and update the connection to refer to it.

原因

SAP の標準 RFC RFC_READ_TABLE は、戻り値が 1 行あたり最大 512 バイトという制約があるため、これを超える幅のレコードを取得しようとするとエラーとなります。

対応方法

CData は、この制限を回避するためのカスタム RFC Z_CUSTOM_READ_TABLE を提供しています。戻り値を CHAR8000 に拡張した RFC_READ_TABLE 相当の関数で、512 バイトを超えるレコードも取得できます。導入手順は次のとおりです。

  1. ソースコードを入手する CData JDBC Driver for SAP ERP のインストーラに同梱されている db フォルダから入手できます。ABAP バージョンに合わせて次のいずれかを選びます。

  • Z_CUSTOM_READ_TABLE.txt(標準版)

  • Z_CUSTOM_READ_TABLE_750.txt(ABAP 7.50 / 7.51 推奨)

  • Z_CUSTOM_READ_TABLE_752.txt(ABAP 7.52 以降推奨。DB 側ページングにより大きなテーブルの性能が向上)

ABAP バージョンは、SAP GUI の「システム」→「ステータス」→「コンポーネント情報」の SAP_BASIS リリース欄で確認できます。

  1. SAP 側でインストール・アクティベートする SAP GUI 上で関数モジュールをインストールし、アクティベートします。

  2. 接続設定で関数を指定する SAP ERP 接続の「高度な設定」タブにある「Read Table Function」プロパティに、アクティベートした関数名を指定します。


ポイント4:日付項目がないテーブルの差分連携

現象

更新日時のような日付項目を持たないテーブルでは差分連携ができず、毎回全件同期となります。

原因

差分連携は「差分チェックカラム」(新規・変更レコードを識別する datetime または integer ベースの列)を基準に、前回実行以降に変わったレコードだけを取り込みます。この基準となる列が存在しないテーブルでは差分を判定できないため、差分のみを取り込むことができません。

対応方法

テーブルの性質に応じて、次の意思決定フローで方式を選びます。

差分基準列の有無 → 変更文書の可否 → 洗い替え/WHERE/CDS の分岐フロー

  1. SAP の変更文書(Change Document)で差分連携する SAP ERP コネクタは、テーブル自身の日付項目に依存しない差分手段として、SAP が変更履歴を記録する CDHDR(ヘッダー)/CDPOS(明細)テーブルを利用できます。次の接続プロパティはいずれも既定で有効です。

  • UseAdvancedReplication = True(既定値)

  • Pseudo Columns *=ReplicateDateTimeColumn(既定値)

この機能を利用するためには、SAP 側で変更文書の記録対象に設定されているテーブルである必要があります。差分連携が適用されているかは、タスクの「概要」タブの「差分チェックカラム」が ReplicateDateTimeColumn になっているかで確認できます(下図)。

タスク「概要」タブ。差分チェックカラムが `ReplicateDateTimeColumn` となっており、変更文書ベースの差分連携が有効になっている例(接続=SAPERP、テーブル=BNKA)

  1. 洗い替え(全件連携)にする タスクの「高度な設定」タブで「テーブルデータを削除」を有効にすると、毎回同期先のレコードを削除してから全件を取り直します。ただし、レコード数が多い場合はスケジュール頻度や実行時間とのトレードオフになります。

ジョブの「高度な設定」タブ

「レプリケートオプション」の「テーブルデータを削除」設定欄

  1. WHERE 条件で取得範囲を絞る タスクの「クエリ」タブの REPLICATE コマンド内の SELECT に WHERE 句を付けて、取得対象を限定します。

REPLICATE [同期先テーブル] SELECT * FROM [SAPテーブル] WHERE <取得条件>

動的な条件を使いたい場合は、ジョブの「イベント」タブの Pre-Job イベントで値を取得し、その値をクエリ内で変数として参照できます。

  1. SAP 側で CDS View を作成する 日付項目を含む CDS View を作成すれば、それを差分連携の対象にできます。CDS View は SAP 側で定義する開発オブジェクトのため、開発作業が必要です。


ポイント5:全件を取り直したいのに 0 件になる

現象

同期先のテーブルを DB 側で手動削除し、再度同期を実行すると、取得件数が 0 件となりデータが取り込まれません。

原因

差分連携では、タスクが差分チェックカラム(多くは更新日時)の値を記録し、2 回目以降は前回の実行以降に更新されたレコードだけを取得します。同期先テーブルを DB 側で手動削除しても、タスクの差分チェックカラムの値は削除されません。 そのため再同期しても引き続き差分同期が行われ、前回の実行以前に更新されたデータ(削除した既存レコードを含む)は反映されず、取得対象がなければ 0 件になります。

対応方法

正しい全件取り直しの方法は、バージョンによって異なります。

  • CData Sync V26.2 以降:「タスクを再同期」 1. 対象ジョブの「タスク」タブを開く 2. 再同期したいタスク行の「…」メニューから「タスクを再同期」を選択 3. ダイアログで「期間:最初から」「書き込みモード:MERGE」(いずれも既定値)を確認し、「再同期」をクリック

タスク行の「…」メニューから「タスクを再同期」を選択

「タスクを再同期」ダイアログ(期間=最初から/書き込みモード=MERGE)

  • CData Sync V26.1 以前:「テーブルを削除」オプション 1. 対象タスクの「高度な設定」タブで「レプリケートオプションを編集」を開く 2. 「テーブルを削除」を有効にする 3. ジョブを実行する 4. 実行後に必ず「テーブルを削除」を無効に戻す(戻し忘れると、以降ジョブを実行するたびに同期先テーブルの削除が繰り返されます)


補足 Tips:同期先のテーブル名を整える

同期先のテーブル名には、一括でプレフィックスやサフィックスを付けられます。「高度な設定」タブの「レプリケートオプション」にある「テーブル名のプレフィックス」に sync_ を指定すると、Accounts テーブルは同期先で sync_Accounts になります。

「レプリケートオプション」の「テーブル名のプレフィックス/サフィックス」設定欄


まとめ:方式選択の早見表

現象

対応方法

テーブル/ビューが一覧に出ない

TableMode=Custom + Custom Table Filter、または Views で指定 ✅

CDS View を取り込みたい(SQL ビュー名あり)

SQL ビュー名で指定 ✅

CDS View を取り込みたい(SQL ビュー名なし)

OData + SAP Gateway コネクタ ✅

行幅が 512 バイトを超える

Z_CUSTOM_READ_TABLE を導入 ✅

日付列がなく差分連携できない(変更文書あり)

変更文書による差分連携 ✅

日付列がなく差分連携できない(変更文書なし)

洗い替え/WHERE 絞り込み/CDS View ⚠️

全件を取り直したい

V26.2+ は「タスクを再同期」、V26.1 以前は「テーブルを削除」を一度だけ ✅

CData Sync の 30 日間無償トライアルはこちらからダウンロードいただけます。

関連コンテンツ