Przejdź do głównej zawartości

Przeglądarka NetSuite REST API Browser opisuje punkty końcowe rekordów, a dokumentacja SuiteQL opisuje język zapytań, którego ten konektor używa do pobierania danych tabelarycznych.

Konektor loguje się za pomocą poświadczeń klienta OAuth 2.0 z asercją klienta JWT podpisaną algorytmem PS256 — nie ma interaktywnego logowania ani tokenu odświeżania. Generujesz parę kluczy RSA, przesyłasz do NetSuite publiczny certyfikat i przekazujesz PlaidCloud odpowiadający mu klucz prywatny oraz trzy identyfikatory. Przy każdym pobraniu PlaidCloud tworzy i podpisuje krótkotrwałą asercję, wymienia ją na token dostępu i wywołuje interfejs REST API.

Wykonaj te czynności w NetSuite przed utworzeniem połączenia w PlaidCloud. Wymaga to uprawnień administratora i leży na ścieżce krytycznej.

Włącz OAuth 2.0 i SuiteTalk (SOAP and REST Web Services) w menu Setup > Company > Enable Features > SuiteCloud.

Wygeneruj parę kluczy RSA o długości co najmniej 2048 bitów z obsługą skrótu zgodnego z PS256. Na przykład za pomocą OpenSSL:

Okno terminala
openssl genrsa -out plaidcloud_netsuite.pem 2048
openssl rsa -in plaidcloud_netsuite.pem -pubout -out plaidcloud_netsuite_public.pem

Zachowaj klucz prywatny (plaidcloud_netsuite.pem) w tajemnicy — trafia on do PlaidCloud, nigdy do NetSuite.

3. Prześlij certyfikat publiczny → identyfikator certyfikatu

Dział zatytułowany „3. Prześlij certyfikat publiczny → identyfikator certyfikatu”

W menu Setup > Integration > OAuth 2.0 Client Credentials (M2M) Setup zmapuj certyfikat publiczny na integrację, jednostkę i rolę. NetSuite zwraca identyfikator certyfikatu przesłanego klucza publicznego — to wartość kid w JWT i nie jest to tajemnica. Zapisz ją.

4. Utwórz rekord integracji → identyfikator klienta

Dział zatytułowany „4. Utwórz rekord integracji → identyfikator klienta”

W menu Setup > Integration > Manage Integrations > New utwórz integrację z włączonym OAuth 2.0 i wybranym typem przyznania Client Credentials. NetSuite wystawia identyfikator klienta (consumer key). Zapisz go. W przepływie poświadczeń klienta z asercją nie ma klucza tajnego klienta.

Przypisz roli użytej w mapowaniu M2M zestaw uprawnień obejmujący to, co będziesz odczytywać:

  • REST Web Services (Setup) — wymagane dla każdego wywołania REST.
  • SuiteAnalytics Workbook — wymagane, jeśli Twoje zapytanie SuiteQL dotyczy danych analitycznych lub skoroszytów.
  • Log in using OAuth 2.0 Access Tokens — wymagane do wymiany tokenu.
  • Uprawnienia do podglądu na poziomie rekordów dla każdego typu rekordu odczytywanego przez zapytania (transakcje, konta, jednostki itd.).

Identyfikator konta znajdziesz w menu Setup > Company > Company Information (pole Account ID). Określa on host API:

Środowisko Postać identyfikatora konta Host API
Produkcyjne 1234567 1234567.suitetalk.api.netsuite.com
Piaskownica 1234567_SB1 1234567-sb1.suitetalk.api.netsuite.com

PlaidCloud automatycznie wyprowadza host z identyfikatora konta (zamieniając litery na małe i _ na -). Wprowadź identyfikator konta dokładnie tak, jak pokazuje go NetSuite, w tym sufiks _SB1 dla piaskownicy.

Utwórz połączenie z typem połączenia NetSuite (nie ogólnym typem REST — tylko rodzaj NetSuite wyprowadza host i wstrzykuje zachowanie stronicowania SuiteQL). Formularz zawiera następujące pola:

Pole Typ Opis
Nazwa Tekst Wyświetlana nazwa tego połączenia.
Alias Tekst (wielowierszowy) Opcjonalny alias lub uwagi dotyczące połączenia.
Aktywne Przełącznik Określa, czy połączenie jest włączone. Wyłącz, aby wstrzymać je bez usuwania.
Baza danych tylko do odczytu Przełącznik Ogranicza połączenie do operacji tylko do odczytu.
Typ dostępu Lista wyboru Poziom dostępu dla tego połączenia: tylko odczyt, tylko zapis lub odczyt i zapis.
Pole Typ Opis
Identyfikator klienta Tekst Identyfikator klienta z rekordu integracji (krok 4).
ID certyfikatu Tekst Identyfikator certyfikatu (kid w JWT) zwrócony po przesłaniu certyfikatu publicznego (krok 3). To nie jest tajemnica.
ID konta NetSuite Tekst Identyfikator konta (krok 6), na przykład 1234567 lub 1234567_SB1.
Certyfikat prywatny NetSuite Tekst (PEM) Klucz prywatny (krok 2), wklejony jako pełny wielowierszowy blok PEM. Przechowywany w postaci zaszyfrowanej i nigdy nie jest zwracany jawnym tekstem.

