集成 IBM Lotus Domino 和 SAP

學習構建從 SAP 讀取數據放入 Domino 數據庫的應用程序,以及如何使用 Lotus Enterprise Integrator、Domino Enterprise Connection Services 和 Lotus Connectors LotusScript Extension 這些強大的工具。

Lotus Domino 和 SAP Enterprise 連接在一起協同工作很有必要,這兩個強大的系統一旦聯繫起來,可以:

  • 減少需要的 SAP 用戶許可證。
  • 提高用戶社區中能夠訪問 SAP 服務的比率。
  • 減少數據錯誤(從而提高用戶滿意度)。
  • 提供更好的處理狀態信息,也可以提高用戶的滿意度。
  • 減少(如果不是完全消除)用戶系統上應用程序的定製需要。所有用戶都可以使用這些信息,而不僅僅侷限於那些能夠從網絡上訪問 SAP 的用戶。
  • 減少維護內部過程需要的人員。
  • 降低與 SAP 培訓有關的費用,因爲直接與 SAP 打交道的人少了。

 

本文描述了來自 IBM Software Group 的 Lotus Enterprise Integrator (LEI) 團隊的強大工具,可以幫助您實現這個很有價值的目標。然後我們使用這些工具建立一個僱員自助服務(Employee Self Service)示例解決方案。我們介紹的工具包括 Lotus Enterprise Integrator (LEI)、Domino Enterprise Connection Services、Lotus Connectors LotusScript Extension 和 Lotus Connector for SAP R/3 with MTA and Workflow。如果熟悉 Lotus Notes/Domino、LEI 和 SAP,有助於理解本文討論的某些特性和概念。

Lotus Enterprise Integrator (LEI)

Lotus Enterprise Integrator (LEI) 的主要功能就是把數據從 A 點移到 B 點(有時候還要返回去)。它建立在 Lotus Connectors 的基礎上,後者提供了不同企業系統的訪問。目前提供的連接程序有 DB2、File、Lotus Notes、Oracle、ODBC、OLEDB、Sybase 和 Text。這些連接程序都是標準 LEI 產品的一部分。此外,還可以單獨訂購 SAP 連接程序。

LEI 同時提供了 Data Management 活動和 Advanced Realtime 活動。Data Management 活動控制在給定的時間點給定的連接程序做什麼,包括:

  • Archive,從連接程序 A 讀取數據,寫入連接程序 B,然後從連接程序 A 上刪除。
  • Command,執行操作系統、數據庫或 SQL 命令。
  • Direct Transfer,從連接程序 A 讀取數據並寫入連接程序 B。這是 LEI 中最常用的活動,可用於數據遷移、定期下載、定期上傳或者其他各種用途。
  • Java,執行 Java 應用程序。
  • Polling,監視特定的條件是否成立,如果成立則觸發其他活動。
  • Replication,有兩種情況:讓連接程序 B 的數據和連接程序 A 的類似,或者使 A 和 B 的數據相同。
  • Scripted,代理在 Domino 代理管理器 干預的情況下下執行。腳本擁有自己的運行過程,執行速度快,按照自己而非代理管理器的調度執行。

 

每種活動都具有不同的調度能力、專門的活動選項,也能夠啓動相關的活動。每個連接程序都可以與其他連接程序交換數據。但最好的地方是,使用 LEI 活動可以在 LEI 管理數據庫中填寫表單(不需要編寫腳本)。這些表單是標準的 Domino 表單。表單中可以選擇從哪裏讀取數據,寫到哪裏,將一個連接元數據中的字段映射到另一個連接元數據中的字段。

元數據包括:

  • 關係數據庫管理系統(DBMS)中的表或視圖。表必須存在於 DBMS 本身之中,或者由存儲過程動態創建和返回。
  • Lotus Domino 中的 Domino 表單。
  • SAP 中的表,即 Remote Function Call(遠程函數調用,RFC)、Business Object Application Programmer's Interface(業務對象應用程序編程接口,BAPI)或者 Transactions(成批輸入模式)使用的表。

 

