まず、リンクを個別に制御できるように、リンクは個別の段落に含める必要があります。
次に、最初の列がソートされ、ユーザー名の後に毎日の出席文書のフィールドの日付が続くビューが必要です。たとえば、「JoeUser/Org-01-01-12」のような形式にする必要があります。ビューの2番目の列には、ドキュメントのステータスが含まれている必要があります。この答えのために、そのビューを「DailyAttendance」と呼びましょう。
第3に、この日のユーザーの出席文書が存在しないか、存在してステータスが「チェックイン」であるか、存在してステータスが「チェックアウト」であるかの3つのケースがあります。ドキュメントは存在するが、ステータスが「チェックイン」でも「チェックアウト」でもない4番目のケースがあるかもしれませんが、ロジックはおそらくそれを回避しようとする必要があります。いずれの場合も、非表示の数式を記述します。その場合、両方のリンクが非表示になります。
さて、ほとんどの場合、Hide-WhenではなくSee-Whenの観点から考える方が実際には少し簡単です。そのため、要件をSee-Whenとして言い換えます。See-WHenルールは次のとおりです。
- 現在のユーザーと現在の日の毎日の出席文書が存在しない場合は、チェックインホットスポットを参照してください。
- 現在のユーザーと現在の日の毎日の出席ドキュメントが存在し、ドキュメントの[ステータス]フィールドが[チェックイン]の場合は、チェックアウトホットスポットを参照してください。
非表示の数式でsee-whenロジックを使用するには、see-whenルールに基づいて数式を記述し、その周りに論理を配置して最終結果を得るだけです。
「チェックイン」ホットスポットを含む段落の非表示は次のようになります。
key := @Name([CN];@Username) + "-" + @Text(@Today);
status := @DbLookup("Notes":"NoCache";"":"";"DailyAttendance";key;2);
notFound := @IsError(status);
seeWhen = notFound;
!(seeWHen);
ほとんどのエキスパートNotesプログラマーは、それをより短い式に凝縮します。できるだけわかりやすくするために、段階的な形式のままにしておきます。
「チェックアウト」ホットスポットを含む段落の非表示は次のようになります。
key := @Name([CN];@Username) + "-" + @Text(@Today);
status := @DbLookup("Notes":"NoCache";"":"";"DailyAttendance";key;2);
found := !(@IsError(status));
seeWhen = found & (status = "Checked In");
!(seeWhen)