接続の確立
CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でSAPByDesign Cmdlets を使用する例を示します。
インストールおよび接続
PSGet がある場合は、PowerShell Gallery から次のコマンドを使ってcmdlet をインストールできます。CData サイトからセットアップを取得することもできます。
Install-Module SAPByDesignCmdlets
プロファイルに以下を追加すると、次のセッションでcmdlet がロードされます。
Import-Module SAPByDesignCmdlets;
Connect-SAPByDesign cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。
$conn = Connect-SAPByDesign -URL 'https://my999999.businessbydesign.cloud.sap' -User 'username' -Password 'password' -ServiceType 'AnalyticsService' -ServiceName 'servicename'
このセクションでは、使用しているアカウントおよびサービスタイプの認証を提供し、接続する方法を説明します。
SAPByDesign Account の認証
SAP ByDesign に接続するには、次の接続プロパティを設定します。
分析サービスへの接続
- Url:SAP ByDesign サイトのURL に設定。例:https://test.sapbydesign.com。
- ServiceType:分析サービスのレポートを取得する場合はServiceType=AnalyticsService; を指定します。
- ServiceName:データを取得するサービス名。指定しないか、1つのサービスのみ指定します。サービスのリストを指定したい場合は、BrowsableSchemas を参照してください。
指定するサービスがわからない場合は、sys_schemas をクエリして利用可能なサービスを一覧表示できます。
- User:アカウントのユーザー名に設定。
- Password:アカウントのパスワードに設定。
分析サービスの接続文字列の例:
Url=https://test.sapbydesign.com;ServiceType=AnalyticsService;ServiceName=cc_home_analytics.svc;User=Test;Password=test;
カスタムサービスへの接続
- Url:SAP ByDesign サイトのURL に設定。例:https://test.sapbydesign.com。
- ServiceType:データを取得するカスタムサービスがある場合はServiceType=CustomService; を指定します。
- ServiceName:データを取得するサービス名。指定しないか、1つのサービスのみ指定します。サービスのリストを指定したい場合は、BrowsableSchemas を参照してください。
指定するサービスがわからない場合は、sys_schemas をクエリして利用可能なサービスを一覧表示できます。
- User:アカウントのユーザー名に設定。
- Password:アカウントのパスワードに設定。
カスタムサービスの接続文字列の例:
Url=https://test.sapbydesign.com;ServiceType=CustomService;ServiceName=khsalesorder;User=Test;Password=test;
ODataDataSource API への接続
- Url:SAP ByDesign サイトのURL に設定。例:https://test.sapbydesign.com。
- ServiceType:OData Data Source API (odata/analytics/ds) をクエリする場合は、ServiceType=ODataDataSource を指定します。
- ServiceName:データを取得するサービス名。指定しないか、1つのサービスのみ指定します。サービスのリストを指定したい場合は、BrowsableSchemas を参照してください。
指定するサービスがわからない場合は、sys_schemas をクエリして利用可能なサービスを一覧表示できます。
- User:アカウントのユーザー名に設定。
- Password:アカウントのパスワードに設定。
ODataDataSource 接続文字列の例:
Url=https://test.sapbydesign.com;ServiceType=ODataDataSource;ServiceName=Customer.svc;User=Test;Password=test;
新しいカスタムODATA サービスを追加
- SAP ByDesign ワークセンタービューで、[Application and User Management]をクリックします。
- [OData Services]を選択します。
- ドロップダウンリストから[Custom OData Services]を選択します。
- これで現在のカスタムサービスのリストを見ることができます。新しいサービスを追加するには、[New]をクリックします。
SAP ByDesign URL の制約事項
SAP ByDesign 本製品 は、許容されるURI の長さの上限を超えないようにURL に制限をかけており、これによりサービスは[URI Too Long]エラーをスローします。デフォルトでは、プロジェクションのカラムの長さは1000文字に制限されています。プロジェクションで選択されたカラムがこの制限を超えると、ドライバーはプロジェクション指定を解除してすべてのフィールドを取得します。これは、サービスレスポンスの遅延やペイロードの増加により、パフォーマンスに影響を及ぼす可能性があります。
分析サービス(ServiceType =AnalyticsService)の場合、ドライバーはプロジェクションのカラム数を減らす必要があることを示すエラーを返します。また、サーバー側のフィルタの長さも同じ理由で1000文字に制限されています。生成されたフィルタの長さがこの制限を超える場合、ドライバーは追加のフィルタをドロップしてクライアントサイドで処理します。
SAP ByDesign で、MaxSelectLength およびMaxFilterLength 隠し接続プロパティを使用して、これらの制限を有効または無効にできます。これらのプロパティのデフォルトはいずれも1000文字です。サービスにこれらの制限がない場合は、プロパティを-1に設定して長さの制限を無効にしてください。
データの取得
Select-SAPByDesign cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。
$results = Select-SAPByDesign -Connection $conn -Table "Account" -Columns @("Id, Name") -Where "Industry='Floppy Disks'"Invoke-SAPByDesign cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。
cmdlet 出力のパイプ処理
cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。
Select-SAPByDesign -Connection $conn -Table Account -Where "Industry = 'Floppy Disks'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\myAccountData.csv -NoTypeInformation
Select-SAPByDesign からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。
ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。
PS C:\> $conn = Connect-SAPByDesign -URL 'https://my999999.businessbydesign.cloud.sap' -User 'username' -Password 'password' -ServiceType 'AnalyticsService' -ServiceName 'servicename' PS C:\> $row = Select-SAPByDesign -Connection $conn -Table "Account" -Columns (Id, Name) -Where "Industry = 'Floppy Disks'" | select -first 1 PS C:\> $row | ConvertTo-Json { "Connection": { }, "Table": "Account", "Columns": [ ], "Id": "MyId", "Name": "MyName" }
データの削除
以下は、抽出条件に合うあらゆるレコードを削除します。
Select-SAPByDesign -Connection $conn -Table Account -Where "Industry = 'Floppy Disks'" | Remove-SAPByDesign
データの変更
cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをSAP ByDesign にロードします。
Import-Csv -Path C:\MyAccountUpdates.csv | %{ $record = Select-SAPByDesign -Connection $conn -Table Account -Where ("Id = `'"+$_.Id+"`'") if($record){ Update-SAPByDesign -Connection $conn -Table Account -Columns @("Id","Name") -Values @($_.Id, $_.Name) -Where "Id = `'$_.Id`'" }else{ Add-SAPByDesign -Connection $conn -Table Account -Columns @("Id","Name") -Values @($_.Id, $_.Name) } }