$p.apiUsersCreate
概要¶
AjaxのPOSTリクエストにより、ユーザを作成します。
構文¶
JavaScript¶
パラメータ¶
| パラメータ名 | 型 | 必須 | 概要 |
|---|---|---|---|
| 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で登録する機能を追加 |
