背景
Power Automateを使用して、日本語列名を含んだSharePoint Online リストへの登録を自動化する際、
- SharePoint上に表示されている日本語の項目名をそのまま使えない
- 数値項目へ登録する際にnull値を考慮する必要がある
などの注意点があります。
日本語列名への対応策
Power Automate上では、日本語列名はSharePoint内部名のEntityPropertyName(「OData__xなんちゃら」)に置き換える必要があります。
例えば「日本語項目1」、「日本語項目2」列を追加した場合のEntityPropertyNameは、
列名 | EntityPropertyName |
---|---|
タイトル | Title |
日本語項目1 | OData__x65e5__x672c__x8a9e__x9805__x76 |
日本語項目2 | OData__x65e5__x672c__x8a9e__x9805__x760 |
となります。
(デフォルトで作成される「タイトル」は、Titleのままになっています)
このEntityPropertyNameは、設定画面では表示・取得する方法がありませんので、以下のAPIで別途取得します。
https://TenantName.sharepoint.com/sites/SubSiteName/_api/web/lists/GetByTitle('リスト名')/fields")
わたしはExcelのPower QueryでAPIを呼んでシートとして保存し、いつもで呼び出せるようにしています。
項目数が多い場合、Power Automateのコードの中に、OData_なんちゃらが頻発し、読み取った項目と設定先の項目があべこべになることもありますので、シートで保存しておくと検算(といってもVlookUpで比較するだけですが)出来るので正確性が増します。
let
ソース = OData.Feed("https://TenantName.sharepoint.com/sites/SubSiteName/_api/web/lists/GetByTitle('リスト名')/fields"),
削除された他の列 = Table.SelectColumns(ソース,{"EntityPropertyName", "InternalName", "StaticName", "Title", "TypeDisplayName", "TypeShortDescription"}),
並べ替えられた列 = Table.ReorderColumns(削除された他の列,{"Title", "EntityPropertyName", "InternalName", "StaticName", "TypeDisplayName", "TypeShortDescription"})
in
並べ替えられた列
SubSiteName、リスト名 は正しい名称に置き換えてください。
ここで表示される日本語のTitleとEntityPropertyNameを照らし合わせてPower Automate上で設定する必要があります。
Nullへの対応(特に数値)
Forms(もしくはほかのトリガーソース)の項目で、SharePointリスト上の数値項目に入力するとき、int関数を使用するのですが、Nullだった場合は
integer cannot be set to null or empty value
といったエラーが出ます。
そのため下記のようなNull判断が必要になります。
そのほかの関数も、おおむねNullだとエラーが出ることが多いので、この判断はほぼ必須。
if(equals(triggerOutputs()?['body/OData_x002d__'], null), 0, int(triggerOutputs()?['body/OData_x002d__']))
OData_x002d__ は 正しいEntityPropertyNameに置き換えてください。
日付、時刻の取得時の処理
登録ではなくPower Automateでリストの値を取得する際のコツになります。
リストにデフォルトで含まれる「登録日時」「更新日時」も取得することが出来ますが、その際の時刻タイムゾーンはGMT Standard Time - UST となっています。これをこのまま扱うと、9時間分時間がずれることになります。
そのため、タイムゾーンの変更が必要になります。
いくつか方法がありますが、私自身はconvertFromUtc か、addHorus を使うことが多いです。
convertFromUtc(formatDateTime(triggerOutputs()?['body/Modified']),'Tokyo Standard Time')
addHours(formatDateTime(triggerOutputs()?['body/Modified']), 9)