4.5.3.1 チケットのフィールド
チケットのフィールドは以下をカスタムすることができます。
Ops Iのチケット画面ではチケットの情報を変更する際、APIによってOTOBOと情報のやり取りを行います。 チケット画面に表示する項目「フィールド」を追加または削除する場合、使用するAPIの構成ファイルの編集が必要になります。ここでは使用するAPIを「カスタムAPI」と呼びます。フィールドを変更しない場合、カスタムAPI構成ファイルの変更は不要です。
フィールドの追加、削除はチケットタイプごとに設定でき、同じチケットタイプのすべてのチケットに反映されます。すでに作成済のチケットに対しては、追加されたフィールドは空欄で表示され、削除されたフィールドは表示されなくなります。
また、フィールドの追加、削除をチケットブラウザー画面のフィルタ機能に反映することができます。詳細は「フィルタへの反映」を参照してください。
チケット画面の詳細は「チケット」を参照してください。
フィールド名を変更することも可能です。詳細は「フィールド名の変更」を参照してください。
フィールドを追加、削除できるカスタムAPIは以下になります。
| 動作 | API | 関連する画面 |
|---|---|---|
| チケット一覧取得 | GET /capi/v1/tickets | チケットブラウザー画面 |
| チケットの詳細情報取得 | GET /capi/v1/tickets/{id} | チケット詳細画面 チケットブラウザー画面 |
| チケットの作成 | POST /capi/v1/tickets | 新規チケット追加画面 |
| チケットの一部情報更新 | PATCH /capi/v1/tickets/{id} | チケット詳細画面 チケットブラウザー画面 |
| 関連チケットの表示※ | GET /capi/v1/tickets/{id}/related-tickets | チケットブラウザー画面 チケット詳細画面 |
注意事項
フィールドの追加、編集、削除で文法やフィールド名などに誤りがあった場合、エラーは表示されませんが、正しく表示されないなど期待通りに機能しないことがあります。期待通りに機能しない場合は、文法や表記の誤りなどの確認をしてください。
変更手順を以下に示します。
(1)フィールドの追加
①OTOBOのダイナミック・フィールドを作成する
ITSMアプリケーションで以下の作業を実施します。この操作はITSMアプリケーションの[管理]機能で行うため、Primitiveロール「itsm_admin」の権限が必要です。
- チェックボックス
- 日付
- 日時
- ドロップダウン
- 本文
- テキストエリア
②チケット画面のカスタムAPI構成ファイルを編集する
構成ファイルの中で、フィールド追加時に編集が必要なファイルは、JavaScriptファイル、JSON Schemaファイル、UIのYAMLファイルです。これらのファイルはあらかじめ登録されている「初期YAMLファイル」です。初期YAMLファイルの格納場所については「初期YAMLファイルのカスタム」を参照してください。
以下に編集が必要なファイルについて説明します。
各カスタムAPIに対し、1または2種類のJSON Schemaファイルが存在し、それぞれ編集が必要です。編集が必要なファイルは「apps/datamodel/otobo-datasource-schemas/」に格納されています。
| カスタムAPI | JSON Schemaファイル | 変更箇所 |
|---|---|---|
| GET /capi/v1/tickets | ticket-search-response.json | content内のproperties |
| GET /capi/v1/tickets/{id} | ticket-details-response.json | 第1階層のproperties |
| POST /capi/v1/tickets | リクエスト: create-ticket-request-capi.json レスポンス: create-ticket-response-capi.json |
第1階層のproperties |
| PATCH /capi/v1/tickets/{id} | リクエスト: update-ticket-request-patch.json レスポンス: update-ticket-response-patch.json |
第1階層のproperties |
| GET /capi/v1/tickets/{id}/related-tickets | list-related-ticket-response.json | content内のproperties |
JSON Schemaファイルの変更例を以下に示します。
UI側に渡すフィールドの一覧を定義している「properties」にOps I側のフィールド名と設定値(type、format、enum、default、formControl)を追加します。
- Ops I側のフィールド名:任意の値を指定。ここで指定した値を、JavaScriptファイル、UIのYAMLファイルから参照。
- フィールドの設定値:フィールドのタイプによって、必要な設定値(type、format、enum、default、formControl)を設定。詳細は「(表)フィールドのタイプと設定値の関係」参照。
| フィールドのタイプ | type | format | enum | default | formControl |
|---|---|---|---|---|---|
| チェックボックス | booleanかつnull | - | - | - | - |
| 日付 | string | date | - | - | - |
| 日時 | string | date-time | - | - | - |
| ドロップダウン | string | - | 選択肢※1 | 初期値※2 | - |
| 本文 | stringまたはnumber | - | - | - | - |
| テキストエリア | string | - | - | - | text |
また、すでにチケットが作成済みの状態でフィールドを追加する場合、既存のチケットでエラーが発生しないようにenumの選択肢には未選択を意味する「空文字」を含むようにしてください。
カスタムAPIにひもづくJavaScriptファイルに対して編集が必要です。
編集が必要なファイルは「apps/script/ticket-common/ticket_field_definition.js」です。
| カスタムAPI | 変更箇所 |
|---|---|
| GET /capi/v1/tickets | TICKET_SEARCH_RESPONSEのresponse |
| GET /capi/v1/tickets/{id} | TICKET_GET_DETAILS_RESPONSEのresponse |
| POST /capi/v1/tickets | リクエスト: CREATE_TICKET_REQUESTのextBody内のextra レスポンス: CREATE_TICKET_RESPONSEのresponse |
| PATCH /capi/v1/tickets/{id} | リクエスト: UPDATE_TICKET_PATCH_REQUESTのextBody内のextra レスポンス: UPDATE_TICKET_PATCH_RESPONSEのresponse |
| GET /capi/v1/tickets/{id}/related-tickets | TICKET_GET_LIST_RELATIONS_RESPONSEのresponse |
| GET /tickets POST /tickets GET /tickets/{id} PUT /tickets/{id} PATCH /tickets/{id} GET /tickets/{id}/related-tickets |
CUSTOM_FIELDS_MAP※ |
「OTOBOからOps Iへのレスポンス」、「Ops IからOTOBOへのリクエスト」、および「CUSTOM_FIELDS_MAP」の場合で記載形式が異なります。「CUSTOM_FIELDS_MAP」はACLを使用する場合、設定してください。
以下にそれぞれの記載形式と記載例を示します。
- Ops I側のフィールド名:JSON Schemaファイル内のpropertiesラベルに追加する名前
- ダイナミック・フィールド名:①で追加したダイナミック・フィールドの名前
- 任意:null、または処理の追加など、ユーザーが自由に設定可能。
opsi_checkbox1: convertFormatFromNumToBool(ticket.extra?.OTOBO_CheckBox1), // チェックボックスタイプ※1
opsi_date1: ticket.extra?.OTOBO_Date1 || "", // 日付タイプ
opsi_datetime1: toUtcDateTimeFormat(ticket.extra?.OTOBO_DateTime1), // 日時タイプ※2
opsi_dropdown1: ticket.extra?.OTOBO_DropDown1 || "", //ドロップダウンタイプ
opsi_text1: ticket.extra?.OTOBO_Text1 || "", // string型の本文タイプ
opsi_text2: Number(ticket.extra?.OTOBO_Text2) || 0, // number型の本文タイプ
opsi_textarea1: ticket.extra?.OTOBO_TextArea1 || "", // string型のテキストエリアタイプ
OTOBO_CheckBox1: convertFormatFromBoolToNum(body.opsi_checkbox1), // チェックボックスタイプ※3
OTOBO_Date1: body.opsi_date1, // 日付タイプ
OTOBO_DateTime1: formatDateTimeRequestToOtobo(body.opsi_datetime1), // 日時タイプ※4
OTOBO_DropDown1: body.opsi_dropdown1, // ドロップダウンタイプ
OTOBO_Text1: body.opsi_text1, // string型の本文タイプ
OTOBO_Text2: body.opsi_text2?.toString(), // number型の本文タイプ
OTOBO_TextArea1: body.opsi_textarea1, // string型のテキストエリアタイプ
"newField1": "newDynamicField1"
"newField2": "newDynamicField2"
また、選択したフィールドタイプがドロップダウンの場合、およびチェックボックスで画面表示にtrue/falseを用いたい場合はドロップダウン、またはチェックボックスの選択肢の設定が必要です。
編集が必要なファイルは「apps/script/ticket-common/ticket_mapping_definition.js」です。
- OTOBO_MAPPING_OpsI側のフィールド名を定義し、Ops Iの画面で表示する選択肢と(1)①で設定したダイナミック・フィールドの選択肢(チェックボックスの場合は0、1)をひもづけます。コロン(:)の左側にOps Iの画面で表示する選択肢を、右側にダイナミック・フィールドの選択肢を指定してください。
ドロップダウンの場合:チェックボックスの場合:const OTOBO_MAPPING_NEWFIELD2 = {
"opsi A" : "otobo a",
"opsi B" : "otobo b",
"opsi C" : "otobo c",
};const OTOBO_MAPPING_NEWFIELD2 = {
"true" : "1",
"false" : "0",
}; - CUSTOM_FIELDS_VALUE_MAPに、OpsI側のフィールド名とⅠで定義した「OTOBO_MAPPING_Ops I側のフィールド名」を以下のように定義します。「CUSTOM_FIELDS_VALUE_MAP」は、「OTOBO_MAPPING_Ops I側のフィールド名」より後に定義してください。
const CUSTOM_FIELDS_VALUE_MAP = {
 "newField2": OTOBO_MAPPING_NEWFIELD2,
};
下表に従い、各画面について、UIのYAMLファイルを編集してください。
このとき、タスクアプリケーションとリクエストアプリケーションのうち、ダイナミック・フィールドを表示させたいアプリケーションのYAMLファイルを編集してください。
| 画面 | UIのYAMLファイル | 変更対象/ 変更内容(斜体文字は実際の値で置換え) |
|---|---|---|
| チケット 詳細画面 |
タスクアプリケーション:
リクエストアプリケーション:
|
<更新対象コンポーネント> ticket_detail_form <変更内容> 以下の書式に従い、フォームのフィールド(fields)に要素を追加する。必須区分や入力チェックなど、必要に応じて「(表)Formのプロパティ(UIバージョン1.1)」に記載のfieldのプロパティを追加可能。 - name: 任意の名前 source: api field: read: ticketDetails.Ops I側のフィールド名 update: patchTicketCustom.Ops I側のフィールド名 label: ラベル表示名 メモリクエストアプリケーションの場合、updateプロパティを記載しないでください。 |
|
<更新対象コンポーネント> related_records_ticket(関連レコードのチケット一覧) <変更内容> 以下の書式に従い、テーブルのカラム(columns)に要素を追加する。関連レコードのチケット一覧で、追加したカラムを初期表示させない場合は、hide属性のtrueを追加する。 - name: 任意の名前 source: api column: read: ticketRelated.Ops I側のフィールド名 label: ラベル表示名 |
||
| 新規 チケット 追加画面 |
タスクアプリケーション:
リクエストアプリケーション:
|
<更新対象コンポーネント> ticket_creation_form <変更内容> 以下の書式に従い、フォームのフィールド(fields)に要素を追加する。必須区分や入力チェックなど、必要に応じて「(表)Formのプロパティ(UIバージョン1.1)」に記載のfieldのプロパティを追加可能。 - name: 任意の名前 source: api field: create: createTicketCustom.Ops I側のフィールド名 label: ラベル表示名 |
| チケット ブラウザー画面 |
タスクアプリケーション:
リクエストアプリケーション:
|
<更新対象タブ>
<更新対象コンポーネント> ticket_filter_table(チケット一覧) <変更内容> 以下の書式に従い、テーブルのカラム(columns)に要素を追加する。チケット一覧で、追加したカラムを初期表示させない場合は、hide属性のtrueを追加する。Ops I側のフィールド名とダイナミック・フィールド名が異なる場合は、sortnameにダイナミック・フィールド名を指定する。 チケット一覧取得APIには更新対象タブごとに以下の値を指定する。
source: api column: read: チケット一覧取得API.Ops I側のフィールド名 label: ラベル表示名 sortable: true sortname: ダイナミック・フィールド名 |
| <更新対象タブ> ticket_detail_タイプ名※_tab <更新対象コンポーネント> ticket_detail_form(チケット詳細) <変更内容> 以下の書式に従い、フォームのフィールド(fields)に要素を追加する。必須区分や入力チェックなど、必要に応じて「(表)Formのプロパティ(UIバージョン1.1)」に記載のfieldのプロパティが追加可能。 - name: 任意の名前 source: api field: read: ticketDetails.Ops I側のフィールド名 update: patchTicketCustom.Ops I側のフィールド名 label: ラベル表示名 メモリクエストアプリケーションの場合、updateプロパティを記載しないでください。 |
||
| <更新対象タブ> ticket_detail_タイプ名※_tab <更新対象コンポーネント> related_records_ticket(関連レコードのチケット一覧) <変更内容> 以下の書式に従い、テーブルのカラム(columns)に要素を追加する。関連レコードのチケット一覧で、追加したカラムを初期表示させない場合は、hide属性のtrueを追加する。 - name: 任意の名前 source: api column: read: ticketRelated.Ops I側のフィールド名 label: ラベル表示名 |
UIのYAML定義の詳細については、「UI」を参照してください。
(2)フィールドの削除
①OTOBOのダイナミック・フィールドを無効化する
②チケット画面のカスタムAPI構成ファイルを編集する
UI側に渡すフィールドの一覧を定義している「properties」から、①で無効化したフィールドの部分を削除します。
変更箇所については「(表)編集が必要なJSON Schemaファイル」を参照してください。
カスタムAPIを整形している変更箇所から、①で無効化したフィールドの部分を削除します。
変更箇所については「(表)編集が必要なJavaScriptファイル」を参照してください。
Formコンポーネント内の変更箇所から、①で無効化したフィールドの部分を削除します。
変更箇所については「(表)編集が必要なUIのYAMLファイルと編集内容」を参照してください。
フィルタ機能の変更箇所から、①で無効化したフィールドの部分を削除します。
変更箇所については「フィルタへの反映」を参照してください。
(3)フィルタへの反映
チケットブラウザー画面のフィルタ機能を使用する場合は、「フィールドの追加」のファイルに加えて、下記ファイルの修正が必要になります。
a. JSON Schemaファイル
- apps/datamodel/detamodels_for_ticket_detail_ui/filter-form-schema.json
- 第1階層のproperties
- filterItemsAgentENとfilterItemsAgentJA内のenum
(タスクアプリケーションの全チケットタイプ用の一覧画面に追加する場合) - filterItemsAgentタイプ名※ENとfilterItemsAgentタイプ名※JA内のenum
(タスクアプリケーションの個々のチケットタイプ用の一覧画面に追加する場合) - filterItemsRequesterENとfilterItemsRequesterJA内のenum
(リクエストアプリケーションの全チケットタイプ用の一覧画面に追加する場合) - filterItemsRequesterタイプ名※ENとfilterItemsRequesterタイプ名※JA内のenum
(リクエストアプリケーションの個々のチケットタイプ用の一覧画面に追加する場合)
b. JavaScriptファイル
- apps/script/ticket-common/ticket_field_definition.js
- TICKET_FILTER_MAPPING
「JSON Schemaファイル」で日本語と英語の表示名両方を追加した場合はそれぞれ記載してください。
filterItemsの表示名: ダイナミック・フィールド名
c. UIのYAMLファイル
- apps/ui/ticket_browser_agent/manifest.yaml
- apps/ui/ticket_browser_requester/manifest.yaml
- ticket_filter_tab
(全チケットタイプ用の一覧画面に追加する場合) - ticket_filter_タイプ名※_tab
(個々のチケットタイプ用の一覧画面に追加する場合)
- ticket_filter_form
- name: ダイナミック・フィールド名
source: schema
field:
all: filter.Ops I側のフィールド名
label: ラベル表示名
properties:
visible: false
operator: true
checkbox: true
xs: 12
sm: 12
md: 12
lg: 12
xl: 6
(4)フィールド名の変更
既存のフィールド名を変更できます。
フィールド名を変更するには、チケットのUIのYAMLファイルのlabel(ラベル表示名)を編集します。編集対象のYAMLファイルは、
「フィールドの追加」の「②c.UIのYAMLファイル」を参照してください。
メモ