LEI 6 及更高版本支持的 Advanced Realtime 活動包括:

  • Virtual Fields (虛擬字段,原來在 LEI 3.x 中稱爲 Realtime)。 通過該活動可以將 Domino 應用程序作爲企業數據的前端,而不需要複製數據。數據的檢索和修改是實時進行的。只有企業數據的鍵值保存到 Notes 文檔中。最棒的一點是,用戶(無論人還是機器)都毫不知情。一旦打開 Notes 文檔,所有字段(不僅僅是鍵)都自動填充完成。這一切都是實時完成的!
  • Virtual Documents(虛擬文檔)。這是下一層次的虛擬字段。不再有 Notes 文檔保存鍵值,所有內容都是虛擬的。視圖被填充,文檔按照期望在視圖中工作,但實際上裏面什麼也沒有。通過向 RDBMS 表中增加控制字段保存 Domino 專用的註解字段,除了給定視圖上顯示的彙總信息之外,不需要在 Domino Notes 中保存任何信息。
  • Virtual Attachments(虛擬附件)。被虛擬字段或虛擬文檔“查看”的保存在文檔中的附件現在可以保存到 RDBMS 系統而非 Domino 數據庫中了。這樣,其他 RDBMS 應用程序也可使用這些信息(只讀模式),而且避免了 NSF 文件的膨脹。
  • Virtual Agents(虛擬代理)。RDBMS 存儲過程現在可以從任何地方訪問,只要前面有一個代理。它們可以操作單個文檔或者一組文檔。虛擬代理將文檔中的字段傳遞給存儲過程的輸入參數,使存儲過程能夠完成任何需要的操作。

 

因此,無論需要 Data Management 還是 Advanced Realtime 活動,Lotus Enterprise Integrator 都可以爲您完成其中的很多任務。圖 1 顯示了 LEI Administration 數據庫,其中定義了連接和活動,活動的執行是受控的。



圖 1. LEI Administration 數據庫
LEI Administration 數據庫




回頁首


Domino Enterprise Connection Services (DECS)

Virtual Fields 活動(原來稱爲 Realtime)取得了非凡的成功,以至於從 LEI 分離出去形成單獨的工具,稱爲 Domino Enterprise Connection Services (DECS)。DECS 是 Domino Enterprise Server 的標準組件。Lotus Domino 6 或更高版本中的 DECS 與 LEI 中的 Virtual Fields 活動相比功能不那麼全,但仍然能夠滿足很多的客戶需要。它不支持 Virtual Attachments 和 Integrated Credentials。





回頁首


Lotus Connectors LotusScript Extension (LCLSX)

理想情況下,使用 LEI 表單的功能就能百分之百滿足您的集成需求,但情況並非總是如此。很多時候需要一定的業務邏輯,從一個地方讀取數據、到達另一個地方之前解釋或修改數據。或者需要按照某種順序執行一些 SAP BAPI 來完成一項任務。比方說,從 SAP 上修改給定僱員的 HR Master Data 之前必須鎖定該僱員,然後修改,完成後再解除鎖定。必須在一個 SAP 連接中執行這三個動作。對靈活性的要求高於 LEI 活動。在 LEI 活動中,每次只能使用一個 BAPI。 一種辦法(非常好的辦法)是讓 SAP ABAP 人員創建包裝器 BAPI,一步完成需要的三個動作,但是如果做不到,可以編寫 LotusScript 來滿足要求。

我們後面將舉一個這樣的例子。首先用 LotusScript 來實現,然後假設 ABAP 人員編寫了漂亮的包裝器能夠一次完成三個步驟,從而說明使用 LEI 來完成這樣的任務是多麼簡單。不過,我們首先要介紹 LCLSX 的強大功能。LCLSX 是一種傳統的 LotusScript 擴展,專門爲企業系統設計的。目標設計非常適合用於 RDBMS 連接程序。也可使用 SAP Connector,但有時候 RDBMS 模型更徹底,後面我們將會看到。

LCLSX 有兩種強大的功能是其他 LSX 沒有的:

  • 連接池。可以緩衝和重用非常耗時的連接,從而提高性能,減少新建連接時要執行的活動(如安全登錄到企業系統)。這些連接不侷限於 LotusScript 的作用域,實際上在進程級別上維護。只要 Domino 服務器進程或者 Notes 客戶機進程在運行,連接池就存在。
  • 數組讀/數組寫。LotusScript 是一種解釋語言,就是說運行起來要比編譯程序慢。假設要讀取包含 100,000 個記錄的 DB2 表,並把每個記錄中的數據寫入一個新的 Notes 文檔。在 LCLSX 之前,需要在 LotusScript 中使用執行 100,000 次的循環來完成。LCLSX 從 DB2 表中讀入第 1 到第 1000 個記錄(單個 LotusScript 步驟),並同時將這些記錄插入 Domino 數據庫。我們讀取一個記錄數組,然後寫入該數組。LotusScript 循環執行 100 次而不是 100,000 次。在底層使用編譯程序執行這類重複性的工作可以極大地改善性能。

 





