6.3 Datamodel

以下にDatamodel定義と定義例を示します。データモデルの詳細については「データモデルの設計」と「ワークフローの設計」を参照してください。

(表)Datamodel定義

ラベル デフォルト値 必須※1 説明
apiVersion: Yes APIバージョン
1.0を指定する
kind: Yes datamodelを指定する
type: No resourceを指定する
Ops Iの運用機能に追加する新しい定義であることを示す
name: Yes Datamodel定義の内部名
nameは以下のルールに従う必要があります。
  • 本YAMLファイルのディレクトリ名を指定
  • 入力可能な文字は以下の通り
    • 半角英数字:
      a~z A~Z 0~9
    • 半角の特殊文字:
      _ . ( ) -
  • 先頭文字が半角英数字かアンダーバー(_)
  • その他の注意点は「YAMLファイル作成時の注意」2~4を参照
label: Yes YAMLファイルに記載する運用機能の表示名
includes: No このYAMLファイルで利用する関連YAMLファイルを記載
メモメモ
  • 記載するYAMLファイルはこのYAMLファイル登録前にOps Iに登録されている必要があります。
  • includesラベルを指定することにより、他のYAMLファイルで定義した内容を取り込むことができます。例えば、テーブルのカラムのドキュメントを指定した場合に、ファイルの命名ルールを定義したAttachmentのYAMLファイルを取り込む場合に使用します。
- kind: Yes 読み込むYAMLファイルの種類
  name: Yes 読み込むYAMLファイルの内部名
description: No このYAMLファイルに対する詳細説明
tables: Yes カスタムテーブルの詳細を設定
カスタムテーブルについては「データモデルの種類」を参照。
- name: Yes カスタムテーブルの内部名※2
入力可能な文字は以下の通り。
  • 半角英数字:
    a~z 0~9
  • 半角の特殊文字:
    _
先頭文字は半角英字(a~z)のみ指定可能。使用できる字数は、最大45文字。
  label: Yes カスタムテーブルの表示名
  inherits: No 継承設定
table: No カスタムテーブルが継承するカスタムテーブル名
"includes"に含まれている必要がある。
  description: No カスタムテーブルの詳細説明
  documents: No カスタムテーブルに関連するドキュメント
- document: No カスタムテーブルに関連するドキュメントを指定。
  columns: Yes カラムについて設定
- name: Yes カラムの内部名
入力可能な文字は以下の通り。
  • 半角英数字:
    a~z 0~9
  • 半角の特殊文字:
    _
先頭文字は半角英字(a~z)のみ指定可能。使用できる字数は、最大63文字。
メモメモ
デフォルトで用意されているカラム名は指定できません。詳細は「(表)デフォルトで用意されているカラム」を参照。
  label: Yes カラムの表示名
  description: No カラムの詳細説明
  type: Yes カラムのタイプを指定。
指定したタイプによって、Formコンポーネントのフィールドの種類が決定される。指定できるタイプは「(表)カラムのタイプ」を、Formコンポーネントのフィールドの種類は「(表)Formコンポーネントのフィールドの種類とDatamodelのYAMLファイルのカスタムテーブルのカラムのタイプの対応表」を参照。
  not-null: false No この値がtrueの場合、null以外の制約が本カラムに追加される。
  primary: false No この値がtrueの場合、本カラムはプライマリーキーとして扱う。
  foreign: false No この値がtrueの場合、本カラムは外部キーとして扱う。
  ref: No foreignがtrueの場合に外部キーの参照先となるカスタムテーブルとカラムを指定する。指定したカスタムテーブルのカラムに対して参照制約が設定される。この値は、次のようにドット表記形式で指定する必要がある。
参照されるカスタムテーブル名.列名
例)mytable.mycolumn
参照されるカスタムテーブルは、"includes"で指定されたドキュメントに含まれている必要がある。
メモメモ
refに指定するカラムはprimary: trueのカラムを指定してください。primary: trueではないカラムを指定すると、ドキュメントとして登録されません。
  enum: No タイプが"enum"の時の選択肢を定義
