接続の確立
CData Cmdlets ユーザーは、データモジュールをインストールし、接続プロパティを設定してスクリプトを開始できます。このセクションでは、CSV インポートおよびエクスポートcmdlet などのネイティブPowerShell cmdlet でOdoo Cmdlets を使用する例を示します。
インストールおよび接続
PSGet がある場合は、PowerShell Gallery から次のコマンドを使ってcmdlet をインストールできます。CData サイトからセットアップを取得することもできます。
Install-Module OdooCmdlets
プロファイルに以下を追加すると、次のセッションでcmdlet がロードされます。
Import-Module OdooCmdlets;
Connect-Odoo cmdlet を使って、別のcmdlet に渡すことができる接続オブジェクトを作成します。
$conn = Connect-Odoo -User 'MyUser' -APIToken 'MyToken' -URL 'https://MyOdooSite/' -Database 'MyDatabase'
Odoo への接続
接続するには、Url を有効なOdoo サイトに設定し、User およびAPIToken を接続するユーザーの接続の詳細に設定し、Database をOdoo データベースに設定します。API トークンを使用していない場合は(API トークンはOdoo 14以上でのみサポートされています)、APIToken フィールドにパスワードを入力することも可能です。
アクセス権
本製品 がOdoo でアクセスできるモデルを決定するには、接続するユーザーが"ir.model.access"(アクセス権を管理する内部のOdoo モデル)からの読み取り権限を持っている必要があります。 通常、これは管理者用に予約されていますが、サービスグループを作成することで任意のユーザーに付与できます。- 管理者として、Odoo 設定ページを開いて"開発者モード" を有効にします。これが利用できない場合は、代わりにスーパーユーザとしてログインする必要があります。
- Groups ページ(Users ドロップダウンの下)を開いて新しいグループを作成します。
- Application を"Administration" に設定し、名前を"Service Access" に設定します。
- サービスアクセスが必要なユーザーを[Users]タブで追加します。
- [アクセス権]タブで、"ir.model.access" オブジェクトのエントリを追加し("Model Access" と呼ばれることもあります)、[Read Access]にチェックマークを付け、"Inspect Models" という名前を付けます。
- グループを保存します。
この変更を行うことができない場合は、rpCheckPermissions オプションをfalse に設定する必要があります。これにより、ユーザーが実際にそれらのモデルに対して持っている権限にかかわらず、Odoo のすべてのモデルがテーブルとしてリストされます。
データの取得
Select-Odoo cmdlet はデータを取得するためのネイティブなPowerShell インターフェースを提供します。
$results = Select-Odoo -Connection $conn -Table "res_users" -Columns @("name, email") -Where "company_name='Company Inc.'"Invoke-Odoo cmdlet はSQL インターフェースを提供します。このcmdlet を使うと、Query パラメータを介してSQL クエリを実行できます。
cmdlet 出力のパイプ処理
cmdlet は行オブジェクトをパイプラインに一度に一行ずつ返します。以下は、結果をCSV ファイルにエクスポートします。
Select-Odoo -Connection $conn -Table res_users -Where "company_name = 'Company Inc.'" | Select -Property * -ExcludeProperty Connection,Table,Columns | Export-Csv -Path c:\myres_usersData.csv -NoTypeInformation
Select-Odoo からの結果をSelect-Object cmdlet にパイプして、Export-CSV cmdlet にパイプする前にいくつかのプロパティを実行していることがわかるでしょう。これをする理由は、CData Cmdlets は接続、テーブル、およびカラムの情報を結果セットの各行オブジェクトに追加しますが、必ずしもその情報がCSV ファイルに必要ではないからです。
ただし、これによってcmdlet の出力を別のcmdlet にパイプすることが容易になります。以下に、結果セットをJSON に変換する例を示します。
PS C:\> $conn = Connect-Odoo -User 'MyUser' -APIToken 'MyToken' -URL 'https://MyOdooSite/' -Database 'MyDatabase' PS C:\> $row = Select-Odoo -Connection $conn -Table "res_users" -Columns (name, email) -Where "company_name = 'Company Inc.'" | select -first 1 PS C:\> $row | ConvertTo-Json { "Connection": { }, "Table": "res_users", "Columns": [ ], "name": "Myname", "email": "Myemail" }
データの削除
以下は、抽出条件に合うあらゆるレコードを削除します。
Select-Odoo -Connection $conn -Table res_users -Where "company_name = 'Company Inc.'" | Remove-Odoo
データの変更
cmdlet はデータクレンジング同様、データの変換を容易にします。次の例は、レコードがすでに存在するかどうか、挿入する前に更新が必要かどうかをチェックしてから、CSV ファイルのデータをOdoo にロードします。
Import-Csv -Path C:\Myres_usersUpdates.csv | %{ $record = Select-Odoo -Connection $conn -Table res_users -Where ("id = `'"+$_.id+"`'") if($record){ Update-Odoo -Connection $conn -Table res_users -Columns @("name","email") -Values @($_.name, $_.email) -Where "id = `'$_.id`'" }else{ Add-Odoo -Connection $conn -Table res_users -Columns @("name","email") -Values @($_.name, $_.email) } }