Thursday, January 27, 2005

改WinBCS的程式...

雖然很多地方都有模組化,也有不少註解,但是還是覺得好麻煩呀!

1 comment:

Sopp said...

Sopp[上班@國泰世華] 說:
說再測試環境用的是同一個user,正式環境用的是不同user,在secuwccb.c內已經有寫好,要參考8920,8921這兩支交易,因為這兩支交易也用到NT_Branch
David Tang 說:
這二隻交易已經在線上使用了嗎
David Tang 說:
看有沒有VAR檔案就知道了
Sopp[上班@國泰世華] 說:
有的,在P類
Sopp[上班@國泰世華] 說:
fis8920.c
Sopp[上班@國泰世華] 說:
ptp_fiscomm.c line315
David Tang 說:
ptp_fiscomm.c內有
InsertLocationInfo
InquiryLocationInfo
UpdateLocationInfo
可用
David Tang 說:
還有
DeleteLocationInfo
Sopp[上班@國泰世華] 說:
InquiryLocationInfo
David Tang 說:
ptp_fisccomm.c line 1182
ConnectDBToBranch()可以取得連接NT_BRANCH的參數
Sopp[上班@國泰世華] 說:
應該用到的只有這個
David Tang 說:
可能會用到新增...刪除吧...
David Tang 說:
PTP_8920()可以直接拿來用
Sopp[上班@國泰世華] 說:
判斷LocationID是否存在,存在的話,才能繼續交易
David Tang 說:
yes..
Sopp[上班@國泰世華] 說:
那只要用inquiry就可以了吧?
David Tang 說:
小修改一下就行了
David Tang 說:
目前只要用到這個
David Tang 說:
如果他們要在VAR裡直接新增時...就會用到別的...
David Tang 說:
目前先不管....
Sopp[上班@國泰世華] 說:
嗯嗯
David Tang 說:
把程式連起來...
David Tang 說:
(1)在9xxx的VAR送一個RIM(參考8920的RIM....)
David Tang 說:
(2)在do_p_tx裡看程式跑到那裡.....如果到do_real_p_tx就沒問題...如果到'R'類...就要攔下來...跑你的程式(你在加一個.c/.h來處理這類的問題).......假設函式叫P9XXX_CheckLocationInfo()
David Tang 說:
(3)P9XXX_CheckLocationInfo()可以參考PTP_8920()....大部份的程式皆可用....
Sopp[上班@國泰世華] 說:

David Tang 說:
wsprintf(szTmpStr, "1MIF77%s", szMsg);
Prepare_PU_Tom(pInfo, szTmpStr);
Do_P_SendToWS(pInfo);
return TRUE;
就會將結果傳回DDP
Sopp[上班@國泰世華] 說:

David Tang 說:
LLNew
LLGetTotal
LLGetBuffer
LLFree
是用來處理Link List....
David Tang 說:
照著用就行了
Sopp[上班@國泰世華] 說:
嗯嗯
David Tang 說:
(1)在ThreadFuncForGM()/p_tp.c..裡加上
if (memcmp("P", &lpRIM->szApType[0], 1) == 0)
{
iReturn = Do_MX_RIM_ROM(pInfo, ejf);
if(iReturn == TO_WS)
{
iReturn=SendToWS(pInfo);
for(;iReturn==XMT_WOULDBLOCK
iReturn=SendToWS(pInfo);
}
}

David Tang 說:
(2)你自己新增MX_R.C/MX_R.h
David Tang 說:
將Do_MX_RIM_ROM()放在MX_R.C MX_R.h
David Tang 說:
(3)Do_MX_RIM_ROM()參考Do_Rx_Rim_Rom_Tx()/RX_RIM_ROM.C

int Do_Rx_Rim_Rom_Tx(tClient *pInfo, EJFSTRUCT *ejf)
Sopp[上班@國泰世華] 說:

David Tang 說:
函式宣告如下:
int Do_MX_RIM_ROM(tClient *pInfo, EJFSTRUCT *ejf)
David Tang 說:
注意Do_Rx_Rim_Rom_Tx()函式中如何取出RIM的值(Value A)....
以及如果組成ROM(Value B)......
了解的話...
將Value A代入ptp_fisc8920()內...並且將ptp_fisc8920的結果以Value B方式輸出....應該可以...
Sopp[上班@國泰世華] 說:
Do_Rx_Rim_Rom_Tx 先copy過來用?
David Tang 說:
參考即可...
David Tang 說:
自己寫沒關係
David Tang 說:
裡面有很多別的交易的資料處理...沒什麼用...
Sopp[上班@國泰世華] 說:
嗯,有十七段
David Tang 說:
注意&(lpROM)....
&lpRIM->szText[0].....此類的程式片斷
David Tang 說:
szText[0]應該就是查詢的資料本身
Sopp[上班@國泰世華] 說:

David Tang 說:
BYTE szApType[2];
BYTE szApCode[3];
szText前面有以上5個Bytes...
David Tang 說:
所以...你在DDp裡面要留5個Bytes...
David Tang 說:
szApType及szApCode應該是用來判斷作什麼類的交易....
David Tang 說:
aptype裡會有R/C/O/P....
David Tang 說:
apCode裡會如果是001...要在local dB檢查某一個Account...
David Tang 說:
所以你在APType內應該要放"P " (2 Bytes)
Sopp[上班@國泰世華] 說:
lpRIM = (RIMST_A *)pInfo->RcvBuf;

David Tang 說:
APCode內放3個Bytes...例如001代表查詢locationInfo
David Tang 說:
yes
David Tang 說:
然後szText內的資料就可以拿來用....
Sopp[上班@國泰世華] 說:
if (memcmp("003",&lpRIM->szApCode[0],3) == 0)
{
//inquiry table rxbif
RxbifRec Rxbif;


Sopp[上班@國泰世華] 說:
if (memcmp("R", &lpRIM->szApType[0], 1) == 0)
{

David Tang 說:
例如szText內放待查詢的收付處ID..01好了....
Sopp[上班@國泰世華] 說:
合起來就是 RX003
David Tang 說:
你的應該要PX003吧....
Sopp[上班@國泰世華] 說:
R7100送上去查詢的代碼是用 RX003
David Tang 說:
yes...
David Tang 說:
你要自己編一個...
David Tang 說:
例如PX00102
David Tang 說:
後面的02表示收付處ID
Sopp[上班@國泰世華] 說:
這樣可以嗎?
Sopp[上班@國泰世華] 說:
apcode只有3bytes
David Tang 說:
然後copy ptp_fisc8920程式來用...
David Tang 說:
yes...
David Tang 說:
應該夠用....
Sopp[上班@國泰世華] 說:
總共5byte...你這樣就7bytes
David Tang 說:
02表示szText
David Tang 說:
裡的資料
Sopp[上班@國泰世華] 說:

Sopp[上班@國泰世華] 說:
那可能會變成
Sopp[上班@國泰世華] 說:
PX0010010209012 之淚的
David Tang 說:
yes....
David Tang 說:
copy ptp_fisc8920().來用....
因為...裡面有查詢locationInfo的程式片斷可以用...
David Tang 說:
注意
ptp_fis8920.c line 119
iErrCode = P052; //資料已存在
Sopp[上班@國泰世華] 說:
PTP_FISC8920() 是不是要自己COPY一個出來用?
David Tang 說:
所以...InquiryLocationInfo()的結果是iErrCode = P052..就表示資料已存在..
David Tang 說:
yes
Sopp[上班@國泰世華] 說:
iRecCnt = LLGetTotal(pLink);
iErrCode = 0;
switch (szOperation[0])
{
case '1': //新增
if (iRecCnt > 0)
{
iErrCode = P052; //資料已存在
break;
}

David Tang 說:
自己訂一個名子例如P9XXX_CheckLocationInfo...
David Tang 說:
要看你要不要判斷新增/刪除/修改....如果只是查詢...就直接判斷
if (iRtnCode == SQL_ERROR) => error
David Tang 說:
if (iRecCnt > 0) => 資料存在...
David Tang 說:
了解嗎
Sopp[上班@國泰世華] 說:
case '2': //修改
if (iRecCnt == 0)
{
iErrCode = P053; //資料不存在
break;
}

Sopp[上班@國泰世華] 說:
嗯嗯