- name: Yes 選択肢の内部名
入力可能な文字は以下の通り。
  • 半角英数字:
    a~z A~Z 0~9
  • 半角の特殊文字:
    _
先頭文字は半角英字(a~z A~Z)のみ指定可能。使用できる文字数の最大は63文字。1つのenum内で一意であること。
  label: Yes 選択肢の表示名
  default: No 本カラムのデフォルト値
  index: false No この値がtrueの場合、本カラムのインデックスが生成される。
注意事項注意事項
カラムのタイプによらず登録するデータのサイズが大きい場合、インデックスの作成に失敗し、データ登録に失敗することがあります。
trueを指定したカラムに登録するデータは、2,400バイトを超えないように注意してください。
  document: No カスタムテーブルに関連するドキュメント
カラムのタイプに"document"を選択した場合に指定。
コレクション型のドキュメントを指定する必要性がある。
kind: Yes ドキュメントの"kind"を設定。
name: Yes ドキュメントの"name"を設定
  generate: No カラムの値を自動的に入力する。以下が設定可能。
  • "uuid"
"uuid"が指定された場合、自動でUUIDを作成。
  ref-sys: No Ops Iで用意されたテーブル(user,group,role)のカラムを参照する。
ref-sysに指定するカラムはforeign: trueのカラムを指定してしないでください。foreign: trueカラムを指定すると、ドキュメントとして登録されません。
referred system table namereferred system table name.column nameのようにレコードそのものか特定のカラムだけを指定する。
views: No カスタムビューの詳細を定義
カスタムビューについては「データモデルの種類」を、カスタムビューの定義例は「カスタムビューの定義例」を参照。また、UIバージョン1.0では非サポート。UIバージョンについては「UIバージョン」を参照。
- name: Yes カスタムビューの内部名※2
入力可能な文字は以下の通り。
  • 半角英数字:
    a~z 0~9
  • 半角の特殊文字:
    _
先頭文字は半角英字(a~z)のみ指定可能。
  label: Yes カスタムビューの表示名
  description: No カスタムビューの詳細説明
  columns: Yes カラムについて設定
- source: Yes カスタムビューとして表示するカラムのソース
ソースはfromまたはjoin.tableで指定したカスタムテーブルを指定できる。「データモデル名.カラム名」の形式で指定する。
  name: Yes カラムの内部名
入力可能な文字は以下の通り。
  • 半角英数字:
    a~z 0~9
  • 半角の特殊文字:
    _
先頭文字は半角英字(a~z)のみ指定可能。
メモメモ
デフォルトで用意されているカラム名は指定できません。詳細は「(表)デフォルトで用意されているカラム」を参照。
  label: Yes カラムの表示名
  description: No カラムの詳細説明
  from: Yes ベースとするカスタムテーブルの内部名
  join: No 複数のカスタムテーブルをベースのカスタムテーブルに結合する場合に設定
- type: Yes 結合する方法を指定
  • inner : 内部結合
  • left: 左外部結合
  • right: 右外部結合
  table: Yes 結合対象のカスタムテーブルの内部名
カスタムテーブルとデフォルトで用意されているuserテーブル、groupテーブル、roleテーブルを指定できる。デフォルトで用意されたテーブルの詳細は、「(表)userテーブル」、「(表)groupテーブル」、「(表)roleテーブル」を参照。
  conditions: Yes 結合時の条件を指定
<conditionNode> Yes 結合時の条件
"and"または"or"を指定する。
- operator: Yes 結合時の条件で使用するオペレータ
使用できるオペレータの詳細は「(表)使用可能なオペレータ」を参照。
  operands: Yes オペレータに渡す値を「データモデル名.カラム名」の形式で指定する。記載方法の詳細は「(表)使用可能なオペレータ」を参照。
