レコード再利用時にフィールドの初期値をセットしたい

お世話になります。

レコード再利用時に特定のフィールドを

①空(値無し、未選択状態) もしくは

②フィールドの初期値

に設定したいのですが、②の方法がわかりません。

ユーザー選択とグループ選択フィールドを空に、

リッチエディターと文字列__複数行と文字列__1行フィールドを初期値に設定する例として以下のコードを作成しました。


(function () {

    “use strict”;

    kintone.events.on(‘app.record.create.show’, function(event){

        if (event.reuse) {

        var record = event.record;

        

             record[‘ユーザー選択’][‘value’] = [];

             record[‘グループ選択’][‘value’] = [];

 

             var appId = event.appId;

             var body = {

                “app”: appId

            };

            kintone.api(kintone.api.url(‘/k/v1/app/form/fields’, true), ‘GET’, body, function(resp) {

                

                record[‘リッチエディター’][‘value’] = resp.properties.リッチエディター.defaultValue;

                record[‘文字列__複数行’][‘value’] = resp.properties.文字列__複数行__0.defaultValue;

                record[‘文字列__1行’][‘value’] = resp.properties.文字列__1行__0.defaultValue;

                

            });

        }

        return event;

    });

})();

「 kintone.api(kintone.api.url(‘/k/v1/app/form/fields’, true), ‘GET’, body, function(resp) {」内でコンソールにdefaulValueを出力すると表示されたため、初期値の取得自体はできているがeventに反映できていない?と思い、kintone Promiseを利用した書き方なども検討したのですがcreate.showイベントがPromiseサポート対象外のためつまづいています。。

アドバイスいただけないでしょうか。

kmzさんこんにちは。

create.showイベントで初期値設定を行うときは、下記のような書き方でフィールドの値を設定すれば反映されるのではないかと思います。

参考: https://developer.cybozu.io/hc/ja/articles/201941984#step1

[https://developer.cybozu.io/hc/ja/articles/201941984#step4](https://developer.cybozu.io/hc/ja/articles/201941984#step4)

 

(function () {

"use strict";
kintone.events.on('app.record.create.show', function(event){

if (event.reuse) {

var record = event.record;

record['ユーザー選択']['value'] = [];
record['グループ選択']['value'] = [];

record['リッチエディター']['value'] = 'default';
record['文字列__複数行']['value'] = 'default';
record['文字列__1行']['value'] = 'default';
}

return event;
});
})();

 

検証結果:

Shotaro Matsuda様

早急にご回答いただき、ありがとうございます!
記載していただいたサンプルで設定している’default’の部分なのですが、
スクリプトファイルに値を直書きするのではなく、
各フィールドに設定されている初期値(アプリのフォーム設定画面で設定するもの)を取得してセットしたいと思っています。

record['リッチエディター']['value'] = 'default';
record['文字列__複数行']['value'] = 'default';
record['文字列__1行']['value'] = 'default';

 

とりたい初期値

 

 
以下を参照し、defaultValueを取得する方法があることは分かったのですが、

create.showイベント実行時に値を反映させることができず、、、

https://developer.cybozu.io/hc/ja/articles/204783170-%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AE%E5%8F%96%E5%BE%97

 

もしお分かりになりましたら、アドバイスいただけると幸いです。

kmzさん

なるほど。REST APIで取得後の反映ができないですね。

ちょっと回りくどいですが、次のような方法はどうでしょうか。

  1. 別に文字列等のフィールドを用意して、そこに初期値を登録しておく
    (通常はユーザーから見えないように、グループに入れて閉じておく等の工夫もできます→参考
  2. create.showイベントにおいては、初期値フィールドから値を取得し、目的のフィールドにセットする

 

kmzさん

レコード追加・レコード編集画面で、非同期処理やボタン処理の値をフィールドに値をセットしたい場合は、

kintone.app.record.setを使います。

今回の件ですと、以下のようなコードになります。

kintone.api(kintone.api.url('/k/v1/app/form/fields', true), 'GET', body, function(resp) {
    var respEvent = kintone.app.record.get();
    respEvent['record']['リッチエディター']['value'] = resp.properties.リッチエディター.defaultValue;
    respEvent['record']['文字列__複数行']['value'] = resp.properties.文字列__複数行.defaultValue;
    respEvent['record']['文字列__1行']['value'] = resp.properties.文字列__1行.defaultValue;
    kintone.app.record.set(respEvent);
});

最初の投稿にある初期値取得時のフィールドコードは、「__0」が余計についていますが、

別のフィールドから初期値をセットするならば、Shotaro Matsudaさんの方法でもいいかもしれません。

record['文字列__複数行']['value'] = resp.properties.文字列__複数行__0.defaultValue;
record['文字列__1行']['value'] = resp.properties.文字列__1行__0.defaultValue;

 

Shotaro Matsuda様、lpj様

お世話になります。
ご回答いただき、ありがとうございます。

lpjさんに記載いただいたコードで動作確認できました!
レコード更新処理について以下の違いがあるのですね。大変勉強になりました。

kintone.events.on のインベントハンドラ内:eventオブジェクトのreturnで更新
上記以外のイベントハンドラ内 :kintone.app.record.set で更新

 

※最初の投稿の「_0」はタイプミスでした、紛らわしくて申し訳ありません。。

別のフィールドから初期値をセットする必要が出てきた際は、
Shotaro Matsudaさんにご提示いただいた方法を参考にさせていただきます。

非常に助かりました。誠にありがとうございました。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。