kViewer Myページ 条件分岐でのフィールドの表示設定

投稿していた内容ですが、返信できない環境のままクローズされてしまいましたので再投稿させていただきます。

※やりたいこと
kViewerのMyページ レコード詳細画面を表示した時
お申込み内容の値によって、表示するフィールドを変更したい。
お申込み内容の値によって、フォームブリッジ編集ボタンの表記を変更したい。

以下の内容では非表示にならず、サイトを参考にデバック作業を勧められ試みましたが、根本的に何をすればよいのか(どこを見て何がわかるのか)わかりませんでした。

コンソール:特にエラー表示なし
ブレークポイント:1行目と2行目にブレークポイントを設定した場合停止する。それ以外の行では停止しない。
通信内容:ネットワーク→Fetch/XHR 何も表示されていない

(() => {
    kv.events.record.mounted = [(state) => {
//お申込み内容が "お申込み待ち" でないとき
        if (state.record['お申込み内容'].value !== 'お申し込み待ち') { 
//ラベル1、ラベル2、添付フィールドを非表示
            kv.detail.getElementByCode('ラベル1').style.display = 'none';
            kv.detail.getElementByCode('ラベル2').style.display = 'none';
            kv.detail.getElementByCode('添付フィールド').style.display = 'none';
//フォームブリッジ編集ボタンの表記を変更

//お申込み内容が "お申込み待ち" のとき

//ラベル3を非表示

        }
        return state;
    }]
})();

宜しくお願い致します。

こんばんは。
お困りのこととは思うのですが、その状態でカスタマイズするのはチョット危険かなと思いました:pray:

お気を悪くされたら大変申し訳無いのですが、
JavaScriptというか、JavaScriptに限らずプログラミングをする上では、「デバッグ」は必須のスキルなので、
デバッグができない状態でカスタマイズをすすめるのは無謀かなぁと思います:pleading_face:

  • cybozu developer network 内を「デバッグ」で検索するだけでも色々と情報が出てきますので、参考にされてみたり、
  • Googleで検索してみたり、

https://www.google.com/search?q=デバッグのやり方+chrome+javascript

  • JavaScript入門の書籍などでも(おそらく)デバッグのやり方書いてあるものもあると思いますので本屋さんでパラパラと眺めたり

最初は読んで分からなくても、断片的な情報が繋がって分かるようになっていったりもするので、
JavaScriptやデバッグのやり方をもう少し勉強されてみて、それから見直してみることをおすすめしたいです:pray:

2 Likes

jurippeさん

ご返信ありがとうございます。
デバックしてみたのですが、以下のKintoneからのフィールドのフィールドコードが違っており、認識されていないようでした。

if (state.record[‘お申込み内容’].value !== ‘お申し込み待ち’) {
kv.detail.getElementByCode(‘添付フィールド’).style.display = ‘none’;

kVewerで追加した項目(ラベルなどの静的フィールド)はkVewer側でフィールドコードを設定できるので、そのフィールドコードで認識されていたのですが、Kintoneの項目のフィールドコードはどのようにすれば見つけられますでしょうか。

Scopeで見たときにidがあったので入れてみましたがundefinedでした。

宜しくお願い致します。

デバック ではなくて、 デバッグ です。
Kintone ではなくて、kintone て書いたほうが良いです。

kintoneのフィールドコードは基本中の基本なので、ヘルプなどを検索してみてください:cry:

1 Like

上記の通り、Kintoneのフィールドコードではなく、kViewerに設定しているKintone項目のフィールドコードです。

詳しい方がいれば教えていただけないでしょうか。
classは “kv-element drop-down” となっており、特定のフィールドを示すclassがなさそうでした。

宜しくお願い致します。

1 Like

kViewerのJavaScript カスタマイズのドキュメントによると、kv.detail.getElementByCode(code) 関数 には code: 要素を取得したいフィールドのフィールドコード とあったので、kintone アプリのフィールドコードのことかと思いました。

if (state.record[‘お申込み内容’].value !== ‘お申し込み待ち’) {
kv.detail.getElementByCode(‘添付フィールド’).style.display = ‘none’;

それと、

if (state.record[‘お申込み内容’].value !== ‘お申し込み待ち’) {

とありますが、(詳しい方に見てもらったほうが良いと思いますが)先程のドキュメント読んだ感じ、state.recordではなくて、正しくはstate.recordsで、これは配列ではないでしょうか?
配列だとstate.records[0]以下を掘らないといけない気がします。実行環境もない状態で想像で言ってますので違うかも。

参考になればと思います!

2 Likes

単純にフィールドコード間違っており、以下でボタンの表記内容の変更も含め思い通りの動きとなりました。
細かくデバッグできるように勉強します。

(function() {
  "use strict";
    kv.events.record.mounted = [function (state) {
                                                    
//お申込内容が "お申込待ち" でないとき
      if (state.record['お申込内容'].value !== 'お申込待ち') { 
//ラベル1、ラベル2、添付フィールドを非表示
        kv.detail.getElementByCode('ラベル1').style.display = 'none';
        kv.detail.getElementByCode('ラベル2').style.display = 'none';
        kv.detail.getElementByCode('見積書').style.display = 'none';
//フォームブリッジ編集ボタンの表記を変更
        const displayFormButton = document.getElementsByClassName('ui icon button kv-fb-content _normal red large');
          if (displayFormButton.length > 0) {
            for (const button of displayFormButton) {
              button.innerText = "申請内容を確認する";
          }
        }
      }
//お申込み内容が "お申込み待ち" のとき
      else { 
//ラベル3を非表示
        kv.detail.getElementByCode('ラベル3').style.display = 'none';        
      }
    return state;  
    }]
})();
1 Like

ちなみに、勉強を始めたばかりの私にとっては(わからない人に説明するときも)変数の値は日本語を入れるほうがわかりやすいしメンテしやすいのですが、プログラマーの方が難しい英単語にするのは理由があるのでしょうか。(グローバルな顧客を相手にする場合を除いて)

(function() {
  "use strict";
    kv.events.record.mounted = [function (state) {

  const 取得フィールド = kv.detail.getElementByCode
  const フォームブリッジ編集ボタン = document.getElementsByClassName('ui icon button kv-fb-content _normal red large');
                                                    
//お申込み内容が "お申込み待ち" でないとき
      if (state.record['お申込内容'].value !== 'お申込待ち') { 
//ラベル1、ラベル2、添付フィールドを非表示
        取得フィールド('ラベル1').style.display = 'none';
        取得フィールド('ラベル2').style.display = 'none';
        取得フィールド('見積書').style.display = 'none';
//フォームブリッジ編集ボタンの表記を変更
          if (フォームブリッジ編集ボタン.length > 0) {
            for (const button of フォームブリッジ編集ボタン) {
              button.innerText = "申請内容を確認する";
          }
        }
      }
//お申込み内容が "お申込み待ち" のとき
      else { 
//ラベル3を非表示
        取得フィールド('ラベル3').style.display = 'none';        
      }
    return state;
    
    }]
})();
1 Like

うまく行ってよかったです!

変数名については、私は最近はあまり気にしなくなりました。
自分だけしか使わないカスタマイズとかだと変数名に絵文字を使うこともあります。
分かりやすいほうが良いですよね!!

でもきっと、多くのプログラマーは「変数名は英語で書きましょう」と教わり、それが染み付いていると思います:sweat_drops:

それと、チームで開発するときはチームのルールに従って変数名をつけるのが良いかな~と思います^^

2 Likes

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