開発者向け機能:スクリプト:$p.apiGetClosestSiteId
## 概要
AjaxのPOSTリクエストにより、[サイト名検索](/ja/manual/api-site-get-closest-siteid)で該当サイトに最も近いサイトIDを取得します。
## 前提条件
1. 本機能はサイトの「サイト名」を検索します。あらかじめサイト名を設定してください。サイトの[タイトル](/ja/manual/tenant-logo)ではありませんので注意ください。

## 構文
##### 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
}
]
}
```
## サンプルコード
##### コード内の【 ... 】 は適宜修正してください。
<details>
<summary>1. サイトIDをキャッシュし処理効率化</summary>
サイト名からサイトIDを取得する処理を、一度取得した結果をキャッシュしておくことで、同じサイト名を何度も検索しないようにするサンプルです。
**実務での使いどころ**
複数のプロセスやループ処理の中で同じサイト名を繰り返し検索する場合
一覧の一括処理など、同じサイト名を何度も参照する処理がある場合
通信回数を減らして処理速度を改善したい場合
##### JavaScript
```
// ===== 設定 =====
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
```
</details>
## 関連情報
<div id="ManualList"><ul><li><a href="/ja/manual/tenant-logo">テナント管理機能:ロゴ、タイトル、ロゴ画像</a><span>2024/04/11 up</span></li></ul></article>
<ul><li><a href="/ja/manual/api-site-get-closest-siteid">開発者向け機能:API:サイト操作:サイト名検索で該当サイトに最も近いサイトID取得</a><span>2025/01/30 up</span></li></ul></article>
<ul><li><a href="/ja/manual/server-script-items-get-closest-site">開発者向け機能:サーバスクリプト:items.GetClosestSite</a><span>2026/06/23 up</span></li></ul></article>
<ul><li><a href="/ja/manual/faq-get-closest-site-logic">FAQ:サイト名検索で該当サイトに最も近いサイトID取得の検索順が知りたい。</a><span>2024/06/11 up</span></li></ul></article></div><input id="SearchTextHidden" type="hidden" value="" />



