コンテンツにスキップ

items.GetSite

概要

itemsオブジェクトの「GetSiteメソッド」です。指定したサイトIDをもとにサイトの情報を取得します。

構文

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)は、サイトの設定を変えたときに変わり、レコードの作成・更新では変わりません。最後に使われた日の代わりにはなりません。
  • テナント管理者が運用する前提のサンプルです。テナント管理者は、アクセス権が付いていないサイトも取得できます。

関連情報