各製品の資料を入手。
詳細はこちら →NetSuite のデータをPowerShell でMySQL にレプリケーションする方法
PowerShell のシンプルなスクリプトで、NetSuite のデータ をMySQL データベースにレプリケーション(複製)する方法を紹介します。
最終更新日:2023-09-26
この記事で実現できるNetSuite 連携のシナリオ
こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。
CData Cmdlets for NetSuite を使えば、PowerShell からNetSuite のデータ データにリアルタイムで連携できます。データ同期などのタスクの連携にぴったりの製品です。 本記事では、PowerShell からCData Cmdlets for NetSuite およびCData Cmdlets for MySQL を使って、同期スクリプトを作成して実行します。
まずは、PowerShell でNetSuite への接続を行います。レプリケーションは4つのステップがあります。
Netsuite への接続
NetSuite は現在、2つの異なるAPI を提供しています。
- SuiteTalk はNetSuite との通信に使用する、SOAP ベースのより古いサービスです。多くのエンティティを幅広くサポートし、INSERT / UPDATE / DELETE を完全にサポートします。 しかしデータの抽出用ツールは低機能で、SELECT 時のパフォーマンスは極めて低いです。テーブルを結合するよい方法もありません。データのグループ化および集計はこのAPI からは利用できず、 そのためこれらの操作をサポートするには、すべてをクライアントサイドで実行しなければなりません。
- SuiteQL は新しいAPI です。サービスとのSQL ライクな通信方法を実現するため、JOIN の機能はより豊富になり、GROUP BY や集計機能もサポートします。 加えて、抽出したいカラムだけを取得する機能も完全にサポートします。そのため、データを抽出する際のパフォーマンスがSuiteTalk より大幅に向上しています。ただし、サポートされるのはデータの抽出のみです。
NetSuite に接続するには、以下を行う必要があります。
- Schema を設定して、接続に使用するAPI を指定。データを取得するだけの場合は、SuiteQL の使用をお勧めします。データの取得および変更が必要な場合は、SuiteTalk の使用をお勧めします。
- 使用するAPI に適した接続オプションを設定します。(それぞれのAPI で利用可能な接続オプションが異なります。ヘルプドキュメントの「許可の設定」を参照してください。)
Netsuite への認証
SuiteTalk またはSuiteQL
NetSuite は3つの形式のOAuth 認証を提供します。
- トークンベース認証(TBA)は、基本的にOAuth 1.0 で、OAuthAccessToken とOAuthAccessTokenSecret を実行時ではなくNetSuite UI 内で作成します。 TBA は、2020.2 以降のSuiteTalk およびSuiteQL の両方で利用可能です。
- OAuth 2.0 認証は、SuiteQL でのみ利用できます。OAuth 2.0 認証を強制するには、次のいずれかを実行します。
- OAuthVersion を使用するAPI に明示的に設定、または
- Schema をSuiteQL に設定
- OAuth JWT 認証は、OAuth 2.0 クライアント認証フローであり、クライアント認証情報を含むJWT を使用してNetSuite データへのアクセスを要求します。この認証方法は、Schema がSuiteQL に設定されている場合にのみ使用できます。
認証方法の詳細はヘルプドキュメントの「はじめに」を参照してください。
NetSuite のデータの取得
-
モジュールのインストール:
Install-Module NetSuiteCmdlets
-
NetSuite への接続:
$netsuite = Connect-NetSuite -Account Id $Account Id -Password $Password -User $User -Role Id $Role Id -Version $Version
-
取得ターゲットのリソースの取得:
$data = Select-NetSuite -Connection $netsuite -Table "SalesOrder"
Invoke-NetSuite cmdlet を使って、SQL-92 クエリを使用することもできます:
$data = Invoke-NetSuite -Connection $netsuite -Query 'SELECT * FROM SalesOrder WHERE Class_Name = @Class_Name' -Params @{'@Class_Name'='Furniture : Office'}
-
戻り値からカラム名のリストを保存します。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name
NetSuite のデータをMySQL データベースにレプリケーション
カラム名を指定できるようにして、データをMySQL データベースにレプリケーションします。
-
モジュールのインストール:
Install-Module MySQLCmdlets
-
MySQL DB に、MySQL Server 名、ユーザー、パスワード、レプリケーション先のデータベース名を指定して、接続します:
$mysql = Connect-MySQL -User $User -Password $Password -Database $Database -Server $Server -Port $Port
-
NetSuite、保存された値、そしてAdd-MySQL Cmdlet を使って、MySQL にデータを1レコードずつ挿入します。この例では、MySQL 側のテーブルは、NetSuite のリソース(SalesOrder)と同じテーブル名を持っている必要があります。
$data | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "SalesOrder" -Columns $columns -Values $values }
次回以降のレプリケーションをシンプルに実現
-
一度PowerShell でNetSuite とMySQL に接続したら、次からは1行のコマンドでレプリケーションを実施できます:
Select-NetSuite -Connection $netsuite -Table "SalesOrder" | % { $row = $_ $values = @() $columns | % { $col = $_ $values += $row.$($col) } Add-MySQL -Connection $mysql -Table "SalesOrder" -Columns $columns -Values $values }
-
別のPowerShell モジュールで、NetSuite を別のデータベースに複製する場合、Select-NetSuite cmdlet のデータから、カラム、接続およびテーブルを除外しておきましょう。これらのデータはデータ移動のときだけ必要となるためです。
$columns = ($data | Get-Member -MemberType NoteProperty | Select-Object -Property Name).Name | ? {$_ -NotIn @('Columns','Connection','Table')}
おわりに
これで、NetSuite のデータをMySQL に複製できました。分析、BI などでNetSuite のデータをMySQL から使うことができるようになります。