0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ODC]再帰的なデータ構造を作れない問題

Posted at

OutSystemsのStructureは再起的なデータ構造にできない。
つまり、要素として自分自身を持つことができない。
この点について確認し、対策を検討する。

環境情報

ODC Studio(Version 1.4.7 on Mac)

Structureの要素として自分自身を持つとエラーになりPublishできない

ODC Studio上で試しに再帰的なStructureを作ってみたところ、エラーになりPublishできない。
(ChildというAttributeが、自分自身のStructure RecursiveStructureをData Typeとしている)
image.png

表示されるエラーメッセージは以下の通り「Attributeが入れ子となる再帰的StructureをData Typeとして設定している」というものなので、やはり再帰的なStructureは定義できない。

Structure名.Attribute名 defines a nested recursive Structure data type definition.

回避策1: ツリー構造を平らにする

本来はツリー構造として表現したいデータのセットを、平たいデータ構造に展開して保持する。
具体的には、Attributeとして親ノードへのポインタや自分のノードの深さを持つようにする。

例:Forgeにある、ツリービューを実現するGtreeはこの方式をとっている。Node Structureがツリービューの各ノードを表しているが、各Nodeが自分と親NodeのIdを持つ構造。
image.png

 "nested recursive Structure data type definition"で紹介されている方法。
 

回避策2: (深さが有限の場合) レベル別にStructureを定義する

深さが有限の場合は、深さごとに別のStructureとして定義する方法もある。
三階層程度であればこの方法が楽そう。

例:最大三階層の場合。以下の様に、ルートレベルのStructure「RecursiveLevel1」のChildren Attributeに第二階層用のStructure「RecursiveLevel2」のListを持たせる。
更に第二階層StructureのChildren Attributeには第三階層用のStructure「RecursiveLevel3]
のListを持たせる。
image.png

回避策3: (JavaScriptだけに閉じる場合) Javascript要素で対応

階層データがJavaScript内に閉じるのであれば、JavaScriptのコードで作成してしまえば良い。また、サーバサイドで必要であったとしても、階層構造のJSONで十分なら、JavaScriptでJSON化し、結果のText型変数を引き渡せば良い。

関連する話題

Entityは再帰的な構造にできる。
自分自身のIdentifierをData TypeとするAttributeを持てるということ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?