NetSuite自動化
Oracle NetSuite ERPの業務を自動化します。顧客や受注の作成、SuiteQLクエリの実行、外部IDによるレコードのアップサート、レコードメタデータの調査など、包括的なビジネス管理を実現します。
ツールキットドキュメント: composio.dev/toolkits/netsuite
セットアップ
このスキルを使用するには、https://rube.app/mcp に接続された Rube MCPサーバー が必要です。
ツールを実行する前に、netsuite ツールキットのアクティブな接続が存在することを確認してください。接続がない場合は、RUBE_MANAGE_CONNECTIONS 経由で接続を開始してください。
コアワークフロー
1. 受注の作成
品目参照、数量、価格を含む明細行を持つ顧客注文を作成します。
ツール: NETSUITE_CREATE_SALES_ORDER
主要パラメータ:
entity(必須) -- 顧客参照:{"id": "<内部ID>"}item(必須) --items配列を含むコンテナ。各項目:item(必須) -- 品目参照:{"id": "<内部ID>"}quantity(必須) -- 注文数量 (0以上)rate-- 単価 (品目に既定価格がある場合は省略可)amount-- 明細行合計金額 (rateの代替)taxcode-- 税コード参照:{"id": "<内部ID>"}(SuiteTaxが有効な場合は必須)description-- 明細行のメモ
tranDate-- 取引日 (YYYY-MM-DD形式)memo-- ヘッダーメモorderStatus--"A"(承認待ち) または"B"(フルフィルメント待ち)otherrefnum-- 外部参照または発注番号
例:
ツール: NETSUITE_CREATE_SALES_ORDER
引数:
entity: {"id": "1234"}
item: {
"items": [
{"item": {"id": "56"}, "quantity": 10, "rate": 25.00},
{"item": {"id": "78"}, "quantity": 5, "rate": 50.00}
]
}
tranDate: "2026-02-11"
memo: "Q1大口注文"
orderStatus: "B"
2. SuiteQLクエリの実行
サーバーサイドのページングを使用して、NetSuiteデータに対してアドホックなSQLクエリを実行します。
ツール: NETSUITE_RUN_SUITEQL_QUERY
主要パラメータ:
q(必須) -- SuiteQLのSELECT文limit-- 1ページあたりの行数 (デフォルトは変動)offset-- 最初の行の0ベースインデックス (limitの倍数である必要あり)
例:
ツール: NETSUITE_RUN_SUITEQL_QUERY
引数:
q: "SELECT id, companyname, email FROM customer WHERE isinactive = 'F' ORDER BY companyname"
limit: 100
offset: 0
ツール: NETSUITE_RUN_SUITEQL_QUERY
引数:
q: "SELECT id, entitystatus, total FROM transaction WHERE type = 'SalesOrd' AND trandate >= '2026-01-01'"
limit: 50
3. 顧客の作成と管理
子会社の割り当てと連絡先情報を含む新しい顧客レコードを作成します。
ツール:
NETSUITE_CREATE_CUSTOMER-- 新規顧客の作成NETSUITE_GET_CUSTOMER-- 内部IDによる顧客の取得NETSUITE_UPDATE_CUSTOMER-- 既存顧客の更新 (PATCHセマンティクス)
NETSUITE_CREATE_CUSTOMER の主要パラメータ:
body(必須) -- 顧客データを含むJSONオブジェクト。必須フィールド:subsidiary--id(子会社の内部ID) を含むオブジェクトcompanyName(法人の場合) またはfirstName+lastName(個人の場合)- 省略可:
email,phone,isPerson(個人の場合は"T"に設定),comments
replace-- 完全に置き換えるサブリスト名のカンマ区切り (例:"contacts,addressbook")
例:
ツール: NETSUITE_CREATE_CUSTOMER
引数:
body: {
"companyName": "Acme Corp",
"subsidiary": {"id": "1"},
"email": "[email protected]",
"phone": "555-0100"
}
4. 外部IDによるレコードのアップサート
外部識別子を使用してレコードを冪等に作成または更新します。同期ワークフローに不可欠です。
ツール: NETSUITE_UPSERT_RECORD_BY_EXTERNAL_ID
主要パラメータ:
record_type(必須) -- レコードタイプ名 (例:"customer","salesorder","customrecord_myrec")external_id(必須) -- 外部IDの値 (英数字、アンダースコア、ハイフンのみ)body(必須) -- レコードスキーマに一致するJSONオブジェクト。作成時は必須フィールドを含めること
例:
ツール: NETSUITE_UPSERT_RECORD_BY_EXTERNAL_ID
引数:
record_type: "customer"
external_id: "CRM-CUST-42"
body: {
"companyName": "Acme Corp",
"subsidiary": {"id": "1"},
"email": "[email protected]"
}
警告: 冪等性は外部IDの一貫した使用に依存します。不一致が発生すると、更新ではなく新しいレコードが作成されます。
5. レコードメタデータの調査
レコードを作成または更新する前に、使用可能なフィールド、データ型、制約、要件を確認します。
ツール: NETSUITE_GET_RECORD_METADATA
主要パラメータ:
record_type(必須) -- 例:"customer","salesorder","invoice","vendor","employee","item"accept--"application/schema+json"(デフォルト、JSON Schema) または"application/swagger+json"(OpenAPI 3.0)
例:
ツール: NETSUITE_GET_RECORD_METADATA
引数:
record_type: "salesorder"
6. レコードの一覧表示とフィルタリング
オプションのフィルタリングとページングを使用して複数のレコードを取得します。
ツール: NETSUITE_LIST_RECORDS
主要パラメータ:
recordType(必須) -- 例:"customer","salesorder"q-- N/query演算子を使用したフィルター式 (例:"email START_WITH \"barbara\"")limit-- 1ページあたりの最大レコード数 (1〜1000、デフォルト1000)offset-- 0ベースインデックス (limitで割り切れる必要あり)
補助ツール:
NETSUITE_FILTER_RECORD_COLLECTION-- 代替フィルタリング (SuiteQLの補助)NETSUITE_GET_RECORD_SELECTED_FIELDS-- 特定のフィールドのみを取得 (ペイロード削減)
推奨実行計画
- レコードスキーマの調査:
NETSUITE_GET_RECORD_METADATAを使用して必須フィールドを確認 - 既存レコードの検索:
NETSUITE_RUN_SUITEQL_QUERYを使用して重複を回避 - 顧客の検索: SuiteQLでメールアドレスから顧客を検索。見つかった場合は
NETSUITE_GET_CUSTOMERで詳細を取得 - 必要に応じて顧客を作成:
NETSUITE_CREATE_CUSTOMERを使用 (subsidiaryを設定すること) - 品目の内部IDを検証:
NETSUITE_LIST_RECORDSまたは SuiteQL を使用 - 受注の作成: 検証済みの参照を使用して
NETSUITE_CREATE_SALES_ORDERを実行 - 必要に応じて外部IDでアップサート: 同期ワークフローには
NETSUITE_UPSERT_RECORD_BY_EXTERNAL_IDを使用 - 結果の確認:
NETSUITE_GET_RECORD_SELECTED_FIELDSを使用して価格/合計を確認
既知の問題点
| 問題点 | 詳細 |
|---|---|
| 無効な品目ID | NETSUITE_CREATE_SALES_ORDER は、品目の内部IDが無効な場合に USER_ERROR をスローします。事前に NETSUITE_LIST_RECORDS または NETSUITE_RUN_SUITEQL_QUERY で検証してください。 |
| 必須フィールドの欠落 | NETSUITE_CREATE_CUSTOMER は、必須フィールド(例: subsidiary)がない場合に400を返します。事前に NETSUITE_GET_RECORD_METADATA で必ず確認してください。 |
| SuiteQLフィールド名 | アカウントによるクエリの違いにより、結果が空になる場合があります。結果がおかしい場合は、NETSUITE_GET_RECORD_METADATA でフィールド名を確認してください。 |
| フィルター式の制限 | NETSUITE_FILTER_RECORD_COLLECTION は、サポートされていないフィルター構文で失敗する可能性があります。SuiteQLの補助として扱ってください。 |
| 外部IDの冪等性 | NETSUITE_UPSERT_RECORD_BY_EXTERNAL_ID は外部IDの一貫した使用に依存します。不一致が発生すると、更新ではなく重複レコードが作成されます。 |
| SuiteTaxの明細行 | SuiteTaxが有効なアカウントでは、すべての明細行に taxcode が必要です。省略すると作成に失敗します。 |
クイックリファレンス
| ツールスラッグ | 説明 |
|---|---|
NETSUITE_CREATE_SALES_ORDER | 明細行付きの新しい受注を作成 |
NETSUITE_RUN_SUITEQL_QUERY | ページング付きでアドホックなSuiteQLクエリを実行 |
NETSUITE_CREATE_CUSTOMER | 新しい顧客レコードを作成 |
NETSUITE_GET_CUSTOMER | 内部IDで顧客を取得 |
NETSUITE_UPDATE_CUSTOMER | 既存の顧客を更新 (PATCH) |
NETSUITE_UPSERT_RECORD_BY_EXTERNAL_ID | 外部IDでレコードを作成または更新 |
NETSUITE_GET_RECORD_METADATA | レコードスキーマとフィールド定義を調査 |
NETSUITE_LIST_RECORDS | フィルタリングとページングでレコードを一覧表示 |
NETSUITE_FILTER_RECORD_COLLECTION | 代替レコードフィルタリング |
NETSUITE_GET_RECORD_SELECTED_FIELDS | レコードから特定のフィールドを取得 |
Powered by Composio