1

既存の ERP システム (WinMagi) と対話する Web アプリケーションをセットアップする必要があります。ERP は基本的に xBase (FoxPro) データベースのフロントエンドです。データベースは社内サーバーにあります。私の知る限り、ERPにはAPIはありませんが、EDIモジュールを介して注文書などを受け入れることができます. Web アプリケーションは、オンライン注文を受け付け、レポート用のデータを照会できる必要があります。

これまでの私の計画:

  1. クラウドでホストされている VM 上の SQL サーバー インスタンスに xBase DB を同期します。
    • (ERP からの片道 -> SQL Server)
  2. この同期プロセスを ERP と Web アプリケーション間のインターフェイスとして使用します。
  3. EDI を使用して発注書を ERP にプッシュします。
    • ここでの私の考えは、(ERP によって) 制御され受け入れられたインターフェイスを介して ERP でデータを作成または更新する方が、データの同時実行の観点から安全であるということです。

質問/懸念:

  1. xBase DB から SQL DB を更新する最良の方法は何ですか? 車輪を再発明する必要がないように、これを行うことができる既存のライブラリはありますか?
  2. 同期中に xBase DB はロックされますか? それとも、ライブ ERP に問題を引き起こしますか?
  3. 同期中のデータの同時実行性/整合性の問題を回避するにはどうすればよいですか?
  4. このシステムは、Web アプリにライブ データを提供しません。これにより、どのような問題が予想されますか?
  5. この種のプロジェクトでは、ある言語を別の言語よりも優先する必要がありますか? 私の計画は、Java/Hibernate MVC を使用することでした。

私はおそらくこれについて間違った方法で進んでいますか?Web アプリを xBase DB と直接接続したほうがよいでしょうか? このアプローチですぐに頭に浮かぶいくつかの問題は、オフィスとクラウドベースの VM 間のネットワークの問題と、ERP を直接インターネットに開放することによる潜在的なセキュリティの脆弱性です。

あなたが提供できるかもしれないアドバイスや提案は大歓迎です!! 前もって感謝します。

更新 - 2012 年 9 月 3 日

現在データコピーを行っている方法(同期ではありません)-夜間に実行されます:

  1. オフィスの Linux ボックスは、必要な DBF を ERP サーバーの読み取り専用共有からローカル ストレージにコピーします。
  2. DBF は、Dave Burton のすばらしいdbf2csv perl スクリプトを使用して CSV に変換されます。
  3. 結果の CSV は、リモート VM に rsync されます。データにはわずかな変更しかないため、これは非常に高速です。
  4. rsync が完了すると、リモート VM は本番 DB への mysqlimport を実行します。

このアプローチの利点

  • ネットワーク アクセスは読み取り専用であるため、ERP が破損することはありません。
  • データを同期するためにカスタム ロジックを実装する必要がないため、リモート VM でデータが間違っている可能性があるという懸念はありません。
  • データ コピーは夜間に実行されるため、実行時間はそれほど重要ではありません。
    • 現在の実行時間は、1 レコードあたり約 20 ~ 30 フィールドの 100 万を超えるレコードで約 7 分です。
    • 最も長いフェーズは、DBF のコピーと CSV への変換です。

短所

  • DBF は毎回完全にコピーする必要があります。
  • DBF は毎回完全に変換する必要があります。
  • コピー中のテーブルは、mysqlimport 中にロックされます。インポートは夜間に実行され、mysqlimport には約 20 秒しかかからないため、これはそれほど大きな問題ではありません。
4

2 に答える 2

1
  1. Visual Foxpro 3.0以降を使用している場合は、組み込みのデータベースコンテナを使用して、SQLServerDBへの接続を作成できます。次に、.DBCのビューは、SQLServerテーブルの読み取りと更新の面倒な作業を行います。

  2. Foxproテーブルをループして行を読み取り、SQLServerDBを更新するルーチンを想定しています。したがって、Foxproテーブルはロックされるべきではありません。これを確実にするために、最初にDBFをカーソルに照会してから、カーソルをループすることができます。

  3. 並行性チェックを行うための手順を追加することをお勧めします。

WebアプリでライブFoxproデータをサーバー化する別のオプションは、SQLServerでFoxproデータベースにリンクされたサーバーを作成することです。そうすれば、Foxproデータにリアルタイムでアクセスできます。

于 2012-04-17T17:32:01.527 に答える
1

私は現在、似たようなことを行っています.FoxProベースのシステムからの請求書トランザクションを、SQL Serverを実行しているリモートのホストされたVM上にあるWebアプリケーションを介して利用できるようにする必要があります.

私がしていることに基づいてあなたの最初のポイントに答えます-それがあなたにとってうまくいくかどうかはあなた自身で決めることができます!

xBase DB から SQL DB を更新する最良の方法は何ですか? 車輪を再発明する必要がないように、これを行うことができる既存のライブラリはありますか?

私は実際に共有ライブラリを探しませんでした。私がしたことは(やや単純化された):

  1. 変更を検出したい他のフィールド (トランザクション残高など) に基づいて、CRC32 値を保持する ERP 側のトランザクション テーブルにフィールドを追加しました。

  2. タイマーで ERP 側のトランザクション テーブルをスキャンし、いくつかのフィールドに基づいて CRC32 値を計算し、これをポイント 1 から新しいフィールドに格納された最後の CRC32 値と比較し、異なる場合は何かが変更され、トランザクションを再送信する必要があります。この EXE は、DBF ファイルへのアクセスを簡単にするために VFP で記述されており、Windows サービスとして実行されます。時間ができたら、C# でやり直します。

  3. 引き続きこの EXE で、新しいトランザクションまたは変更されたトランザクションのリストを取得したら、それらを JSON に変換します。私は独自の JSON 関数を作成しましたが、[Sweet Potato Software][1] の Craig Boyd や他の多くの関数を使用できます。トランザクションに関連付けられた PDF ドキュメントが存在する可能性があります。その場合、それはエンコードされ、JSON に埋め込まれています。

  4. 標準の Windows WinHTTP ライブラリ (WinHttp.WinHttpRequest.5.1) を利用するクラスを使用して、JSON をリモート側の Web サービスに送信します。リモート Web サービスは、基本的に Java を実行しています。すべてをデコードし、SQL Server を更新します。

于 2012-05-16T12:00:38.390 に答える