使用 DEFINE DATASET 在子表之间生成包含父字段的 XML 文件

Generating XML file with parent fields between child tables using DEFINE DATASET

我正在尝试使用 DEFINE DATASET 生成具有以下格式的 XML 文件:

<Parent>
   <Child1>
     <Child1 field>
   </Child1>
   <Parent field>
   <Child2>
      <Child2 field>
   </Child2>
</Parent>

我尝试将 PARENT-FIELDS-AFTER 语句与 PARENT > Child1 一起使用,但 Parent 字段在 Child2 之后出现 table。正确的语法是什么?

您要查找的是数据集中 PARENT-ID-RELATIONPARENT-FIELDS-AFTERPARENT-FIELDS-BEFORE 属性。

如果您有更复杂的 temp-tables,您可能需要在定义中处理更多字段。但这是一个基本的工作示例。

DEFINE TEMP-TABLE ttParent NO-UNDO SERIALIZE-NAME "Parent"
    FIELD parentField AS CHARACTER.

DEFINE TEMP-TABLE ttChild1 NO-UNDO SERIALIZE-NAME "Child1"
    FIELD id AS RECID SERIALIZE-HIDDEN
    FIELD childField AS CHARACTER .
    
DEFINE TEMP-TABLE ttChild2 NO-UNDO SERIALIZE-NAME "Child2"
    FIELD id AS RECID SERIALIZE-HIDDEN
    FIELD childField AS CHARACTER .    
    
DEFINE DATASET dsDataset SERIALIZE-HIDDEN FOR ttParent, ttChild1, ttChild2  
    PARENT-ID-RELATION pir1 FOR ttPArent, ttChild1 PARENT-ID-FIELD ttChild1.id
        PARENT-FIELDS-AFTER(ttParent.parentField)
    PARENT-ID-RELATION pir2 FOR ttPArent, ttChild2 PARENT-ID-FIELD ttChild2.id.
    
CREATE ttParent.
ASSIGN ttParent.parentField = "AAA".

CREATE ttChild1.
ASSIGN ttChild1.id = RECID(ttParent)
       ttChild1.childField = "BBB".  
       
CREATE ttChild2.
ASSIGN ttChild2.id = RECID(ttParent)
       ttChild2.childField = "CCC". 
       
DATASET dsDataset:WRITE-XML("file", "c:/temp/file.xml", TRUE, ?,?,?,?,?,TRUE)       

File.xml:

<Parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Child1>
<childField>BBB</childField>
</Child1>
<parentField>AAA</parentField>
<Child2>
<childField>CCC</childField>
</Child2>
</Parent>