コンテンツにスキップ

NetSuite に接続する

SuiteQL を使って、NetSuite の財務データと業務データを PlaidCloud のテーブルに取り込みます。このガイドでは、空の NetSuite 統合から、スケジュールされた型付きの取得までを説明します。各フィールドの詳細は、NetSuite REST コネクタを参照してください。

NetSuite で、次のものが必要です。

  • 有効化された OAuth 2.0 と REST Web Services(Setup > Company > Enable Features > SuiteCloud)。
  • RSA キーペア。公開証明書は NetSuite にアップロードし、秘密鍵は PlaidCloud 用に保管します。
  • 証明書 ID(公開証明書のアップロードで得られる JWT の kid)、クライアント ID(統合レコードから取得)、アカウント ID(本番は 1234567、サンドボックスは 1234567_SB1)。
  • REST Web Services、Log in using OAuth 2.0 Access Tokens、SuiteAnalytics Workbook(クエリがアナリティクスにアクセスする場合)、および読み取るレコードの表示アクセス権を持つロール。

キーペアの生成、証明書のアップロード、統合の作成といった NetSuite 側の手順は、リファレンスの NetSuite 側のセットアップにすべて記載されています。先にそれらを完了してください。このガイドは、4 つの値が手元にあることを前提としています。

  1. Tools > Connections を開き、New Connection をクリックします。

  2. メニューから NetSuite を選択します。

  3. 各フィールドに入力します。

    フィールド 値
    名前 分かりやすい名前(例: NetSuite Prod)。
    クライアントID 統合レコードのクライアント ID。
    証明書ID 公開証明書のアップロードで得られた証明書 ID(kid)。
    NetSuiteアカウントID アカウント ID(例: 1234567 または 1234567_SB1)。
    NetSuite秘密証明書 秘密鍵の PEM ブロック全体を、複数行のまま貼り付けたもの。
  4. Create をクリックします。

その上に何かを構築する前に、資格情報が機能することを確認します。

  1. ワークフローに REST リクエストステップを追加します。

  2. リクエストタブで、接続に NetSuite 接続を、メソッドに POST を、エンドポイントに /services/rest/query/v1/suiteql を設定します。

  3. 本文に、範囲を絞った小さなクエリを記述します。

    {"q": "SELECT id FROM account WHERE ROWNUM <= 1"}
  4. テストリクエストを送信をクリックします。

スモークテストが成功したら、ステップを実際の取得に変えます。

  1. 本文に、決定的な ORDER BY を含む SuiteQL クエリを記述します。コピー&ペーストで使える出発点(仕訳エントリ、試算表、損益計算書、貸借対照表、未回収売掛金、受注、発注、在庫)は、NetSuite SuiteQL クエリの例を参照してください。

    財務 — 期間内の GL 取引明細:

    {"q": "SELECT tl.transaction AS transaction_id, TO_CHAR(t.trandate, 'YYYY-MM-DD') AS tran_date, a.acctnumber AS account_number, tl.subsidiary AS subsidiary_id, tl.foreignamount AS amount FROM transactionline tl JOIN transaction t ON t.id = tl.transaction JOIN account a ON a.id = tl.expenseaccount WHERE t.trandate BETWEEN TO_DATE('2026-01-01','YYYY-MM-DD') AND TO_DATE('2026-01-31','YYYY-MM-DD') ORDER BY tl.transaction, tl.id"}

    業務 — 顧客別の未処理の受注:

    {"q": "SELECT so.tranid AS order_number, so.entity AS customer_id, TO_CHAR(so.trandate, 'YYYY-MM-DD') AS order_date, so.status AS order_status FROM transaction so WHERE so.type = 'SalesOrd' AND so.status = 'SalesOrd:B' ORDER BY so.id"}
  2. ページングと解析のコントロールと、Prefer/Content-Type ヘッダーには触れないでください。NetSuite 接続がこれらを挿入します。

  3. レスポンスタブで、出力先をテーブルのままにし、列を実際の型で定義します。金額には Currency/Decimal、日付には Date/Datetime、T/F フラグには Boolean を使用します。SuiteQL はすべてを文字列として返すため、型付きの列によって、PlaidCloud にどのように変換するかを伝えます。

  1. ステップを実行し(ワークフロー内の単一ステップの実行を参照)、ターゲットテーブルを確認します。行数と、金額/日付の列がテキストではなく型付きで取り込まれていることを確認してください。

  2. 継続的なフィードにするには、ワークフローをスケジュールします。

症状 考えられる原因
テストリクエストがスコープまたはロールに関するメッセージとともに 400 になる ロールに REST Web Services / OAuth 2.0 ログイン / SuiteAnalytics がないか、スコープ配列が拒否されています。表示される詳細に該当箇所が示されます。
トークン交換が失敗する アカウント ID の形式が誤っている(_SB1 がない)、証明書 ID(kid)が誤っている、または秘密鍵がアップロードした公開証明書と一致していません。
インポート時の型/変換エラー(列と値が示される) 型付きの列に、解析できない値が渡されました。多くの場合、SuiteQL がアカウントの表示形式で値を返した Date/Datetime 列が原因です。クエリでそのフィールドを TO_CHAR(col, 'YYYY-MM-DD') で囲むか、列の型を Text に設定してください。
子会社をまたぐと合計が一致しない amount は各取引自身の通貨です。連結後/換算後のフィールドを使用してください。
大きな取得で行が重複または欠落する オフセットでページングされるクエリに、決定的な ORDER BY がありません。