1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ユーザ、組織セット(async await)のメモ

Last updated at Posted at 2023-10-29

はじめに

kintoneでユーザから組織をセットするのに手間取ったのでメモる。
余談だが、chatgptを使用せず、調査しながら行い時間がかかったが、chatgptをに聞くと瞬殺だった。chatgptを使用するのとしないのとでは明らかに生産性が違いすぎる。

行うこと

・kintoneでユーザ、組織の取得、そのセット方法を記載する。
kintoneではユーザと組織のフィールドは特定のものがある。
ユーザはユーザ選択の設定、組織は組織選択の設定である。
・kintoneはそのデータを取得するのにkintone apiを使用する仕様である。
そのとき非同期を扱うことになる。
・2つ以上の非同期を順次実行することが必要である。
その場合の例として記載する。

コード例の説明

1.ユーザ取得
fetchUserOrganization
ユーザコードより、組織情報取得するkinetone.apiを使用している。
2.組織コードを反映
copyToAnotherApp
kintone.apiのPUTを使用し、マニュアルに従い登録している。
3.ユーザ取得して組織コードを反映
箇所抜粋

 async function handleProceedEvent(event) {

        //ユーザの組織情報取得
        const organizationName = await fetchUserOrganization(user.code);
        if (organizationName) {
            //組織コードを反映
            await copyToAnotherApp(organizationName);
        }

}

上記は以下を行う。
3.1 非同期で1,2を行う。
3.2 3.1の非同期を行うために、asyncで処理関数を処理する。

(その他)
・プロセス管理によるアクションで実行を行う
event.action.name にて処理を振り分ける。

・データ取得、登録
kintone.api()を使用
取得箇所例

    const response = await kintone.api(kintone.api.url('/v1/user/organizations', true), 'GET', { code: userCode });

登録箇所例

    const response = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', body);

・プロセス管理のアクション時動作
eventのrecord、actionの使いどころがある。

kintone.events.on('app.record.process.proceed', function(event) {
    if (event.action.value === "承認") {
        // "承認" アクションがクリックされた際の処理をここに記述
    }
    return event;
});

コード例

(function() {
  'use strict';

  // ユーザの組織情報を取得
  async function fetchUserOrganization(userCode) {
    const response = await kintone.api(kintone.api.url('/v1/user/organizations', true), 'GET', { code: userCode });
    return response.organizationTitles[0] && response.organizationTitles.length > 0 ? response.organizationTitles[0].organaization.name : null;
  }

  // 組織情報を別のアプリにコピー
  async function copyToAnotherApp(organizationName) {
    const body = {
      "app": コピー先のアプリID,
      "record": {
        "組織フィールド名": {
          "value": organizationName
        }
      }
    };
    const response = await kintone.api(kintone.api.url('/k/v1/record', true), 'POST', body);
    return response;
  }

 async function handleProceedEvent(event) {
    if (event.action.name !== "コピー") {
        return event;
    }

    const record = event.record;
    const user = record['ユーザ選択フィールド名'].value[0];

    if (!user) {
        return event;
    }

    try {
        const organizationName = await fetchUserOrganization(user.code);
        if (organizationName) {
            await copyToAnotherApp(organizationName);
        }
    } catch (error) {
        console.error("エラー:", error);
    }

    return event;
}

//レコード詳細画面が表示されたときに発火
kintone.events.on('app.record.detail.show', handleProceedEvent);

kintone.events.on('app.record.process.proceed', function(event) {
    if (event.action.value === "承認") {
        // "承認" アクションがクリックされた際の処理をここに記述
    }
    return event;
});


})();

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?