【SharePoint Online】列の検証のヘルプを信じてはならない

こんにちは。
先日業務で日付列を別の日付列と比較するための検証設定を調べていたところ、
ちょっとしたトラップにハマってしまいましたので書き留めておきます。

列の検証には制約が存在する

SharePointでは各列に対して、[列の検証]を行うことができます。
ですが、いくつか制約があるので注意しましょう。
 ・正規表現は利用できません。
 ・数式の結果はTrue、Falseで返す必要があります。
  ・スペースを含む列名の場合は[]で囲ってください。
  ・テキストの比較を行う場合、大文字小文字の区別はされません。
 ・[列の検証]は他の列を参照することはできません。

[検証の設定]と[列の検証]では制御できる範囲が異なる

上記でも記載したとおり、[列の検証]では他の列を参照することはできません。
ですが、[検証の設定]では他の列を参照することができます。

試しにtest1(日付列)とtest2(日付列)の日にちを比較するための式を設定してみます。
test1がtest2より大きい場合はTrueとしてみましょう。
どちらの列に設定しても良さそうですよね。

一見これでいいように見えますが、、、

このようにエラーになってしまいました。
何が行けないのかヘルプを漁ってみるのですが、これがどうしてよくわかりません。
ヘルプが列の検証と検証の設定で同じものを表示するのはどうなのかと。。。

色々調べていくと上述のとおり、
列の検証では別の列を参照することができないということがわかりました。

検証の設定でも問題あり

それでは検証の設定で試してみましょう。
ユーザーメッセージも適宣書き換えます。

うまくいきました。
正しく効いているかアイテムも作成してみます。

正常に比較してくれました!

エラーの位置は制御できない

エラーとなった場合の表示は、フォームの最下部になってしまいます。
今回はあまり気にならないように見えますが、数十個プロパティがあった場合、非常に分かりづらいです。
これでもだめな場合は、Javascript での制御となると思います。

とりあえずこれで色々と理解ができました。
[列の検証]は列単位での制御[検証の設定]はリスト単位での制御ということなのですね。

終わりに

正直これはしょうがない仕様かなと思います。
検証の設定はリスト全体の制御であるため、列単位での制御には適していません。
なので、やはりエラーを表示する場合は Javascript がいいのかなぁ・・・
また、新たに知らない発見があれば続報を記載しようかと思います。

それではまた。