フィールドの無効化(編集禁止)ができないので困っています

kintoneで社内システムを開発している者です。

kintoneのアプリでスクリプトで自動採番している処理があるので、自動採番するフィールドを編集無効にしたいと思っているのですが、何が干渉しているのかうまくいきません。

最初は、tis社の条件分岐プラグインで、該当のフィールドに対して、編集無効 としていましたが、何かイベントを動かさないと効かないようなので、スクリプトで強制的に行うことにしました。

スクリプトの最後に、以下のコードを置いてみました。

kintone.events.on([‘app.record.create.show’, ‘app.record.edit.show’], (event) => {
event.record[‘依頼No’].disabled = true;
return event;
});

実行したところ、

show.js:198 Uncaught TypeError: Cannot set properties of undefined (setting ‘disabled’)

どうもこのフィールド[依頼No]が認識されないようなので、タイムアウトした状態で実行してみましたが、結果は同じでした。このフィールドは実際に存在しており、別のスクリプト(このスクリプトより前に配置)で自動採番を行っており、自動採番の処理自体は正常に動いています。また、その処理は、保存時に走るイベントなので、影響は受けないと思います。

kintone.events.on([‘app.record.edit.show’], (event) => {
setTimeout(() => {
if (event.record[‘依頼No’]) {
event.record[‘依頼No’].disabled = true;
}
}, 700);
return event;
});

一部、別のプラグインも使っているのでその影響でしょうか?
それらでは、依頼Noというフィールドは使っていません。

何かヒントがありましたら教えて頂けると助かります。

コード上は問題なさそうにみえますけどね…

show.js:198 Uncaught TypeError: Cannot set properties of undefined (setting ‘disabled’)

ただ、上記でているのは、フィールドコードが間違っている可能性がありますね。
確認されているとはおもうのですが、実際どういうフィールドコードになっているかみてみるのはどうでしょうか。
フォーム設定画面でみるでもいいですし、console.logでみてもらうなど

一番は、 event.record[‘依頼No’].disabled = true; あたりでブレークポイントを仕込んで見てみることですかね。


どうもこのフィールド[依頼No]が認識されないようなので、タイムアウトした状態で実行してみましたが、

kintoneのイベントハンドラでやっているのでその必要もないはずです!

「いいね!」 1

経験則的に。
他のJavaスクリプトの、create.show、edit.showイベントを利用している部分で、
returnしていないコードがあるかもしれません。
確認してみるとよいかと。

「いいね!」 2

コメント有難うございました。