回頁首


Lotus Connector for SAP with MTA and Workflow

Lotus Connector for SAP with MTA and Workflow 是捆綁到一起的三種不同產品。最主要的組件是 Lotus Connector for SAP。當與 LEI、DECS、 LCLSX 一起使用時,這個連接程序允許訪問 SAP 應用程序服務器上的 RFC、BAPI 和 Transaction。而且不限於單個模塊,因爲 SAP 提供了連接接口。這是一種通用的方法,如果願意,可以連接到所有模塊。這些 RFC 和 BAPI 可以從 SAP 讀寫。事務寫入 SAP,但是可以返回狀態或者簡單的信息。SAP 提供了數千種 RFC,事務甚至更多。從我們的角度(即遠程訪問編程接口的角度)來看,RFC 與 BAPI 之間沒有區別。所有的 BAPI 都是 RFC。

下一個組件是 Domino MTA for R/3,提供了 Lotus Domino 與 SAP 之間的郵件連接。它提供了標準的郵件需求,如傳送確認、收到答覆和其他功能。很多客戶已經使用該產品多年了。

最後一個組件是 Domino Access to SAP Business Workflow。這是一個用 SAP Connector 建立的 LCLSX 應用程序。它可以讓您在 Notes Inbox 中看到 SAP 工作項。在這裏,從 SAPGUI 的對話框實例通過單擊可以處理給定的工作項。登錄並打開工作項 Inbox 和執行工作項都可以通過單擊完成。處理完工作項之後,就返回到 Notes 客戶機。這個產品很簡單,但是如果與 Domino MTA for R/3 or SMTP with SAP 4.7 Enterprise 結合起來,就提供了統一的 Inbox。在這裏可以查找 Notes 郵件、Domino 工作流、SAP 郵件和 SAP 工作流。

更多信息,包括演示程序、客戶評價和白皮書,請訪問 Lotus Enterprise Integration 主頁





回頁首


僱員自助服務應用程序

我們來看一看與 SAP 的交互,這是上面提到的例子中的一部分。我們將介紹一個僱員自助服務(Employee Self Service,ESS)應用程序,本地或遠程的 Domino 用戶可以通過它使用 Domino 應用程序更新個人地址信息。這些信息沒有保存在 Lotus Domino 中,而是保存在 SAP 中。我們的目標是:

  • 不需要對整個 Domino 用戶社區進行 SAP 培訓,因爲不需要直接訪問 SAP。
  • Domino 社區不需要 SAP 用戶許可證,因爲不必登錄到 SAP。
  • 減少總部的人員,因爲這些請求不再需要呼叫總部中的呼叫中心。

 

現在我們來建立這個應用程序。假設您屬於 Domino 一方,第一步就是告訴 SAP 人員,您需要知道從哪裏尋找數據以及如何使用滿足需要的不同 RFC 或 BAPI。期望自己知道這些答案或者自己來配置是不現實的。Domino 一方和 SAP 一方共同協作纔是惟一的解決之道。通過與 SAP 人員的交談,您瞭解到:

  • 讀取表 PA0006 以獲得設置信息,以便能夠獲取當前的地址數據和更新地址數據。
  • 如果需要更新地址信息,首先必須調用 BAPI_EMPLOYEET_ENQUEUE 鎖定該僱員的 HR 記錄。
  • 更新僱員的地址信息必須調用 BAPI_ADDRESSEMP_CHANGE。
  • 然後必須調用 BAPI_EMPLOYEET_DEQUEUE 解除該僱員 HR 記錄的鎖定。

 

第 1 步是一個 LEI 步驟。使用專門的 RFC_READ_TABLE(SAP 中很常用的一種 RFC)可以讀取 SAP 中的表。通常 RFC_READ_TABLE 返回一個表,包含所有希望提取的列(作爲字符串給出)。如何解析這些列和將其轉換成原來的數據類型是您的工作。幸運的是,SAP 連接程序可以替您完成。