Interfejs rekordów NetSuite zwraca tylko {id, links} dla każdego wiersza, dlatego PlaidCloud pobiera dane tabelaryczne za pomocą SuiteQL w kroku Żądanie REST. Skonfiguruj krok względem połączenia NetSuite:

  • Metoda — POST
  • Punkt końcowy — /services/rest/query/v1/suiteql (dosłowna ścieżka; host pochodzi z połączenia)
  • Treść żądania — zapytanie w formacie JSON: {"q": "SELECT ... FROM ... ORDER BY internalid"}

Nie konfiguruj ręcznie stronicowania ani nagłówków

Dział zatytułowany „Nie konfiguruj ręcznie stronicowania ani nagłówków”

W przypadku połączenia NetSuite krok automatycznie wstrzykuje szczegóły SuiteQL:

  • Nagłówki Prefer: transient i Content-Type: application/json.
  • Stronicowanie przesunięciem względem pól items / hasMore odpowiedzi, przy stałym rozmiarze strony ustalonym przez usługę.

Nie zmieniaj ustawień Stronicowanie i analiza ani tych nagłówków — ustawia je połączenie. Ustaw tylko Punkt końcowy, Treść żądania i kolumny (poniżej).

SuiteQL zwraca każdą wartość jako ciąg JSON ("1234.56", "2026-01-15", "T"). Zdefiniuj kolumny wyjściowe ręcznie z ich rzeczywistymi typami — Currency/Decimal dla kwot, Date/Datetime dla dat, Boolean dla flag "T"/"F" — a PlaidCloud przekształci ciągi na typowane kolumny podczas ładowania do tabeli. Puste ciągi są mapowane na null. (Automatyczne zgadywanie schematu nie stosuje konfiguracji usługi połączenia, więc nie zrobi tego za Ciebie — zdefiniuj kolumny samodzielnie.)

Ograniczenie Co to oznacza
Wymagane ręczne kolumny Automatyczne zgadywanie schematu nie stosuje konfiguracji usługi NetSuite, więc kolumny kwot, dat i wartości logicznych oraz ich typy definiujesz ręcznie.
Stronicowanie ustala usługa Tryb stronicowania, ścieżki i rozmiar strony są ustawiane przez połączenie i nie można ich zmieniać w kroku.
Tylko pełne zastąpienie tabeli Każde pobranie wyodrębnia cały wynik od nowa — nie ma ścieżki przyrostowej ani różnicowej. Zaplanowane pobranie przy każdym uruchomieniu odczytuje całą tabelę, więc ogranicz klauzulę WHERE do potrzebnego wycinka.
Wiele walut / jednostek zależnych W transaction/transactionline wartość amount jest wyrażona w własnej walucie transakcji. Naiwna suma SUM(amount) między jednostkami zależnymi jest błędna z punktu widzenia konsolidacji — przy sumowaniu między jednostkami zależnymi wybieraj pola skonsolidowane lub przeliczone według kursu walutowego.
Limit SuiteQL ok. 100 000 wierszy NetSuite ogranicza pojedyncze zapytanie do około 100 000 wierszy bez SuiteAnalytics Connect. Ręcznie napisane zapytanie, które by go przekroczyło, kończy się wyraźnym błędem z prośbą o węższy zakres dat lub inne filtry, zamiast po cichu obcinać wyniki. Gotowe kroki NetSuite: importuj salda i NetSuite: importuj szczegóły księgi głównej automatycznie dzielą zakres dat na okna, aby się w nim zmieścić.
Księgowość wieloksięgowa Na koncie z funkcją Multi-Book Accounting TransactionAccountingLine zawiera jeden wiersz na księgę dla każdej pozycji transakcji — niefiltrowane SUM w różnych księgach liczy podwójnie (lub N-krotnie). Gotowe kroki importu domyślnie używają księgi podstawowej; ręcznie napisane zapytanie powinno jawnie filtrować accountingbook = 1 (lub wybraną księgę), chyba że rzeczywiście potrzebujesz sumy ze wszystkich ksiąg.
Koperta odpowiedzi Dokładna koperta odpowiedzi oraz akceptowany zakres/rola są potwierdzane podczas uruchomienia produkcyjnego; konektor jest zbudowany zgodnie z udokumentowanym kształtem NetSuite.

Finansowe — pozycje transakcji księgi głównej dla okresu, z typami i sortowaniem:

SELECT
tl.transaction AS transaction_id,
t.trandate 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

Operacyjne — otwarte zamówienia sprzedaży według klienta:

SELECT
so.tranid AS order_number,
so.entity AS customer_id,
so.trandate AS order_date,
so.status AS order_status
FROM transaction so
WHERE so.type = 'SalesOrd'
AND so.status = 'SalesOrd:B'
ORDER BY so.id