直接エラーを出しているのが、show.jsというkintoneのスクリプトなので、何をしているのかさっぱり分からず、私の手には負えませんでした。(-_-:wink:

ただ、
kintone.events.on(‘app.record.edit.show’, function(event) {
var fieldCode = ‘次回指示’;
if (event.record[fieldCode]) {
event.record[fieldCode].value = ‘無し’;
console.log(‘ラジオボタン:次回指示無しセット完了’);
} else {
console.warn(fieldCode + ’ が見つかりません’);
}
return event;
});

と書き換えてみたのですが、「見つかりません」とは出てないのですよね。
フィールドコードは全角名ですが、合致しているということだと思います。
おなじアプリでラジオボタンの初期化を行おうとしているのですが、これも同様のエラーが出ています。

編集禁止は、スクリプトではなく、アクセス権のほうで何とかなりそうですが、ラジオボタンのほうはそういう訳にはいかないので困っています。

もう少しでコンソール画面で調べてみます。

コメント有難うございました。

3本ほどのスクリプトがあるのですが、returnが抜けていると思われる部分は見つけ出せませんでした。

そういう別スクリプトの影響を受けることもあるのですね。
参考になりました。
有難うございます。

私も @mura 様と同じような箇所を疑っておりますが…

kintone.events.on(['app.record.create.show', 'app.record.edit.show'], (event) => {
    console.log(event.record['依頼No'])
})

のようにconsole.log()を出力した場合、コンソールには何が表示されますでしょうか?
undefinedの場合は、フィールドコード名が正しく指定できていないかもしれません。

「いいね!」 1

もともとの質問で

と書かれていましたが、 setTimeout() を用いても引数に渡ってきた内容は渡ってきた当時のままです。 (とはいえ参照なので他の関数でオブジェクト自体が書き換えられる可能性はありますが)

kintone.app.record.get() を使って書き直したほうが良いと思います。

kintone.events.on([ 'app.record.create.show', 'app.record.edit.show', ], function (event) {
  setTimeout(() => {
    const { record, } = kintone.app.record.get();
    record['依頼No'].disabled = true;
    kintone.app.record.set({ record, });
  }, 700);
});

これでもダメであれば、フィールドコードが間違っていると思います。

逆を言えば、これが通るなら他のカスタマイズJSやプラグインが悪さをしているような気がします。。。

「いいね!」 1

自分も住田さんの:backhand_index_pointing_down:この考え方に同感です!

これが通るなら他のカスタマイズJSやプラグインが悪さをしているような気がします。。。

理由としては

最初は、tis社の条件分岐プラグインで、該当のフィールドに対して、編集無効 としていましたが、何かイベントを動かさないと効かないようなので、

とあって、この「何かイベントを動かさないと効かない」ということは
ないんです!

(自分は)いろんなアプリで何回も編集禁止をかけていますが...
条件(=イベント)なしで問題なくフィールドは「グレーアウト」になります

なので、「イベント条件」の設定しないと動かない と云うことは
その時点で、他のPluginが干渉している可能性「大」と判断しています

ちなみに、今回の発端となった、キンコミでの:backhand_index_pointing_down:投稿もPluginの干渉みたいです

コメント有難うございます。
うまく動きました。ワンテンポおいてからの動作なので、timeoutが効かせたこの対応の結果のようです。

しかし、
show.js:198 Uncaught TypeError: Cannot set properties of undefined (setting ‘disabled’)
のエラーは出ています。
他のところで出ているのかもしれません。

「いいね!」 1

コメント有難うございます。

この「何かイベントを動かさないと効かない」ということは
ないんです!

そうですね。フィールドの初期化をする時は、条件分岐プラグインの最初のタブに条件無しで置いていて動いていたので、不思議に思っていました。
やはり何かの干渉ということなのでしょうか。

発端のスクリプトを入れてから、条件分岐プラグインの内容まで変な挙動になり、その部分もスクリプトに置き換えました。

まず、原因の把握されることをお勧めします:blush:
【カスタマイズ(=JS)と、他 全てのPluginを分離確認】

①全てのPluginを「無効」:backhand_index_pointing_down:に、したら、フィールドは「グレーアウト」しますか?


❶しない…なら script の見直しですね!
❷した…なら 干渉 しているPluginの特定を行う

②「干渉」しているPluginの特定を行う方法はキンコミで
tmz さんに対してコメントされていますよ
キンコミ、adachiさんのコメント
キンコミ、自分のコメント

③原因が①でも②でもない場合は
「条件分岐処理プラグイン」のバグも考えられますので
返信いただければ別のPluginをご紹介することは可能です:blush:

---追記(見落としたので…)---------------

うまく動きました。ワンテンポおいてからの動作なので、timeoutが効かせたこの対応の結果のようです。

プログラムの動作順を意識して、Pluginをいれたり や カスタマイズ されることをお勧めします

コメント有難うございました。

お返事が遅れてしまい大変失礼致しました。
せっかくのアドバイスなのですが、私の知識不足で、Pluginの特定方法が理解できず、たまたま別のフィールドも無効化する必要があったので、付け加えたところ、なぜか、そのフィールドが無効化できました。
ますます判らなくなったのですが、ソースをよくよく見ると、2つのフィールドのフィールドコードの装飾が違っていることに気づきました。
つまり、無効化できているほうのコードは、リテラルの扱いになっているのに対し、できてないほうはそうなっていないのです。

まことにお恥ずかしい話ですが、フィールドコードを囲っているクォーテーションの一方が全角文字になっていました。
寄る年波という言い訳になりますが、シングルクォーテーションは全角も半角も見た目は全く区別が付かず、2つ並んでやっと、文字装飾の違いで気づいたわけです。

目の悪さもですが、フィールドコードに全角文字を使うのが悪いんでしょうね。

大変お騒がせしまして、皆様のお手を煩わせて申し訳ありませんでした。

「いいね!」 4

コードの全角/半角、間違いがわかってよかったですね

Pluginの特定方法が理解できず、

は、説明を書き直しておきましたので、今後の ご参考まで!:blush:
干渉しているPluginの特定方法

「いいね!」 2

いったん解決したようで良かったです。

フィールドコードは、私も昔は半角英数にしていましたが、最近はもっぱら日本語でラベルとフィールドコードを統一しています。複数人でアプリを管理するときに、ローマ字/英語の揺れ、ローマ式/ヘボン式の揺れ、そもそもフィールドコードを付けない等……バラバラになってしまうので、もはや日本語のほうがルールが分かりやすいなという意図です。

また、全角/半角については、テキストエディタを使うと見分けがつきやすいかもしれません。私は Visual Studio Code を使っていますが、開いているファイルを JavaScript として認識させると、構文エラーや全角文字が分かりやすく表示されます。

追加でソフトが使えない環境であれば、等幅フォントを使うのもわかりやすくなるかもしれませんね (↑の画像は等幅なのに全角文字が半角表示されているので、環境によると思いますが……)

根本原因については別途解明する必要があるとは思いますが、コードを書く際のご参考までに。

「いいね!」 2

(キンコミでは井上望です)

解決したようで、何よりです♪
文字の微妙な間違い、あるあるですよね(自分も昔何度もやってました)。
もし、ソフトをインストールすることが可能であれば、VS Codeをインストールして、LinterとFormatterを設定しておくと、入力誤りを大幅に軽減できます。

あるいは、JSEdit for kintoneをプラグインとしてkintoneにインストールし、こちらから作業を行うと、VS Code程ではないですが、エラーを検知してくれます。

よろしければ、お試しください。