開発者向け機能:スクリプト:$p.apiGet
## 概要
指定したサイトのレコード情報を取得します。[サイト統合](/ja/manual/table-site-integration)を設定しているテーブルの場合は、統合された各レコードの情報もあわせて取得します。
## 制限事項
1. 取得できるレコードの件数は Api.json の PageSize(デフォルトで 200) が最大となります。200件以上のレコードを取得する場合は、[FAQ:API で 200 レコードを超えるデータを取得したい](/ja/manual/faq-api-paging)をご参照ください。
## 構文
##### JavaScript
```
$p.apiGet({
id: <サイトID>,
data: {
<取得条件>
},
done: <任意の処理>,
fail: <任意の処理>,
always: <任意の処理>
});
```
## パラメータ
|パラメータ名|型|必須|概要|
|:--|:--|:--|:--|
|id|long|○|操作対象のサイトID、またはレコードIDを指定。|
|data|object|○|POSTするJSONデータを指定。「JSONデータレイアウト:View」、テーブル種類(TableType)を指定することが可能。指定可能なテーブル種類については下記の "テーブル種類について" をご確認ください。 |
|done|function|○|API通信成功時の処理|
|fail|function||API通信失敗時の処理|
|always|function||API通信完了時の処理|
### テーブル種類について
テーブル種類(TableType)に指定可能な値は以下の通りです。
|値|説明|
|:--|:--|
|Normal|指定したサイトのレコード情報を取得する場合に指定します。取得するレコード情報は履歴が最新バージョンです。また、こちらの値はTableTypeの既定値で、TableTypeを指定しない場合は、内部ではこの値が設定されて処理が行われます。|
|History|指定したサイトのレコードの履歴情報を取得する場合に指定します。取得するレコード情報は履歴が過去バージョン(最新バージョンは含まない)です。|
|NormalAndHistory|指定したサイトのレコード情報と履歴情報を合わせて取得する場合に指定します。取得するレコード情報は履歴が全てのバージョンです。|
## 使用例①
POSTするデータに "View" のJSONデータレイアウトを指定する場合は以下のように記述します。"View" のレイアウトについては「JSONデータレイアウト:View」をご確認ください。
##### JavaScript
```
$p.apiGet({
id: 123,
data: {
View: {
ApiDataType: "KeyValues",
GridColumns: ["Title", "ClassA"]
}
},
done: function (data) {
alert('通信が成功しました。');
}
});
```
## 使用例②
POSTするデータに テーブル種類 "TableType" を指定する場合は以下のように記述します。
##### JavaScript
```
$p.apiGet({
id: 123,
data: {
TableType: 'History'
},
done: function (data) {
alert('通信が成功しました。');
}
});
```
## 使用例③
POSTするデータに "View" のJSONデータレイアウト、テーブル種類 "TableType" を指定する場合は以下のように記述します。
##### Javascript
```
$p.apiGet({
id: 123,
data: {
View: {
ColumnFilterHash:{
ClassA: '中野区'
}
},
TableType: 'History'
},
done: function (data) {
console.log(data);
}
});
```
## サンプルコード
##### コード内の【 ... 】 は適宜修正してください。
<details>
<summary>1. レコードIDを指定して取得する</summary>
レコードIDを指定して取得します。
##### JavaScript
```javascript
// 取得対象のレコードID
const recordId = 【レコードID】;
$p.apiGet({
id: recordId,
done: function (data) {
const records = data.Response.Data;
if (records.length === 0) {
console.log('レコードが見つかりませんでした。recordId=' + recordId);
return;
}
const item = records[0];
console.log(`${item.Title} ${item.ClassHash.ClassA}`);
},
fail: function (data) {
console.log('レコード取得に失敗しました。');
},
});
```
##### 実行結果
```
サンプル案件E 改善要望
```
</details>
<details>
<summary>2. サイトIDを指定しレコード全件取得する</summary>
サイトIDを指定し、レコード全件します。
##### JavaScript
```javascript
// 取得対象のサイトID
const siteId = 【サイトID】;
$p.apiGet({
id: siteId,
done: function (data) {
const records = data.Response.Data;
records.forEach(function (item) {
console.log(`${item.Title} ${item.ClassHash.ClassA}`);
});
},
fail: function (data) {
console.log('レコード取得に失敗しました。');
},
});
```
##### 実行結果
```
サンプル案件E 改善要望
サンプル案件D 問い合わせ
サンプル案件C 障害
サンプル案件B 改善要望
サンプル案件A 問い合わせ
```
</details>
<details>
<summary>3. 日付の期間を指定しレコードを取得する</summary>
日付の期間を指定しレコードを取得します。
##### JavaScript
```javascript
// 取得対象のサイトID
const siteId = 【サイトID】;
// 取得対象の期間(DateA が start〜end の範囲内のレコードを取得)
const start = '2025/01/10';
const end = '2025/01/12';
$p.apiGet({
id: siteId,
data: {
View: {
ColumnFilterHash: {
// 日付の範囲指定(開始日時, 終了日時)
DateA: `["${start} 00:00:00, ${end} 23:59:59"]`,
},
ColumnSorterHash: {
DateA: 'asc', // 日付の昇順で並べ替え
},
},
},
done: function (data) {
const records = data.Response.Data;
records.forEach(function (item) {
console.log(`${item.Title} ${item.ClassHash.ClassA} ${item.DateHash.DateA}`);
});
},
fail: function (data) {
console.log('レコード取得に失敗しました。');
},
});
```
##### 実行結果
```
サンプル案件A 問い合わせ Fri Jan 10 2025 00:00:00 GMT+0900 (日本標準時)
サンプル案件B 改善要望 Sat Jan 11 2025 00:00:00 GMT+0900 (日本標準時)
サンプル案件C 障害 Sun Jan 12 2025 00:00:00 GMT+0900 (日本標準時)
```
</details>
<details>
<summary>4. ステータスコードを指定し取得する</summary>
ステータスを指定し取得します。
##### JavaScript
```
// 取得対象のサイトID
const siteId = 【サイトID】;
// 取得対象のステータスコード(複数指定 → OR 検索)
const statusCodes = `["100","200"]`;
$p.apiGet({
id: siteId,
data: {
View: {
ColumnFilterHash: {
Status: statusCodes, // ステータスで絞り込み(OR)
},
ColumnSorterHash: {
DateA: 'asc',
},
},
},
done: function (data) {
const records = data.Response.Data;
records.forEach(function (item) {
console.log(`${item.Title} ${item.ClassHash.ClassA} ${item.Status}`);
});
},
fail: function (data) {
console.log('レコード取得に失敗しました。');
},
});
```
##### 実行結果
```
サンプル案件A 問い合わせ 200
サンプル案件B 改善要望 100
サンプル案件C 障害 200
```
</details>
<details>
<summary>5. 文字列で検索(部分一致)し取得する</summary>
文字列で検索(部分一致)し取得します。
##### JavaScript
```
// 取得対象のサイトID
const siteId = 【サイトID】;
// 検索する文字列(DescriptionA に対して部分一致)
const keyword = 'リリース';
$p.apiGet({
id: siteId,
data: {
View: {
ColumnFilterHash: {
DescriptionA: keyword, // 検索対象の項目と文字列
},
ColumnFilterSearchTypes: {
DescriptionA: 'PartialMatch', // 部分一致
},
ColumnSorterHash: {
DateA: 'asc',
},
},
},
done: function (data) {
const records = data.Response.Data;
records.forEach(function (item) {
console.log(`${item.Title} ${item.ClassHash.ClassA} ${item.DescriptionHash.DescriptionA}`);
});
},
fail: function (data) {
console.log('レコード取得に失敗しました。');
},
});
```
##### 実行結果
```
サンプル案件B 改善要望 次期リリース候補
サンプル案件E 改善要望 仕様確定しリリース済
```
</details>
<details>
<summary>6. 200件を超えるレコードを取得する</summary>
200件を超えるレコードを取得します。
##### JavaScript
```
// 取得対象のサイトID
const siteId = 【サイトID】;
// 取得した全レコードを蓄積する配列
const allItems = [];
// offset の位置から1ページ分を取得する(取得後に次ページを再帰呼び出し)
function fetchPage(offset) {
$p.apiGet({
id: siteId,
data: {
Offset: offset, // 取得開始位置
},
done: function (data) {
const records = data.Response.Data;
// 取得件数が0になったら終了し、全件をまとめて処理する
if (!records || records.length === 0) {
console.log(`最終的な取得件数: ${allItems.length} 件`);
allItems.forEach(function (item) {
console.log(`${item.Title} ${item.ClassHash.ClassA}`);
});
return;
}
// 今回分を配列に追加
records.forEach(function (item) {
allItems.push(item);
});
console.log(`Offset=${offset}, 取得件数=${records.length}`);
// Offset を「今回取得した件数ぶん」進めて次ページを取得
fetchPage(offset + records.length);
},
fail: function (data) {
console.log('レコード取得に失敗しました。offset=' + offset);
},
});
}
// 先頭(Offset=0)から取得開始
fetchPage(0);
```
##### 実行結果
```
Offset=0, 取得件数=200
Offset=200, 取得件数=150
最終的な取得件数: 350 件
サンプル案件A 問い合わせ
サンプル案件B 改善要望
サンプル案件C 障害
サンプル案件D 問い合わせ
サンプル案件E 改善要望
・・・
```
</details>



