フィールドの値を文字列として取得

にメンテナンス済み

kintoneではREST APIを使ってレコード情報を取得することができますが、各フィールドが持つ値はフィールドタイプによって異なります。

例えば、文字列一行フィールドはfield.valueの型はstringとなりますが、チェックボックスやラジオボタンの場合、返す型はstring[]です。

そのため、返り値が文字列であることを期待して処理を実行した際に、対象フィールドがチェックボックスやラジオボタンであった場合、エラーが発生する可能性があります。

この対策は、当然必要となる処理によって異なりますが、単純に画面上に表示したい場合であれば、それぞれのフィールドタイプに合わせて文字列に変換する処理を実装することが考えられます。

このページでは、フィールドタイプを問わず、フィールドの値を文字列として取得する方法を紹介します。

ソースコード

/**
 * 各フィールドタイプの値を文字列として返却します
 *
 * 配列で取得されるような値は区切り文字で連結されます
 * @param field { SavedFields } フィールド
 * @returns { string } フィールドの値
 */
export const getFieldValueAsString = (field) => {
  if (
    field.type === 'MULTI_LINE_TEXT' ||
    field.type === 'RICH_TEXT' ||
    field.type === 'CREATED_TIME' ||
    field.type === 'DATE' ||
    field.type === 'DATETIME' ||
    field.type === 'DROP_DOWN' ||
    field.type === 'LINK' ||
    field.type === 'RECORD_NUMBER' ||
    field.type === 'STATUS' ||
    field.type === 'RADIO_BUTTON' ||
    field.type === 'TIME' ||
    field.type === 'UPDATED_TIME' ||
    field.type === '__ID__' ||
    field.type === '__REVISION__'
  ) {
    return field.value ?? '';
  } else if (
    field.type === 'SINGLE_LINE_TEXT' ||
    field.type === 'NUMBER' ||
    field.type === 'CALC'
  ) {
    const value = field.value ?? '';
    return value;
  } else if (
    field.type === 'CATEGORY' ||
    field.type === 'CHECK_BOX' ||
    field.type === 'MULTI_SELECT'
  ) {
    return field.value.join(separator);
  } else if (field.type === 'CREATOR' || field.type === 'MODIFIER') {
    return field.value.name;
  } else if (
    field.type === 'GROUP_SELECT' ||
    field.type === 'ORGANIZATION_SELECT' ||
    field.type === 'USER_SELECT' ||
    field.type === 'STATUS_ASSIGNEE'
  ) {
    return field.value.map((value) => value.name).join(separator);
  } else if (field.type === 'FILE') {
    return field.value.map((value) => value.name).join(separator);
  } else if (field.type === 'SUBTABLE') {
    const separator = ',';
    return field.value
      .map((row) =>
        Object.values(row.value)
          .map((cell) => getFieldValueAsString(cell, { separator }))
          .join(separator)
      )
      .join(separator);
  }
  return '';
};

引数であるfieldは、kintoneのフィールド情報を表すオブジェクトです。REST APIから取得したレコード情報のフィールド情報をそのまま渡すことができます。

また、kintone.app.record.get()などから取得したフィールド情報もそのまま渡すことができます。

フィールドタイプに応じて、値を文字列に変換して返却します。

#kintone #JavaScript #フィールド #文字列