SharePoint Online : NOW 関数がナウじゃない! → PowerApps で解決!

まず、別に言わなくても良いのに僕ったら正直者なので告白すると、記憶が歪んでしまって「SharePoint = NOW 関数使えない」って記憶していました。
実際はビューのフィルターなどでは使えないけど、日付と時刻列の計算値では使えるんですよね。(色々やって思い出した)

で、日付と時刻列の計算値に =NOW() と入れた時に、 SharePoint Online だと今じゃない時間がスタンプされてしまうんです。(オンプレの SharePoint の場合は、設定さえしていればちゃんとナウになります。)

■オンプレの SharePoint の場合

▼日付と時刻列を追加し、計算で「=NOW()」と入力します

▼これでアイテムを作成すると「ナウな時間(オンプレ)」列がナウい!(登録日時や更新日時と同じ時刻)

■SharePoint Online の場合

▼まずサイトのタイムゾーンの設定は「(UTC+09:00)大阪、札幌、東京」になっています

ここのタイムゾーンが違うと登録日時や更新日時もナウくなりませんからね。

SharePoint :サイトを作成したらタイムゾーンの確認を忘れずに…

▼オンプレの SharePoint と同じく、日付と時刻列を追加し、計算で「=NOW()」と入力します

▼これでアイテムを作成すると「ナウな時間」列がナウくない!

サイトのタイムゾーンの設定は適切なので「登録時間」「更新日時」は問題ないのですが、NOW 関数の値はサイトのタイムゾーンの設定とは関係なく、-16時間になってしまいます。

う~ん、残念。
なら関数を変更すれば対処可能かな。

-16時間だったので…

▼既定値を「=NOW()+TIME(16,0,0)」と修正しました。

▼アイテムを投稿すると今度こそ「ナウな時間」列がナウい!

これで解決!!ではなかったんです…。

NOW 関数のタイムゾーンがサイトの初期値の太平洋標準時であるなら、UTC-08:00なんですよね。そうなると日本のUTC+09:00の差を計算すると-17時間なんですよね。でも上述の通り、実際の差分は-16時間。僕がタイムゾーンに関して詳しくないので特別な計算があるのかな?と色々調べたところ、ショッキングなページを目にしました。

UserVoice “NOW 関数” について
https://sharepoint.uservoice.com/forums/330318-sharepoint-administration/suggestions/18643759–now-%E9%96%A2%E6%95%B0-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

なぬぅ!NOW 関数にはサマータイムが導入していると!今は夏時間のUTC-07:00なので差分が-16時間で正解のようです。で、上述の UserVoice の投稿者を見ると Office 365 Japan Support Team なので、つまりユーザーが日本マイクロソフト社のサポートに問い合わせをしたところから判明した事であり、さらに今は解決できそうもないので UserVoice に投げているハズなので、結果的にこの問題は解決できなさそうだという事でしょうか。

そもそも日付と時刻列に NOW 関数を使うニーズが少ないのか、 UserVoice でも Vote の数が少ない(現時点の3票のうち1票は僕)ので、なかなか希望が薄そうです。

なので、もしこのようなニーズがあった場合は、UserVoiceの通り、時期によって設定変更する運用が必要となりますね。それはダルいし忘れそう。

■ Flow を組み合わせたら?

Microsoft Flow を使うという手もありますが、ちょっと挙動が異なります。NOW 関数を使えば、アイテムの新規作成ボタンを押して NewForm.aspx が開いたタイミングでその時の時刻スタンプされますが、 Microsoft Flow を使うとなるとやはり投稿したタイミングでスタンプする事になるので、アイテムの新規投稿の入力に時間がかかればかかるほど、想定の挙動が異なります。

■ PowerApps を組み合わせたら?

PowerApps で SharePoint のフォームをカスタマイズすればどうでしょう?

▼日付と時刻列を作成し、既定値は空欄にします

▼リストから 「 PowerApps 」 →「フォームのカスタマイズ」をクリック

▼起動した PowerApps で、日付と時刻列のカードを選択し、右の「詳細設定」タブで「プロパティを変更するためのロックを解除します。」をクリック

▼左上から「Defalut」を選択し、右の式の部分に「Now()」を入力

これで保存してSharePoint に発行をします。すると…

▼アイテムの入力は時間がすでに入力されています

▼ナウな時間になってます!!(更新日時や登録日時と一緒)

ってことで、 PowerApps を使えば解決できました。

上述の通り、SharePoint リストのフォームのカスタマイズであれば、 PowerApps もカンタンです。