SQL Server 2008を使用して、SAPから大量の財務情報を提供する必要があるデータを格納するアプリケーションがあります(この会社では、バックエンドとしてOracle 11を使用しています)。
私はSAPの人たちに、テーブルを読むためのアクセス権を求めましたが、彼らは仕方がないと言いました。私は彼らに私のデータベースに直接接続して私のテーブルを埋めるように頼んだ、彼らは仕方がないと言った。 (SAPとは異なる他のアプリケーションであるOracleデータベースからのフィードがあり、透過ゲートウェイを問題なく使用しているので、これを尋ねたのはそのためです)
彼らは、SAPと対話する唯一の方法はWebサービスを使用することであると言います。しかし、膨大な量のデータがあるため、それが道だとは思いません。
SAPとSQLServer間のインターフェイスを作成した経験のある人はいますか?
説明を拡張します。私の現在のアプリケーションは、他の3つのアプリケーション(これは大企業です)によってすでに供給されており、それらはすべて同じテーブルに移動し、そこでデータを受け取ってさらに処理します。他のすべてのアプリケーション(1 Oracle、2 SQL Server)は、データを保存する直接更新またはストアドプロシージャのいずれかを実行します。これらの他の3つのアプリケーションは、互いに関係のない異なるチームによって管理されています。彼ら全員が最初は不平を言ったが、最後には彼らのデータをこのアプリケーションにエクスポートすることを受け入れた。
したがって、理想は、SAPの担当者に同じことを行うように説得することです。つまり、SQL Serverへの接続を開き、いくつかの挿入を実行するか、ストアドプロシージャを実行します。
基本的な質問は-プッシュまたはプル? SAP R/3システムが定期的にデータをエクスポートして取得するようにする何らかの設定を行うことも、外部システムに連絡してデータを取得させることもできます。 「SAPと対話する必要があるのはWebサービスを使用することだけです」ということに関しては、技術的に言えば、それはあなたが得る限り牛のパートナーの糞便に近いものです。技術的でない問題(奇妙なポリシーや不本意なシステム管理者)が関係している可能性がありますが、詳細に焦点を当てましょう。
「プッシュ」ソリューションの場合、既存のレポートの1つをリグして定期的に実行し、出力をファイルに保存するか、どこかにメールで送信することができます。これは比較的簡単ですが、必要なデータを提供するレポートが必要です。それらがない場合は、仕様を書き留めてプログラムするか、誰かにプログラムしてもらいます。それは魔法ではなく、単なる別のプログラミング言語です。
プルしたい場合は、データベースに直接アクセスすることもできますが、強くお勧めしません。最初の クラスターテーブル に到達するとすぐに、行き止まりになります。大量のデータについて考えている場合、それらをプルする最良の方法は、RFC接続を確立し(独自のプロトコル、他の多くの質問をここで参照)、BAPIが存在する場合はそれを使用することです(これはプログラミングインターフェイスです。公式使用のためにリリースされ、SAPによって保守されています)または使用RFC_READ_TABLE
データにアクセスします。後者はすべてのテーブルで使用できるわけではないことに注意してください。テーブルの構造(合計サイズとフィールドタイプ)によって異なります。 Webサービスは、別のレベルのエンコーディングとノイズの多いエンコーディングを追加するだけで、大量のETLプロセスにはあまり適していません。
私はこれを何年にもわたって数回行いましたが、SAPチームから基本的に同じ応答を受け取りました。ほとんどすべての場合、ソリューションは、SSISパッケージを使用してSQLServerにロードしたSAPによって生成されたフラットファイル「レポート」になりました。秘訣は、レポートが適切に設計されていることを確認することです。 SAPチームがこれらのレポートの作成に「デフォルト」フィルターを含めているのを見てきましたが、プロセスが稼働してデータが欠落するまで言及できませんでした。幸運を。
このようなアプリケーションインターフェイスでご存知のとおり、最適なオプションは、データ量、必要なインターフェイスのモードとバッチ、同期と非同期などの多くの要因によって異なります。データ量が多く、アプリケーションをリアルタイムで更新する必要がない場合は、SAP側でレポートを実行し、アプリケーションにアップロードするためのデータファイルを生成することをお勧めします。リアルタイム更新には、IDoc(複数のデータファイル)を使用できます。それ以外の場合は、標準のSAP API(BAPI)を使用して、SAPから必要な情報を取得できます。また、SAP担当者に関数RFC_READ_TABLEのカスタムRFCを作成させ、クエリのようなSQLを使用してSAPからデータを取得することもできます。
SAP側のABAPプログラムでネイティブSQLを使用して、アプリケーションデータベースを直接更新することができます。私はMS-SQLサーバーに対してこれを実行しましたが、Oracleに対しても使用するための制限はありません。
OracleではなくSQLを実行しましたが、同様の問題が発生しました。 SAPシステムのDBレイヤーに直接アクセスすると、保証が無効になると言われました。そこで、SAPに直接質問しました。アプリ層を経由せずに更新、挿入、または削除しない限り、DBで選択を行っても問題ありません。アプリレイヤーの外部で更新、挿入、または削除を行うと、保証が無効になるため、初心者ではありません。同じ回答が必要な場合は、SAPチームにOSSメッセージを開かせることができます。
とはいえ、これが1回限りのデータの読み込みではなく継続的なインターフェースである場合は、誰かにRFC、Webサービス、またはアプリからデータを取得するための継続的な抽出を構築してもらうだけです。