如何通过Moodle 4.0 Web Services高效获取学生提交的作业列表?
高效获取Moodle 4.0用户作业提交状态的可行方案
完全可以通过1-2次高效调用实现,无需逐个作业检查,以下是具体实现方式:
方案一:两次独立接口调用
步骤1:获取用户已参与的课程列表
调用Web服务函数 core_enrol_get_users_courses,传入参数 userid(目标用户ID),返回该用户所有已选课的ID和基本信息。
步骤2:批量获取课程作业及用户提交状态
- 从步骤1的结果中提取所有课程ID,调用
mod_assign_get_assignments,传入参数courseids(课程ID数组),得到这些课程下所有作业的ID列表。 - 收集所有作业ID,调用
mod_assign_get_user_submissions,传入参数assignmentids(作业ID数组)和userid(目标用户ID),一次性获取所有作业的提交状态(包括是否提交、提交时间、成绩、教师反馈等)。
注:这两步可以合并为一次批量Web服务调用(见方案二),进一步减少HTTP请求次数。
方案二:一次批量Web服务调用
利用Moodle支持的批量调用功能,在单个HTTP请求中执行多个函数调用,具体请求结构示例(JSON格式):
{ "functions": [ { "name": "core_enrol_get_users_courses", "parameters": {"userid": 123} }, { "name": "mod_assign_get_assignments", "parameters": {"courseids": []} }, { "name": "mod_assign_get_user_submissions", "parameters": {"assignmentids": [], "userid": 123} } ] }
实际调用时,需要将第二个函数的
courseids参数替换为第一个函数返回的课程ID数组,第三个函数的assignmentids替换为第二个函数返回的作业ID数组。部分Moodle版本支持在批量调用中传递前一个函数的结果作为后续函数的参数,可减少客户端的处理逻辑。
关键函数说明
core_enrol_get_users_courses:获取用户已选课列表,参数仅需目标用户ID。mod_assign_get_assignments:批量获取指定课程下的所有作业,支持传入多个课程ID。mod_assign_get_user_submissions:批量获取指定用户在多个作业中的提交信息,返回结果包含每个作业的提交状态、提交时间、成绩等核心数据。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

