ユースケース開発Workshopコア表示ウィジェットオブジェクトテーブル

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

オブジェクトテーブル

オブジェクトテーブルウィジェットは、オブジェクトデータをテーブル形式で表示するために使用します。オブジェクトテーブルウィジェットを設定するモジュール作成者は、次の機能を使用できます。

  • 1 個または複数のオブジェクトタイプのデータを表示する。
  • 時系列プロパティを使用する時系列列や、関数によってその場で生成される派生列など、表示する列を選択する。
  • 1 列または複数列で並べ替える。
  • 列のサイズと行の高さを設定する。
  • Ontology Manager で設定された条件付き書式設定と数値の書式設定オプションを表示する。
  • テーブル内で単一選択または複数選択を許可する。
  • インライン編集により、テーブル内でセルレベルのライトバックを有効にする。
  • テーブル内の行選択時に Workshop イベントをトリガーする。
  • 右クリックメニューにカスタムの行の操作を追加する。

以下のスクリーンショットは、Flight Alert データを表示するように設定されたオブジェクトテーブルの例です。

object_table_reference_1

設定オプション

オブジェクトテーブルウィジェットの主な設定オプションは次のとおりです。

  • 入力データ

    • **オブジェクトセット:**オブジェクトテーブルウィジェットへの入力変数であり、オブジェクトテーブル内に表示するデータを決定します。モジュール作成者は、新しいオブジェクトセット変数を定義するか、この Workshop モジュールの別の場所で作成された既存のオブジェクトセット変数を再利用できます。
  • 列の設定

    • 列:このセクションでは、オブジェクトテーブル内に表示する列を決定します。初期オブジェクトセットにデータが入力されると、この設定オプションが展開され、そのオブジェクトセット内のプロパティタイプの詳細が表示されます。また、特殊な列の種類を使用すると、モジュール作成者は、リンクされたオブジェクト、パラメーター化された URL リンク、時系列データ、関数によってその場で生成される派生列を表示できます。表示モードのユーザーも、表示される列を設定できます。列ヘッダーの横にある矢印から列を設定するを選択すると、閲覧者はオブジェクトテーブルに表示する列とその順序を選択できます。時系列データの詳細については、以下の時系列プロパティセクションを、派生列の設定方法の詳細については、関数ベースの列セクションを参照してください。

      表示される列名はテキスト項目で、追加時にはオブジェクトタイプのプロパティ名がデフォルト値として設定されます。 その後、オントロジーでオブジェクトタイプのプロパティ名を更新しても、オブジェクトテーブルに表示される列名は自動的には変更されません。

    • **派生プロパティ:**モジュールレベルで設定された派生プロパティを、オブジェクトテーブルの列として表示できます。これらのプロパティは、リンクされたオブジェクトの値や集計に基づいて実行時に計算されます。設定の詳細と対応するウィジェットについては、派生プロパティのドキュメントを参照してください。

    • **未対応のプロパティタイプ:**サイズの大きい一部のプロパティ(たとえば、Geoshape やベクトル)は、パフォーマンスを維持するため、デフォルトでは読み込まれません。閲覧モードでは、セルの「...」オーバーフローメニューを選択して、未対応のプロパティの値を必要に応じて読み込むことができます。ウィジェットエディターでは、未対応のプロパティに警告アイコンとツールチップが表示され、パフォーマンスに影響する可能性があることが示されます。

    • **インライン編集を有効にする:**この切り替えを有効にすると、オブジェクトテーブル内のセルレベルの編集を設定できます。この詳細機能の設定方法については、以下のインライン編集(セルレベルのライトバック)セクションを参照してください。

    • **デフォルトの並べ替え:**この設定では、1 個または複数のデフォルトの並べ替え条件をテーブルに適用できます。モジュール作成者は、テーブルに表示されるプロパティタイプと、表示されない非表示のプロパティタイプのどちらでも並べ替えることができます。並べ替え条件を適用しない場合、データは並べ替えられません。必要に応じて並べ替え条件を指定することをお勧めします。

    • **変数に基づく列の表示設定と並び順:**有効にすると、表示する列のAPI名を含む文字列配列変数を使用して、表示する列を制御できます。この配列変数は、列が表示される順序も制御します。文字列配列が空の場合、設定されたすべての列がテーブルに表示されます。

    • 列の設定を非表示にする:有効にすると、閲覧モードでテーブルのヘッダーメニューに表示される列を設定するの選択肢を非表示にします。

  • 右クリックメニュー

    • **CSV へのエクスポートを有効にする:**この切り替えを有効にすると、行の右クリックメニューからオブジェクトテーブルのデータを CSV 形式にエクスポートできます。この機能は、関数ベースの列とリンクされたオブジェクトのプロパティのエクスポートに対応しており、一度に最大 10,000 行をエクスポートできます。
    • **Excel へのエクスポートを有効にする:**この切り替えを有効にすると、行の右クリックメニューからオブジェクトテーブルのデータを Excel 形式にエクスポートできます。この機能では、一度に最大 200,000 行をエクスポートできます。
      • **エクスポートでカスタム列名を使用する:**有効にすると、エクスポートされた Excel ファイルでは、設定されたオブジェクトテーブルに表示されるユーザー定義の列名が使用されます。無効にすると、エクスポートされたファイルでは、元のプロパティのAPI名が列ヘッダーとして使用されます。
    • **右クリックメニューのカスタマイズ:**このオプションにより、モジュール作成者は行の右クリックメニューにカスタムアクションを設定できます。この機能の設定方法については、以下のカスタム右クリックメニューセクションを参照してください。
  • 選択

    • **アクティブなオブジェクト:**オブジェクトテーブルの 2 個の出力変数のうちの 1 個目で、現在アクティブなオブジェクト、つまりハイライトされたオブジェクトのオブジェクトセットを出力します。このオブジェクトセットは、現在のモジュール内の下流ウィジェットで使用できます。
    • アクティブなオブジェクトの自動的な選択を無効にする:デフォルトでは、読み込み時にテーブルの最初の行がアクティブなオブジェクトとして自動的に設定されます。この設定を無効にすると、自動設定が行われず、読み込み時のアクティブなオブジェクトは空になります。自動選択は通常、ウィジェットが表示されたときに行われます。たとえば、オブジェクトテーブルが折りたたまれたセクション内にある場合、セクションが展開されるまで自動選択は行われません。ウィジェットで即時マウントまたはアンマウントしない表示最適化を使用している場合、ウィジェットが非表示の間に自動選択が行われることがあります。
    • **複数選択を有効にする:**この切り替えを有効にすると、テーブル内の複数のオブジェクトにチェックを入れる、または選択し、選択されたオブジェクトのオブジェクトセット変数を介して出力できます。
    • **選択されたオブジェクト:**オブジェクトテーブルの 2 個の出力変数のうちの 2 個目で、現在チェックが入っている、または選択されているオブジェクトのオブジェクトセットを出力します。このオブジェクトセットは、現在のモジュール内の下流ウィジェットで使用できます。注:この出力変数が使用され、データが入力されるのは、複数選択を有効にするの切り替えが true に設定されている場合のみです。
    • **アクティブなオブジェクトの選択時:**このオプションにより、モジュール作成者は、テーブルで行を選択したときにトリガーされる Workshop イベントを設定できます(たとえば、より詳細な Object View を含むドロワーを表示するなど)。
  • 表示と書式設定

    オブジェクトに画像の URL を格納するプロパティがある場合、タイプクラス hubble:icon を追加すると、オブジェクトタイプの設定時に選択したアイコンの代わりに、その画像を表示できます。この機能を使用すると、データとともにピクトグラムや画像を表示できます。

    • **各行に表示するテキストの行数(高さ):**この数値は、テーブルの各行の高さを制御します。
    • **値のラッピングを有効にする:**有効にすると、セル内のテキストコンテンツを折り返して表示できます。このオプションは、構造体プロパティと構造体プロパティの配列の折り返しに対応しています。コンテンツが長すぎてすべてを表示できない場合、構造体の値は省略記号で切り詰められ、カーソルを合わせるとツールチップに完全な値が表示されます。
    • **固定列の数:**この数値は、テーブルの左側に固定される列の数を決定します。固定列は、ユーザーが右にスクロールしても表示されたままになります。
    • **空状態のメッセージ:**ウィジェットの元となるオブジェクトセットが空の場合に、ウィジェットに表示する内容を設定します。デフォルトでは、汎用的なテーブルアイコンと「オブジェクトが見つかりません」というメッセージが表示されます。表示アイコンとメッセージをカスタマイズするには、カスタムを選択します。
    • **カスタムの「値なし」表示:**有効にすると、セルに値がない場合にテーブルに表示する内容を上書きします。デフォルトでは「値なし」と表示されます。
    • **複数のオブジェクトタイプをまとめる:**この設定は、複数のオブジェクトタイプを表示するテーブルにのみ影響します。無効にすると、各オブジェクトタイプがそれぞれのタブに表示されます。有効にすると、すべてのオブジェクトタイプが 1 個のテーブルに表示され、オブジェクトタイプ間で表示名と ID の両方が共通するプロパティタイプが 1 列にまとめられます。このオプションは、インライン編集を有効にするが true に設定されている場合は利用できません。
    • **列幅をテーブルの横幅に合わせる:**有効にすると、テーブルの現在の幅をいっぱいに広げるように、列のサイズが自動的に変更されます。
    • **縮小されたヘッダーを有効にする:**有効にすると、テーブルヘッダーが 50 ピクセルから 30 ピクセルに縮小されます。
    • **条件付き書式設定でセル全体に色を付ける:**有効にすると、条件付き書式設定によってセル全体に色が付けられます。 注:通常のプロパティタイプの条件付き書式設定は Ontology Manager で設定し、関数ベースのプロパティの条件付き書式設定はオブジェクトテーブルウィジェットの設定パネル内で設定します。
    • **セキュリティマーキングを表示する:**有効にすると、プロパティのセキュリティマーキングがコンパクトな灰色のピルとして表示され、選択時に展開されたウィンドウ表示が開きます。
  • シナリオ

    • **データの読み込み元のシナリオ:**オブジェクトテーブルのデータを読み込むシナリオを選択します。この入力は、オブジェクトテーブルに表示されるオブジェクトと、それぞれの順序にも影響します。
    • **シナリオとの比較:**この切り替えを有効にして、データの比較元となるシナリオ配列変数を選択します。変更がある列に値を左右配置で表示することで、テーブル内のデータと、配列内のシナリオの値を比較します。
    • 詳細については、シナリオのドキュメントを参照してください。

