# Return Eventの仕様？　同じイベントで複数のことを実行できません。。どなたかお助けを。。

**URL:** <https://community.cybozu.dev/t/topic/3909>\
**Category:** kintone 開発相談\
**Created:** [2019 年 4 月 3 日午前 5:52 UTC](https://community.cybozu.dev/t/topic/3909 "2019-04-03T05:52:18Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account974](https://avatars.discourse-cdn.com/v4/letter/l/3e96dc/32.png) [@Legacy\_Account974](https://community.cybozu.dev/u/Legacy_Account974)\
**Post date:** [2019 年 4 月 3 日午前 5:52 UTC](https://community.cybozu.dev/t/topic/3909/1 "2019-04-03T05:52:18Z")

</div>

以下のようなコードの場合、\*/ここから\*/を実行するとそれ以前のコードが実行されず、反対にコメントアウトで実行しなければ、それ以前のコードが実行されます。

コードの意図としては、3つのイベント時に(1)disableしたいものがあるまた、同イベント時に(2)非表示にしておきたい要素がある

これらを同時に記載しているというだけなのですが、どういうわけか上述の通り、動作しません。

&nbsp;

原因と解決方法をどなたか、お力添えをください。。。

&nbsp;

よろしくお願い申し上げます。

&nbsp;

&nbsp;

```
jQuery.noConflict();
(function($) {
"use strict";

var events =[
'app.record.index.edit.show',
'app.record.edit.show',
'app.record.create.show'
]

kintone.events.on(events, function(event) {
//適用ルートを編集不可
event.record['invisible']['disabled']=true;
event.record['adopt_root_dl']['disabled']=true;
//承認フラグを編集不可
event.record['LeaderApr']['disabled']=true;
event.record['COApr']['disabled']=true;
event.record['INVApr']['disabled']=true;
event.record['FPApr']['disabled']=true;
event.record['AAApr']['disabled']=true;
event.record['MGRApr']['disabled']=true;
event.record['CEOApr']['disabled']=true;
event.record['CCApr']['disabled']=true;
event.record['ICApr']['disabled']=true;
event.record['BMApr']['disabled']=true;
event.record['EOApr']['disabled']=true;
event.record['IBMApr']['disabled']=true;
  //承認日付ならびに稟議番号を編集不可
event.record['ApprovedDate']['disabled']=true;
event.record['ApprovalNum']['disabled']=true;
event.record['ApprovalYear']['disabled']=true;
event.record['uniqueNum']['disabled']=true;

console.log(event);
return event;

});

/*ここから
var events2=[
'app.record.detail.show',
'app.record.create.show',
'app.record.edit.show'
]

kintone.events.on(events2, function(event){
kintone.app.record.setFieldShown('ApprovalYear', false);
kintone.app.record.setFieldShown('uniqueNum', false);
kintone.app.record.setFieldShown('invisible', false);

});
*/
})(jQuery);

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 3 日午前 5:57 UTC](https://community.cybozu.dev/t/topic/3909/2 "2019-04-03T05:57:14Z")

</div>

「ここから」の中の function にも、一番最後に return event; って書く必要がありそうです！

---

<div class="post-metadata">

**Author:** ![Legacy\_Account974](https://avatars.discourse-cdn.com/v4/letter/l/3e96dc/32.png) [@Legacy\_Account974](https://community.cybozu.dev/u/Legacy_Account974)\
**Post date:** [2019 年 4 月 3 日午前 6:02 UTC](https://community.cybozu.dev/t/topic/3909/3 "2019-04-03T06:02:39Z")

</div>

コメントありがとうございます。

藁をもすがるおもいだったので、お返事とてもありがたいです！さて、

[マニュアル](https://community.cybozu.dev/hc/ja/articles/360015513211-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E8%A1%A8%E7%A4%BA-%E9%9D%9E%E8%A1%A8%E7%A4%BA#step1)を見ると特にkintone.app.record.setFieldShownはreturn eventする必要がない（イベント寄与しない？）

ものに見えるのですが、なぜ必要なのでしょうか。。？

重ねて申し訳ございませんが、よろしくお願い申し上げます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 3 日午前 6:09 UTC](https://community.cybozu.dev/t/topic/3909/4 "2019-04-03T06:09:54Z")

</div>

kintone.app.record.setFieldShown そのものはイベントと関係なく動作しますが、イベントハンドラが event を return しないと次の処理がうまくいきません。

&nbsp;

kintone.events.on で順番にイベントハンドラを追加していきますが、それぞれは順番に動くので前のハンドラで終わった event を使う必要があります。

＜追記＞

上記文章の「それぞれは順番に動くので前のハンドラで終わった event を使う必要があります。」は誤りでした。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account974](https://avatars.discourse-cdn.com/v4/letter/l/3e96dc/32.png) [@Legacy\_Account974](https://community.cybozu.dev/u/Legacy_Account974)\
**Post date:** [2019 年 4 月 3 日午前 6:22 UTC](https://community.cybozu.dev/t/topic/3909/5 "2019-04-03T06:22:27Z")

</div>

お返事いただき誠にありがとうございます。

1. イベントハンドラ1（各指定オブジェクトのプロパティに[‘disable’]）を追加

2. 1個目のreturn eventで1個目1)が実行される

kintone.app.record.setFieldShownはイベントではないのでイベントハンドラとしては追加されていないので

当然に非表示が実行される

の流れを想像していたのですが、

"それぞれは順番に動くので前のハンドラで終わった event を使う必要があります。"という表現は

具体的にはどういう意味なのでしょうか、、（特に前のハンドラで終わったeventを使うとはいったいどういうことなのでしょうか、、）どうしても理解できずもうしわけございません。

&nbsp;

本当に申し訳ございません。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 3 日午前 6:32 UTC](https://community.cybozu.dev/t/topic/3909/6 "2019-04-03T06:32:36Z")

</div>

```
kintone.events.on(events2, function(event){
kintone.app.record.setFieldShown('ApprovalYear', false);
kintone.app.record.setFieldShown('uniqueNum', false);
kintone.app.record.setFieldShown('invisible', false);
});

```

この時、kintone.events.on() を実行しているので、events2 の配列に含まれる kintone の各イベントにイベントハンドラが追加されています。私がイベントハンドラと呼んでいるのは、下記の関数のことです。

```
function(event){
kintone.app.record.setFieldShown('ApprovalYear', false);
kintone.app.record.setFieldShown('uniqueNum', false);
kintone.app.record.setFieldShown('invisible', false);
}

```

そして、元のご質問で見落としていたのですが、‘app.record.index.edit.show’ と ‘app.record.detail.show’ はそれぞれ片方にしか定義がないのでうまくいきそうな気がします。実際にはどうでしょうか？

‘app.record.create.show’ と ‘app.record.edit.show’ は両方の配列に含まれてるので、1つ目の kintone.events.on() と 2つ目の kintone.events.on() で2個イベントハンドラが登録されています。そしてそれが順に実行されます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account974](https://avatars.discourse-cdn.com/v4/letter/l/3e96dc/32.png) [@Legacy\_Account974](https://community.cybozu.dev/u/Legacy_Account974)\
**Post date:** [2019 年 4 月 3 日午前 8:53 UTC](https://community.cybozu.dev/t/topic/3909/7 "2019-04-03T08:53:59Z")

</div>

コメントありがとうございます。

申し訳ございません、双方同じイベントを配列に含んだつもりがその点はコーディングミスです。

1つ目のイベントハンドラと2つ目のイベントハンドラそれぞれ順番実行されることは理解できました。

どうしてもreturn eventが不要なイベントハンドラ（setFieldShown達ですね）をreturn eventしなければ、それ以前の同じイベントとして登録されたイベントハンドラについて、実行されないというのが順番という論理から理解ができません。

&nbsp;

1. kintone.events.on(events,でAイベントに初めのBイベントハンドラを登録(disable関係)

2. return eventでBイベントハンドラ処理を実行

3. kintone.events.on(events2,でAイベントに初めのCイベントハンドラを登録(SetField関係)

4. return eventしなくてもCイベントハンドラ処理は実行される関数のため問題なく実行

&nbsp;

と思っていたのですが、以下の順番でもどちらも実行されそうな気がするのですが間違いなのでしょうか。。。

1. kintone.events.on(events,でAイベントに初めのBイベントハンドラを登録(disable関係)

2. kintone.events.on(events2,でAイベントに初めのCイベントハンドラを登録(SetField関係)

3. return eventでBイベントハンドラ処理を実行（実際にはここが実行されません、Cイベントハンドラにもreturn eventするとなぜか実行？）

4. return eventしなくてもCイベントハンドラ処理は実行される関数のため問題なく実行

ちょっと私自身も冷静にご記載いただいた内容を咀嚼して考えてみます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 3 日午前 10:23 UTC](https://community.cybozu.dev/t/topic/3909/8 "2019-04-03T10:23:45Z")

</div>

色々と混乱を招いてしまいすみません。  
こちらも、よく内容を読んで、実際にコードを書いて試してみました。

```
kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 1");
return event;
});

kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 2");
//return event;
});

```

EVENT1、2どちらも実行されます。ですから、私の書いている内容は正しくありませんでした。

return event がないと実行されないという点、撤回します。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 3 日午前 10:34 UTC](https://community.cybozu.dev/t/topic/3909/9 "2019-04-03T10:34:09Z")

</div>

下記のコードは意図した通り文字列\_\_1行\_\_0の編集不可とルックアップ\_0の非表示が設定されます。

```
kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 1.1");
event.record.文字列 __1行__ 0.disabled = true;
return event;
});

kintone.events.on("app.record.edit.show", function(event) {
kintone.app.record.setFieldShown('ルックアップ_0', false);
console.log("EVNET 2.1");
return event;
});

```

しかし、下記のようにするとdiabled = trueは動作しなくなります。

```
kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 1.2");
event.record.文字列 __1行__ 0.disabled = true;
return event;
});

kintone.events.on("app.record.edit.show", function(event) {
kintone.app.record.setFieldShown('ルックアップ_0', false);
console.log("EVNET 2.2");
// return event;
});

```

こうなる理由については、今の所はっきりしないので私の方でも考えてみます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 3 日午前 10:50 UTC](https://community.cybozu.dev/t/topic/3909/10 "2019-04-03T10:50:09Z")

</div>

このように記載を変更して、event オブジェクトの中身を見てみました。

```
kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 1.3");
event.record.文字列 __1行__ 0.disabled = true;
console.log(event);
return event;
});

