Help us understand the problem. What is going on with this article?

OutSystemsでハッシュテーブルを利用する

OutSystemsでハッシュテーブルを利用する方法を説明します。

ハッシュテーブルは、キーと値の組み合わせを格納していくデータ構造です。
Listだと、整数のインデックスに対してList変数ごとに決まった値を格納できます。
これに対して、ハッシュテーブルでは、Text型のインデックスに対して、Object型の値を格納します。

OutSystemsの標準Data Typeにはこれを実現するものがないため、Forgeコンポーネントを利用するか、自分でExtensionを書くことになります。

ここでは、Advanced HashtableというForgeのコンポーネントを利用します。

サンプル

Forgeコンポーネント:https://www.outsystems.com/forge/Component_Overview.aspx?ProjectId=7064
AdvancedHashtable Screenを参照してください。

環境

Personal Environment(Version 11.0.606.0)
Service Studio(Version 11.6.25)
Advanced Hashtable(Version 3.0.0)

基本的な使い方

まずは、実装例。
qAdvancedHashtable1.PNG

  • HT_Init
    • ハッシュテーブルを用意します
    • 後続のAdvanced HashtableのActionはこのActionのOutputをパラメータに渡します
  • HT_Set
    • ハッシュテーブルにデータを1つ設定します
    • 同じキーが登録済みであれば、その値を上書き
    • 未登録であれば、キーと値のセットを追加します
    • パラメータ:ハッシュテーブル、キー(Text型)、値(Object型)
    • Object型にキャストする際には、組み込みのFunction ToObject()を使用してください
  • HT_GetText
    • ハッシュテーブルからデータを1つ取得します
    • Get〇〇というActionがいくつかあります
      • 〇〇にはOutSystemsの基本型が入り、取り出される値は、その型にキャストされて出てきます
    • データはキーで指定します
    • キーが未登録だと、値は各方の初期値を返すようです(C#のソースを見る限り)
    • 指定型にキャストできない場合、例外がスローされるようです

Object型について注意

ドキュメントに記述が見つけられないのですが、ScreenのObject型Variableには、Screen Actionからアクセスできないようです。よって、PreparationでInitして、Screen Actionでその変数を使いまわしていくということができません。

フォーラムでは、記述がありました:https://www.outsystems.com/forums/discussion/33090/not-possible-to-use-a-variable-of-type-object/

また、一度Object型にしてしまった変数は、再び元の型にキャストし直す方法が組み込みFunctionでは提供されていません。よってHT_GetObjectを使うときは注意が必要です。

キーや値を列挙する

  • HT_Keys
    • ハッシュテーブル内の全キーをListとして返します
  • HT_Values
    • ハッシュテーブル内の全値をListとして返します
    • ただし、Text型にキャストできるもののみ
  • HT_Entries
    • ハッシュテーブル内の全データを、キーと値をAttributeに持つStructureのListとして返します
    • これも、値をText型にキャストできるもののみ

例えば、HT_KeysでキーのListを取り、ListSortで並べ替え、その結果をループしてHT_GetTextなどにかければ、キーの昇順などでリストを取得できます。

qAdvancedHashtable2.PNG

その他の操作

  • HT_Count
    • ハッシュテーブル内のデータの個数(キーの個数)を返します
  • HT_Clear
    • ハッシュテーブルを空(データの個数0)にします
  • HT_Exists
    • ハッシュテーブル内に指定のキーがすでにあるかをBooleanで返します

例えば、1エントリ追加した状態で以下のようにActionを呼ぶと、最初のHT_Countは1、2回めのHT_Count2は0を返します。

qAdvancedHashtable3.PNG

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした