Skip to content

TypeScript で kintone のフィールドを取り扱いやすくする

Updated:

kintoneプラグインの作成に便利なライブラリを作成したので紹介します。

背景

kintoneプラグインを作る場合はアプリのフィールド情報が必要になります。

文字列1行フィールドやスペースフィールドを取得する場合は複数のAPIを実行しなければなりません。 また、テーブル内フィールドやグループ内フィールドの判定には一手間必要になります。

そこで、TypeScriptでkintoneのフィールドを取り扱いやすくするライブラリを作りました。

作ったもの

kintone-pretty-fieldsという名前でnpmに公開しました。 https://www.npmjs.com/package/kintone-pretty-fields

できること

1. kintone のフィールドとスペースフィールドをまとめて取得

import { KintoneRestAPIClient } from "@kintone/rest-api-client";
import { kintonePrettyFields } from "kintone-pretty-fields";

const client = new KintoneRestAPIClient();
const { fields, spacers } = await kintonePrettyFields.get({ client, app: 1, lang: "en", preview: false });
console.log({ fields, spacers });

2. フィールドの並び順をソート

「1」で取得したフィールドは、フォーム設定のフィールドの並び順になっています。(画面の左上が先で、右下が後)

フィールド数が100を超えるアプリは少なくありません。 フィールドを検索できるようになっているのがベストですが、そうではない場合少し役に立ちます。

3. テーブル内フィールドの判定

tableプロパティが存在する場合はテーブル内フィールドです。

{
  type: 'SINGLE_LINE_TEXT',
  code: '文字列__1行_',
  label: '文字列 (1行)',
  noLabel: false,
  required: false,
  minLength: '',
  maxLength: '',
  expression: '',
  hideExpression: false,
  unique: false,
  defaultValue: '',
  table: 'テーブル' // table field code
}

4. グループ内フィールド

groupプロパティが存在する場合はグループ内フィールドです。

  {
    type: 'SINGLE_LINE_TEXT',
    code: '文字列__1行_',
    label: '文字列 (1行)',
    noLabel: false,
    required: false,
    minLength: '',
    maxLength: '',
    expression: '',
    hideExpression: false,
    unique: false,
    defaultValue: '',
    group: 'グループ' // group field code
  }

5. ルックアップのコピー先フィールドの判定

isLookupCopyプロパティがtrueの場合はルックアップのコピー先フィールドです。

{
  type: 'SINGLE_LINE_TEXT',
  code: '文字列__1行_',
  label: '文字列 (1行)',
  noLabel: false,
  required: false,
  minLength: '',
  maxLength: '',
  expression: '',
  hideExpression: false,
  unique: false,
  defaultValue: '',
  isLookupCopy: true // If true, lookup copy destination field
}

6. 選択肢のソート

sortedOptionsプロパティに選択肢をindexでソートした配列をセットします。

{
  type: 'CHECK_BOX',
  code: 'チェックボックス',
  label: 'チェックボックス',
  noLabel: false,
  required: false,
  options: {
    sample1: { label: 'sample1', index: '0' },
    sample4: { label: 'sample4', index: '3' },
    sample3: { label: 'sample3', index: '2' },
    sample2: { label: 'sample2', index: '1' }
  },
  defaultValue: [],
  align: 'HORIZONTAL',
  sortedOptions: [ 'sample1', 'sample2', 'sample3', 'sample4' ] // sorted options
}

インストール方法

> npm install kintone-pretty-fields

使い方

import { KintoneRestAPIClient } from "@kintone/rest-api-client";
import { kintonePrettyFields, kintonePrettyType } from "kintone-pretty-fields";

const client = new KintoneRestAPIClient();
const { fields, spacers } = await kintonePrettyFields.get({ client, app: 1, lang: "en", preview: false });
console.log({ fields, spacers });

const checkBoxFields = fields.filter(kintonePrettyFields.isCheckBox);
console.log(checkBoxFields);

const inSubtableFields = fields.filter(kintonePrettyFields.enableInSubtable).filter(kintonePrettyFields.isInSubtable);
console.log(inSubtableFields);

const myFunction1 = (fields: kintonePrettyType.OneOf[]) => {
  // do something
};

const myFunction2 = (field: kintonePrettyType.CheckBox) => {
  // do something
};