フィールドのアクセス権を「全社員に適用」(表示不可・編集不可)と「管理者だけに適用」(表示可・編集可)に分けてアプリを作成しました。
「管理者だけに適用」(表示可・編集可)したいフィールドにJavaScript制御を加えると、
「全社員に適用」(表示不可・編集不可)したいフィールドにJavaScriptが効かなくなります。
今は、「管理者だけに適用」したいJavaScriptコードを下の方において対応していますが、コンソールで見るとエラーが出ているので気になってきました。
「管理者だけに適用」したいフィールドに「if」を使えば回避できそうな気はしているのですが…わかりませんでした。
エラーがでない方法をご教示くださいますと幸いです。
■図
■コード
(function() {
"use strict";
kintone.events.on('app.record.detail.show', (event) => {
var el1 = kintone.app.record.getFieldElement('管理者だけ表示_項目1');
if (event.record['管理者だけ表示_項目1']['value'] === "あああ")
{
el1.style.color = '#00FF00';
el1.style.fontWeight = 'bold';
el1.style.backgroundColor = '#000000';
el1.style.fontSize = 'large';
el1.style.textAlign = "center";
};
var el2 = kintone.app.record.getFieldElement('管理者だけ表示_項目2');
if (event.record['管理者だけ表示_項目2']['value'] === "ううう") {
el2.style.color = '#00FF00';
el2.style.fontWeight = 'bold';
el2.style.backgroundColor = '#000000';
el2.style.fontSize = 'large';
el2.style.textAlign = "center";
};
var el3 = kintone.app.record.getFieldElement('全員表示_項目2');
if (event.record['全員表示_項目2']['value'] === "えええ") {
el3.style.color = '#00FF00';
el3.style.fontWeight = 'bold';
el3.style.backgroundColor = 'yellow';
el3.style.fontSize = 'large';
el3.style.textAlign = "center";
};
return event;
});
})();
以上、よろしくお願いします。
5件のコメント
オプショナルチェーンを使うか
フィールドの存在を確認した後にifを使えば問題ないかと思います。
フィールドに限らずオブジェクトは1階層ずつアクセスしていき、参照できないオブジェクトから更に下の階層へアクセスしようとした時にエラーになります。本来なら
となっていて「event.record.管理者だけ表示.value」でvalueまで辿ることができるのに対し、表示権限がないと
とレコードオブジェクトからなくなっていて、レコードの下にある「管理者だけ表示」にアクセスしようとした段階でundefined(未定義)となり、その下のvalueにアクセスできないためエラーになっている状態です。
そのため「event.record['管理者だけ表示']」がundefinedにならないか先にif文を追加したり、オプショナルチェーン(その次にアクセスできない場合即座にundefinedを返す)が必要になります。
mls-hashimotoさま
できました。ありがとうございました!
解説も大変参考になりました!!
これでエラーのないJavaScriptが組めそうです!!!
すみません、やっぱりダメでした…
コピペボタンを設定(ネットのコピペ)したのですが、このときのオプショナルチェーンの入れ方が分かりません…
↓ ↓ ↓
と変えてみたのですが、違いますよね…
※フィールド名は「temp_1」です
Ichiro Saito さま
そもそもこのtemp_1というフィールドは、ユーザー毎に閲覧権限を設定しているフィールドですか?その場合は以前に記載した内容と同じ(record.temp_1?.value)ですが…
とはいえオプショナルチェーンはundefinedを返すもので、フィールドがない場合はundefinedがコピーされます。またフィールドがあっても値がない場合は同様にundefinedがクリップボードにコピーされるので、避ける場合は
と、値やフィールドがある場合のみコピーを実行する処理にした方が良いでしょう。
mls-hashimotoさま
できました!
一皮むけた感じです!!
重ねてありがとうございます!!!
基礎・応用力がないので…ちょっとでも違うと対応できないのが悩みです ><