ユーザーの列設定を保存する

ユーザーの列設定を保存するには、次の手順で、状態の保存に対応した文字列配列変数を使用します。

  1. 状態の保存が有効になっていることを確認します。
  2. 新しい静的な文字列配列変数を使用して、変数に基づく列の表示設定と並び順を有効にします(配列変数は空でもかまいません)。これにより、表示される列とその順序が保存されます。
  3. 設定パネルで文字列配列変数に外部IDを追加し、状態の保存で使用できるように有効化されていることを確認します。

関数ベースの列

このセクションのチュートリアルでは、Flight Alert オブジェクトタイプを参照していますが、ユーザーの Foundry 環境では利用できない場合があります。このチュートリアルを参考に、Foundry インスタンス内の類似のオブジェクトタイプを使用して手順を実行してください。関数についての詳細は、専用の関数のドキュメントを参照してください。

概要

1 列または複数列の関数ベースの列を返す関数を作成するには、次の仕様を満たす必要があります。

  1. 関数の入力パラメーターには、ObjectSet<ObjectType> パラメーターを含める必要があります(必要に応じて、他の入力パラメーターを含めることもできます)。この ObjectSet<ObjectType> パラメーターにより、テーブルに表示されるオブジェクトを関数に渡し、目的の派生列を生成できます。ここでは ObjectType[] パラメーターも使用できますが、この選択肢はパフォーマンスが低いため、お勧めしません。

  2. 関数の戻り値の型は、オブジェクトタイプから値またはカスタム型へのマップである必要があります。これにより、関数はオブジェクトから値、または 1 個以上のフィールドを含むカスタム型へのマッピングを返すことができます。

    • TypeScript v1 では、FunctionsMap<ObjectType, CustomType> を使用します。
    • TypeScript v2 では、Record<ObjectSpecifier<ObjectType>, CustomType> を使用します。
    • Python では、dict[ObjectType, CustomType] を使用します。

    カスタム型について詳しくはこちら。