- <conditionNode> No 結合時に階層的な条件を指定したい場合に指定する。join全体で3階層まで指定できる。
  where: No 結合後の結果に対しての表示条件を指定する場合に指定
  conditions: Yes 結合時の条件を指定
<conditionNode> Yes 結合時の条件
"and"または"or"を指定する。
- operator: Yes 結合時の条件で使用するオペレータ
使用できるオペレータの詳細は「(表)使用可能なオペレータ」を参照。
  operands: Yes オペレータに渡す値を「データモデル名.カラム名」の形式で指定する。記載方法の詳細は「(表)使用可能なオペレータ」を参照。
- <conditionNode> Yes 結合時に階層的な条件を指定したい場合に指定する。where全体で3階層まで指定できる。
schemas: No schemaを定義
UIバージョン1.0では非サポート。UIバージョンについては「UIバージョン」を参照。
- name: Yes schemaの名前
  file: Yes JSON Schemaファイルのパス
DatamodelのYAMLファイルが保存されているディレクトリが起点となる。
指定したJSON Scehmaファイルの定義によって、Formコンポーネントのフィールドの種類が決定される。詳細は「(表)Formコンポーネントのフィールドの種類とDatamodelのYAMLファイルのJSON Schemaファイルの定義の対応表」を参照。
※1:入れ子関係にないラベルの必須が「No」の場合は、定義が必須ではありません。入れ子関係にあるラベルの場合は、下層ラベルの必須は、上層ラベルの必須が「Yes」である場合に適用されます。
※2:Datamodel定義で指定するテーブルの内部名は、システムを通して一意である必要があります。

指定できるカラムのタイプは以下です。

(表)カラムのタイプ

カラムのタイプ
integer※1 numeric※6 varchar※2 text timestamp※5 date※5 time boolean
enum inet※3 document※4 decimal※6 uuid - - -
※1:-2,147,483,648~+2,147,483,647の数字を含む基本データ型で、数字に小数や指数を含むことはできません。
※2:デフォルトの文字列の最大長は40文字です。「varchar(文字数)」と指定することで、文字列の最大長を変更できます。指定できる文字列の最大長は10,485,760文字です。
※3:IPv6形式は未サポートです。
※4:Ops I独自のタイプ。Git上に保存したドキュメントを選択でき、実データとして保存パスが登録されます。UIバージョン1.0で作成したUIで添付ファイルを扱う場合のみに使用します。カスタムデータ保守画面はUIバージョン1.1で作成されるため、documentタイプは使用できません。
※5:timestampとdateのタイプに入力可能な日付は1900年01月01日 から 2099年12月31日 です。
※6:数字に小数を含むことができます。

テーブルやカラムのname属性の値には設定できる文字数に上限があります。
また、上限値はそれぞれ条件により異なります。
以下を参照し、条件に該当する制限をすべて満たすように定義してください。

(表)テーブルおよびカラムのname属性の文字数制限

項番 条件 制限
1 常に テーブルのnameは最大45文字
2 常に カラムのnameは最大63文字
3 テーブルにforeign: true のカラムがある場合 該当テーブル名、該当カラム名前、参照先のテーブル名、参照先のカラム名の文字数の合計は最大53文字
4 テーブルにtype: enumのカラムがある場合 該当テーブル名、該当カラム名の文字数の合計は最大60文字
5 テーブルにtype: enumのカラムがある場合 該当enum名の選択肢のnameの文字数は最大63文字

Ops Iではデフォルトで以下のカラムが用意されています。

(表)デフォルトで用意されているカラム