首先要定義到 SAP 的連接,以便能夠使用 RFC_READ_TABLE。



圖 2. 連接到 SAP
連接到 SAP

上圖中可以看到訪問 SAP 需要的所有連接信息和要訪問的 RFC 名稱,即 RFC_READ_TABLE。這裏 PA0006 已經連接到了 RFC_READ_TABLE 的後端。這樣將使 SAP 連接程序以表 PA0006 的格式提供數據,而不是 RFC_READ_TABLE 自己提交通常使用的表 DATA。

然後定義到 Notes 數據庫的連接,它將作爲 Notes 用戶社區的前端,如圖 3 所示。



圖 3. 連接到 Notes
連接到 Notes

該例中只需要包含 Domino 服務器名和數據庫文件名。在 Data Creation 選項卡中可以找到支持的快速應用程序開發(RAD)選項。



圖 4. Data Creation 選項卡
Data Creation 選項卡

Create Database 選項告訴 LEI 如果數據庫不存在則創建它。這個數據庫並不完善(除非定義了使用的模板),但是可以作爲 LEI 的基礎完成以後的設計工作和保存數據。

接下來需要一個 LEI 活動。爲了使這個例子儘量簡單,我們使用 Direct Transfer 活動。在實際的解決方案中,可能需要選擇 Replication 活動,因爲它非常適合保證隨着時間的變化應用程序仍然能夠得到 SAP 的支持。



圖 5. Direct Transfer Activity
Direct Transfer Activity

該活動以 SAP 作爲源,Lotus Notes 作爲目標。您將從 SAP 表 PA0006 讀取數據然後寫入 Domino 數據庫的 Employee 表單。第一次運行的時候,Domino 數據庫還不存在,這意味着必須告訴活動 Domino 表單的名稱是什麼。還需要自己填寫 Target Field 的值,因爲這些還不存在。可以選擇自動字段映射,創建與 SAP 提供的名稱相同的字段名,也可以手工輸入字段名。

Select Statement 字段採用專門的格式,只能用於 SAP Connector。完整的“語法”細節請參閱 SAP Connector 文檔。這裏爲 RFC_READ_TABLE 定義了一個輸入表。格式包括表名、行號,最後是要爲哪些字段提供輸入值。該例中輸入表 FIELDS 就是要寫入的目標。從第 1 行開始,向字段 FIELDNAME 寫入一個值。必須告訴 RFC_READ_TABLE 要從表 PA0006 中的哪一個字段讀數據,可以通過填寫輸入表 FIELDS 來完成。

在 Target Data Options 中選擇 Create Target Metadata。該例中,如果 Empolyee 表單還不存在,LEI 將爲您創建。雖然表單不是很完善,但是能夠正確定義活動中映射的字段。這比 LEI RAD 更先進。

理解從 SAP 中讀取的數據很有用。地址部分非常明顯。需要解釋的是後三個字段。BEGDA 是 Begin Date(開始日期),即成爲合法地址的日期。ENDDA 代表 End Date(終止日期),即該地址無效或者即將無效的日期。如果地址是有效的,在這裏多數時候 SAP 保存的值都是 12/31/9999。 SUBTY 代表 Subtype(子類型),是一個代碼,說明這是什麼類型的地址,因爲 SAP 可能保存給定僱員的多個當前地址。用戶並不瞭解代碼的含義,因此可以在 Domino 表單中增加一個小小的計算字段,將 SAP 代碼轉化成便於閱讀的文本。

現在可以再進一步,讓 LEI 運行該活動。這個例子稍微改進了 Domino 表單。這個活動創建的示例 Notes 文檔類似於圖 6。



圖 6. 示例 Notes 文檔
示例 Notes 文檔

Field Address Type 實際上是根據 SUBTY 的值計算得到的,SUBTY 是隱含子段,計算公式如下:

@If(SUBTY="1";"Permanent Residence";"Temporary Residence")

現在 SAP 數據已經保存到 Lotus Domino 中了。目標是讓用戶修改這些數據,然後將修改發送到 SAP。爲了保持簡單,假設 Domino 數據庫中已經建立了一種安全機制,每個僱員只能編輯自己的地址數據。