上記の条件を満たす関数を設定して公開すると、オブジェクトテーブルの設定内で、関数ベースのプロパティ列を設定できるようになります。より詳細なチュートリアルについては、以下を参照してください。

関数ベースのプロパティの機能

オブジェクトテーブルウィジェットは、関数によってその場で計算される関数ベースのプロパティの表示に対応しています。これにより、モジュール作成者は柔軟に列を表示でき、たとえば次のことが可能になります。

  • 他の 2 個以上のプロパティ間の合計、差、またはその他の数学的な演算を計算する。
  • Workshop モジュールの別の場所でのデータ入力に基づいて更新される統計モデルの出力を表示する。
  • リンクされたオブジェクトのプロパティを表示する
  • Workshop モジュールの別の場所でのユーザー入力に基づいて、表示内容を変更する。

単一の関数ベースのプロパティを設定する

この例では、関数ベースのプロパティを使用して、Flight Alert チケットの優先度をユーザーが確認し、扱えるようにします。ここでの目標は、Time of Delay(時間単位)という既存のプロパティを調べ、このプロパティから Urgency という新しい関数ベースの列を生成することです。派生列 Urgency では、長い遅延(4 時間を超える遅延)を緊急度「High」、中程度の遅延(2~4 時間)を緊急度「Medium」、短い遅延(2 時間未満)を緊急度「Low」として指定します。この派生プロパティ Urgency により、ユーザーはオブジェクトテーブルをすばやく確認し、どのアラートに最初に対応すべきかを判断しやすくなります。

