콘텐츠로 이동

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 측 설정에 있습니다. 먼저 해당 절차를 완료하십시오. 이 가이드는 네 가지 값을 이미 가지고 있다고 가정합니다.

  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 쿼리 예시를 참조하십시오.

    재무 — 기간별 총계정원장 거래 라인:

    {"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가 없습니다.