お世話になります。
レコード再利用時に特定のフィールドを
①空(値無し、未選択状態) もしくは
②フィールドの初期値
に設定したいのですが、②の方法がわかりません。
ユーザー選択とグループ選択フィールドを空に、
リッチエディターと文字列__複数行と文字列__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で取得後の反映ができないですね。
ちょっと回りくどいですが、次のような方法はどうでしょうか。
- 別に文字列等のフィールドを用意して、そこに初期値を登録しておく
(通常はユーザーから見えないように、グループに入れて閉じておく等の工夫もできます→参考)
- 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さんにご提示いただいた方法を参考にさせていただきます。
非常に助かりました。誠にありがとうございました。
system
(system)
クローズされました:
7
このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。