> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloud.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# NetSuite カスタムレポート

> SuiteTalk で接続している NetSuite ユーザーは、RESTlet または保存済み検索を使用して Connect AI でカスタムレポートを作成できます。

<Note>
  **Note:** RESTlet と保存済み検索は SuiteQL と互換性がありません。
</Note>

## RESTlet

このセクションでは、RESTlet スクリプトを使用して保存済み検索をクエリする方法を示します。

<Note>
  **Note:** RESTlet の使用は、保存済み検索をクエリする推奨方法です。RESTlet の使用は、[保存済み検索](#saved-searches)で説明されている方法とは異なります。この古い方法は SuiteTalk API に依存しており、保存済み検索が返せる内容がより制限されています。
</Note>

### RESTlet スクリプトの作成

テキストエディターで新しいファイルを開きます。次の RESTlet スクリプトをコピーして貼り付け、`search_script.js` として保存します。

```bash expandable theme={null}
/**
 *@NApiVersion 2.x
 *@NScriptType Restlet
 */
define(['N/search'],
    function (search) {
        // Get a standard NetSuite record
        function _get(context) {
            var myTransactionSearch = search.load({
                id: context.searchid
            });
            var pagedData = myTransactionSearch.runPaged({
                pageSize: 1000
            });
            if (pagedData.count == 0) {
                return JSON.stringify({
                    "pagedData": {
                        "searchDefinition": {
                            "count": [
                                {"columnCount":0}
                            ]
                        }
                    }
                });
            }
            var results = pagedData.fetch({
                index: context.index
            })
            return JSON.stringify(results);
        }

        return {
            get: _get
        };
    });
```

### RESTlet を使用した保存済み検索のクエリ

以下の手順で、RESTlet スクリプトをデプロイし、RESTlet を実行します：

#### SuiteScript の有効化

**Setup** > **Company** > **Enable Features** に移動します。**SuiteCloud** タブで、**Client SuiteScript**、**Server SuiteScript**、および **SuiteScript Server Pages** のオプションがすべて有効になっていることを確認します。

#### SuiteScript ファイルのアップロード

**Documents** > **Files** > **SuiteScripts** に移動します。**Add File** ボタンをクリックします。[RESTlet スクリプトの作成](#create-a-restlet-script)で作成した `search_script.js` スクリプトをアップロードします。

#### スクリプトレコードの作成

**Customization** > **Scripting** > **Scripts** > **New** に移動します。メニューから `search_script.js` を見つけて選択します。次に **Create Script Record** をクリックします。

#### スクリプトレコードのデプロイ

スクリプトに名前を付け、**Deployments** タブでタイトルを追加します。**Save** をクリックします。これによりデプロイメントが作成されます。

<Note>
  **Note:** スクリプトデプロイメントのステータスが **Testing** の間は、デプロイメントを作成したユーザーのみが保存済み検索のクエリから結果を取得できます。RESTlet を他のユーザーが利用できるようにするには、スクリプトデプロイメントのステータスを **Released** に更新し、**Audience** タブでサポートされるロールを追加します。
</Note>

#### デプロイメント / スクリプト ID の取得

スクリプトレコードにはデプロイメントへのリンクがあります。リンクをたどってデプロイメントに移動します。または、**Customization** > **Scripting** > **Script Deployments** に移動し、フィルタを使用して作成したデプロイメントを見つけることもできます。デプロイメントレコードには URL と外部 URL が表示されます。この URL からスクリプト番号とデプロイメント番号をコピーします。

#### 保存済み検索 ID の取得

`search_script.js` を実行するには、保存済み検索の ID を渡す必要があります: **Lists** > **Search** > **Saved Searches** に移動し、保存済み検索の ID をコピーします。作成日などの常に同じ順序を提供するカラムで並べられた検索を使用することをお勧めします。これは、NetSuite が結果をキャッシュしないため、ページをめくっている間にデータが変更されると重複やデータの欠損が生じる可能性があるためです。

#### カスタムレポートの追加

<Steps>
  <Step>
    Connect AI の **Sources** ページで NetSuite 接続を選択します。
    NetSuite 接続がない場合は、NetSuite の[セットアップガイド](/ja/Data-Sources/NetSuite#setup-guide)の手順に従います。
  </Step>

  <Step>
    **Custom Reports** タブをクリックし、**Add** をクリックして新しいレポートを追加します。
    **Add Custom Report** ダイアログが表示されます。
  </Step>

  <Step>
    **RestletSchema** を選択し、**Confirm** をクリックします。
  </Step>

  <Step>
    以下の情報を入力します。

    * **Name**—カスタムレポートの名前。
    * **SearchId**—NetSuite UI で取得した保存済み検索の ID。
    * **ScriptID**—スキーマを作成する RESTlet のスクリプト ID。
    * **DeploymentNum**—実行する RESTlet スキーマのデプロイメント番号。通常、この番号は 1 です。
  </Step>

  <Step>
    **UseLabels** を使用するかどうかを選択します。これは、NetSuite コネクタが保存済み検索の結果に表示されるカラム名に合わせてカラム名のマッチングを試みるか、保存済み検索自体が返す API 名を使用するかを決定します。UseLabels が true に設定されている場合でも、名前はアンダースコアを含む英数字に変換されます。また、保存済み検索で同じ名前のラベルが返ってくることがあります。この場合、重複する名前を一意に保つために番号が付加されます。
  </Step>

  <Step>
    **FlattenSelects** を使用するかどうかを選択します。保存済み検索にマルチセレクトカラムが含まれている場合は、このパラメータを false に設定します。このパラメータは、NetSuite コネクタがセレクト（エンティティ / 顧客参照など）のデータ型をモデル化する方法を制御します。FlattenSelects が false に設定されている場合、マルチセレクトデータは JSON アグリゲートとして返されます。
    デフォルトでは、NetSuite コネクタはセレクトに対して 2 つのカラム（名前用と値（多くの場合 ID）用）を公開します。保存済み検索にマルチセレクトカラムが含まれている場合、これは正しく機能しません。RESTlet メタデータにはマルチセレクトと単一セレクトのカラムを区別するものは何もありません。
  </Step>

  <Step>
    **Save** をクリックしてカスタムレポートを保存します。
  </Step>
</Steps>

### 制限事項

* 現在、NetSuite コネクタは、含まれている `search_script.js` スクリプトの形式のレスポンスに準拠した RESTlet のみをサポートしています。
* NetSuite コネクタは、結果に対するサーバーサイドフィルタリングをサポートしていません。クエリをより速く実行するには、保存済み検索内でフィルタをすべて定義してください。

## 保存済み検索

保存済み検索は、NetSuite の制限により一部の制限を伴ってサポートされています。

<Note>
  **Note:** このガイドに従う代わりに RESTlet を検討することをお勧めします。これらの手順は引き続き機能しますが、以下で詳述する SuiteTalk API から使用される保存済み検索は、メタデータの取得方法と利用可能なコンテンツの両方で制限があります。RESTlet は制限が少なく、NetSuite から正確なメタデータを返します。
</Note>

### SavedSearches ビュー

SavedSearches ビューは、特定の検索タイプで使用可能な保存済み検索のリストを取得する便利な方法です。SavedSearches ビューから情報を取得するには SearchType を指定する必要があります。例:

`SELECT * FROM SavedSearches WHERE SearchType='Transaction'`

### カスタムレポートの追加

<Steps>
  <Step>
    Connect AI の **Sources** ページで NetSuite 接続を選択します。
  </Step>

  <Step>
    **Custom Reports** タブをクリックし、**Add** をクリックして新しいレポートを追加します。
    **Add Custom Report** ダイアログが表示されます。
  </Step>

  <Step>
    **SavedSearchSchema** を選択し、**Confirm** をクリックします。
  </Step>

  <Step>
    以下の情報を入力します。

    * **Name**—カスタムレポートの名前。
    * **SavedSearch**—保存済み検索の名前。これが結果テーブルの名前になります。
    * **SavedSearchId**—保存済み検索の ID。
    * **SearchType**—カスタムレポートの検索タイプ。検索タイプのリストはリンクをクリックしてください。
    * **ResultsToSample**—（オプション）サンプリングする結果の数を指定する整数。
  </Step>

  <Step>
    **Save** をクリックしてカスタムレポートを保存します。
  </Step>
</Steps>

### 制限事項

NetSuite は保存済み検索にいくつかの制限を課しています。計算カラム（数式）は NetSuite API を介して取得できません。テーブルから直接取得できるカラムのみ取得できます。保存済み検索に計算がある場合は、計算で使用される各カラムを個別に返し、クライアントサイドで計算を実行する必要があります。例:

`SELECT (col1 / col2) AS calc FROM MySavedSearch`

集計またはサマリー（Group / Count / Sum / Minimum / Maximum / Average）を返す保存済み検索は一切返すことができません。NetSuite API はこれらの保存済み検索を取得しようとすると例外をスローします。この制限により、これらの保存済み検索は当社および他のサードパーティツールでは使用できません。
