2016-12-23 20 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