$p.apiGroupsCreate
概要¶
AjaxのPOSTリクエストにより、グループを作成します。
構文¶
JavaScript¶
パラメータ¶
| パラメータ名 | 型 | 必須 | 概要 |
|---|---|---|---|
| data | object | 作成するグループ情報をJSON形式で指定 ※欄外補足参照 | |
| done | function | ○ | API通信成功時に実行する処理 |
| fail | function | API通信失敗時に実行する処理 | |
| always | function | API通信完了時に実行する処理 | |
| ※作成するグループ情報は、APIグループ作成時と同等のパラメータを設定します。リンク先のマニュアルを参照にパラメータを設定してください。 |
使用例¶
$p.apiGroupsCreate({
data: {
GroupName: '作成グループ名',
Body: '作成グループ内容',
ClassHash: {
ClassA: 'test-class-column'
},
NumHash: {
NumA: 100
},
DateHash: {
DateA: '2026-08-19'
},
DescriptionHash: {
DescriptionA: '補足説明'
},
CheckHash: {
CheckA: true
},
GroupMembers: [
'User,1,True',
'Dept,1,False'
],
GroupChildren: [
'Group,1'
]
},
done: function (data) {
console.log(data);
console.log('グループ情報の作成に成功しました。');
},
fail: function (data) {
console.log('グループ情報の作成に失敗しました。');
},
always: function (data) {
console.log('グループ情報の作成が完了しました。');
}
});
戻り値¶
API通信成功時に「done」に渡される値は、API「グループ作成」のレスポンスと同じ形式です。
サンプルコード¶
Note
コード内の【 ... 】は適宜修正してください。
1. プロジェクトグループの作成・メンバー反映・廃止を申請レコードで行う
プロジェクトごとに使うグループを、「プロジェクトグループ申請」テーブルの1レコードで管理します。編集画面のプロセス「グループ作成」を押すと$p.apiGroupsCreateでグループを作り、返ってきたグループIDをレコードに記録して状況を「有効」にします。メンバー欄を変えて「メンバー反映」を押すと$p.apiGroupsUpdateでグループのメンバーを入れ替え、プロジェクトが終わったら「グループ廃止」で$p.apiGroupsDeleteを呼んでグループを削除し、状況を「廃止済」にします。
実務での使いどころ¶
プロジェクトや委員会ごとにグループを作ってアクセス権を付ける運用では、プロジェクトが終わってもグループが削除されずに残り、どのグループがまだ使われているのか分からなくなりがちです。画面からのグループ管理は手作業で、作成や廃止の申請レコードとはつながりません。
このサンプルでは、グループの作成から廃止までを申請レコードのボタンで行うため、レコードの状況を見れば、どのグループが有効で、どれが廃止済みかを追えます。利用終了予定日を入れておけば、標準のリマインダーで廃止の時期を知らせることもできます。
グループのIDをレコードに記録するのがポイントです。グループは同じ名前で何度でも作れてしまうため、名前ではなくIDで追います。サーバスクリプトのgroups.Createは作成したグループのIDを返さず、グループを削除するメソッドも無いため、この処理はスクリプトで行います。
グループ名の接頭辞やメンバーの項目は先頭の定数にまとめてあるので、委員会、部門横断チーム、外部委託先の利用者グループなどの管理にも使えます。
事前準備¶
1:テーブルに以下の項目を有効化してください。
| 項目コード | 内容 |
|---|---|
| タイトル(Title) | プロジェクト名。グループ名は「PJ_」+プロジェクト名になります |
| 管理者(Manager) | プロジェクトリーダー。グループの管理者として登録します |
| 分類A(ClassA) | メンバー。選択肢一覧に[[Users*]]を設定し、「複数選択」を有効にします。一般メンバーとして登録します |
| 数値A(NumA) | グループID。スクリプトが記録します |
| 日付A(DateA) | 利用終了予定日(任意。リマインダーで廃止の時期を知らせる場合に使います) |
| 状況(Status) | 選択肢一覧に「100,申請中」「200,有効」「900,廃止済」を設定します |
2:「エディタ」タブの「状況による制御」で、状況が「有効」「廃止済」のときに数値A(グループID)を読み取り専用にしてください。「申請中」では読み取り専用にしないでください(スクリプトが記録したグループIDを保存できなくなります)。
3:「テーブルの管理 > プロセス」タブで、以下の3つのプロセスを追加します。いずれも、画面種別は「編集」、実行種別は「追加したボタン」、アクション種別は「保存」にします。
| 名称 | 現在の状況 | 変更後の状況 | OnClick |
|---|---|---|---|
| グループ作成 | 申請中 | 有効 | createProjectGroup($(this)) |
| メンバー反映 | 有効 | (指定しない) | updateProjectGroupMembers($(this)) |
| グループ廃止 | 有効 | 廃止済 | deleteProjectGroup($(this)) |
「グループ廃止」の確認ダイアログはスクリプトが出すため、プロセスの「確認メッセージ」は設定しないでください。
4:スクリプトを登録します。
4-1:「テーブルの管理 > スクリプト」タブで「新規作成」を選択する。
4-2:タイトル: 任意の名前(例:プロジェクトグループ管理)
4-3:スクリプト: 下記サンプルコードを貼り付け
4-4:出力先:「編集」にチェック
JavaScript¶
/**
* ================================================================
* サンプル01 プロジェクトグループの作成・メンバー反映・廃止を申請レコードで行う
* ================================================================
*
* 【概要】
* 「プロジェクトグループ申請」テーブルの1レコードで、プロジェクトごとの
* グループを管理します。編集画面のプロセスボタンから、次の処理を行います。
* ・グループ作成:$p.apiGroupsCreate でグループを作り、返ってきた
* グループIDをレコードに記録して、状況を「有効」にする
* ・メンバー反映:$p.apiGroupsUpdate で、その時点のリーダーとメンバーに
* グループのメンバーを置き換える
* ・グループ廃止:確認のうえ $p.apiGroupsDelete でグループを削除し、
* 状況を「廃止済」にする
* グループの作成から廃止までを申請レコードで追えるようにし、使われなく
* なったグループが残り続けるのを防ぎます。
*
* 【なぜサーバースクリプトではなくスクリプトで行うか】
* サーバースクリプトの groups.Create は戻り値が真偽値だけで、作成した
* グループのIDを受け取れません。また、サーバースクリプトにはグループを
* 削除するメソッドがありません。$p.apiGroupsCreate は作成したグループの
* IDを返すため、IDをレコードに記録して後の更新・削除に使えます。
*
* 【ポイント】
* ・同じ名前のグループを何度でも作れてしまうため、グループは名前ではなく
* IDで追います。グループIDが記録済みのレコードでは作成しません。
* ・$p.apiGroupsUpdate で GroupMembers を送ると、メンバーは送った内容で
* まるごと置き換わります。そのため、毎回リーダーとメンバー全員を送ります。
* ・OnClick を設定したプロセスは、ボタンを押しただけでは保存されません。
* API の呼び出しが成功したあとに $p.set で項目へ値を入れてから
* $p.execProcess を呼ぶと、その値と一緒に保存し、状況を変更します。
* API の呼び出しが失敗したときは $p.execProcess を呼ばないため、
* 状況は変わりません。
*
* 【使い方】
* 下記の定数を、実際に使用する項目コードに置き換えてください。
* あわせて「テーブルの管理 > プロセス」で、以下の3つのプロセスを
* 追加してください(いずれも 画面種別:編集、実行種別:追加したボタン、
* アクション種別:保存)。
* ・グループ作成:現在の状況 申請中 → 変更後の状況 有効
* OnClick:createProjectGroup($(this))
* ・メンバー反映:現在の状況 有効(変更後の状況は指定しない)
* OnClick:updateProjectGroupMembers($(this))
* ・グループ廃止:現在の状況 有効 → 変更後の状況 廃止済
* OnClick:deleteProjectGroup($(this))
* グループの作成・更新・削除は、テナント管理者が行ってください。
* ================================================================
*/
// ===== 設定 =====
// 作成するグループ名の接頭辞(グループ名は「接頭辞+タイトル」になる)
const GROUP_NAME_PREFIX = 'PJ_';
// プロジェクト名の項目コード(グループ名に使う)
const PROJECT_NAME_COLUMN = 'Title';
// プロジェクトリーダーの項目コード(グループの管理者として登録する)
const LEADER_COLUMN = 'Manager';
// メンバーの項目コード(選択肢一覧 [[Users*]]、複数選択。一般メンバーとして登録する)
const MEMBERS_COLUMN = 'ClassA';
// グループIDを記録する項目コード
const GROUP_ID_COLUMN = 'NumA';
// ===== 共通処理 =====
function showError(text) {
$p.clearMessage();
$p.setMessage('#Message', JSON.stringify({
Css: 'alert-error',
Text: text,
}));
}
// APIの失敗応答から、表示用のメッセージを取り出す
function getErrorMessage(jqXHR) {
try {
return JSON.parse(jqXHR.responseText).Message;
} catch (e) {
return `HTTP ${jqXHR.status}`;
}
}
// 記録済みのグループID(未記録なら0)
function getGroupId() {
return Number($p.getValue(GROUP_ID_COLUMN)) || 0;
}
// 複数選択の項目の値を、ユーザーIDの配列にする
// (値が配列でも、JSON文字列(例:["2","5"])でも扱えるようにする)
function getMemberIds() {
const value = $p.getValue(MEMBERS_COLUMN);
if (Array.isArray(value)) {
return value;
}
if (!value) {
return [];
}
try {
const parsed = JSON.parse(value);
return Array.isArray(parsed) ? parsed : [String(parsed)];
} catch (e) {
return [String(value)];
}
}
// リーダーを管理者、メンバーを一般メンバーとして GroupMembers を組み立てる
// 形式は "User,ユーザーID,管理者かどうか"
function buildGroupMembers() {
const leaderId = String($p.getValue(LEADER_COLUMN) || '');
const groupMembers = [];
if (leaderId) {
groupMembers.push(`User,${leaderId},True`);
}
getMemberIds()
.map(String)
.filter((userId) => userId && userId !== leaderId) // リーダーは管理者として登録済み
.forEach((userId) => {
groupMembers.push(`User,${userId},False`);
});
return groupMembers;
}
// ===== プロセス「グループ作成」 =====
function createProjectGroup($button) {
// グループIDが記録済みなら作成しない(二重作成を防ぐ)
if (getGroupId() > 0) {
showError(`グループは作成済みです(グループID:${getGroupId()})。`);
return;
}
const groupName = GROUP_NAME_PREFIX + $p.getValue(PROJECT_NAME_COLUMN);
$p.apiGroupsCreate({
data: {
GroupName: groupName,
GroupMembers: buildGroupMembers(),
},
done: function (data) {
// data.Id に作成したグループのIDが入っている
$p.set($p.getControl(GROUP_ID_COLUMN), data.Id);
// グループIDと一緒に保存し、状況を「有効」にする
$p.execProcess($button);
},
fail: function (jqXHR) {
showError(`グループ「${groupName}」を作成できませんでした。${getErrorMessage(jqXHR)}`);
},
});
}
// ===== プロセス「メンバー反映」 =====
function updateProjectGroupMembers($button) {
const groupId = getGroupId();
if (groupId === 0) {
showError('グループIDが記録されていません。');
return;
}
// メンバーは送った内容でまるごと置き換わるため、リーダーとメンバー全員を送る
$p.apiGroupsUpdate({
id: groupId,
data: {
GroupMembers: buildGroupMembers(),
},
done: function () {
// 変更したメンバー欄を保存する
$p.execProcess($button);
},
fail: function (jqXHR) {
showError(`グループ(グループID:${groupId})のメンバーを更新できませんでした。${getErrorMessage(jqXHR)}`);
},
});
}
// ===== プロセス「グループ廃止」 =====
function deleteProjectGroup($button) {
const groupId = getGroupId();
if (groupId === 0) {
showError('グループIDが記録されていません。');
return;
}
const groupName = GROUP_NAME_PREFIX + $p.getValue(PROJECT_NAME_COLUMN);
if (!confirm(`グループ「${groupName}」(グループID:${groupId})を削除します。よろしいですか?`)) {
return;
}
$p.apiGroupsDelete({
id: groupId,
done: function () {
// 保存し、状況を「廃止済」にする
$p.execProcess($button);
},
fail: function (jqXHR) {
showError(`グループ(グループID:${groupId})を削除できませんでした。${getErrorMessage(jqXHR)}`);
},
});
}
ボタンを押して処理を行うのは、テナント管理者の利用者にしてください(グループの作成・更新・削除のAPIは、テナント管理者でないと実行できません)。プロセスの「アクセス制御」で、ボタンを表示する利用者を絞り込めます。
「メンバー反映」では、プロジェクトリーダーとメンバー欄の全員を送ります。グループのメンバーは送った内容でまるごと置き換わるため、メンバー欄から外した利用者はグループからも外れます。
グループを削除すると、そのグループに付けていたサイトのアクセス権も自動で外れます。廃止のときに、サイトの権限設定からグループを手で外す必要はありません。
グループの作成・更新・削除に成功したあと、レコードの保存が入力チェック(必須項目の未入力など)で止まると、グループの変更のみが済んだ状態になります。特に「グループ作成」では、グループIDが記録されないまま再度ボタンを押すと、同じ名前のグループがもう1つ作られます。必須項目は、ボタンを押す前に入力しておいてください。
対応バージョン¶
| 対応バージョン | 内容 |
|---|---|
| 1.5.8.0 以降 | 拡張項目をAPIで登録する機能を追加 |
