Microsoft graph api Microsoft Graph-教育API-学生/教师关系

Microsoft graph api Microsoft Graph-教育API-学生/教师关系,microsoft-graph-api,microsoft-graph-edu,Microsoft Graph Api,Microsoft Graph Edu,我们在教育环境中使用MicrosoftGraphAPI来存储教师创建的学生数据。我们正试图找出一种方法来确定: 如果用户是学生或教师。根据文档,看起来是这样的,但是根据对堆栈溢出的评论和我们所看到的,只有当学校使用SDS,并且如果我们使用应用程序,而不是委托权限时,这才有效 我们想确定一个学生是否由老师教。我们看不到任何明确的方法可以做到这一点。我们能找到答案的唯一方法是扫描学生的所有班级,然后找到用户拥有/教授这些班级的班级 从技术上讲,您不需要使用学校数据同步SDS,但它确实使数据更易于使用

我们在教育环境中使用MicrosoftGraphAPI来存储教师创建的学生数据。我们正试图找出一种方法来确定:

如果用户是学生或教师。根据文档,看起来是这样的,但是根据对堆栈溢出的评论和我们所看到的,只有当学校使用SDS,并且如果我们使用应用程序,而不是委托权限时,这才有效

我们想确定一个学生是否由老师教。我们看不到任何明确的方法可以做到这一点。我们能找到答案的唯一方法是扫描学生的所有班级,然后找到用户拥有/教授这些班级的班级


从技术上讲,您不需要使用学校数据同步SDS,但它确实使数据更易于使用,并且更一致。这是因为SDS将在每次同步时自动填充primaryRole、教师和学生数据。如果没有SDS,这需要由您的应用程序确定和更新。这通常是一项非常重要的工作

也就是说,有几种方法可以确定用户是学生还是教师,而不依赖于primaryRole。更直接的方法是/taughtClasses端点。这将返回用户拥有/教授的类的集合:

GET beta/education/users/{id|userPrincipalName}/taughtClasses

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(microsoft.graph.educationClass)",
  "value": [
    {
      "id": "c4c1b1e9-bd8e-4ffc-acb4-e7745342bf6d",
      "description": "PrimaryTestClass",
      "displayName": "PrimaryTestClass",
      "mailNickname": "PrimaryTestClass",
      "classCode": "21001",
      "externalName": "PrimaryTestClass",
      "externalId": "21001",
      "externalSource": "sis",
      "term": {
        "externalId": "12000",
        "startDate": "2017-07-01",
        "endDate": "2018-06-30",
        "displayName": "SY1516"
      },
      "course": {
        "subject": "PrimaryTestClass",
        "courseNumber": "101",
        "description": "PrimaryTestClass",
        "displayName": "PrimaryTestClass",
        "externalId": "21001"
      }
    },
    {
      "id": "8a15c9c0-13ed-464a-81ec-a6fb2d571599",
      "description": "Health Level 1",
      "displayName": "Health 1",
      "mailNickname": "fineartschool.net",
      "externalSource": "sis",
      "externalName": "Health Level 1",
      "externalId": "11019",
      "classCode": "Health 501",
      "createdBy": {
        "application": {
          "id": "a0c464d5-af1f-4bb9-bbdd-196bd577c796"
        },
        "user": {
          "id": "7cea8be3-ceec-4200-b224-4845c8e38363"
        }
      }
    }
  ]
}
决定由哪位老师教哪些学生更为棘手。您可以使用beta/education/users/{id}/Classes获得他们所属的班级列表,但是您需要通过查询beta/education/Classes/c4c1b1e9-bd8e-4ffc-acb4-e7745342bf6d/Teachers?$select=id,userPrincipalName来获得每个班级的教师列表,以编译完整的教师列表


至于应用程序与委派,当涉及委派范围时,教育API故意非常严格。这是由于学生信息的高度敏感性质以及该数据所接受的安全审查的可理解程度。

从技术上讲,您不需要使用学校数据同步SDS,但它确实使数据更易于使用,且更一致。这是因为SDS将在每次同步时自动填充primaryRole、教师和学生数据。如果没有SDS,这需要由您的应用程序确定和更新。这通常是一项非常重要的工作

也就是说,有几种方法可以确定用户是学生还是教师,而不依赖于primaryRole。更直接的方法是/taughtClasses端点。这将返回用户拥有/教授的类的集合:

GET beta/education/users/{id|userPrincipalName}/taughtClasses

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(microsoft.graph.educationClass)",
  "value": [
    {
      "id": "c4c1b1e9-bd8e-4ffc-acb4-e7745342bf6d",
      "description": "PrimaryTestClass",
      "displayName": "PrimaryTestClass",
      "mailNickname": "PrimaryTestClass",
      "classCode": "21001",
      "externalName": "PrimaryTestClass",
      "externalId": "21001",
      "externalSource": "sis",
      "term": {
        "externalId": "12000",
        "startDate": "2017-07-01",
        "endDate": "2018-06-30",
        "displayName": "SY1516"
      },
      "course": {
        "subject": "PrimaryTestClass",
        "courseNumber": "101",
        "description": "PrimaryTestClass",
        "displayName": "PrimaryTestClass",
        "externalId": "21001"
      }
    },
    {
      "id": "8a15c9c0-13ed-464a-81ec-a6fb2d571599",
      "description": "Health Level 1",
      "displayName": "Health 1",
      "mailNickname": "fineartschool.net",
      "externalSource": "sis",
      "externalName": "Health Level 1",
      "externalId": "11019",
      "classCode": "Health 501",
      "createdBy": {
        "application": {
          "id": "a0c464d5-af1f-4bb9-bbdd-196bd577c796"
        },
        "user": {
          "id": "7cea8be3-ceec-4200-b224-4845c8e38363"
        }
      }
    }
  ]
}
决定由哪位老师教哪些学生更为棘手。您可以使用beta/education/users/{id}/Classes获得他们所属的班级列表,但是您需要通过查询beta/education/Classes/c4c1b1e9-bd8e-4ffc-acb4-e7745342bf6d/Teachers?$select=id,userPrincipalName来获得每个班级的教师列表,以编译完整的教师列表

至于应用程序与委派,当涉及委派范围时,教育API故意非常严格。这是由于学生信息的高度敏感性质以及该数据所接受的安全审查的可理解程度