我想创建一个仅包含临时表的数据集,以及稍后定义关系的位置。
当我在数据集中定义关系时,一切正常
DEF TEMP-TABLE ttParent NO-UNDO
FIELD pKey AS INT
FIELD parentName AS CHAR.
DEF TEMP-TABLE ttChild NO-UNDO
FIELD iParent AS INT XML-NODE-TYPE "HIDDEN"
FIELD childName AS CHAR.
DEF DATASET dsMyDataset
FOR ttParent, ttChild
DATA-RELATION Parent_Child FOR ttParent, ttChild
RELATION-FIELDS(pKey, iParent)
NESTED FOREIGN-KEY-HIDDEN.
CREATE ttParent.
ASSIGN
ttParent.pKey = 1
ttParent.parentName = "Parent".
CREATE ttChild.
ASSIGN
ttChild.iParent = ttParent.pKey
ttChild.childName = "Child".
CREATE ttChild.
ASSIGN
ttChild.iParent = ttParent.pKey
ttChild.childName = "Child2".
DATASET dsMyDataset:WRITE-XML("FILE", "C:/temp/testDs.xml").
这会按预期创建以下XML:
<?xml version="1.0"?>
<dsMyDataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ttParent>
<pKey>1</pKey>
<parentName>Parent</parentName>
<ttChild>
<childName>Child</childName>
</ttChild>
<ttChild>
<childName>Child2</childName>
</ttChild>
</ttParent>
</dsMyDataset>
现在,当我将其重写为仅定义了临时表并稍后添加关系的数据集时:
// Definition of temp-tables same as above
DEF DATASET dsMyDynamicDataset
FOR ttParent, ttChild.
DATASET dsMyDynamicDataset:ADD-RELATION (
BUFFER ttParent:HANDLE, BUFFER ttChild:HANDLE,
"pKey,iParent",
FALSE, TRUE, FALSE, FALSE, TRUE).
// Filling of temp-tables same as above
DATASET dsMyDynamicDataset:WRITE-XML("FILE", "C:/temp/testDs.xml").
我希望得到与上面相同的结果,但这是我得到的结果:
<?xml version="1.0"?>
<dsMyDynamicDataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ttParent>
<pKey>1</pKey>
<parentName>Parent</parentName>
</ttParent>
<ttChild>
<childName>Child</childName>
</ttChild>
<ttChild>
<childName>Child2</childName>
</ttChild>
</dsMyDynamicDataset>
答案 0 :(得分:2)
您将关系设置为无效。 ADD-RELATION
语句中的第三个逻辑参数是&#34; not-active&#34;。如果为false,则创建关系但不激活。将该参数更改为true,您将获得预期的输出。
以下是ADD-RELATION
的进度文档: