Power Appsで日付、時間、分で分かれているものを、SharePointリストにPatch関数で登録する方法を紹介します。文字列に変換して結合する方法もありますが、こちらの方が短くわかりやすいため、備忘録として記事にしておきます。
目次 閉じる
SharePointリスト
今回利用するSharePointリストはこちら。
シンプルに日付列(日時含む)の列のみを作成しました。この日付列に登録をしていきます。
Power Apps画面
SharePointリストをデータソースにフォームを作成しボタンを配置します。これをSubmitForm関数ではなく、あえてPatch関数を使って登録処理をしていきたいと思います。
learnにも記載がありますが、新規登録、更新の場合のコードの基本的な構造はこちらです。
//新規登録
Patch(【データソース】, Defaults(【データソース】),
{
【SharePointの列名】: 【入れたいデータ】,
【SharePointの列名】: 【入れたいデータ】
}
)
//更新
//データソースからLookupで行を特定しその行を更新する
Patch(
【データソース】,
LookUp(
【データソース】,
【SharePointの列名】= 【検索値】
),
{
【SharePointの列名】: 【入れたいデータ】,
【SharePointの列名】:【入れたいデータ】
}
)
実際のコードはこちらです。
「datesource」というSharePointリストにデータを追加しています。
Patch(
//datetimeはSharePointのリスト名
datetime,
Defaults(datetime),
{
タイトル: DataCardValue5.Text,
dateTime: DateValue1.SelectedDate + Time(Value((HourValue1.Selected).Value),Value((MinuteValue1.Selected).Value),0
)
}
)
タイトル列はテキストで登録しているだけなので説明は割愛します。
問題のdataTimeの列は日・時間・分をそれぞれ結合して登録しています。
「DateValue1.SelectedDate」はDateValue1で選択された日付なのでそのままです。
続いての「Time(Value((HourValue1.Selected).Value),Value((MinuteValue1.Selected).Value),0)」について少し解説します。
コード | 内容 |
---|---|
(HourValue1.Selected).Value (MinuteValue1.Selected).Value | それぞれのコントロールのValueを取得 |
Value((HourValue1.Selected).Value) Value((MinuteValue1.Selected).Value) | それぞれのコントロールのValueを数値へ変換 |
Time(Value((HourValue1.Selected).Value),Value((MinuteValue1.Selected).Value),0) | Time関数でそれぞれの数値を時間に変換 ※日付は1970/1/1になります。 ※最後の「0」は秒数。 |
Time関数は次のような書き方で数値を時刻へと変換できます。
Time(【時間】 ,【分】,【秒】,【ミリ秒】)
日付は初期値の「1970/1/1」になるので、今回は「DateValue1.SelectedDate」を結合して補完しています。
秒数もコントロールから取得するときにはこんな感じになります。
Patch(
//datetimeはSharePointのリスト名
datetime,
Defaults(datetime),
{
タイトル: DataCardValue5.Text,
dateTime: DateValue1.SelectedDate + Time(Value((HourValue1.Selected).Value),Value((MinuteValue1.Selected).Value),Value((ScondValue1.Selected).Value
)
}
)
ScondValue1というドロップダウンのコントロールを追加し時間と同じように取得しています。もしミリ秒も必要であれば同じようにすることで設定可能です。