コンテンツにスキップ

items.GetSiteByTitle

概要

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

構文

items.GetSiteByTitle(title)

パラメータ

パラメータ 型 必須 説明
title object ○ サイトのタイトルを指定

戻り値

該当するサイトの「apiModel 」の配列を返却します。

使用例

以下の例では、タイトルが "部署マスタ" のサイト情報を取得してログに出力します。

const sites = Array.from(items.GetSiteByTitle('部署マスタ'));
if (sites.length) {
    sites.forEach(site => {
        context.Log(site.SiteId);
        context.Log(site.Title);
        context.Log(site.ReferenceType);
    })
}

サンプルコード

1. 案件ごとのテーブルを作るとき、同じ名前のテーブルがあれば登録を止める

「案件管理」テーブルに案件を登録するとき、案件名と同じ名前のテーブルを「案件フォルダ」の下に作ります。作る前にitems.GetSiteByTitleで同じ名前のサイトを探し、案件フォルダにすでにあれば、エラーメッセージを表示して登録を止めます。作ったテーブルのサイトIDは、案件のレコードに残します。

実務での使いどころ

案件やプロジェクトごとにテーブルを作る運用で、同じ名前のテーブルが重複して作られるのを防げます。テーブル(サイト)のタイトルは、標準の設定では重複が禁止されないため、登録の操作を繰り返したり、同じ案件名で登録したりすると、同じ名前のテーブルが複数でき、データが分かれてしまいます。items.GetSiteByTitleはフォルダを問わず探すため、作成先のフォルダにあるものに絞って判定し、別の部署のフォルダにある同じ名前のテーブルは重複として扱いません。

事前準備

1:案件ごとのテーブルを作るフォルダを作成し、「テーブルの管理 > 全般」でサイト名に「案件フォルダ」を設定してください。

2:「案件管理」テーブル(期限付きテーブル)に以下の項目を有効化してください。

項目コード 内容
タイトル(Title) 案件名。同じ名前のテーブルを作る
数値A(NumA) 作成したテーブルのサイトID

3:スクリプトを登録します。

3-1:「案件管理」テーブルの「テーブルの管理 > サーバスクリプト」タブで「新規作成」を選択する。
 3-2:タイトル: 任意の名前(例:createProjectTableWithoutDuplicate)
 3-3:スクリプト: 下記サンプルコードを貼り付け
 3-4:条件: 「作成前」にチェック

JavaScript
// 案件ごとのテーブルを作るフォルダの「サイト名」(テーブルの管理 > 全般 で設定する)
const PROJECT_FOLDER_NAME = '案件フォルダ';
const LOG_TAG = '[createProjectTableWithoutDuplicate]';

// 案件名と同じ名前のテーブルを、案件フォルダの下に作る(同じ名前のテーブルがあれば登録を止める)
function createProjectTable() {
    const title = (model.Title || '').trim();
    if (!title) {
        return;
    }
    const folder = items.GetClosestSite(PROJECT_FOLDER_NAME);
    if (!folder) {
        context.Error(`サイト名「${PROJECT_FOLDER_NAME}」のフォルダが見つかりません。`);
        return;
    }

    // GetSiteByTitle はタイトルが完全一致するサイトを、フォルダを問わず配列で返す。
    // 作成先のフォルダの直下にあるものに絞って、重複を判定する
    const sameTitle = Array.from(items.GetSiteByTitle(title))
        .filter((site) => site.ParentId === folder.SiteId);
    if (sameTitle.length > 0) {
        const siteIds = sameTitle.map((site) => site.SiteId).join('、');
        logs.LogUserError(`${LOG_TAG} 「${title}」は作成済み(サイトID:${siteIds})`, 'createProjectTable');
        context.Error(`「${title}」のテーブルは既にあります(サイトID:${siteIds})。案件名を変えてください。`);
        return;
    }

    const site = items.NewSite('Issues');
    site.Title = title;
    items.Create(folder.SiteId, site);
    // 作ったテーブルのサイトIDを、案件のレコードに残す
    model.NumA = site.SiteId;
    logs.LogInfo(`${LOG_TAG} 「${title}」のテーブルを作成しました(サイトID:${site.SiteId})`, 'createProjectTable');
}

createProjectTable();

注記

  • items.GetSiteByTitleはタイトルの完全一致で探します。全角・半角の違いなどの表記ゆれは、同じ名前と見なしません(前後の空白は除いて判定します)。
  • 戻り値の各要素にはSiteId・ParentId・Titleが入ります。
  • 登録を止めた場合、テーブルは作成されません。

関連情報