この関数ベースのプロパティを設定するには、まず、期待される入力(たとえば、Flight Alert オブジェクトのオブジェクトセット)を受け取り、オブジェクトテーブルが関数ベースのプロパティに要求する、期待されるマップ出力(たとえば、Flight Alert オブジェクトから緊急度の文字列へのマップ)を返す関数を設定します。この例では、以下のように、緊急度を計算するロジックを関数自体にハードコードしています。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 import { Function, FunctionsMap } from "@foundry/functions-api"; import { FlightAlertWorkshopTutorial, ObjectSet } from "@foundry/ontology-api"; export class MyFunctions { @Function() public flightAlertCalculateUrgency(flightAlerts: ObjectSet<FlightAlertWorkshopTutorial>): FunctionsMap<FlightAlertWorkshopTutorial, string>{ const map = new FunctionsMap<FlightAlertWorkshopTutorial, string>(); flightAlerts.all().forEach(flightAlert => { var hoursDelayed = flightAlert.timeOfDelayHours if (hoursDelayed! > 4) { map.set(flightAlert, "High") } else if (hoursDelayed! > 2) { map.set(flightAlert, "Medium") } else { map.set(flightAlert, "Low") } }); return map; } }
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import { ObjectSet, ObjectSpecifier } from "@osdk/client"; import { FlightAlertWorkshopTutorial } from "@ontology/sdk"; async function flightAlertCalculateUrgency( flightAlerts: ObjectSet<FlightAlertWorkshopTutorial> ): Promise<Record<ObjectSpecifier<FlightAlertWorkshopTutorial>, string>> { const map: Record<ObjectSpecifier<FlightAlertWorkshopTutorial>, string> = {}; for await(const flightAlert of flightAlerts.asyncIter({"$select": ["timeOfDelayHours"]})) { const hoursDelayed = flightAlert.timeOfDelayHours; if (hoursDelayed! > 4) { map[flightAlert.$objectSpecifier] = "High"; } else if (hoursDelayed! > 2) { map[flightAlert.$objectSpecifier] = "Medium"; } else { map[flightAlert.$objectSpecifier] = "Low"; } } return map; } export default flightAlertCalculateUrgency;
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 from functions.api import function from ontology_sdk.ontology.objects import FlightAlertWorkshopTutorial from ontology_sdk.ontology.object_sets import FlightAlertWorkshopTutorialObjectSet @function def flight_alert_calculate_urgency( flight_alerts: FlightAlertWorkshopTutorialObjectSet, ) -> dict[FlightAlertWorkshopTutorial, str]: result = {} for flight_alert in flight_alerts.iterate(): hours_delayed = flight_alert.time_of_delay_hours if hours_delayed is not None and hours_delayed > 4: result[flight_alert] = "High" elif hours_delayed is not None and hours_delayed > 2: result[flight_alert] = "Medium" else: result[flight_alert] = "Low" return result

この関数を公開したら、この Workshop モジュールに派生プロパティ Urgency を表示するように設定します。まず、Workshop モジュール内のオブジェクトテーブルの設定パネルで、列を追加ボタンと、関数ベースのプロパティを追加する選択肢を選択します。

object_table_reference_2

列リストに表示される関数ベースのプロパティの選択肢で、「fx」関数アイコンを選択し、目的の関数を選択します。この例では、flightAlertCalculateUrgency 関数を選択します。

object_table_reference_3

次に、関数のバージョンを確認してから、関数に必要な入力を設定します。実行時の入力を使用するを選択すると、オブジェクトセット全体ではなく、オブジェクトテーブルに現在表示されているオブジェクトのみを派生列の関数に渡すため、パフォーマンスが向上します。もう一方の変数入力を使用するでは、オブジェクトテーブルの元となるオブジェクトセット変数など、オブジェクトセット変数全体を渡しますが、パフォーマンスが低下する可能性があります。

object_table_reference_4

最後に、関数ベースのプロパティ列のセルを選択して、この列の名前を「Urgency」などのよりわかりやすい名前に変更します。

object_table_reference_5

最終的に、以下のオブジェクトテーブルが作成されます。新しい派生列 Urgency がその場で計算され、この有用な追加情報がユーザーに表示されます。

object_table_reference_6

複数の関数ベースのプロパティを設定する

次に、カスタムの戻り値の型を使用して、複数の関数ベースのプロパティを生成する単一の関数を作成する、より詳細な例を説明します。カスタム型について詳しくはこちら。 単一の関数を使用して複数の関数ベースのプロパティを返すことには、パフォーマンスの向上や、関連する派生プロパティのコードをより明確に整理できるなど、いくつかの利点があります。

この例では、ObjectSet<FlightAlerts> を受け取り、Departure Airport リンクをたどってリンクされた Airport オブジェクトを取得し、そのリンクされた Airport オブジェクトから 3 個のプロパティを返す関数を使用します。これにより、オブジェクトテーブルに表示されるデータに、リンクされたオブジェクトタイプの関連情報を追加できます。

この目標を達成するには、まず、この関数内で使用するカスタム型を定義します。たとえば、次のようになります。

Copied!
1 2 3 4 5 interface LinkedDepartureAirportProperties { airport: string; city: string; country: string; }
Copied!
1 2 3 4 5 interface LinkedDepartureAirportProperties { airport: string; city: string; country: string; }
Copied!
1 2 3 4 5 6 7 from dataclasses import dataclass @dataclass class LinkedDepartureAirportProperties: airport: str city: str country: str