kintone.events.on("app.record.edit.show", function(event) {
kintone.app.record.setFieldShown('ルックアップ_0', false);
console.log("EVNET 2.3");
console.log(event);
return event;
});

```

その結果、EVENT2.3のときに呼び出されるイベントハンドラの event オブジェクトにおいて、event.record.文字列\_\_1行\_\_0.disabled == true であることがわかりました。

次に、このようにしてみました。

```
kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 1.4");
event.record.文字列 __1行__ 0.disabled = true;
console.log(event);
return event;
});

kintone.events.on("app.record.edit.show", function(event) {
kintone.app.record.setFieldShown('ルックアップ_0', false);
console.log("EVNET 2.4");
console.log(event);
});

kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 3.4");
console.log(event);
return event;
});

```

EVENT2.4, 3.4のいずれにおいても、event.record.文字列\_\_1行\_\_0.disabled == true でした。そして、予想に反して、入力不可処理と非表示処理はどちらも期待通り動作しています！

しかし、

```
kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 1.5");
event.record.文字列 __1行__ 0.disabled = true;
console.log(event);
return event;
});

kintone.events.on("app.record.edit.show", function(event) {
kintone.app.record.setFieldShown('ルックアップ_0', false);
console.log("EVNET 2.5");
console.log(event);
return event;
});

kintone.events.on("app.record.edit.show", function(event) {
console.log("EVNET 3.5");
console.log(event);
});

