Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@jyunji_watanabe

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

More than 1 year has passed since last update.

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

1
Help us understand the problem. What is going on with this article?
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
jyunji_watanabe
Low-Code開発プラットフォームのOutSystems専門技術者/OutSystems MVP。 技術支援、アーキテクト、教育など担当。 それ以前は、.NET/JavaScriptで業務アプリケーション開発。 Expert Web Developer/Associate Tech Lead/Associate Mobile Developer 新技術、調査/検証結果を記録しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?