items.GetSite
概要¶
itemsオブジェクトの「GetSiteメソッド」です。指定したサイトIDをもとにサイトの情報を取得します。
構文¶
パラメータ¶
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| id | object | ○ | サイトIDを指定 |
戻り値¶
該当するサイトの「apiModel 」の配列を返却します。
使用例¶
以下の例では、サイトID 123 のサイト情報を取得します。
const sites = Array.from(items.GetSite(123));
if (sites.length) {
context.Log(sites[0].SiteId);
context.Log(sites[0].Title);
context.Log(sites[0].ReferenceType);
}
サンプルコード¶
1. サイト管理台帳で、サイトの現況と項目の対応表を照会する
社内で作られたサイト(テーブル・フォルダ)を1行1サイトで管理する「サイト管理台帳」で、プロセス「照会」のボタンを押すと、items.GetSiteで対象のサイトの現況を取得して台帳に書き戻します。書き戻すのは、タイトル・種別・作成者・親フォルダ・作成日・設定の最終更新日と、エディタに表示している項目の物理名(ClassAなど)と表示名の対応表です。対象のサイトが削除されていれば、状況を「削除済み」にします。
実務での使いどころ¶
現場でテーブルを作る運用が広がると、放置されたサイトの棚卸や、管理責任者・廃止予定日の管理が求められます。サイトの作成者・作成日・設定の最終更新日を、複数のサイトについてまとめて見る機能はありません。管理責任者のような台帳独自の項目を、サイトそのものに持たせることもできません。項目の物理名と表示名の対応も、テーブルの管理のエディタで項目ごとに開かないと確かめられず、管理の権限が無い人は見られません。台帳にすれば、これらを一覧で確かめられ、スクリプトやAPIを書く人に項目の対応表を渡せます。
事前準備¶
1:「サイト管理台帳」テーブル(記録テーブル)で、以下の項目を設定してください。
| 項目コード | 内容 |
|---|---|
| タイトル(Title) | サイトのタイトル。照会で上書きする |
| 状況(Status) | 選択肢一覧に「100,未照会」「200,運用中」「900,削除済み」を用意 |
| 分類A(ClassA) | 対象サイトID。手で入力する |
| 分類B(ClassB) | 種別(Sites・Issues・Results・Wikis) |
| 分類C(ClassC) | 作成者。選択肢一覧に[[Users*]]を設定し、ユーザーIDを名前で表示する |
| 数値A(NumA) | 親フォルダのサイトID |
| 日付A(DateA) | 作成日 |
| 日付B(DateB) | 設定の最終更新日 |
| 日付C(DateC) | 最終照会日 |
| 日付D(DateD) | 廃止予定日。手で入力する |
| 担当者(Owner) | 管理責任者。手で入力する |
| 説明A(DescriptionA) | 項目対応表 |
2:「テーブルの管理 > プロセス」で、プロセス「照会」(現在の状況:、変更後の状況:、アクション種別:保存)を作成してください。このサンプルは、最初に作成したプロセス(ボタンのIDがProcess_1)を前提にしています。
3:スクリプトを登録します。
3-1:「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
3-2:タイトル: 任意の名前(例:lookUpSiteLedger)
3-3:スクリプト: 下記サンプルコードを貼り付け
3-4:条件: 「更新前」にチェック
4:台帳のレコードを作成して、分類A(対象サイトID)にサイトIDを入力し、編集画面で「照会」を押します。
JavaScript¶
// プロセス「照会」のボタンのID
const LOOKUP_PROCESS = 'Process_1';
// 台帳の項目の割り当て
const LEDGER = {
siteId: 'ClassA', // 対象サイトID(手入力)
referenceType: 'ClassB', // 種別
creator: 'ClassC', // 作成者(選択肢一覧に [[Users*]] を設定)
parentId: 'NumA', // 親フォルダのサイトID
createdTime: 'DateA', // 作成日
updatedTime: 'DateB', // 設定の最終更新日(レコードの作成・更新では変わらない)
lookedUpTime: 'DateC', // 最終照会日
columnTable: 'DescriptionA', // 項目対応表
};
const STATUS_ACTIVE = 200; // 運用中
const STATUS_DELETED = 900; // 削除済み
// エディタに表示している項目の、物理名と表示名の対応表(Markdownの表)を作る
function columnTable(siteSettings) {
// Columns には、使っていない項目も含めた全項目が入る
const labels = new Map(Array.from(siteSettings.Columns).map((column) => [column.ColumnName, column.LabelText]));
const editor = JSON.parse($ps.JSON.stringify(siteSettings.EditorColumnHash));
const rows = [];
for (const names of Object.values(editor)) {
// 見出しなど、項目ではない要素は Columns に無いため飛ばす
names.filter((name) => labels.has(name)).forEach((name) => rows.push(`| ${name} | ${labels.get(name)} |`));
}
// 1行目を [md] にすると、説明項目で Markdown の表として表示される
return ['[md]', '| 物理名 | 表示名 |', '|---|---|', ...rows].join('\n');
}
// 対象サイトの現況を取得して、台帳に書き戻す
function lookUpSite() {
const siteId = Number(model[LEDGER.siteId]);
if (!Number.isInteger(siteId) || siteId <= 0) {
context.Error('対象サイトIDには、サイトIDを数字で入力してください。');
return;
}
model[LEDGER.lookedUpTime] = new Date();
const site = Array.from(items.GetSite(siteId))[0];
// 削除したサイトと、存在しないIDは0件で返る
if (!site) {
model.Status = STATUS_DELETED;
return;
}
// レコードのIDを渡すと、そのレコードが属するサイトが返る
if (Number(site.SiteId) !== siteId) {
context.Error(`ID ${siteId} はサイトIDではありません(レコードIDの可能性があります)。`);
return;
}
model.Title = site.Title;
model[LEDGER.referenceType] = site.ReferenceType;
model[LEDGER.creator] = String(site.Creator);
model[LEDGER.parentId] = site.ParentId;
model[LEDGER.createdTime] = site.CreatedTime;
model[LEDGER.updatedTime] = site.UpdatedTime;
model[LEDGER.columnTable] = site.ReferenceType === 'Sites' ? '' : columnTable(site.SiteSettings);
model.Status = STATUS_ACTIVE;
}
// 画面のプロセス「照会」のボタンで保存したときだけ照会する(通常の保存では何もしない)
if (context.ControlId === LOOKUP_PROCESS) {
lookUpSite();
}
注記¶
- 画面のプロセス「照会」のボタンで保存したとき(
context.ControlIdがProcess_1のとき)のみ照会します。通常の保存では照会しません。APIでプロセスを実行したときはcontext.ControlIdが空になるため、照会しません。 items.GetSiteは、削除したサイトや存在しないIDでは0件を返します。このサンプルでは、状況を「削除済み」にし、ほかの項目は前回の値を残します。- レコードのIDを渡すと、0件ではなく、そのレコードが属するサイトが返ります。このサンプルでは、返ったサイトIDが入力と違えばエラーにします。
SiteSettings.Columnsには、使っていない項目も含めた全項目が入ります。このサンプルでは、エディタに表示している項目(EditorColumnHash)に絞り、タブと並び順のとおりに書き出します。見出しは書き出しません。項目対応表は、1行目を[md]にして、Markdownの表として表示しています。- 設定の最終更新日(
UpdatedTime)は、サイトの設定を変えたときに変わり、レコードの作成・更新では変わりません。最後に使われた日の代わりにはなりません。 - テナント管理者が運用する前提のサンプルです。テナント管理者は、アクセス権が付いていないサイトも取得できます。
