コンテンツにスキップ

$p.apiUsersGet

概要

AjaxのPOSTリクエストによる値の取得が可能なメソッドに関する説明をします。ユーザの情報などを取得したいときに使用してください。

事前準備

APIの操作を行う前にAPIキーの作成を実施してください。

構文

JavaScript
$p.apiUsersGet({
    id: <ユーザID>,
    done: <任意の処理>,
    fail: <任意の処理>,
    always: <任意の処理>
});

パラメータ

パラメータ名 型 必須 概要
id long ○ 情報を取得したいユーザID
done function ○ API通信成功時の処理
fail function API通信失敗時の処理
always function API通信完了時の処理

使用例

JavaScript
$p.apiUsersGet({
    id: 123,
    done: function (data) {
        console.log(data);
        console.log('ユーザ情報の取得に成功しました。');
    },
    fail: function () {
        console.log('ユーザ情報の取得に失敗しました。');
    },
    always: function () {
        console.log('ユーザ情報の取得が完了しました。');
    }
});

戻り値

API通信成功時に「done」に渡される値は、API「ユーザ取得(選択)」のレスポンスと同じ形式です。

サンプルコード

Note

コード内の【 ... 】は適宜修正してください。

1. 全ユーザを対象に、重複条件に一致しない人だけレコードを一括作成する

このスクリプトは、指定したサイトの全ユーザ(テナント管理者を除く)を対象に、次の処理を自動実行します。

1.既存データの確認
指定サイトの既存レコードを全件取得します。そのうえで、ユーザごとに「重複判定ルール」に当てはまるレコードが既に存在するかを確認します。
(サンプルの重複判定ルール:レコードの Owner が対象ユーザ本人で、かつ ClassA が "案内区分A" になっていること)

2.条件付き一括作成
該当レコードがない(未登録の)ユーザ:新規レコードを作成します。
該当レコードがある(登録済みの)ユーザ:何もしません。

Note

類似の機能として $p.apiUpsert(キー項目が一致すれば更新、一致しなければ新規作成)がありますが、両者は用途が異なります。

使い分けの目安

観点 このスクリプト $p.apiUpsert
何をもとに動くか ユーザ一覧を起点に、全ユーザ分をチェックする 渡したデータ(1件〜複数件)を起点に処理する
既にレコードがある人・データはどうなるか 何もしない(既存レコードはそのまま) 内容を最新の状態に更新する
まだレコードがない人・データはどうなるか 新規作成する 新規作成する
こんなときに向いている 「まだ1件も登録がない人にだけ配りたい」時(初期配布・登録漏れの棚卸し) 「常に最新の内容に保ちたい」時(外部データとの同期・定期反映)
// ==========================================
// 設定エリア
// ==========================================
const CONFIG = {
    SITE_ID: 【サイトID】,
    // ここで重複判定ルールを定義する(サンプルはOwner+ClassA)
    isDuplicate: (record, user) => {
        return String(record.Owner) === String(user.UserId) &&
               String(record.ClassHash.ClassA) === "案内区分A"; // 必要に応じて条件を追加
    },
    // 作成するデータの内容
    createData: (user) => ({
        Title: `${user.Name}様への連絡事項`,
        Status: 100,
        Owner: user.UserId,
        ClassHash: { ClassA: '案内区分A' }
    })
};

// ==========================================
// 共通処理:全件取得
// Offsetを「実際に取得した件数」ぶんずつ進めながら、
// 取得件数が0件になるかTotalCountに達するまで繰り返す
// ==========================================
function fetchAll(apiFunc, options) {
    return new Promise((resolve, reject) => {
        let allData = [];

        const fetchPage = (offset) => {
            const data = Object.assign({}, options.data, {
                View: Object.assign({}, (options.data && options.data.View) || {}, {
                    Offset: offset
                })
            });

            apiFunc(Object.assign({}, options, {
                data: data,
                done: (res) => {
                    const records = res.Response.Data;
                    allData = allData.concat(records);

                    const totalCount = res.Response.TotalCount;
                    const nextOffset = offset + records.length; // 実際の取得件数ぶん進める

                    if (records.length > 0 && nextOffset < totalCount) {
                        fetchPage(nextOffset); // まだ取得していないレコードが残っているので続けて取得
                    } else {
                        resolve(allData); // 全件取得完了
                    }
                },
                fail: (res) => reject(res)
            }));
        };

        fetchPage(0);
    });
}

// ==========================================
// 実行処理
// ==========================================
(async () => {
    try {
        // 1. 既存レコードを全件取得
        const existingRecords = await fetchAll($p.apiGet, { id: CONFIG.SITE_ID });

        // 2. ユーザー一覧を全件取得
        const allUsers = await fetchAll($p.apiUsersGet, {});

        // 3. テナント管理者を除き、未登録ユーザーのみ抽出
        const targets = allUsers.filter(user =>
            !user.TenantManager &&
            !existingRecords.some(rec => CONFIG.isDuplicate(rec, user))
        );

        if (targets.length === 0) {
            console.log("(info)全員登録済みです。");
            return;
        }

        targets.forEach(user => {
            $p.apiCreate({
                id: CONFIG.SITE_ID,
                data: CONFIG.createData(user),
                done: () => console.log(`(info)作成完了: ${user.Name}`),
                fail: (res) => console.error(`(info)作成失敗: ${user.Name}`, res)
            });
        });
    } catch (err) {
        console.error("(error)処理中にエラーが発生しました", err);
    }
})();

実行結果

・存在しない場合

(info)作成完了: 社員A
(info)作成完了: 社員B
(info)作成完了: 社員C

・存在する場合
(info)全員登録済みです。

関連情報