新規投稿
フォローする

ルックアップ設定時の選択肢付フィールドの整合性チェック

2019/12/08の定期メンテナンスで、「複数選択」と「チェックボックス」をルックアップの「ほかのフィールドのコピー」に設定できるようになりました。 「ラジオボタン」、「ドロップダウン」、「複数選択」、「チェックボックス」といった選択肢付フィールドは、ルックアップの「ほかのフィールドのコピー」に設定した際、選択肢が一致していなくてもフォームの保存ができます。 選択肢が一致していない場合、ルックアップ先に存在していない選択肢はコピーされません。 今回は、ルックアップ元と先で選択肢が一致しているかチェックするカスタマイズを紹介します。

デモ

アプリCで、アプリAとアプリBのフィールドをルックアップしています。 一部のフィールド(「ラジオボタン」、「複数選択」、「チェックボックス2」)については、ルックアップ元と先で選択肢が一致していない状態です。

この状態でアプリCを保存すると、一覧画面でアラートを表示します。

コード

「kintoneシステム管理 > JavaScript / CSSでカスタマイズ」で下記「sample.js」を読み込みます。

・sample.js

(function() {
  "use strict";
  kintone.events.on([
    'app.record.index.show',
  ], function(){
    kintone.api(kintone.api.url('/k/v1/app/form/fields', true), 'GET', {
      app: kintone.app.getId(),
    }).then(function(originAppFields){
      Object.keys(originAppFields.properties).filter(function(fieldCode){
        return originAppFields.properties[fieldCode].lookup;
      }).forEach(function(lookupFieldCode){
        var fieldMappings = originAppFields.properties[lookupFieldCode].lookup.fieldMappings.filter(function(fieldMapping){
          return originAppFields.properties[fieldMapping.field].options;
        });
        if(!fieldMappings) return;
        kintone.api(kintone.api.url('/k/v1/app/form/fields', true), 'GET', {
          app: originAppFields.properties[lookupFieldCode].lookup.relatedApp.app,
        }).then(function(relatedAppFields){
          fieldMappings.forEach(function(fieldMapping){
            if(Object.keys(originAppFields.properties[fieldMapping.field].options).sort().join('') !== Object.keys(relatedAppFields.properties[fieldMapping.relatedField].options).sort().join('')) alert(''+fieldMapping.field+'」の選択肢がルックアップ元と一致しておりません。');
          });
        });
      });
    });
  });
})();

 

1

0件のコメント

サインインしてコメントを残してください。