2017-11-07 7 views
1

私は、テンポラリテーブルだけを含むデータセットを作成したいと思います。細かい進捗状況でデータセットに動的な関係を追加する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> 

答えて

2

リレーションシップは無効に設定されています。 ADD-RELATIONステートメントの3番目の論理パラメーターは「非アクティブ」です。 falseの場合、関係は作成されますが、アクティブ化されません。このパラメータをtrueに変更すると、期待される出力が得られます。ここで

ADD-RELATIONの進捗状況のドキュメントです:

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

関連する問題