::
顧客から画面の排他制御がほしいと言われており、それに近いものを実装しています。
Sharepointリスト:conflict_list
・タイトル …キー
・アクセス日時(accesstime)
・アクセスユーザ(accessuser)
上記リストを用意し、アプリの詳細画面で以下の実装をしています。
□OnVisible
access_list: LookUp(
conflict_list,
★ タイトル = DataCardValue69.Text //詳細画面に表示されているタイトル
),
conflict_message: access_list.accesstime & “に” & access_list.accessuser & “さんがこの画面を開いています。このまま編集して問題ないでしょうか?”,
conflict_flg: If(
IsBlank(access_list),
Patch(
conflict_list,
Defaults(conflict_list),
{
タイトル: DataCardValue69.Text,
accessuser: User().FullName
}
);
false,
true
)
■問題点が2つあり、こちらをお聞きしたいです。
1. 初めにconflict_listにレコードが存在した場合、レコードが取得出来てconflict_flgはtrueになります。ここで競合が検知でき、問題ありません。
しかしその後、別の処理でこのレコードを削除し、元の画面に戻ります。このときにconflict_listが0件であることを裏で確認しています。
そして再度この画面に来た際、なぜかconflict_flgはtrueになってしまいます。
もう一度元の画面に戻り、再度この画面に来た時にはconflict_flgはfalseになりました。
何やら変数のキャッシュが起きているのか、遅延が起きているのか。そのような感じです。
この事象で何か問題点をお気づきの点はありませんでしょうか?
2. 本来なら★の箇所は「タイトル = DataCardValue69.Text && accessuser<>User().FullName」としたいところですが、一旦検証中なのでこのままにしています。
しかし「タイトル = DataCardValue69.Text」だけなのに、accessuserが自分のレコードが取得できず、他のレコードは取得できてしまいます。
1.と似ている感じもしていますが、こちらは何回やっても同様です。
こちらも何かお気づきの点があればご指摘いただけませんでしょうか?