コンテンツにスキップ

$p.apiUsersCreate

概要

AjaxのPOSTリクエストにより、ユーザを作成します。

構文

JavaScript
$p.apiUsersCreate({
    data: {
        <作成するユーザ情報>
    },
    done: <任意の処理>,
    fail: <任意の処理>,
    always: <任意の処理>
});

パラメータ

パラメータ名 型 必須 概要
data object 作成するユーザ情報をJSON形式で指定 ※欄外補足参照
done function ○ API通信成功時に実行する処理
fail function API通信失敗時に実行する処理
always function API通信完了時に実行する処理
※作成するユーザ情報は、APIユーザ作成時と同等のパラメータを設定します。リンク先のマニュアルを参照にパラメータを設定してください。

使用例

$p.apiUsersCreate({
    data: {
        LoginId: 'TESTUSER',
        Name: 'USER1',
        Password: '123456',
        MailAddresses: [
            'test@example.co.jp'
        ],
        ClassHash: {
            ClassA: 'test-class-column'
        },
        NumHash: {
            NumA: 100
        },
        DateHash: {
            DateA: '2026-08-19'
        },
        DescriptionHash: {
            DescriptionA: '補足説明'
        },
        CheckHash: {
            CheckA: true
        }
    },
    done: function (data) {
        console.log(data);
        console.log('ユーザ情報の作成に成功しました。');
    },
    fail: function (data) {
        console.log('ユーザ情報の作成に失敗しました。');
    },
    always: function (data) {
        console.log('ユーザ情報の作成が完了しました。');
    }
});

戻り値

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

サンプルコード

Note

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

1. アカウント払い出し申請のレコードから、ユーザーを作成する

新しく入る社員・外部要員のアカウントを「アカウント払い出し申請」テーブルで申請・承認し、承認済みのレコードでIT管理者がプロセス「アカウント作成」を押すと、$p.apiUsersCreateで申請内容(ログインID・氏名・所属組織)のユーザーを作成します。初期パスワードはブラウザで生成して画面に一度のみ表示し、レコードには保存しません。作成したユーザーは、初回ログイン時にパスワードの変更を求められます。返ってきたユーザーIDを申請レコードに書き戻して、状況を「作成済」にします。

実務での使いどころ

入社や外部要員の受け入れのたびに、申請を受けた管理者がユーザー管理の画面で1件ずつアカウントを作ると、入力の手間がかかるうえ、申請内容との転記ミスや、誰の申請でいつ作ったのかの記録漏れが起こりがちです。このサンプルを使うと、承認済みの申請レコードのボタン1つで、申請どおりのアカウントが作成され、作成したユーザーIDと日時が申請レコードに残ります。

初期パスワードはその場で生成し、画面に一度のみ表示するため、パスワードがレコードやメールに残りません。本人に伝えたあと、初回ログイン時に本人が変更します。

事前準備

1:テーブル(記録テーブル)に以下の項目を有効化してください。

項目コード 内容
タイトル(Title) 氏名(ユーザーの名前になります)
分類A(ClassA) ログインID。「重複禁止」にしておくと、申請の段階で重複に気付けます
分類B(ClassB) 所属組織。選択肢一覧に[[Depts*]]を設定します
日付A(DateA) 利用開始日
数値A(NumA) 作成したユーザーID。スクリプトが書き戻します
状況(Status) 選択肢一覧に「100,申請中」「200,承認済」「300,作成済」「900,却下」を設定します

2:「テーブルの管理 > プロセス」タブで、以下のプロセスを追加します。いずれも、画面種別は「編集」、実行種別は「追加したボタン」、アクション種別は「保存」にします。

名称 現在の状況 変更後の状況 OnClick アクセス制御
承認 申請中 承認済 (なし) 承認者
アカウント作成 承認済 作成済 createAccount($(this)) テナント管理者

