1

我正在与我们大学的 SIS 系统集成,并且在与创建和更新部分相关的文档中遇到了一些问题。 http://docs.valence.desire2learn.com/res/enroll.html#Section.SectionData

我可以使用该路由PUT /d2l/api/lp/(version)/(orgUnitId)/sections/创建一个名为 Section 1 的默认部分,其部分代码为 sec1 但是当我尝试更新它或添加带有路由的附加部分时:(PUT /d2l/api/lp/(version)/(orgUnitId)/sections/(sectionId)使用从我以前的 PUT 中检索到的 sectionId)或POST /d2l/api/lp/(version)/(orgUnitId)/sections/

我正在为我的 json 数据使用以下块:

{
  "Name": "Section 1d",
  "Code": "Dan 101",
  "Description": {
    "Text": "",
    "Html": ""
  }
}

我在语法中缺少什么?

谢谢你

4

2 回答 2

1

您使用 Valence Learning Framework API 为课程创建部分的方式是特殊的。假设您从一门空白课程开始,该课程没有后代组织单位(没有部分、没有组、什么都没有):

GET /d2l/api/lp/1.3/orgstructure/113459
> {"Name": "Extensibility 106",
   "Identifier": "113459", 
   "Type": {"Name": "Course Offering", 
            "Code": "Course Offering",
            "Id": 3},
   "Code": "EXT-106"}

GET /d2l/api/lp/1.3/orgstructure/113459/children
> []

使用部分属性初始化课程。您要做的第一件事是定义课程提供的部分属性:您想在课程提供下创建什么样的部分?要为课程设置创建部分属性,请使用 SectionPropertyData 块;上面写着“我希望这门课程有 10 个部分,并随机自动将学生注册到这些部分”(EnrollmentStyle2 对应于NumberOfSectionsAutoEnrollment):

{"AutoEnroll": true,
 "EnrollmentQuantity": 10,
 "EnrollmentStyle": 2,
 "RandomizeEnrollments": true}

现在,要使用这些设置初始化课程,并创建第一个默认部分,我们将该块放入此路由

PUT /d2l/api/lp/1.3/113459/sections/
> [{"SectionId":113460,
    "Name":"Section 1",
    "Description":{"Text":"","Html":""},
    "Enrollments":[]},
   ...
   {"SectionId":113469,
    "Name":"Section 10",
    "Description":{"Text":"","Html":""},
    "Enrollments":[]}
  ]

请注意,通过此调用,我们现在创建了 10 个部分作为该课程的子部分,并且后端服务已自动为它们生成名称(和代码)。

事后添加一个新部分。现在假设我们要在本课程中添加第十一节。首先,我们需要SectionData为新部分的属性使用一个块:

{"Name": "Section 11",
 "Code": "Sec11",
 "Description": {"Content": "New Section Descr.", "Type": "Text} }

注意:当你形成这个块来创建新的部分时,你必须RichTextInput为属性使用类型结构Description。当你从服务中获取一个部分的属性时,它会使用RichText属性来写描述。这是一个常见的对于刚接触框架的开发人员来说是个难点)

然后,您将该块发布到此路由:

POST /d2l/api/lp/1.3/113459/sections/
> {"SectionId":113470,
   "Name":"Section 11",
   "Description":{"Text":"Description","Html":""},
   "Enrollments":[]}

您将取回新创建部分的属性。

总结。那么,“为什么 PUT 然后 POST”?是的,这有点令人困惑,但是这样想:

  1. PUT 的第一个用途是更新课程提供的“部分属性”属性(因此,当最初定义课程提供的部分属性时,作为副作用,后端会创建所需的部分组织单位与这些新设置一起使用)。

  2. POST 的第二个用途是创建一个新的组织单元(一个新部分),并将其分配给课程设置。

于 2014-01-24T16:28:38.177 回答
0

看起来您的路线和您的请求没问题。路线只有一点点变化。您需要使用文档D2L 约定中描述的 RichTextInput 字段

基本上代替:

"Description": {
   "Text": "",
   "Html": ""
}

你需要:

"Description": {
   "Content": "",
   "Type": "" (Either Text or Html)
}
于 2014-01-24T16:19:45.993 回答