SDKリファレンス - pick_lists
ピックリストは、一部の入力フィールドと組み合わせて使用し、ドロップダウンで選択可能なオプションを列挙します。 ピックリストのオプションは、pick_listsキーに保存するか、入力フィールドのハッシュ内で直接定義できます。 pick_list属性を使用する入力フィールドは、次のcontrol_typeである必要があります。
select- ユーザーがドロップダウンから単一の入力を選択できるようにします。
multiselect- ユーザーがドロップダウンから複数の入力を選択できるようにします。
tree- ユーザーが階層型ドロップダウンから単一または複数の入力を選択できるようにします。
クイック概要
ピックリストは、APIが特定の値セットのみを受け入れる場合に、コネクターを使いやすくする優れた方法です。 ユーザーに手動で入力してもらうのではなく、ドロップダウンから値を簡単に選択できるようにピックリストを使用する必要があります。 pick_listキーには、これらのオプションを保存し、入力フィールドの作成時に参照できます。
構造
pick_lists: {
[Unique_pick_list_name]: lambda do |connection, pick_list_parameters|
Array
end,
[Another_unique_pick_list_name]: lambda do |connection, pick_list_parameters|
Array
end
},| 属性 | 説明 |
|---|---|
| キー | [Unique_pick_list_name] |
| タイプ | ラムダ関数 |
| 必須 | True |
| 説明 | このラムダ関数は、その親object_definitionのキーがアクションまたはトリガーで呼び出されるたびに呼び出されます。 HTTPリクエストを実行して、メタデータエンドポイントからスキーマを動的に構築できます。 このラムダ関数の出力は、入力フィールドまたは出力フィールドを表すハッシュの配列である必要があります。 |
| 指定可能な引数 | connection - connectionで定義されたユーザー指定の入力を表すハッシュpick_list_parameters - 依存ピックリストを定義するときに使用します。 |
| 想定される出力 | 配列の配列 |
pick_listsの出力は、次の形式の2次元配列である必要があります。
[
[ "Picklist Label", "Value" ],
[ "Picklist Label", "Value" ],
[ "Picklist Label", "Value" ],
[ "Picklist Label", "Value" ]
]- コネクションフィールドではpick_listsは許可されません
例: コネクションフィールドのオプション
コネクションフィールドに列挙可能な値を定義するときは、コネクターで定義されたpick_listsを参照できない点に注意してください。
代わりに、これらのフィールドを静的に定義し、スキーマ属性optionsを使用できます。
connection: {
fields: [
{
name: 'environment',
label: 'Instance environment',
control_type: 'select',
options: [
['Production', 'production'],
['Sandbox', 'Sandbox']
]
}
]
}例: pick_lists: 静的
pick_listsは静的にできます。 参照されると、この定義は格納されている配列を返します。 入力フィールドがこのピックリストを参照すると、この配列が返され、フロントエンドでドロップダウンとしてレンダリングされます。

input_fields: lambda do |object_definitions|
[
{
name: 'event_category',
control_type: 'select',
pick_list: 'events'
}
]
end, pick_lists: {
events: lambda do |connection|
[
["Meeting","meeting"],
["Webinar","webinar"],
["Cloud recording","recording"],
["User","user"],
]
end
},例: pick_lists: 依存および静的
依存ピックリストを使用すると、別のフィールドの値に基づいてピックリストの内容を変更できます。 たとえば、すべての都市を単一のピックリストに表示するのではなく、別のフィールドで選択された国の都市のみを選択的に表示できます。

input_fields: lambda do |_object_definitions|
[
{
name: 'country',
control_type: 'select',
pick_list: 'countries',
optional: false
},
{
name: 'city',
control_type: 'select',
pick_list: 'cities',
pick_list_params: { country: 'country' },
optional: false
}
]
end pick_lists: {
countries: lambda do |_connection|
[
['United States', 'USA'],
['India', 'IND']
]
end,
cities: lambda do |_connection, country:|
{
'USA' => [
['New York City', 'NYC'],
['San Fransisco', 'SF']
],
'IND' => [
['Bangalore', 'BNG'],
['Delhi', 'DLH']
]
}[country]
end
}例: pick_lists: 依存および動的
この例では、accountsは独立した動的ピックリストであり、propertiesは依存する動的ピックリストです。 動的ピックリストを定義する場合でも、HTTPリクエストからのレスポンスは同じ配列の配列に変換する必要があります。
この例では、変換を実行するために.pluck関数を使用しました。

