レコード印刷時、空白文字フィールドを非表示にする方法

初めて質問させていただきます。kintone をきっかけにjavascriptを始めたものです。今回、kintoneに関して以下を教えていただきたく存じます。

指定の文字フィールドが空白の場合(ここでは’aaa’としました)は、レコード印刷時に非表示にできるようにしたいと考えております。類似の投稿等を見ながら、以下の通りコードを作成してみたのですが、うまく動作してくれません。どなたかご教示いただけますと幸いです。わからないことだらけのため、的外れなことを言っているかもしれせんが、何卒どうぞよろしくお願いいたします。

(function() {
'use strict';
kintone.events.on('app.record.print.show', function(event) {
var record = e.record;
if(!e.record.aaa.value) {
kintone.app.record.setFieldShown('aaa', false);
}else{
kintone.app.record.setFieldShown('aaa', true);
}
})
})

ktbeginnerさん、はじめまして。

  • 無名関数(一番外側のカッコ)が定義されているだけで、実行されていません。最後に()が必要です。
  • 3行目、function(event) となっているので、5行目は!e.record.aaa.valueではなく!event.record.aaa.valueとなるはずです。
  • 3行目から始まる関数の最後に、return event;が必要です。

最終的にこうなると思いますが、どうでしょうか?

(function () {
"use strict";
kintone.events.on("app.record.print.show", function (event) {
if (!event.record.aaa.value) {
kintone.app.record.setFieldShown("aaa", false);
} else {
kintone.app.record.setFieldShown("aaa", true);
}
return event;
});
})();

ちなみに補足ですが、短く以下のように書くこともできますよ。

(function () {
"use strict";
kintone.events.on("app.record.print.show", function (event) {
kintone.app.record.setFieldShown("aaa", !!event.record.aaa.value);
return event;
});
})();

Ribbit様

この度はご回答いただきありがとうございます。

早速、訂正いただいたコードについて試してみたところ、うまく動作してくれました。ありがとうございます!

また、補足いただいた短いコードについてもご教示いただきありがとうございます。こんなにスッキリかけるんですね。

しかし、こちらについては試してみたところ、うまく動作してくれませんでした。何が原因か考えてみましたが、

私にはわかりませんでした。。。後学のために、教えていただけますでしょうか?

どうぞよろしくお願いいたします。

Ribbit様

連投ですいません。

もしかしたらと思い、3行目を

kintone.app.record.setFieldShown("aaa", !event.record.aaa.value);

のように変えてみたら、逆に文字フィールドが空白なら表示され、空白以外で非表示となってしまいました。。。

trueとfalse以外を渡すとエラーになるようですね、失礼しました。

 

!を2つ連続して、

(function () {
"use strict";
kintone.events.on("app.record.print.show", function (event) {
kintone.app.record.setFieldShown("aaa", !!event.record.aaa.value);
return event;
});
})();

または、

(function () {
"use strict";
kintone.events.on("app.record.print.show", function (event) {
kintone.app.record.setFieldShown("aaa", Boolean(event.record.aaa.value));
return event;
});
})();

このどちらでも動作すると思います。

Ribbit様

早速ご確認いただき、またコードもご教示いただきありがとうございます。

どちらも希望通りに動作してくれました。

また、Ribbit様のホームページも拝見いたしました。初学者向けのページを見つけましたので、

今後参考にさせていただきます。ご対応どうもありがとうございました。