ログインユーザーの組織コードを、ルックアップフィールドに表示させたい

お世話になります。

ログインユーザーの組織コード(共通管理で設定されている組織コード)を、

サブテーブルの「部門コード」フィールドに自動で設定し、かつ

その「部門コード」をキーに部門マスタから「部門ID」を自動で取得してセットしたいのですが、行き詰っております。

 

サブテーブルの項目:支払日付、部門コード、部門ID

表示したいタイミング:サブテーブルの「支払日付」が変更されたら、自動で「部門コード」「部門ID」が入るようにしたい

 

*******書いているコード*****

(まずは部門コードを表示するところまでを実装しているつもりですが、うまく動かない状況です。ルックアップで部門マスタから取得する部分はまだ実装できていません)

kintone.events.on([‘app.record.create.change.支払日付’,  ‘app.record.edit.change.支払日付’], function (event) {
   var changes = event.changes;
  kintone.api(‘/v1/user/organizations’, ‘GET’, { code: kintone.getLoginUser()[‘code’] }, function (resp) {
  var record = kintone.app.record.get();
  var BumonCode = resp[‘organizationTitles’][0][‘organization’][‘code’]
  console.log(BumonCode);
  changes[‘row’].value[‘部門コード’].value = BumonCode;
  kintone.app.record.set(record);
  return event;
 });
});

 

********

consoleには部門コードが表示されるのですが、

画面のサブテーブルの「部門コード」には表示できません。

お知恵をお貸しいただけませんでしょうか。

柳さん

changeインベント処理内で kintone.app.record.set は使えません。
対策は、プロミス処理で event に変更を反映させます。
切り貼りのみで未検証ですが、下記のようなコードで対応できると思います。

kintone.events.on(['app.record.create.change.支払日付', 'app.record.edit.change.支払日付'], function (event) {
var changes = event.changes;
return kintone.api('/v1/user/organizations', 'GET', { code: kintone.getLoginUser()['code'] }).then(function (resp) {
// var record = kintone.app.record.get();
var BumonCode = resp['organizationTitles'][0]['organization']['code']
console.log(BumonCode);
changes['row'].value['部門コード'].value = BumonCode;
// kintone.app.record.set(record);

// ルックアップ処理

return event;
});
});

rex0220さん

アドバイスいただきありがとうございます!

差即試してみましたところ、consoleに以下のエラーが出てしまいました。

Uncaught Error: app.record.create.change.支払日付 is not allowed to return “Thenable” object.

 

Promiseは「app.record.create.change」ではサポートされていないイベントなのでしょうか。

または、何か実装が足りないのか、度々すみませんが、お知恵貸してくださると有難いです。

https://developer.cybozu.io/hc/ja/articles/204564604-kintone-API-%E3%81%A7-Promise-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86-

すみません、change イベントは、未サポートでした。やはり未検証だと駄目ですね。
kintone イベント別のPromiseサポート状況をまとめました。
以前、自分でも調べていました。

前に、似たようなことをやったのを調べたところ、kintone.app.record.set を使ってました。
ただ、サブテーブル内changeイベントでは、行位置が不明なのが問題です。
郵便の宛先プラグインでは、行位置を特定するためのしくみを実装しました。

対策としては、下記が考えられます。

1.APIを同期処理に変更して、部門コードを取得
changes[‘row’].value[‘部門コード’].value = BumonCode;
return event で、反映
※API同期処理が将来は廃止される可能性あり

2.非PromiseのAPIで部門取得して、kintone.app.record.set でセット
この場合は、行位置を特定するためのしくみを実装します。
※行位置を特定するためのしくみは、結構大変

3.create.show, edit.show イベントで、あらかじめ部門コードをAPI取得しておく。

changes[‘row’].value[‘部門コード’].value = BumonCode;
return event で、反映
※create.show, edit.show イベントで、必ずAPIが発行される

どれも、一長一短です。
とりあえず、1か3がいいのではないかと思います。

rex0220さん

再度ありがとうございます。

3の方法でうまくいきました!

ありがとうございました。大変助かりました。