次に、このカスタム型を使用して、Airport、City、Country の 3 列の関数ベースの列を返す関数を記述します。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import { Function, FunctionsMap } from "@foundry/functions-api"; import { AirportObject, FlightAlertWorkshopTutorial, ObjectSet } from "@foundry/ontology-api"; export class MyFunctions { @Function() public getColumnsFromLinkedDepartureAirport(flightAlerts: ObjectSet<FlightAlertWorkshopTutorial>): FunctionsMap<FlightAlertWorkshopTutorial, LinkedDepartureAirportProperties> { // リンクされた空港をすべて取得し、iata をキーとして辞書に保存します const iataToAirport: { [iata: string]: AirportObject } = {}; flightAlerts.searchAroundDepartureAirport().all().forEach(airport => { iataToAirport[airport.iata!] = airport; }); const map = new FunctionsMap<FlightAlertWorkshopTutorial, LinkedDepartureAirportProperties>(); flightAlerts.all().forEach(alert => { // このアラートに対応する空港を取得します const airport = iataToAirport[alert.departureAirportCode!]; // 空港が見つからない場合はスキップします if (!airport) { return; } map.set(alert, { airport: airport.airport!, city: airport.city!, country: airport.country!, }); }); return map; } }
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 import { ObjectSet, ObjectSpecifier, Osdk } from "@osdk/client"; import { AirportObject, FlightAlertWorkshopTutorial } from "@ontology/sdk"; async function getColumnsFromLinkedDepartureAirport( flightAlerts: ObjectSet<FlightAlertWorkshopTutorial> ): Promise<Record<ObjectSpecifier<FlightAlertWorkshopTutorial>, LinkedDepartureAirportProperties>> { // リンクされた空港をすべて取得し、iata をキーとして辞書に保存します const iataToAirport: { [iata: string]: Osdk.Instance<AirportObject, never, "iata" | "airport" | "city" | "country"> } = {}; for await(const airport of flightAlerts.pivotTo("departureAirport").asyncIter({"$select": ["iata", "airport", "city", "country"]})) { iataToAirport[airport.iata!] = airport; } const map: Record<ObjectSpecifier<FlightAlertWorkshopTutorial>, LinkedDepartureAirportProperties> = {}; for await(const alert of flightAlerts.asyncIter({"$select": ["departureAirportCode"]})) { // このアラートに対応する空港を取得します const airport = iataToAirport[alert.departureAirportCode!]; // 空港が見つからない場合はスキップします if (!airport) { continue; } map[alert.$objectSpecifier] = { airport: airport.airport!, city: airport.city!, country: airport.country!, }; } return map; } export default getColumnsFromLinkedDepartureAirport;
Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 from functions.api import function from ontology_sdk.ontology.objects import AirportObject, FlightAlertWorkshopTutorial from ontology_sdk.ontology.object_sets import FlightAlertWorkshopTutorialObjectSet @function def get_columns_from_linked_departure_airport( flight_alerts: FlightAlertWorkshopTutorialObjectSet, ) -> dict[FlightAlertWorkshopTutorial, LinkedDepartureAirportProperties]: # リンクされた空港をすべて取得し、iata をキーとして辞書に保存します iata_to_airport: dict[str, AirportObject] = {} for airport in flight_alerts.search_around_departure_airport().iterate(): iata_to_airport[airport.iata] = airport result: dict[FlightAlertWorkshopTutorial, LinkedDepartureAirportProperties] = {} for alert in flight_alerts.iterate(): # このアラートに対応する空港を取得します airport = iata_to_airport.get(alert.departure_airport_code) # 空港が見つからない場合はスキップします if airport is None: continue result[alert] = LinkedDepartureAirportProperties( airport=airport.airport, city=airport.city, country=airport.country, ) return result

上記の関数を公開すると、Workshop 内で派生列を追加するために使用できます。上のセクションと同様に、Flight Alert オブジェクトを含むオブジェクトテーブルウィジェットに、新しい Function-backed property 列を追加します。

列リストに表示される新しい列で、fx アイコンを選択し、派生列の計算に使用する関数を選択します。この例では、このチュートリアルで先ほど定義した getColumnsFromLinkedDepartureAirport 関数を選択します。

derived_columns_configuration_1

次に、選択した関数の入力パラメーターを設定します。この例では、関数は flightAlerts という Flight Alert オブジェクトのオブジェクトセットを、単一の入力パラメーターとして受け取ります。実行時の入力を使用するを選択すると、オブジェクトテーブルに現在表示されているオブジェクトのみを関数に渡すため、パフォーマンスが向上します。もう一方の変数入力を使用するでは、オブジェクトテーブルの元となる入力オブジェクトセット変数など、オブジェクトセット変数全体を渡しますが、パフォーマンスが低下する可能性があります。

derived_columns_configuration_2

上記の手順が完了すると、関数が正常に実行され、**オブジェクトテーブル:**に期待される 3 列、Departure Airport、Departure City、Departure Country が表示されます。このまま完了することも、列の表示名や順序を編集して、アプリケーション内での列の見せ方を改善することもできます。

derived_columns_configuration_3

関数ベースのプロパティでの並べ替え

ウィジェット設定パネルの列の設定セクションに関数ベースの列を追加した後、その下にあるデフォルトの並べ替えセクションから関数ベースの列を選択して、列の並べ替え方法を設定します。Workshop が関数ベースの列で並べ替える場合、テーブルのすべての行について関数の実行が完了するまで待機してから、データを表示します。

制限事項

  • 関数ベースの列の並べ替えと、ベースプロパティの並べ替えを組み合わせることはできません。
  • テーブルに 10,000 個を超えるオブジェクトが含まれる場合、エンドユーザーは関数ベースの列を並べ替えることができません。
  • 10,000 個を超えるオブジェクトを含むテーブルで、関数ベースの列をデフォルトの並べ替え条件として使用すると、テーブルに読み込まれるオブジェクトの各ページのみが並べ替えられ、警告が表示されます。
  • 並べ替えに使用できる関数ベースの列は、列の設定セクションに含まれている列のみです。非表示の関数ベースの列で並べ替えるには、変数に基づく列の表示設定と並び順を有効にし、表示したいすべての列のAPI名を含み、並べ替えに使用する関数ベースの列は含まない文字列配列変数を作成します。

時系列プロパティ

時系列プロパティは、時系列変換によって生成されたデータを含め、オブジェクトテーブル内で通常のプロパティとともに表示できます。時系列プロパティは、タイムスタンプ付きの値の履歴を格納するオブジェクトプロパティです。詳細については、Workshop の時系列プロパティを参照してください。

以下の例では、Country オブジェクトに、国名を格納する一般的な文字列プロパティ Name と、その国で観測された COVID-19 の新規感染者数の日次履歴を格納する時系列プロパティ New Cases があります。オブジェクトテーブルでは、左側の最初の 2 列にこれらの 2 個のプロパティを表示し、それに加えて、時系列変換を使用して New Cases プロパティから派生した 3 個の時系列、Case Acceleration、Weekly Cases、Total Cases を表示しています。各時系列列では、左側に時系列の最新の観測を表示し、右側に時系列の履歴を可視化するスパークラインを表示します。

time_dependent_properties_object_table

オブジェクトテーブルで時系列プロパティ列を設定する方法を説明するため、Weekly Cases 列の設定手順を紹介します。画面右側のパネルは、Weekly Cases 列の設定の上部と下部です。設定と結果を全体的に確認できるように、これらを列自体と同じ画面にまとめて配置しています。

weekly_cases_example

時系列変換

まず、時系列変換を使用して、COVID-19 の週間感染者数の時系列を生成する必要があります。時系列変換は、入力時系列データに対して数学的な演算を実行し、新しい出力時系列を生成します。時系列変換の詳細については、Workshop の時系列プロパティを参照してください。

ここでは、集計変換を使用して必要な時系列を作成できます。Add transform ボタンで変換の設定を開き、必要な時系列を生成するように設定できます。

object_table_transform_step

時系列サマライザー

次に、時系列サマライザー(赤色の枠)を使用して、列に表示する数値を生成できます。時系列サマライザーは、時系列データの要約統計量、つまり時系列の状態を反映する値を設定します。ここでは、単一値サマライザーを使用して、表示したい値である最新の週間平均感染者数を生成します。時系列サマライザーの詳細については、Workshop の時系列プロパティを参照してください。

次に、「数値の書式設定」ヘッダーの下にある値の書式設定(青色の枠)と、「条件付き書式設定」ヘッダーの下にある条件付き書式設定(緑色の枠)を設定して、この値の表示スタイルを調整できます。値の書式設定は数値の表示方法を制御し、条件付き書式設定は値に基づくルールによって表示色を変更します。この場合は、コンパクトな表記法を使用し、COVID-19 の週間平均感染者数が 100 を超える場合に値を赤色で表示します。値の書式設定と条件付き書式設定の詳細については、Workshop の書式設定を参照してください。

object_table_summarizer_step

スパークライン

最後に、週間平均感染者数の時系列の履歴を表示する、スパークラインの可視化を設定できます。

期間セレクター(赤色の枠)では、時系列を可視化する時間枠を指定できます。期間の詳細については、Workshop の時系列プロパティを参照してください。

「条件付き書式設定」ヘッダーの下にある条件付き書式設定(青色の枠)を適用して、値に基づくルールによってスパークラインの色を変更することもできます。条件付き書式設定の詳細については、Workshop の書式設定を参照してください。

最後に、ベースライン(緑色の枠)を設定して、スパークラインを解釈しやすくできます。ベースラインの設定の詳細については、Workshop の時系列プロパティを参照してください。

object_table_sparkline_step

インライン編集(セルレベルのライトバック)

概要

インライン編集を有効にすると、モジュールのユーザーはオブジェクトテーブル内に表示されるセルレベルのデータを変更し、その編集をオブジェクトデータに保存できます。編集オプションは、オントロジーで設定されたアクションによって定義されます。インライン編集に関するその他の考慮事項については、アクションのインライン編集のドキュメントを参照してください。インライン編集に対応するには、アクションが次の条件を満たす必要があります。

  • アクションは、単一の「オブジェクトを変更」ルールを使用するか、関数ベースである必要があります。
  • アクション内で変更されるすべてのプロパティは、「パラメーターから」として定義されている必要があります(「固定値として」や「オブジェクトパラメーターのプロパティから」ではありません)。
  • プロパティパラメーターは、単一のプリミティブ型である必要があります(たとえば、ブール値、Integer、文字列などで、オブジェクト参照や配列ではありません)。
  • パラメーターの表示設定オプションを「非表示」に設定しないでください(各パラメーターは、テーブル内の表示される列に関連付けられるためです)。

補足事項:

  • パラメーターに、ユーザーが選択できる列挙値が定義されている場合、ユーザーがそのパラメーターを変更するときに、それらの選択肢が適用され、セル内のドロップダウンに表示されます。
  • パラメーターまたはアクションに検証条件がある場合(たとえば、特定の数値パラメーターが 1~10 の範囲内でなければならないなど)、これらの検証条件が適用されます。
  • インライン編集中は、パラメーターの表示オプション(テキスト入力とテキストエリアの違いなど)は適用されません。
  • 設定を簡単にするため、アクションのパラメーターIDは、テーブル内に表示されるプロパティIDと一致させてください。これにより、アクションパラメーターをテーブル列に自動的にマッピングできます。
  • 表示を統一するため、Multipass ユーザーパラメーターは、オントロジー内で Multipass の値の書式設定を使用する列またはプロパティタイプにマッピングしてください。値の書式設定の詳細については、オントロジーのドキュメントを参照してください。

インライン編集の設定と使用

オブジェクトテーブルウィジェットを設定すると、列の設定セクションの列リストの下に、インライン編集を有効にする切り替えが表示されます。この切り替えを true に設定すると、インライン編集を有効にする設定が適用され、表示されるオブジェクトタイプを変更するためにオントロジーですでに設定したアクションを選択する画面が表示されます。以下の例では、Flight Alert: Inline Editing アクションによってインライン編集を有効にしています。アクションピッカーの下では、表示されたドロップダウンメニューを使用して、アクションパラメーターをテーブル列にマッピングします。また、変数をアクションパラメーターとして渡すこともできます。これらは、ユーザーがテーブル内の項目を編集しなくても、自動的にアクションに渡されます。

object_table_inline_editing_1

上記の設定後、ユーザーはテーブルのフッターに表示されるテーブルを編集ボタンで編集モードに入ることができます。このボタンのテキストは、カスタムボタンのテキスト入力項目で編集できます。デフォルトで編集モードを有効にするをオンにすると、テーブルを常にインライン編集モードにすることもできます。編集モードに入ると、以下のように、アクションパラメーターにマッピングされた変更可能な列を編集できます。関数ベースのアクションでは、一度に最大 20 行の編集をステージングでき、関数ベースではないアクションでは、一度に最大 200 行の編集をステージングできます。ステージングされた編集は、元に戻すボタン 元に戻すボタンで元に戻せます(以下のスクリーンショットのテーブルの左端の列に表示されています)。

object_table_inline_editing_2

編集を行い、変更を確定する準備ができたら、テーブルの右下にある確定ボタンを押します。確認ダイアログが表示されるので、もう一度確定を押して変更を確定します。ワンクリックで確定し、この確認ダイアログを無効にする場合は、ワンクリック確定の切り替えを有効にします。

カスタム右クリックメニュー

概要

右クリックメニューにカスタムの行の操作を追加すると、ユーザーはオブジェクトテーブルで右クリックしたオブジェクトに対して、アクションやイベントを実行できます。

インライン編集の設定と使用

右クリックメニューにカスタムの行の操作を追加するには、右クリックメニューセクションの右クリックメニューのカスタマイズ切り替えを有効にします。この切り替えを true に設定すると、テーブル内で現在右クリックされているオブジェクトを出力する「右クリックされたオブジェクト」を作成する画面が表示されます。次に、項目を追加を選択して、カスタム項目をメニューに追加できます。

Workshop の右クリックメニューの設定例。

項目を追加を選択すると、新しいメニューが表示され(以下のスクリーンショットを参照)、右クリックメニュー内でのメニュー項目の表示方法をカスタマイズできます。また、クリック時ドロップダウンメニューから選択肢を選ぶことで、メニュー項目にアクションを割り当てることもできます。これにより、メニュー項目がアクションとイベントのどちらをトリガーするかを選択できます。さらに、先ほど設定した「右クリックされたオブジェクト」を、アクションやイベント内で使用できます。

右クリックメニューにアクションを追加するための追加設定オプション。

設定が完了すると、オブジェクトテーブルの行を右クリックしたときに、変更内容が表示されます。

オブジェクトテーブルウィジェットでオブジェクトを右クリックしたときに表示される、設定済みの右クリックメニュー。