サブテーブル内のユーザー選択フィールドよりユーザー選択した際に同じサブテーブル内の文字列1行フィールドに値を入れる

いつもお世話になっております。

以下、処理が上手いかないためご教示いただきたく存じます。

サブテーブル内のユーザー選択フィールドより選択したユーザーの優先する組織、親組織を取得し

同じサブテーブル内の文字列一行フィールドに入れたいと思ています。

値は取れていますが文字列に入れる際に、コピーされる場合とされない場合がございます。

一瞬文字列に値が表示されることがあるのですがその後にすぐに消えてしまいます。

以下、ソースです。

kintone初心者さん

こんにちは。ひよこです。

for 文で 非同期処理(COMMON.ORGANIZATION の部分)を回すと、非同期処理の完了を待たずにループが進むことが原因かと思われます。

https://developer.cybozu.io/hc/ja/community/posts/204669873 の1番目の回答を参考に、以下の流れでやれば問題ないかなと思います。

  1. テーマメンバーテーブル のメンバー名_テーマメンバーTL以外 の値を別の配列に詰め直す
    1. の配列に対し、Promise を返す関数の配列を作る
    1. の配列に対して、reduce を使って処理を実行する
      参考:https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce#Running_Promises_in_Sequence

ただ、やりたいことと若干違うのかもしれませんが、行追加されたことをトリガーにするのではなく、
テーマメンバーテーブル のメンバー名_テーマメンバーTL以外が変更されたときをトリガーにしても良いのではと思いました。

そうすると、ループを回す必要がなく、
行追加されたときに、値が変更されていない行に対しても、毎回「所属組織」や「所属グループ」を変更するといったことがなくなります。

変更された行の他のフィールドを変更するには、
event.changes.row.value.フィールドコード.value に値を代入して return event します。
https://developer.cybozu.io/hc/ja/articles/201941984#step3

var events = ['app.record.create.change.メンバー名_テーマメンバーTL以外', 'app.record.edit.change.メンバー名_テーマメンバーTL以外'];

kintone.events.on(events, function(event) {
// 変更された「メンバー名_テーマメンバーTL以外」の値を取得
var userCode = event.changes.field.value[0].code;

// userCode の所属組織や所属グループを取得する処理を行う

// event.changes.row.value.所属グループ.value に取得した所属グループの値を代入する
// event.changes.row.value.所属組織.value に取得した所属組織の値を代入する

// 画面に反映
return event;
});

 

 

 

ひよこさん

こんにちは。kintone初心者です。

非同期処理の完了を待っていないことが原因とのこと承知いたしました。

>ただ、やりたいことと若干違うのかもしれませんが、行追加されたことをトリガーにするのではなく、
>テーマメンバーテーブル のメンバー名_テーマメンバーTL以外が変更されたときをトリガーにしても良いのではと思いました。

行いたい処理はひよこさんがおっしゃる上記の部分でしたので大変助かります。

URL記載等とても詳しくわかりやすいご説明ありがとうございました。

ご教示いただいた方法で試してみます。

この度はありがとうございました。