カラム名 タイプ 説明
id uuid グローバルユニークID
created_on timestamp レコードが作成された日時
updated_on timestamp レコードが更新された日時
created_by varchar (256) レコードを作成したユーザー名
updated_by varchar (256) レコードを更新したユーザー名
approved boolean 予約フィールド
domain varchar (256) 予約フィールド
group varchar (256) 予約フィールド
version integer レコードのバージョン
sys_customer varchar (150) レコードがひもづく顧客のID
ワークフローから参照されるレコードには自動で設定される。
顧客ユーザーは、自分の顧客のIDとこのカラムの値が一致しない場合、レコードにアクセスできない。
ctx_id uuid レコードを参照するワークフローのコンテキストID
ワークフローから参照されるレコードには自動で設定される。

また、以下のテーブルがデフォルトで用意されています。これらは参照のみ可能です。データモデルアプリケーションなどから操作はできません。
ユーザー、グループ、ロールに対してデータの追加や編集、削除を行いたい場合、システムアプリケーションまたは標準提供APIから行ってください。詳細は「ユーザー管理」と「JP1 Cloud Service 運用統合 APIリファレンス」の「APIリファレンス概要>API一覧」を参照してください。

(表)userテーブル

カラム タイプ 説明
id varchar (36) グローバルユニークなID
username varchar (255) ユーザー名
first_name varchar (255) ファーストネーム
last_name varchar (255) ラストネーム
email varchar (255) ユーザーのメールアドレス
customer_id varchar (255) 顧客のID
customer_name varchar (255) 顧客名
company varchar (255) 会社名
department varchar (255) 部署名
memo varchar (255) 備考
address varchar (255) 住所
phone_number_1 varchar (255) 電話番号1
phone_number_2 varchar (255) 電話番号2
※カスタムビューから結合された場合のみ参照可能です。

(表)groupテーブル

カラム タイプ 説明
id varchar (36) グローバルユニークなID
name varchar (255) グループ名
description varchar (255) 詳細
email varchar (255) グループのメールアドレス
※カスタムビューから結合された場合のみ参照可能です。

(表)roleテーブル

カラム タイプ 説明
id varchar (36) グローバルユニークなID
name varchar (255) ロール名

(表)使用可能なオペレータ

オペレータ 関連SQL 説明
eq = 等しい - operator: eq
  operands:
    - main_table.main_id
    - ref_table.ref_code
- operator: le
  operands:
    - main_table.main_id
    - "999"
メモメモ
データ型:stringまたはnumber
(第1、第2Operand)
ne <> 等しくない
gt > より大きい
ge >= より大きいまたは等しい
lt < より小さい
le <= より小さいまたは等しい
in IN 指定した値のリスト、配列に含まれる - operator: notIn
  operands:
    - ref_table.ref_value
    - ["inactive", "deleted"]
メモメモ
データ型:string(第1Operand)、array(第2Operand)
notIn NOT IN 指定したリスト、配列の集合に含まれない
like LIKE パターン、ワイルドカードに一致する - operator: like
  operands:
    - ref_table.ref_value
    - "test%"
メモメモ
データ型:string(第1、第2Operand)
notLike NOT LIKE パターン、ワイルドカードに一致しない
isNull IS NULL NULLである - operator: isNull
  operands:
    - ref_table.ref_value
メモメモ
データ型:stringまたはnumber
isNotNull IS NOT NULL NULLではない


<定義例>
次の項目について定義例を示します。

■カスタムテーブルの定義例

apiVersion: 1.0
kind: datamodel
type: resource
name: lend_vm_datamodel
label: lend_vm_datamodel
description: VM貸出台帳のデータモデルを定義

includes:
  - kind: attachment
    name: Evidence of VM creation

