app.record.detail.show のイベント発生時に「フィールドの値を書き換える」ことができる、とAPIドキュメントには書いてあります。
そこで実際に試してみたのですが、残念ながらフィールドの値を書き換えることができませんでした。
私がAPIドキュメントの内容を誤解しているのか、使い方が良くないのか、理由がわかりませんので、お教えいただけますでしょうか。
1. テスト用に用意したアプリ
「花」というフィールドコードを持つ「文字列(1行)」が1つだけのシンプルなアプリを作りました。そして下図のようにテストデータを入力しました。
2. テスト用に用意したJavaScriptプログラム
- (function() {
- “use strict”;
- kintone.events.on(‘app.record.detail.show’, function(ev) {
- varrecord = ev.record;
- record[‘花’][‘value’] = ‘さくら’;
- console.log(ev);
- return ev;
- });
- })();
※詳細画面が表示された時に、花フィールドの値を「さくら」に書き換えるつもりで作成しました。
3. 詳細画面を表示させてみると・・・
上図は、花フィールドに「イチゴ」が入力されているレコードの詳細画面です。
イチゴがさくらに置き換わることを期待しましたが、イチゴのままです。
Google Chromeのディベロッパーツールで、return 直前のイベント(ev)を見てると、上図のように「さくら」になっております。
ご指導、よろしくお願いいたします。
detail.showは値のセットに寄与しないイベントです。
そもそもkintoneの画面操作として値の操作は、新規登録・編集画面、一覧編集画面でしかできませんので、これらの画面におけるイベントしか値のセットには寄与できないということです。submit.successなんかも保存後イベントとして詳細画面でのイベントですので、値の操作に寄与できません。
値の操作に寄与できないイベントに引っ掛けて値の操作をやるさいには、REST APIによる操作を要します。この辺はこれまでのTipsを見ると、使い分けに納得感が出てくるかと思いますので、チェックしてみてください。
Yamashitaさん
わかりやすい解説ありがとうございます。
一覧表示画面では、イベントのリターンをしても値を更新できないのですね。単純なアプリでも実現できなかったので、そもそもダメなのかもという気はしていたところです。edit.showですとコード例も載っているので、何か違いがありそうな気もしていました。
どうもありがとうございました!
独り言:
ということは、APIドキュメントに「イベント発生時に実行できる操作」として「フィールドの値を書き換える」という記述は、間違えて載せているということかなぁ〜 (^^;
リンクされた「イベント発生時に・・・」は、プロセス管理のアクションイベントと記述があり、detail.process.proceedイベントを指していて、これはこれで正しく、値の操作に寄与できるイベントとなっています
なるほど!そういうことでしたか!
Indexだけを見て、実行できると思い込んでいましたが、ドキュメントの読み方とか、その記述内容とか注意深く読みないといけないなと反省です。
どうもありがとうございました。