(再)ルックアップで取得した文字列フィールドによりグループ開閉をしたい

勉強中の初心者で、初めてコードを書きました。
ぐちゃぐちゃだと思います。ヒントをもらえたら幸いです。

(初心者)ルックアップで取得した文字列フィールドによりグループ開閉をしたい - kintone カスタマイズ - cybozu developer community

上記、先ほど質問させていただき、いろいろ調べながらコードを書いてみたのですが何もうまくいきませんでした。

一つ目のルックアップの値をまず取得 から グループ開閉のコードに全くつながっている感じがありません。。
曜日=文字列フィールドコード を読み、そこが”火”であれば 、火=グループコードのみ開くという風にしたいです。

0からやり直せ…というレベルかと思いますが、ヒントをいただければと存じます。
よろしくお願いいたします。

(function() {
  'use strict';
  
  
  kintone.events.on('app.record.create.change.曜日',function(event) {
  
   
    if (kintone.app.record.getFieldElement('曜日') === '火') {
     kintone.app.record.setGroupFieldOpen('火', false);
    } else {
    
      kintone.app.record.setGroupFieldOpen('火', true);
    }
  
    
  });
})();

こんにちは!

    if (kintone.app.record.getFieldElement('曜日') === '火') {

ぱっと見ですが、ここが違います。

これはフィールドのHTML要素を取ってくるメソッドで、値を取ってくるものではないです。
変更後の値はeventの中にありますので、ブレークポイントをこの行に設定して中身を確認してみると良いと思います!
デバッグに関する記事も色々あるぽいのでぜひ^^

2 Likes

(返信が重複していますが入力したのでこのまま投稿します)

良いところまでできていると思います。気になったのは3点で、その内直さなければならないものは1点程度です。

  kintone.events.on('app.record.create.change.曜日',function(event) {

この部分は「レコードの新規作成時かつ曜日変更時に動作する(app.record.create.change.曜日)」というもので、レコードの編集時(保存後の再編集)には動作しないようになっています。そのままの方が都合が良いのであれば変更する必要はありませんが、ほとんどが「編集時にも同じように動いた方が都合が良い」と思うので、その場合は

  kintone.events.on(['app.record.create.change.曜日', 'app.record.edit.change.曜日'], function(event) {

といった形になります。なお、この動作するタイミング(イベントハンドラ)を2つ以上指定する場合のみ、配列([])というもので囲む必要があります。

もっと言うと、グループの開閉といった、装飾を変更するカスタマイズはレコードを閲覧する時や編集開始時にも動作した方が都合が良いと思うので、

  kintone.events.on([
    'app.record.detail.show', // レコードの閲覧画面を開いた時
    'app.record.edit.show', // レコードの編集を開始した時
    'app.record.create.change.曜日', 'app.record.edit.change.曜日'
  ], function(event) {

とするとより便利かもしれません。

    if (kintone.app.record.getFieldElement('曜日') === '火') {

この部分ですが、kintone.app.record.getFieldElement()は対象のフィールドを取得するためのものではありますが、取得するものはいわゆるHTML要素で、簡単に言うとHTML要素を取得して文字色や背景色を変更するために使うものと覚えていただくと良いです(また、kintone.app.record.getFieldElement()はレコード詳細画面を開いた時にしか動作しないものですが、今回は覚える必要はありません)。

フィールド値は、function(event)で囲んだ中のevent.recordというところにあり、

    if (event.record['曜日'].value === '火') {

となります。
function(test)としたならばtest.record[‘曜日’].valueとなり、これに関しては理屈抜きでevent.record[‘フィールドコード’].valueでフィールドの値が取れる、と覚えるのが一番良いです。いずれ理屈は理解できるようになります。

また、今後もチュートリアルを続けられ、サンプルコード等をご覧になっているのであれば、

let record = event.record;
if (record['曜日'].value === '火') {

みたいな記述をよく見ると思いますが、これはいちいちevent.record…と書かなくて良いように「recordをevent.recordと見なす」と宣言している記述です。今後こちらのチュートリアルを進められるならよく見ることになりますが、基本的にこの方法で書かれています。

    
  });
})();

    return event;
  });
})();

function(event)から始まる処理が終わる時には、return eventをする癖をつけておくと良いです。装飾を変える今回の処理に影響はないんですが、今後フィールドの中身を書き換える処理を作る場合、return event(結果をレコードへ反映)がないと反映されません。また、今回のこのカスタマイズがreturn eventされずに他のカスタマイズを追加した場合も同様に反映されなくなるので、ごくわずかな例外を除いて基本的にreturn eventはした方がよいです。

私も右も左も分からないところからスタートして今に至っているので、今後の勉強を応援しております。

3 Likes

ご回答ありがとうございます。
デバックで確認ということができるのですね!
じっくり読んでみます ありがとうございます。

1 Like

ご回答ありがとうございます。
(私事ですが、全く理解ができず周りにもわかる人がおらず詰んでつらくなっていましたが、おかげで一人じゃないことがわかり、コードもなんとなくわかり涙が出そうです。優しいお言葉感謝いたします。)
基本的なことから丁寧に教えてくださりわかりやすいです。
ありがとうございます!イベントの内容ももっと覚えていくところだと感じました。

ちなみに教わった通りコードを変更してみましたがうまくグループ開いてはくれませんでした…
たぶん何かが違うかと思うので見直してみます!

ありがとうございます!

1 Like

見落としておりました。true(グループを開く)とfalse(グループを閉じる)が逆なのではないかと思います。

1 Like

開きました・・・・・!!!
初めてkintoneに落とし込むことができて感動です。
あとはほかの曜日も追加するだけですね
ありがとうございます。引き続きがんばります!

1 Like

このトピックは最後の返信から 60 分が経過したので自動的にクローズされました。新たに返信することはできません。