LoginSignup
0
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-02-09

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

0
1
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
1