2016-12-23 19 views
0

我試圖創建一個單一的代理查詢我們的appserver,它採用下列參數:傳遞空的DataSet APPSERVER

editTest.p

DEFINE TEMP-TABLE TT_Test NO-UNDO 
    BEFORE-TABLE TT_TestBefore 
    FIELD fieldOne LIKE MyDBTable.FieldOne 
    FIELD fieldTwo LIKE MyDBTable.FieldTwo 
    FIELD fieldThree LIKE MyDBTable.FieldThree 
. 

DEFINE DATASET dsTest FOR TT_Test. 

/* Parameters */ 
DEF INPUT-OUTPUT PARAM DATASET FOR dsTest. 

的想法是,該程序將以兩種不同的方式調用此過程:

  • 帶有傳遞的數據集參數:讀取傳遞的數據集並根據它的更新更新數據庫
  • 沒有通過數據集參數/未知/取消設置:填寫TT_Test並返回數據集客戶端編輯

有什麼方法來創建這樣的代理?簡單的解決方案是將getinsert,modify,delete分開爲2個自己的代理文件,所以客戶端總是先獲取數據集,然後再傳遞給第二個。不過,我想在這個文件中實現這個功能。

關鍵是使用數據集,因此對數據所做的更改可以幾乎自動更新。

回答

0

而不是使用數據集本身作爲參數,使用數據集句柄。然後,您可以使其爲第二個條件爲空。添加到您的例子,程序testProc將顯示一條消息,當空在傳遞「是」時,該數據集是通過手柄傳遞,和「無」。

DEFINE TEMP-TABLE TT_Test NO-UNDO 
    BEFORE-TABLE TT_TestBefore 
    FIELD fieldOne LIKE MyDBTable.FieldOne 
    FIELD fieldTwo LIKE MyDBTable.FieldTwo 
    FIELD fieldThree LIKE MyDBTable.FieldThree 
. 

DEFINE DATASET dsTest FOR TT_Test. 


PROCEDURE testProc: 

    DEFINE INPUT-OUTPUT PARAMETER DATASET-HANDLE phDataSet. 

    MESSAGE VALID-HANDLE(phDataSet) VIEW-AS ALERT-BOX. 

END. 


DEFINE VARIABLE hTest AS HANDLE NO-UNDO. 

/* Pass in a dataset. */ 
hTest = DATASET dsTest:HANDLE. 
RUN testProc (INPUT-OUTPUT DATASET-HANDLE hTest). 

/* Pass in null. */ 
hTest = ?. 
RUN testProc (INPUT-OUTPUT DATASET-HANDLE hTest). 
+0

當前參數是表柄,其工作原理好的。我從前端嚮應用服務器發送一個虛擬的空'測試'表,該服務器可以很好地接收它。問題是,我無法設置/更改'TABLE-HANDLE'指向我填充的本地'TT_Test'臨時表。我嘗試使用'thMyHandle:HANDLE:CREATE-LIKE(TEMP-TABLE TT_Test'沒有成功.. – W0lfw00ds

+0

我不認爲你可以通過重新分配句柄變量來交換臨時表。但是如果你有一個本地TT_Test,你應該能夠將這些記錄複製到傳入的臨時表中。使用'BUFFER-COPY'命令在臨時表之間複製記錄。 – TheDrooper