コンテンツにスキップ

$p.apiGetClosestSiteId

概要

AjaxのPOSTリクエストにより、サイト名検索で該当サイトに最も近いサイトIDを取得します。

前提条件

  1. 本機能はサイトの「サイト名」を検索します。あらかじめサイト名を設定してください。サイトのタイトルではありませんので注意ください。
    サイトの「サイト名」を設定する箇所

構文

JavaScript
$p.apiGetClosestSiteId({
    id: <検索開始のサイトID>,
    data: {
        <取得条件>
    },
    done: <任意の処理>,
    fail: <任意の処理>,
    always: <任意の処理>
});

パラメータ

パラメータ名 型 必須 概要
id long ○ 検索開始のサイトID。通常は $p.siteId() を使用して、このメソッドを呼び出しているサイトのIDを指定します。
data object ○ 取得条件
done function ○ API通信成功時の処理
fail function API通信失敗時の処理
always function API通信完了時の処理

取得条件について

キーワード 説明 必須
FindSiteNames 検索したい対象のサイト名を配列で指定。 ○

使用例

呼び出し

JavaScript
$p.apiGetClosestSiteId({
    id: $p.siteId(),
    data: {
        FindSiteNames:['ParentSite','HideSize']
    },
    done: function (data) {
        console.log(data);
    }
});

レスポンス

JSON
{
    "SiteId": 12345,
    "Data": [
        {
            "SiteName": "ParentSite",
            "SiteId": 12344
        },
        {
            "SiteName": "HideSite",
            "SiteId": -1
        }
    ]
}

サンプルコード

Note

コード内の【 ... 】は適宜修正してください。

1. サイトIDをキャッシュし処理効率化

サイト名からサイトIDを取得する処理を、一度取得した結果をキャッシュしておくことで、同じサイト名を何度も検索しないようにするサンプルです。

実務での使いどころ

複数のプロセスやループ処理の中で同じサイト名を繰り返し検索する場合
一覧の一括処理など、同じサイト名を何度も参照する処理がある場合
通信回数を減らして処理速度を改善したい場合

// ===== 設定 =====
const TARGET_SITE_NAME = '【サイト名】'; // 検索対象のサイト名

// サイトIDキャッシュ
const _siteIdCache = new Map();

/**
 * サイト名からSiteIdを取得する(キャッシュ利用)
 * @param {string} siteName - 検索したいサイト名
 * @returns {Promise<number|null>} 見つかったSiteId。見つからない場合はnull
 */
function getSiteIdOrNull(siteName) {
    return new Promise((resolve) => {
        if (_siteIdCache.has(siteName)) {
            resolve(_siteIdCache.get(siteName));
            return;
        }

        $p.apiGetClosestSiteId({
            id: $p.siteId(),
            data: {
                FindSiteNames: [siteName]
            },
            done: (res) => {
                const found = res?.Data?.find(d => d.SiteName === siteName);

                if (!found || !found.SiteId || found.SiteId === -1) {
                    console.error(`(error)${siteName} サイト情報取得失敗`);
                    resolve(null);
                    return;
                }

                _siteIdCache.set(siteName, found.SiteId);
                resolve(found.SiteId);
            },
            fail: (res) => {
                console.error(`(error)${siteName} サイト情報取得失敗`, res);
                resolve(null);
            }
        });
    });
}

(async () => {
    const siteId = await getSiteIdOrNull(TARGET_SITE_NAME);
    if (siteId) {
        console.log(`(info)${TARGET_SITE_NAME}のSiteId: ${siteId}`);
    }
})();

実行結果

(info)案件管理のSiteId: 99999

関連情報