情况:我的数据库中有两个表。一张表类似于学生及其正在参加的课程的列表(以及有关该学生的其他数据)。因此,对于每个姓名类别组合,该表可能包含 Joe 在数学、英语等方面的 5 条记录。第二个表类似于教师列表,以及在这个世界上每个教师所教授的两门课程。
我有两个门户,每个门户都显示该特定教师记录的每个班级的所有学生姓名。
任务:我需要找到一名学生同时在一名教师教授的两个班级中的情况。也就是说,他们出现在两个门户的学生列表中。
有没有办法比较两个门户网站的内容或以其他方式识别从同一位老师那里上两门课的学生?门户非常适合显示列表,但我不必为它们锚定解决方案。也许有办法建立关系来找到那些学生?我宁愿避免使用脚本解决方案,但如果没有更优雅的方法,那当然也可以。
FM Pro 18 高级版,macOS 13.2.1
为了建立通用词汇,请考虑以下结构:
现在,假设
Teachers
的布局上有 2 个门户,每个 Enrollments
表出现一个,并且每个门户都包含相应出现的 Student
字段:
您可以使用以下公式将条件格式应用于
Enrollments::Student
字段:
not IsEmpty ( FilterValues ( Self ; List ( Enrollments 2::Student ) ) )
并且(如果需要)使用以下方法将条件格式应用于
Enrollments 2::Student
字段:
not IsEmpty ( FilterValues ( Self ; List ( Enrollments::Student ) ) )
完成此安排后,出现在两个门户中的任何学生都将突出显示。
请注意,这种结构有一些严重的缺陷 - 最明显的是:
根据@michael.hor257k 的出色提示,我将一个班级的学生列表门户设置为根据学生是否出现在另一个班级的门户中来“过滤门户记录”。门户位于教师文件中,其中显示了每位教师教授的两个课程。门户根据“注册”表中的数据列出每个班级的学生。我过滤了第一个列表,仅显示两个门户中两个班级的学生。
FilterValues ( Class1::Student ; List ( Class2::Student ))
教师文件中的此脚本将完成以下工作:
Set Variable [ $file; Value:Get(DocumentsPath) & "StudentList.csv" ] // Output file
Get File Exists [ “$file” ; Target: $fileExists ]
If [ not $fileExists ]
Create Data File [ “$file” ; Create folders: Off ]
End If
Open Data File [ “$file” ; Target: $fileID ]
Show All Records
Go to Record/Request/Page [ First ]
Loop
Go to Field [ Teachers::Key ]
[ Select/perform ]
Set Variable [ $stringEnd; Value:Teachers::Key & ", "&Teachers::Class1& ", "&Teachers::Class2 ]
Loop
Go to Portal Row [ Select; Next; Exit after last ]
Set Variable [ $student; Value:Portal1::Student ]
Set Variable [ $string; Value:$student&", " & $stringEnd ]
Write to Data File [ File ID: $fileID ; Data source: $string ; Write as: UTF-16 ; Append line feed: On ]
End Loop
Go to Record/Request/Page [ Next; Exit after last ]
End Loop
Close Data File [ File ID: $fileID ]
结果是一个 .csv 文件,其中包含从任何老师那里选修两门课的所有学生的列表。它很长并且有大量复制数据,但显然这种格式是客户需要继续前进的。