處理更新最簡單的一種辦法是設置一個字段,如果用戶通過表單編輯了文檔,就讓該字段出現在給定的 Notes 文檔中。比方說,在 Empolyee 表單中添加字段 HASBEENCHANGED 並賦予默認值 1。 一旦用戶編輯了他們的地址文檔,該字段就出現。然後,當把數據發送給 SAP 時,僅僅搜索字段 HASBEENCHANGED 的值爲 1 的那些文檔。

前面提到,如果要修改僱員的地址數據,首先必須鎖定該僱員的記錄,修改數據然後再解除鎖定。爲此,需要在同一個連接上調用三次 RFC。目前來說,這意味着需要一個腳本。下面的腳本沒有考慮到可能出現的錯誤,僅僅滿足了基本的要求。可以在 附屬文件 中看到完整的腳本。

可以按照不同方式調度該代理的運行。因爲需要每 60 分鐘運行一次,在一個小時的第 20 分鐘運行,所以使用 LEI Scripted Activity 來調度。這樣做將消除 Domino 代理管理器的“先進先出”隊列行爲方式。

我們承認這種辦法比較麻煩,因爲每次修改地址都需要在一個連接上調用三次 BAPI,所以需要編寫腳本。簡單的辦法是要求 SAP 人員創建一個包裝器 BAPI 調用需要的三個 BAPI。包裝器需要一個接口能夠讓您發送調用這三個 BAPI 需要的所有信息。

最終的解決方案應該是具有與 BAPI_ADDRESSEMP_CHANGE 完全相同的接口的包裝器。它如何工作呢?首先它將調用 BAPI_EMPLOYEET_ENQUEUE。要得到這個 BAPI 需要的 VALIDITYBEGIN 日期,使用今天的日期就可以了。SAP 知道今天的日期,因此不需要傳遞。然後,包裝器調用 BAPI_ADDRESSEMP_CHANGE,最後再調用 BAPI_EMPLOYEET_DEQUEUE。

不妨將包裝器命名爲 wrapper Z_BAPI_ADDRESSEMP_CHANGE。使用這個包裝器 BAPI,首先要重用已有的 Notes 連接文檔。但是這個新的 BAPI 需要一個新的 SAP 連接文檔,如圖 7 所示。



圖 7. 新 BAPI 的 SAP 連接文檔
新 BAPI 的 SAP 連接文檔

現在,只需要一個使用該連接的新 LEI Direct Transfer Activity 了。



圖 8. 使用 BAPI 連接的 Direct Transfer Activity
使用 BAPI 連接的 Direct Transfer Activity

可以看到,這裏從 Notes 中讀取所有字段 HASBEENCHANGED="1" 的 Empolyee 表單,然後將這些文檔中的字段發送到 Z_BAPI_ADDRESSEMP_CHANGE。

爲了檢驗操作是否成功,可以使用 Direct Transfer 活動的輸出參數特性。



圖 9. Target Data 選項
Target Data 選項

選中選項“Target Metadata is Stored Procedure”和“Accept Output Parameters into Source”。如果有錯誤,該例的腳本版本中使用的字段 ERRORTEXT 包含直接來自 SAP 的文本消息。

相應地,需要從源文檔中刪除字段 HASBEENCHANGED。最好的辦法是使用腳本,腳本作爲該活動的 Dependent Activity 來運行。這意味着完成該活動後將啓動您的清除腳本。腳本也可以向僱員發送狀態郵件表明操作是否成功,如果失敗還要發送 ERRORTEXT 消息。





回頁首


結束語

本文中建立了一個應用程序,從 SAP 讀取數據並放到 Domino 數據庫中。然後可以在各處使用或者複製該數據庫。Notes 用戶可以使用 Lotus Notes 和 Domino 在本地修改他們的地址。不需要進行 SAP 培訓,甚至不需要到 SAP 的網絡連接,不需要 SAP 帳戶,也不需要安裝額外的工作站軟件。所做的修改複製回 LEI 監控的 Domino 服務器,LEI 活動將修改發送到 SAP。最後由清理腳本向僱員發送狀態信息。

我們希望您能夠有所瞭解,Lotus Domino 和 SAP 是一對很好的組合,可以爲您節約一些時間和金錢。很多 IBM 和 SAP 客戶,不論規模大小,都已經從這些產品中獲益,解決方案涉及到 SAP 提供的每個模塊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章