#カラムを定義 
tables:
  - name: lend_vm_table
    label: VM貸出台帳のテーブル
    columns: 
      - name: app_number
        label: 申請番号
        description: 申請の通し番号
        type: varchar(32)
        not-null: false
        primary: false
        foreign: false

      - name: sys_name
        label: システム名
        description: VMを利用するシステム名
        type: enum
        enum:
          - name: order_mgt_sys
            label: 受注管理システム
          - name: customer_mgt_sys
            label: 顧客管理システム
          - name: production_mgt_sys
            label: 生産管理システム
        not-null: false
        primary: false
        foreign: false
        
      - name: vm_name
        label: VM名
        description: 貸出したVM名
        type: varchar(32)
        not-null: false
        primary: false
        foreign: false
                
      - name: os_name
        label: OS種別
        description: WindowsまたはLinuxを選択
        type: enum
        enum:
          - name: Windows
            label: Windows
          - name: Linux
            label: Linux
        not-null: false
        primary: false
        foreign: false
        
      - name: cpu
        label: CPU
        description: VMで利用するvCPUコア数
        type: integer
        not-null: false
        primary: false
        foreign: false
        

(中省略)

                
      - name: start_date
        label: 利用開始日
        description: VMの利用開始日
        type: date   
        not-null: false
        primary: false
        foreign: false

      - name: applicant
        label: 利用申請者
        description: 利用申請者
        type: varchar(256)
        not-null: false
        primary: false
        foreign: false
        

(中省略)

        
      - name: notice
        label: お知らせ
        type: text
        not-null: false
        primary: false
        foreign: false
        default:
          <strong>システムメンテナンスのため、下記の時間帯にVM貸出サービスを停止します。<br>
          20XX年XX月XX日(水)9:00 ~ 12:00<br>
          ご不便をおかけいたしますが、よろしくお願いします。</strong>

似たセクションが続く箇所は(中省略)として省略しています。

■カスタムビューの定義例

この例では、DatamodelのYAML定義を部分的に記載しています。

カスタムテーブルmain_tableとref_tableを定義します。

tables:
  - name: main_table
    label: main_table
    columns:
      - name: main_id
        label: main_id
        type: varchar(50)
      - name: main_title
        label: main_title
        type: varchar(50)

  - name: ref_table
    label: ref_table
    columns:
      - name: ref_code
        label: ref_code
        type: varchar(50)
      - name: ref_value
        label: ref_value
        type: varchar(50)

カスタムビューを定義します。ここで、カスタムテーブルをひもづけます。

  • 単一のカスタムテーブルの場合:
    カスタムビューsimple_ref_viewにカスタムテーブルref_tableをひもづける
  • 複数のカスタムテーブルを結合する場合:
    カスタムビューmain_ref_join_viewにカスタムテーブルmain_tableとref_tableを結合してひもづける
単一のカスタムテーブルの場合 複数のカスタムテーブルを結合する場合
views:
  - name: simple_ref_view
    label: Simple Reference View
    description: Basic view
    columns:
      - source: ref_table.ref_code
        name: code
        label: Code
        description: table code
      - source: ref_table.ref_value
        name: value
        label: Value
        description: table value
    from: ref_table
views:
  - name: main_ref_join_view
    label: Main Reference Join View
    description: Join view
    columns:
      - source: main_table.main_id
        name: main_id
        label: Main ID
        description: Main table ID
      - source: main_table.main_title
        name: main_title
        label: Main Title
        description: Main table title
      - source: ref_table.ref_code
        name: ref_code
        label: Reference Code
        description: Reference table code
      - source: ref_table.ref_value
        name: ref_value
        label: Reference Value
        description: Reference table value
    from: main_table
    join:
      - type: inner
        table: ref_table
        conditions:
          and:
            - operator: eq
              operands:
                - main_table.main_id
                - ref_table.ref_code

■JSON Schemaファイルの定義例

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "text": {
      "type": "string"
    },
    "number": {
      "type": "number"
    },
    "richText": {
      "type": "string",
      "formControl": "text"
    },
    "selectBox": {
      "type": "string",
      "enum": ["item1", "item2", "item3"]
    },
    "checkBox": {
      "type": "boolean"
    },
    "dateTime": {
      "type": "string",
      "format": "date-time"
    },
    "date": {
      "type": "string",
      "format": "date"
    },
    "time": {
      "type": "string",
      "format": "time"
    }
  }
}