You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Progress 12使用WRITE-XML生成XML时如何调整Othr节点至PstlAdr后

问题背景

在Progress 12环境中通过临时表搭配WRITE-XML语句生成XML文件,目标输出的XML结构如下:

<CdtrAgt>
   <FinInstrnId>
      <ClrSysMmbId>
         <MmbId>xxx</MmbId>
      </ClrSysMmbId>
      <Nm>yyy</Nm>
      <PstlAdr>
         <Ctry>US</Ctry>
      </PstlAdr>
      <Othr>
         <Id>zzz</Id>
      </Othr>
   </FinInstrnId>
</CdtrAgt>

目前已经通过PARENT-ID-RELATION配置实现了<Nm>节点排在<PstlAdr>节点之前的效果,但无法将<Othr>节点移动到<PstlAdr>节点之后。
已生效的节点排序配置片段:

PARENT-ID-RELATION FinCR1 FOR FinInstnId-CR, ClrSysMmbId-CR
        PARENT-ID-FIELD FinInstn-Id
        PARENT-FIELDS-AFTER (Nm) 
PARENT-ID-RELATION FinCR2 FOR FinInstnId-CR, PstlAdr-CR
        PARENT-ID-FIELD FinInstn-Id2
问题根因

当前代码中Othr-CI表和FinInstnId-CR表使用的是普通DATA-RELATION嵌套关联,不是PARENT-ID-RELATION。Progress ABL数据集输出XML的节点顺序遵循固定规则:

  1. 先输出父表自身标记为XML节点的字段,按表定义顺序排列
  2. 再按PARENT-ID-RELATION的定义顺序,输出对应子节点,可通过PARENT-FIELDS-AFTER指定子节点插在哪个父字段之后
  3. 最后输出普通DATA-RELATION ... NESTED关联的子节点,按关联定义顺序排列
    因此普通关联的<Othr>节点无法插入到两个PARENT-ID关联的子节点之间,位置不符合预期。
解决方案
  1. 删除原有FinInstnId-CR和Othr-CI之间的普通DATA-RELATION Cred-10关联
  2. 新增第三条PARENT-ID-RELATION关联FinInstnId-CR和Othr-CI,直接放在FinCR2关联之后即可,无需额外指定PARENT-FIELDS-AFTER,<Othr>节点会自动排在<PstlAdr>节点之后
  3. 写入数据时给Othr-CI表的FinInstn-Id3字段赋值为对应FinInstnId-CR记录的RECID,和另外两个PARENT-ID关联的赋值逻辑保持一致,保证父子关联正常匹配
修正后的数据集定义代码片段
DEFINE DATASET Document NAMESPACE-URI "urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" 
FOR CstmrCdtTrfInitn, CdtTrfTxInf, PmtInf, PmtTpInf, CdtrAgt, FinInstnId-CR, ClrSysMmbId-CR, PstlAdr-CR, Othr-CI

        DATA-RELATION Pymt-1 FOR CstmrCdtTrfInitn, PmtInf
                                 RELATION-FIELDS(MsgId, MsgId)
                                 NESTED

        DATA-RELATION Cred-1 FOR PmtInf, CdtTrfTxInf
                                 RELATION-FIELDS(MsgId, MsgId,
                                                 PmtInfId, PmtInfId)
                                 NESTED
        DATA-RELATION Cred-5 FOR CdtTrfTxInf, CdtrAgt
                                 RELATION-FIELDS(MsgId, MsgId,
                                                 PmtInfId, PmtInfId,
                                                 SeqNum, SeqNum)
                                 NESTED

        DATA-RELATION Cred-6 FOR CdtrAgt, FinInstnId-CR
                                 RELATION-FIELDS(MsgId, MsgId,
                                                 PmtInfId, PmtInfId,
                                                 SeqNum, SeqNum)
                                 NESTED

        /* FinInstnId下所有子节点统一用PARENT-ID-RELATION管理,按定义顺序控制输出位置 */
        PARENT-ID-RELATION FinCR1 FOR FinInstnId-CR, ClrSysMmbId-CR
                PARENT-ID-FIELD FinInstn-Id
                PARENT-FIELDS-AFTER (Nm) 

        PARENT-ID-RELATION FinCR2 FOR FinInstnId-CR, PstlAdr-CR
                PARENT-ID-FIELD FinInstn-Id2

        PARENT-ID-RELATION FinCR3 FOR FinInstnId-CR, Othr-CI
                PARENT-ID-FIELD FinInstn-Id3.

内容的提问来源于stack exchange,提问作者JSS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 11:36:16