特定のフィールドが入力されたら編集不可にしたい

お世話になっております。

(やりたいこと)

テーブル内に設置してあります日付フィールドに、日付が入力されたらその行を編集不可にしたいと考えております。

(状況)

コードの作成はできたのですが、全く動かずコンソールにエラーが表示されていない状況です。

また、別アプリや他のJSを外して試したところ同じ状況でした。

(使用コード)

日付フィールド=支払日

テーブル=入金記録

(function() {
  'use strict';
  kintone.events.on('app.record.edit.show', function(event) {
  
    table.forEach(function(row){
      const table = event.record.Table.value;
      const fields = event.changes.field;
      const paymentStatus = record.支払日value;
   const fldTable = '入金記録'; 
   const myTable = record[fldTable].value;
   
      if (field.paymentStatus > '') {
        // フィールドを入力不可にする
        Object.keys(fields).forEach((row)=>{
          row.value.myTable.disabled = true;
        });
      }
    });
    return event;
  });
})();

(編集画面)

ご教授して頂けますと幸いです。

(追記)

コードが一部変わったため編集しております。

 

 

エラーが出ないとのことでしたが、

  kintone.events.on('app.record.edit.show',function(event) {

とありますので、いったんレコードを入力して保存し、編集画面にすると

「table is not defined」

と表示されました。

 table.forEach(function(row){

table.forEachの部分でtableって定義されていませんよ、という指摘です。

もし、お手本にされたサイトなどがあれば、リンクを追加していただけないでしょうか?

harada

お世話になっております

参考にしたのはこちらの質問と運用しているJS(主に row )です。

 

いったんレコードを入力して保存し、編集画面にすると「table is not defined」と表示されました。

→再度、編集画面に行くとエラーがでていたのですね。私の確認不足でした...

 table.forEach(function(row){

の位置を変更する等、エラーを修正してみます。

 

(運用しているJS)

(function () {
  'use strict';
  kintone.events.on('app.record.edit.change.品目', (event) => {

    const fldTable = '入金記録'; //テーブルのフィールドコード

    const field = event.changes.field;
    const record = event.record;  //レコード
    const carryOver = record.前月繰越.value; //前月繰越
   const myTable = record[fldTable].value; //テーブル  

    //ドロップダウンの値が現金繰越のときに実行
    if(field.value === '現金繰越'){
      
      //テーブルの行数分だけ繰り返す
      myTable.forEach((row) => {
        //テーブルの行内にある「金額」にcarryOverの値を格納
        row.value.金額.value = carryOver;  //金額が定義されていない
      });
    }

    return event;
    });
})();

お手本ページの

  kintone.events.on('app.record.edit.show', function(event) {
    var table = event.record.Table.value;

    table.forEach(function(row){

    var table = event.record.Table.value;

が抜けていて、tableに対して forEachをしているのでエラーということのようです。

harada

お世話になっております。

完全に見落としておりました、ご指摘ありがとうございます。

harada様のご指摘がなかったら見つけることができなかったと思います。

 

 

追加したところ

Uncaught TypeError: Cannot read properties of undefined (reading 'value')

と追加した箇所にてエラーが出てきたので引き続き修正していこうと思います。

 

 

1)修正の方法は、以下が参考になると思います。

kintoneカスタマイズの基本的なデバッグの流れを身につけよう – cybozu developer network
https://developer.cybozu.io/hc/ja/articles/360038920252-kintone%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%AE%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%AE%E6%B5%81%E3%82%8C%E3%82%92%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%91%E3%82%88%E3%81%86

2)お手本ページの内容を少し手直しする方が、仮で目指すものが近いかもしれません。

テーブルとキーになるフィールドコードを変更しました。また、支払日が入った場合に、入力をまちがった場合直せないようなので、日付だけは変更できるようにしました。(まずければ if文を外してください。)

if (fieldCode !== '支払日') {

のあたりです。他者による承認の必要とか、ユーザーは絶対直せないなどの要件があれば、レコードの権限機能などを使うことになると思います。

ご参考

(() => {
  'use strict';
  kintone.events.on('app.record.edit.show', (event) => {
    const table = event.record.入金記録.value;

    table.forEach((row) => {
      const fields = row.value;
      const paymentDay = row.value.支払日;

      if (paymentDay.value) {
        // フィールドを入力不可にする
        Object.keys(fields).forEach((fieldCode) => {
          if (fieldCode !== '支払日') {
            fields[fieldCode].disabled = true;
          }
        });
        // [-]ボタンを非活性にする
        [].forEach.call(
          document.getElementsByClassName('remove-row-image-gaia'),
          (button) => {
            button.disabled = true;
          }
        );
      }
    });
    return event;
  });
})();

 

harada

お世話になっております。

 

デバック作業がまだまだ甘かったので、再度読み返し確認をしようと思います。

 

コードのご教授、修正する際のお気遣いありがとうございます。

動作確認をしたところ無事に思っていた動作をすることが出来ました。

やはり、お手本ページをそのまま書き換えて運用した方が確実ですね...

 

重ねてお礼申し上げます。

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