Ribbit works
記事のトップ画像

APIで取得したフォーム設定から、指定したフィールドのみを抽出する

JavaScriptKintone

last modified date2021-11-24

publish date2021-10-27

KintoneではAPIを使用して、指定したアプリの各フィールド情報を取得することができます。

ただ、このAPIのリクエストパラメーターはアプリIDと言語の設定しかできず、指定したアプリのすべてのフィールドが取得されます。

レコードIDや作成日付、更新日付などの、アプリが標準で持っているフィールドや、使用していないカテゴリーフィールドなども取得されてしまいます。

今回は、APIを使用して取得したフォーム情報から、指定したフィールドのみを抽出する方法を紹介します。

汎用的な関数の定義

まず、次のような関数を定義します。

export const filterFieldProperties = (properties, callback) => {
  const filtered = Object.entries(properties).filter(([_, value]) =>
    callback(value)
  );

  const reduced = filtered.reduce(
    (acc, [key, value]) => ({ ...acc, [key]: value }),
    {}
  );

  return reduced;
};

関数はAPIから取得した全フィールドと、その絞り込み条件を受け取ります。

各フィールドに対して、指定した条件に当てはまるフィールドのみを返却します。

Object.entrieでフィルターして、その後reduceしているのは、受け取った型と同じ状態に戻すためです。

使用例

/* 文字列1行フィールドのみ抽出した一覧 */
const filterd = filterFieldProperties(
  properties,
  (property) => property.type === "SINGLE_LINE_TEXT"
);

指定したフィールドタイプを除外する

前述した関数を使用して、フィールドタイプを配列で指定し、全フィールドから取り除く関数を紹介します。

export const omitFieldProperties = (properties, omittingTypes) => {
  return filterFieldProperties(
    properties,
    (property) => !omittingTypes.includes(property.type)
  );
};

使用例

/* 全フィールドから、レコード番号と作成者を取り除いたフィールド一覧 */
const omitted = omitFieldProperties(properties, ["RECORD_NUMBER", "CREATOR"]);