在Progress OpenEdge中动态添加与数据集的关系

时间:2017-11-07 14:32:09

标签: dataset temp-tables openedge progress-4gl

我想创建一个仅包含临时表的数据集,以及稍后定义关系的位置。

当我在数据集中定义关系时,一切正常

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>

1 个答案:

答案 0 :(得分:2)

您将关系设置为无效。 ADD-RELATION语句中的第三个逻辑参数是&#34; not-active&#34;。如果为false,则创建关系但不激活。将该参数更改为true,您将获得预期的输出。

以下是ADD-RELATION的进度文档:

https://documentation.progress.com/output/ua/OpenEdge_latest/index.html#page/dvref/add-relation(-)-method.html