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

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

オブジェクトテーブル

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

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

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

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 を追加し、状態の保存で使用できるように有効になっていることを確認してください。

関数ベースの列

このセクションのチュートリアルでは、お使いの Foundry 環境では利用できない可能性がある Flight Alert オブジェクトタイプを使用しています。これをガイドとして、Foundry インスタンス内の同等のオブジェクトタイプを使って手順を進めてください。Functions については、専用の Functions ドキュメントをご覧ください。

概要

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

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

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

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

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

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

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

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

  • ほかの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

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

object_table_reference_2

列リストに表示される関数を利用したプロパティの選択肢内で、「fx」の Functions アイコンを選択し、目的の関数を選択します。この例では、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 オブジェクトを含むオブジェクトテーブルウィジェットに、新しい関数ベースのプロパティ列を追加します。

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

派生列の設定 1

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

派生列の設定 2

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

派生列の設定 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 の時系列プロパティを参照してください。

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

object_table_transform_step

時系列サマライザー

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

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

object_table_summarizer_step

スパークライン

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

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

また、条件付き書式設定見出しの下で条件付き書式設定(青い枠)を適用し、値に基づくルールシステムを使用してスパークラインの色を変更できます。条件付き書式設定の詳細については、Workshop の書式設定を参照してください。

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

object_table_sparkline_step

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

概要

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

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

補足事項:

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

インライン編集を設定して使用する

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

object_table_inline_editing_1

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

object_table_inline_editing_2

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

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

概要

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

インライン編集を設定して使用する

右クリックメニューにカスタムの行の操作を追加するには、右クリックメニューセクション内の右クリックメニューのカスタマイズトグルを有効にします。このトグルを true に設定すると、テーブル内で現在右クリックされているオブジェクトを出力する「右クリックされたオブジェクト」を作成するよう求められます。その後、項目を追加を選択して、メニューにカスタム項目を追加できます。

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

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

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

設定後、Object Table の行を右クリックすると、変更内容が表示されます。

Object Table ウィジェットでオブジェクトを右クリックすると表示される、設定済みの右クリックメニュー。