2012-03-11 75 views
1

我需要設置一個與現有ERP系統(WinMagi)交互的Web應用程序。 ERP基本上是xBase(FoxPro)數據庫的前端。數據庫位於內部服務器上。據我所知,ERP不具備API,但可以通過EDI模塊接受採購訂單等。 Web應用程序應該能夠接受在線訂單和查詢數據以進行報告。如何將基於xBase的ERP連接到Web應用程序?

我迄今爲止的計劃:

  1. 同步化的xBase數據庫的SQL Server實例上託管虛擬機雲。
    • (從ERP單程 - > SQL服務器)
  2. 使用此同步過程作爲ERP和Web應用程序之間的接口。
  3. 使用EDI將採購訂單推回ERP。
    • 我在這裏想到的是,從數據併發的角度來看,通過控制和接受(通過ERP)接口創建或更新ERP中的數據會更安全。

問題/顧慮:

  1. 什麼是更新從的xBase數據庫的SQL數據庫的最佳方式?有沒有預先存在的庫可以做到這一點,所以我不必重新發明輪子?
  2. 在同步期間xBase DB會被鎖定嗎?否則導致現場ERP問題?
  3. 如何在同步期間避免數據併發/完整性問題?
  4. 此係統不會向網絡應用提供實時數據。由此我可以期待什麼樣的問題?
  5. 對於這類項目,我應該選擇哪種語言而不是另一種語言?我的計劃是使用Java/Hibernate MVC。

我可能會用這種錯誤的方式?我的網頁應用程序直接與xBase DB連接會更好嗎?這種方法讓人想到的一些問題是辦公室和基於雲的虛擬機之間的網絡問題,以及將ERP直接開放到互聯網的潛在安全漏洞。

任何意見或建議,您可能能夠提供將不勝感激!提前致謝。

更新 - 2012年9月3日

如何我目前在做數據複製(這不是一個同步) - 在夜間運行:

  1. 在辦公室複製所需的dBFS的Linux機器從ERP服務器上的只讀共享到本地存儲。
  2. 使用Dave Burton的奇妙的dbf2csv perl script
  3. 將DBF轉換爲CSV將生成的CSV與rsync'd到遠程VM。數據只有很小的變化,因此速度很快。
  4. 一旦rsync完成,遠程VM將對生產數據庫執行mysqlimport。這種方法

    • 的ERP不能以任何方式與網絡接入被損壞的

優點是隻讀的。

  • 不需要實現定製邏輯來同步數據,因此不用擔心遠程虛擬機上的數據可能會出錯。
  • 由於數據副本在晚上運行,所以運行時間並不太重要。
    • 對於超過100萬條記錄,每條記錄大約有20-30個字段,當前運行時間約爲7分鐘。
    • 最長階段是DBF複製並轉換爲CSV。
  • 缺點

    • dBFS電平在全每次都被複制。
    • DBF每次都必須全部轉換。
    • 正在複製的表在mysqlimport期間被鎖定。這並不是一個太大的問題,儘管導入在夜間運行,而mysqlimport只需要大約20秒。
    +0

    我在想一個像Talend,CloverETL或Pentaho這樣的ETL工具對你來說很合適。這樣你就不會重新發明輪子並能夠控制同步。 – Andrew 2012-03-12 16:04:38

    +0

    感謝@Andrew的建議。我會研究它。你對其他問題/疑慮還有其他想法嗎?你知道xBase DB是否會被鎖定並導致內部ERP問題? – max 2012-03-12 21:22:09

    +0

    如果您從xBase DB中選擇,您應該可以使用NOLOCK語句。這當然是一種「髒讀」,有一些缺點,但它是一種選擇。 – Andrew 2012-03-13 13:21:45

    回答

    1
    1. 如果您使用的Visual FoxPro 3.0或更高版本,可以使用內置的數據庫容器創建到SQL Server數據庫的連接。然後,.DBC中的視圖將完成讀取和更新SQL Server表的繁重工作。

    2. 我想象一個例程,它循環遍歷Foxpro表並讀取行,然後更新SQL Server數據庫。所以,Foxpro表不應該被鎖定。爲了確保這一點,你可以先將DBF查詢成一個遊標,然後遍歷遊標。

    3. 我會建議添加過程來做併發檢查。

    服務器在您的web應用程序中的Foxpro數據的另一種選擇是在SQL Server中爲您的Foxpro數據庫創建一個鏈接服務器。這樣你的Foxpro數據就可以實時訪問。

    +0

    謝謝@Jerry。我真的不想走上使用Visual Foxpro的道路。雖然我確實喜歡鏈接SQL Server的想法。 – max 2012-09-03 07:28:39

    1

    我目前正在做類似的事情 - 我必須通過將運行SQL Server的遠程託管虛擬機上的Web應用程序,通過基於FoxPro的系統開發發票事務。

    我會根據自己正在做的事回答你的第一點 - 你可以自己決定它是否適合你!

    什麼是從xBase DB更新SQL DB的最佳方法?有沒有預先存在的庫可以做到這一點,所以我不必重新發明輪子?

    我沒有真正尋找任何共享庫。我所做的是(有些簡化):

    1. 添加到保持基於我想檢測對其他領域的一個CRC32值ERP端事務表中的字段(例如,交易餘額) 。

    2. 寫了一個獨立的EXE,它掃描定時器上的ERP端事務表,根據某些字段計算CRC32值,並將其與從點1存儲在新字段中的最後一個CRC32值進行比較,事情已經改變,交易需要重新發送。這個EXE是爲了簡單的訪問DBF文件而編寫的,它作爲Windows服務運行。當我獲得時間時,它將在C#中重新完成。

    3. 仍然在這個EXE中,一旦我有新的或更改的事務列表,我將它們轉換爲JSON。我推出了自己的JSON函數,但是您可以使用[Sweet Potato Software] [1]或其他許多人的Craig Boyd's。可能有與交易相關的PDF文檔,如果是的話,它被編碼並嵌入到JSON中。

    4. 我使用利用標準Windows WinHTTP庫(WinHttp.WinHttpRequest.5.1)的類將JSON發送到遠程端的Web服務。遠程Web服務本質上是運行Java。它解碼所有並更新SQL Server。

    +0

    感謝@Alan的建議。 我大概可以實現類似的東西,但是希望避免更改ERP表。請參閱我的問題中的更新以瞭解我的實現。 – max 2012-09-03 07:30:13

    相關問題