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

Add relations to dataset dynamically in Progress OpenEdge

我想创建一个仅包含临时表的数据集,稍后将在其中定义关系。

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

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>

现在,当我将其重写为一个数据集,其中仅定义了 temptables 并稍后添加了关系:

// 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>

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

这是 ADD-RELATION 上的进度文档:

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