ユーザーを作成できるのはテナント管理者に限られるため、「アカウント作成」はテナント管理者に限って表示します。
3:スクリプトを登録します。
 3-1:「テーブルの管理 > スクリプト」タブで「新規作成」を選択する。
 3-2:タイトル: 任意の名前(例:アカウント作成)
 3-3:スクリプト: 下記サンプルコードを貼り付け
 3-4:出力先:「編集」にチェック

JavaScript
/**
 * ================================================================
 * サンプル01  アカウント払い出し申請のレコードから、ユーザーを作成する
 * ================================================================
 *
 * 【概要】
 *   新しく入る社員・外部要員のアカウントを「アカウント払い出し申請」テーブルで
 *   申請・承認し、承認済みのレコードで IT 管理者がプロセス「アカウント作成」を
 *   押すと、$p.apiUsersCreate で申請内容(ログインID・氏名・所属組織)の
 *   ユーザーを作成します。
 *     ・初期パスワードはブラウザで生成し、画面に一度だけ表示します。
 *       レコードやログには残しません。
 *     ・作成したユーザーは、初回ログイン時にパスワードの変更を求められます
 *       (パスワードの有効期限を作成した時点にするため)。
 *     ・返ってきたユーザーIDを申請レコードに書き戻し、状況を「作成済」にします。
 *
 * 【ポイント】
 *   ・パスワードを渡さないと、ユーザーは作成できません(パスワードポリシーの
 *     エラーになります)。そのため、必ず生成して渡します。
 *   ・ログインIDが既に使われているときは、エラー(ステータスコード 500)で
 *     「このログインIDは既に使用中です」が返ります。ステータスコードで
 *     分岐せず、返ってきたメッセージをそのまま表示します。
 *     申請テーブルのログインIDを「重複禁止」にしておくと、申請の段階で気付けます。
 *   ・OnClick を設定したプロセスは、ボタンを押しただけでは保存されません。
 *     ユーザーの作成が成功したあとに $p.set でユーザーIDを入れてから
 *     $p.execProcess を呼ぶと、その値と一緒に保存し、状況を変更します。
 *     作成に失敗したときは $p.execProcess を呼ばないため、状況は変わりません。
 *
 * 【使い方】
 *   下記の定数を、実際に使用する項目コードに置き換えてください。
 *   あわせて「テーブルの管理 > プロセス」で、プロセス「アカウント作成」を
 *   追加してください(画面種別:編集、実行種別:追加したボタン、
 *   アクション種別:保存、現在の状況:承認済、変更後の状況:作成済、
 *   OnClick:createAccount($(this)))。ユーザーを作成できるのはテナント管理者
 *   だけなので、プロセスの「アクセス制御」でテナント管理者にだけ表示します。
 *   スクリプトの出力先は「編集」にチェックしてください。
 * ================================================================
 */

// ===== 設定 =====
const NAME_COLUMN = 'Title'; // 氏名(ユーザーの名前になる)
const LOGIN_ID_COLUMN = 'ClassA'; // ログインID
const DEPT_COLUMN = 'ClassB'; // 所属組織(選択肢一覧に [[Depts*]]。値は組織ID)
const USER_ID_COLUMN = 'NumA'; // 作成したユーザーID(スクリプトが書き戻す)
// 初期パスワードの長さ
const PASSWORD_LENGTH = 12;

// ===== 処理 =====
function showError(text) {
    $p.clearMessage();
    $p.setMessage('#Message', JSON.stringify({ Css: 'alert-error', Text: text }));
}

// 失敗の応答から、表示するメッセージを取り出す
function errorMessage(data) {
    try {
        return JSON.parse(data.responseText).Message;
    } catch (e) {
        return `ユーザーを作成できませんでした(ステータスコード ${data.status})。`;
    }
}

// Date を「2026/10/07 14:30:00」の形にする
function formatDateTime(date) {
    const pad = (n) => String(n).padStart(2, '0');
    return (
        `${date.getFullYear()}/${pad(date.getMonth() + 1)}/${pad(date.getDate())} ` +
        `${pad(date.getHours())}:${pad(date.getMinutes())}:${pad(date.getSeconds())}`
    );
}