```

こうすると、入力不可は動作しなくなります。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 3 日午前 10:52 UTC](https://community.cybozu.dev/t/topic/3909/11 "2019-04-03T10:52:27Z")

</div>

EVENT1.5, EVENT2.5, EVENT3.5 のいずれにおいても、event.record.文字列\_\_1行\_\_0.disabled == true です。

&nbsp;

ここから推測されることは、kintoneは最後にイベントハンドラが返した event オブジェクトを処理していると思われる、ということです。  
長々とすみません。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1665](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account1665](https://community.cybozu.dev/u/Legacy_Account1665)\
**Post date:** [2019 年 4 月 3 日午前 11:06 UTC](https://community.cybozu.dev/t/topic/3909/12 "2019-04-03T11:06:46Z")

</div>

横から失礼します！  
（ただの感想です）

この辺の挙動、気になってはいたんですけどちゃんと実験したことありませんでした。お二人のおかげで僕もかなり理解が深まりました。ありがとうございます。

EVENT2.4がreturn eventされた状態になるのはとても興味深いですね！

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1665](https://avatars.discourse-cdn.com/v4/letter/l/f07891/32.png) [@Legacy\_Account1665](https://community.cybozu.dev/u/Legacy_Account1665)\
**Post date:** [2019 年 4 月 3 日午前 11:07 UTC](https://community.cybozu.dev/t/topic/3909/13 "2019-04-03T11:07:45Z")

</div>

ボソッ）公式ドキュメントに、この辺の仕様も明記してもらうか、せめて「動作保証外」でも書いてもらえると嬉しいのですけどねー。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 3 日午前 11:14 UTC](https://community.cybozu.dev/t/topic/3909/14 "2019-04-03T11:14:56Z")

</div>

そして、肝心なことを書き忘れてました。

ryoryoさんの目的は、ご提示された最初のコードにおいて event.record[‘uniqueNum’][‘disabled’]=true; の下の辺りに下記を移動すればシンプルに実現できると思います。

```
kintone.app.record.setFieldShown('ApprovalYear', false);
kintone.app.record.setFieldShown('uniqueNum', false);
kintone.app.record.setFieldShown('invisible', false);

```

---

<div class="post-metadata">

**Author:** ![Legacy\_Account974](https://avatars.discourse-cdn.com/v4/letter/l/3e96dc/32.png) [@Legacy\_Account974](https://community.cybozu.dev/u/Legacy_Account974)\
**Post date:** [2019 年 4 月 4 日午前 12:10 UTC](https://community.cybozu.dev/t/topic/3909/15 "2019-04-04T00:10:08Z")

</div>

安藤様

本当にご丁寧に有難うございます。

自分自身も早朝から、ご検証頂いた過程を一つ一つ動作を確認してみました。

確かに仰る通り結論としては、最後のeventを処理しているように思われますね。、

PureJavascriptの感覚で言うと異なるスコープでreturnしているのに、返されるeventがスコープのことはる最後のeventというのが非常に馴染まないのですがAPIの仕様がそうと言われればそういうことなのでしょう、、、

&nbsp;

いずれにしても私のわがままでとことんお付き合いいただき本当に申し訳ございませんでした。またお詫びとともに

改めて深い御礼を申し上げます。

赤座様もコメントありがとうございます。

&nbsp;

宜しくお願い申し上げます。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account343](https://avatars.discourse-cdn.com/v4/letter/l/b4bc9f/32.png) [@Legacy\_Account343](https://community.cybozu.dev/u/Legacy_Account343)\
**Post date:** [2019 年 4 月 4 日午前 12:31 UTC](https://community.cybozu.dev/t/topic/3909/16 "2019-04-04T00:31:48Z")

</div>

こちらも曖昧だった点を整理するきっかけになり、勉強になりました！  
色々と奥が深いです(笑

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1049](https://avatars.discourse-cdn.com/v4/letter/l/ea5d25/32.png) [@Legacy\_Account1049](https://community.cybozu.dev/u/Legacy_Account1049)\
**Post date:** [2019 年 4 月 25 日午前 1:04 UTC](https://community.cybozu.dev/t/topic/3909/17 "2019-04-25T01:04:19Z")

</div>

現在、同じように複数のイベントハンドラを処理しようとしています。

&nbsp;

私がkintone.app.record.setFieldShown(‘ルックアップ\_0’, false)をevent.record.ルックアップ\_0 ==&nbsp;falseに書き換えて実験した結果、

EVENT1.5, EVENT2.5, EVENT3.5 のいずれにおいても、event.record.文字列\_\_1行\_\_0.disabled == true だっただけではなく、

いずれのイベントにおいてもevent.record.ルックアップ\_0 ==&nbsp;falseでした。（EVENT1.5含む）

&nbsp;

これから推察して安藤さんに追記して、以下のことが言えるのではないかなと思っています。

・イベントハンドラにて同じeventオブジェクトを指定した場合、eventオブジェクトは基本的に１つのものをupdateされ使い回される

・console.log表示は、イベントハンドラの処理後に行われる

&nbsp;

既出でしたらすいません。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex015/uploads/cybozu/original/1X/d5c841c3c5a6cb66eed514001c1b45147c9e1f4f.png) [@system](https://community.cybozu.dev/u/system)\
**Post date:** [2025 年 5 月 28 日午前 1:11 UTC](https://community.cybozu.dev/t/topic/3909/18 "2025-05-28T01:11:29Z")

</div>

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