input_fields: lambda do |_object_definitions|
[
{
name: 'scope_id',
label: 'Team',
optional: false,
control_type: 'select',
pick_list: 'tenant_licenses'
},
{
name: 'platform_id',
control_type: 'select',
pick_list: 'platforms',
label: 'Platform',
pick_list_params: { scope_ids: 'scope_id' },
hint: 'Platform is required for creating Content'
}
]
end pick_lists: {
tenant_licenses: lambda do |connection|
app_id = get("api/v5/client/client:#{connection['client_id']}")&.
dig('data', 'app_id')
tenant_id = get("/api/v5/app/#{app_id}")&.dig('data', 'tenant_id')
get('/api/v5/license/').
params(tenant_id: tenant_id,
statuses: 'active')['data']&.
select { |lic| lic['parent_id'].present? }&.
pluck('name', 'id')
end,
platforms: lambda do |_connection, scope_ids:|
get('/api/v5/platform/').
params(scope_ids: scope_ids)['data']&.
pluck('name', 'id')
end,
}例: pick_lists: tree
Workatoでは、treeタイプのピックリストも使用できます。 ツリーピックリストは、ファイルやフォルダ構造など、アプリケーション内の階層構造をモデル化するためによく使用されます。 ツリーピックリストを使用する場合、従来のpick_list_parametersは無視され、double splat変数に置き換えられます。
これを最も分かりやすく説明するために、フォルダに追加のフォルダやファイルが含まれる可能性がある、ファイルとフォルダ構造の概念を使用します。 すべてのフォルダとファイルはノードと見なされますが、主な違いは、フォルダには子ノードが含まれる可能性がある一方で、ファイルには含まれない点です。 ツリーピックリストを定義すると、ユーザーがフォルダノードをクリックするたびに、ピックリストが再評価され、その中の子ノードが構築されます。 ユーザーがクリックしたフォルダノードの値は、args&.[](:__parent_id)で確認できます。 この値がnilの場合、ルートノードにいることを示します。
input_fields: lambda do |_object_definitions|
[
{
name: 'path',
label: 'File path',
optional: false,
control_type: 'tree',
pick_list: "file_path"
},
]
end pick_lists: {
file_path: lambda do |_connection, **args|
# Get sub folders
if (folder_path = args&.[](:__parent_id)).presence
path = []
response = get("/pubapi/v1/fs#{folder_path}").params(list_content: true, sort_by: 'name')
if response['is_folder']
path << response['folders']&.map { |folder| [folder['name'].labelize, folder['path'].gsub(' ', '%20'), nil, true] }
path << response['files']&.map { |file| [file['name'].labelize, file['path'].gsub(' ', '%20'), nil, false] } if response['files'].present?
Array.wrap(path.compact).flatten(1)
end
else
# Get root folders
get('/pubapi/v1/fs/')['folders']&.map do |folder|
[folder['name'].labelize, folder['path'].gsub(' ', '%20'), nil, true]
end
end
end,
}
上記のケースでは、ユーザーがダウンロード対象のファイルのみを選択できるようにすることを想定していました。 しかし、さまざまなケースで、ファイルではなくフォルダへのパスを指定してもらうために、ユーザーがフォルダ(ノード)も選択できるようにしたい場合があります。 これは次のように設定できます。
input_fields: lambda do |_object_definitions|
[
{
name: 'path',
label: 'Folder path',
optional: false,
control_type: 'tree',
pick_list: 'folder_path',
tree_options: {
selectable_folder: true
}
},
]
end別のバリエーションは、エンドユーザーが複数のフォルダを選択できるようにする必要がある場合です。 これは次のように設定できます。
input_fields: lambda do |_object_definitions|
[
{
name: 'path',
label: 'Folder path',
optional: false,
control_type: 'tree',
pick_list: 'folder_path',
tree_options: {
selectable_folder: true,
multi_select: true,
force_selection_hierarchy: true # Setting this to true causes all child nodes to be selected when the parent is selected.
}
},
]
endLast updated: