我做過N百次EasyFlow呼叫TIPTOP整合段
但就是沒有做過TIPTOP呼叫EasyFlow的個案
大概從2016年底開始一值鬼打牆的失敗
明明相同的程式及作法別人都可以為什麼我就做不到
後來用一些工具才大概知道TT跟EF兩個的架構不走標準是不行的.....
(ps 設備 TIPTOP GP 5.1 、EASY FLOW GP)

那其實在標準的程式中,TT呼叫EF的Method只有以下幾個
CreateForm (簽核開單)
SetStatus (謙和最後一站回覆狀態)
GetProgramID (取得TT目前已設定的整合單據其程式代碼與各工廠單別)
GetFormFlow (看單據簽核流程)
GetApproveOpinion (看單據簽核意見)
ColumnSet (傳送已設定的整合單據欄位)
GetFormInfo (取得目前使用者選擇資料匣內容[待辦事項列表])
GetBackFlow (執行「不准」功能的退回關卡資訊)
GetModifyFlowUser (執行「加簽」功能的加簽人員列表)
GetFlowAction (取得目前單據可執行的功能)
GetTTFormID (取得EF單據種類)
GetApproveLog (取得該單據所有意見)
DoFormApproval (進行單據簽核動作=「准」)


其實上面這些基本上都是在4gl裡面寫死的
而且一有新的需求這些根本不開放修改、也沒有平台可以看code,超封閉的啦!

如果有做過TIPTOP跟異質整合的人應該都知道
若是當TT為SERVER端(=其他系統要來取得TIPTOP資訊)時
只需要修改aws_ttsrv2等幾隻程式的段落
再把標準抓來copy paste就大概完成80%
但當TIPTOP為Client時就沒有那樣簡單容易了!


一、說明一下這次客製的需求是:
希望從TT點選按鈕可以把資訊傳至EF
再由EF撈取資料回傳TT並顯示


我同事(=她是負責EF端的IT) 提供了一個先前顧問給她的Word
裡面有鼎新EF標準提供的函式可以跟一直整合
大致截圖如下,如果沒有跟客服講應該都是可以取得的
這是說明:

下面是接收資訊後回傳的訊息範例:


二、原先的做法及測試情況:
(貼心小提醒:如果想知道答案請往下一趴走,太冗長怕您按耐不住阿)

我參考前同事提供的方法(ps 他是TT呼叫其他系統)
先客了一隻cws_xxxx的程式去抓資料準備CALL WebService
再用原廠fglwsdl -o的指令去產生呼叫服務的程式
共新增了三隻程式

但是我怎麼試都回傳錯誤 「No such operation 'fetchProcInstanceWithSerialNoRequest'」
兩端通道都確認開了、語法確認無誤卻還是一樣
問了客服,客服卻回應此需求做不到叫我找業務 (整封mail大概就只能濃縮成這句話吧)
(看到這段真的是整個火....至少也告訴我為什麼做不到吧QQ)
但不重要,後來我們又想說:「那不然直接從TT程式撈EF DB裡的資料吧!」
又試過ODBC、試過DBLINK、安裝Oracle GateWay、找過DBA高手...........
一大堆鬼都試過,但是全部都 行! 不! 通!

最後!!!
我跟同事決定寫了一程式模擬EF的函式供TT呼叫及回傳
一試竟然.................... 成功了!....Orz
WTF,代表我程式一直都沒問題阿
那我們前面一個月多再幹嘛?還被客服打槍說做不到 (哈哈哈哈欲哭無淚阿....[撞牆])

三、最後採用的方法
所以討論到最後,請同事開發一包程式: (C#跟.Net)
接收到TT資訊,傳進EF標準函式,由EF標準函式執行後回傳的資訊再丟回TT
這程式的概念就是於TIPTOP及EasyFlow之間的中介程式做資料收送
這下終於大功告成啦!

四、TIPTOP執行步驟
前面有簡單提到步驟,這邊把程式碼貼上來說明一下
假設此函式名稱為:FormNumber (大小寫要注意)
1.請開發一支新的4gl (cws_FormNumber.4gl) 程式範例提供如下
=========================================
IMPORT com

GLOBALS "../../../tiptop/config/top.global"
GLOBALS "../4gl/FormNumber.inc"

DEFINE g_string       LIKE xxx_file.xxx
DEFINE g_result         STRING
DEFINE g_soapstatus     INTEGER

FUNCTION cws_FormNumber(p_string)
   DEFINE p_string        LIKE xxx_file.xxx

   LET g_string = NULL
   LET g_soapstatus = NULL
   LET g_result = NULL

   LET g_string = p_string

   #開始呼叫並傳入資訊
   CALL FormNumber(g_string) RETURNING g_soapstatus,g_result

   IF g_soapstatus=0 THEN
      #代表成功:可以進行回傳的資料分析
   ELSE
      #代表失敗:可跳出錯誤告知USER
   END IF

   #可撰寫LOG紀錄
   CALL formnumberlogfile()

   RETURN g_result
END FUNCTION
=========================================

2.利用指令產生WSDL對應的服務:fglwsdl -o (函式名稱) (WSDL網址)
ex: fglwsdl -o FormNumber http://(IP:PORT)/Service.asmx?wsdl
指令下下去之後會產生兩個檔案:FormNumber.4gl , FormNumber.inc
3.將以上三個檔案都放到cws/4gl客製的目錄下
編譯兩隻4gl後加link到要用的主程式即可 (兩隻都要加)

如果是單獨執行的案例:
1.如上面的程式範例,請將FUNTION改為MAIN
2.建立p_zz(程式:cws_FormNumber)
2.cws_FormNumber的link加入FormNumber.4gl


因為爬文爬了很久已經快絕望才有這樣的成功
提供以上資訊給有需要的朋友~
不要再傻傻的一直去試了
TT跟EF感覺是根本通不了阿阿阿阿!
 

arrow
arrow

    Anita 發表在 痞客邦 留言(19) 人氣()