// 初期パスワードを生成する。小文字・大文字・数字・記号を1文字以上ずつ含めるので、
// パスワードポリシーで文字の種類を求める設定にしていても満たす
function generatePassword(length) {
    const groups = [
        'abcdefghijkmnopqrstuvwxyz', // 見間違えやすい l を除く
        'ABCDEFGHJKLMNPQRSTUVWXYZ', // 見間違えやすい I・O を除く
        '23456789', // 見間違えやすい 0・1 を除く
        '!#$%&*+-=?@',
    ];
    const all = groups.join('');
    const random = (max) => {
        const values = new Uint32Array(1);
        window.crypto.getRandomValues(values);
        return values[0] % max;
    };
    const chars = groups.map((group) => group[random(group.length)]);
    while (chars.length < length) {
        chars.push(all[random(all.length)]);
    }
    // 種類ごとの1文字が先頭に固まらないように並べ替える
    for (let i = chars.length - 1; i > 0; i--) {
        const j = random(i + 1);
        [chars[i], chars[j]] = [chars[j], chars[i]];
    }
    return chars.join('');
}

// プロセス「アカウント作成」の OnClick から呼ぶ
function createAccount($button) {
    // 作成済みのユーザーIDがあれば、二重に作らない(数値項目は未入力でも 0 になる)
    if (Number($p.getValue(USER_ID_COLUMN)) > 0) {
        showError('このレコードのアカウントは作成済みです。');
        return;
    }
    const loginId = String($p.getValue(LOGIN_ID_COLUMN) || '').trim();
    const name = String($p.getValue(NAME_COLUMN) || '').trim();
    const deptId = Number($p.getValue(DEPT_COLUMN)) || 0;
    if (loginId === '' || name === '') {
        showError('ログインIDと氏名を入力してください。');
        return;
    }
    const password = generatePassword(PASSWORD_LENGTH);

    $p.apiUsersCreate({
        data: {
            LoginId: loginId,
            Name: name,
            DeptId: deptId,
            Password: password,
            // パスワードの有効期限を今にして、初回ログイン時に変更を求める。
            // toISOString() は世界標準時になるため、画面と同じ「年/月/日 時:分:秒」で渡す
            PasswordExpirationTime: formatDateTime(new Date()),
        },
        done: function (data) {
            // 初期パスワードは、ここで一度だけ表示する(レコードには保存しない)。
            // prompt の入力欄に入れて表示すると、選択してコピーできる
            window.prompt(
                `ユーザー「${name}」(ログインID:${loginId})を作成しました。\n` +
                    '初期パスワードは次のとおりです。この画面を閉じると再表示できないので、控えてから閉じてください。',
                password
            );
            $p.set($p.getControl(USER_ID_COLUMN), data.Id);
            $p.execProcess($button);
        },
        fail: function (data) {
            showError(errorMessage(data));
        },
    });
}

注意点

  • パスワードを渡さないとユーザーは作成できません(パスワードポリシーのエラーになります)。このサンプルは小文字・大文字・数字・記号を1文字以上ずつ含む12文字のパスワードを生成するので、パスワードポリシーで文字の種類を求める設定にしていても満たします。
  • 初期パスワードは、作成した直後にダイアログで一度のみ表示します。入力欄から選択してコピーできます。閉じると再表示できないので、控えてから閉じてください。
  • パスワードの有効期限(PasswordExpirationTime)を作成した時点にしているので、作成したユーザーは初回ログイン時にパスワードの変更を求められます。
  • ログインIDが既に使われているときは、エラー(ステータスコード500)で「このログインIDは既に使用中です」が返ります。ステータスコードではなく、返ってきたメッセージをそのまま表示しています。失敗したときは保存も状況の変更もしません。
  • 作成したユーザーIDが既に入っているレコードでは、二重に作成しません。

対応バージョン

対応バージョン 内容
1.5.8.0 以降 拡張項目をAPIで登録する機能を追加

関連情報