You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Moodle WebService复制课程并指定同步角色选课信息?

解决Moodle WebService复制课程时指定同步角色的问题

核心参数修正

你之前尝试的enrolments参数仅能控制是否复制全部选课数据,若要仅同步指定角色ID的选课信息,需使用rolestosync作为选项名,对应的value传入目标角色ID列表即可。

正确参数传递方式

在Moodle REST API中传递数组类型参数时,需按索引式格式构造:

  • 在options数组中新增元素,将name设为rolestosync,value按索引逐个传入角色ID。

修改后的bash脚本

更新你的脚本如下,添加rolestosync相关参数:

#!/bin/bash
API="http://10.1.1.13/sm/webservice/rest/server.php"    # WS入口点
COURSEID=25                                             # 待复制课程ID
CATEGORYID=1                                            # 目标分类ID
TOKEN="490b48f8cd71e88a37fa70cc6eff3fb2"                # WS令牌
# 脚本执行逻辑
SUFFIX=`date +"%s"`
echo "复制课程并同步指定角色用户数据"
SHORTNAME="Duplicated${COURSEID}_${SUFFIX}"
curl $API \
    -d moodlewsrestformat=json \
    -d wstoken=$TOKEN \
    -d wsfunction=core_course_duplicate_course \
    -d courseid=$COURSEID \
    -d fullname="Duplicated $COURSEID (同步指定角色) - $SUFFIX" \
    -d shortname="$SHORTNAME" \
    -d categoryid=$CATEGORYID \
    -d 'options[0][name]=users' \
    -d 'options[0][value]=1' \
    -d 'options[1][name]=rolestosync' \
    -d 'options[1][value][0]=10' \
    -d 'options[1][value][1]=11'
echo

关键说明

  1. rolestosync的作用:仅复制指定角色ID对应的用户选课数据到新课程
  2. 数组传递细节:curl中无法直接传入数组字面量,必须用options[1][value][0]、options[1][value][1]这种索引式写法逐个传递元素
  3. 依赖users参数:需确保users选项设为1(开启用户数据复制),rolestosync才能生效

内容的提问来源于stack exchange,提问作者Madamadam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:22:33