Microsoft Education - School Data Sync (SDS) to Microsoft Graph Mapping - microsoft-graph-api

We are working with schools who use Microsoft Education and School Data Sync (SDS) to load their teachers, students and groups. In SDS there are some properties such as Grade, GraduationYear etc. and we´ve been trying to figure out if these are accessible via the Microsoft Graph API.
With a bit of experimentation and via this article, we can see on Groups and Users certain properties we can get prefixed with extension_fe2174665583431c953114ff7268b7b3_Education_. fe2174665583431c953114ff7268b7b3 seems to be the app id for SDS.
We were wondering if this is a sensible route to get at these properties from SDS or if there is a better route for getting these? We can, for example, see the term information available in classes but we don´t see the subject information there.
For groups:
Groups: https://graph.microsoft.com/v1.0/groups/{Id}?$select=extension_fe2174665583431c953114ff7268b7b3_Education_{Name}
Note: Groups in SDS are called sections
Status (e.g.extension_fe2174665583431c953114ff7268b7b3_Education_Status)
Period - This seems to be called periods in the import files
CourseSubject - e.g. History
CourseDescription - e.g. History of the World
CourseName
CourseNumber
TermEndDate
TermStartDate
TermName
SyncSource_CourseId
SyncSource_TermId
SectionName - this is the name that comes from the SDS file
Users: https://graph.microsoft.com/v1.0/users/{Id}?select=$extension_fe2174665583431c953114ff7268b7b3_Education_{Name}
Grade
GraduationYear
SyncSource_StudentId
ObjectType - Shows if this a teacher or a student
DateOfBirth

The only supported route to access this information is through the Education Graph APIs documented here. Right now that is a subset of the properties imported by School Data Sync. The underlying extension properties should be considered a point-in-time implementation detail and not relied upon in production apps.
Current plan as of Feb 2019 is to add the course information to the educationClass object in the next couple of months. That just leaves a few properties different across the education entities which we don't have a concrete plan for yet.

Related

Querying Business Central/NAV Item Availability by Location through OData or the API

I'm struggling to find a quick method of querying currently 'available items' through the Business Central API or ODataV4 built-in queries and pages which can be set up as web services. The company has multiple locations holding stock. I'm looking to get a list by SKU of how many items are 'in stock' and 'not already committed to orders'.
I've been trying the following ODataV4 endpoints, set up by default in v18 using the Web Services screen. I'm using the URL composition:
https://api.businesscentral.com/v2.0/tenant/environment/ODataV4/company/endpoint
/ItemQuantities - (Object Type: Query, Object ID: 2552) - Great, but shows summed data across all locations.
/ItemsByLocation - (Object Type: Page, Object IDs: 491) - I am not finding documentation that tells me how to filter this by a specific location or use the matrixForm data.
Is anyone able to offer some pointers for me? I think I'm missing something.

Batch enroll multiple educationUsers to educationClass

In the beta (and v1.0) endpoints of the Microsoft graph, for "education", is there a way to add multiple teachers and members (educationUser references) to an "educationClass"?
POST /education/classes/{id}/members/$ref
{
"#odata.id":"https://graph.microsoft.com/v1.0/education/users/XXXXX"
}
Right now, it seems that one by one is added instead of batch applying this in the same fashion as when adding members and owners to teams.
Something like this? (fictive request)
"teachers#odata.bind": [
"https://graph.microsoft.com/v1.0/education/users/AAAAA",
"https://graph.microsoft.com/v1.0/education/users/BBBBB"
],
"members#odata.bind": [
"https://graph.microsoft.com/v1.0/education/users/CCCCC",
"https://graph.microsoft.com/v1.0/education/users/DDDDD"
]
Either in a separate $ref operation or directly on the educationClass creation request object.
Is this something I've just been missing when looking in the doc? If not, is this something the Microsoft Graph Education team might consider in a future version of the beta endpoint?
Currently, the group resource (and by extension educationClass) only supports adding one Owner/Member at a time. You may want to look into the JSON Batching functionality. Batching allows you to queue up to 20 Graph calls in a single request.
For managing Teacher, Student, and Class assignment at scale, I'd suggest looking at School Data Sync (SDS). SDS allows you to automatically keep your AAD in sync with a Student Information System.

Finding the list of people in a distribution list (contact list) using graph API

I'm looking for a way to retrieve the list of people in a distribution list (contact list) in Outlook.com using the Microsoft Graph API.
So far I was able to retrieve the distribution group name etc.. using
https://graph.microsoft.com/v1.0/me/people?$search=DL_NAME
I'm certain that it's what I'm looking for because the result from API includes the following
"personType": {
"class": "Group",
"subclass": "PersonalDistributionList"
}
This is weird anyways, because it shows up using people endpoint and not the contacts.
What I need from this point on is to be able to retrieve the list of people in the distribution list. I've tried querying using the id in the result but it didn't work. Any ideas?
Couple of things...
DLs are actually represented by the group entity in Microsoft Graph, so in your case you should be able to use the id returned from your people search in the following to get the group/DLs members
GET https://graph.microsoft.com/v1.0/groups/{id}/members
You could just search for your DL by filtering on the group entity:
GET https://graph.microsoft.com/v1.0/groups?$filter=displayName eq 'DL_NAME'
The people API (see this topic) is really about people that you communicate with most often - and it includes users, groups and contacts.
Hope this helps,

As an instructor, how do I get a list of enrolled students (only) for my course?

As an instructor user, what Valence Learning Framework API calls must I make to fetch back a list of all the students (only) enrolled in one of my courses?
There are two principal ways to get a list of the people enrolled in a D2L LE class org unit; the right call you should use depends most upon the back-end LMS's configuration that you're working with:
GET /d2l/api/le/{ver}/{orgUnitId}/classlist/
This will retrieve all the users enrolled in the org unit that the system has configured to appear in the class; in some organizations, this might consist of students only, but it's most likely that this call will mix in instructors, tutors, and the like as well as students. So this might, or might not, be appropriate for your needs.
One thing you can try in combination with this route to distinguish students from others in the course is to focus on those who are gradeable; make the classlist call, and then for each user in the classlist, request a grade value for a known grade item. If the user is a student or other role that is participating in the course and being graded, you will know from that second call; non-gradeable users will not have grade values associated with their enrollment. This will help you focus on the aspects of the person's enrollment in the course without necessarily focussing on the details of their enrolled role (some organizations treat role information as sensitive).
GET /d2l/api/lp/{ver}/enrollments/orgUnits/{orgUnitId}/users/?roleId={roleId}
This call will retrieve all the users enrolled in the org unit, and you can filter the retrieved list by role ID (so you can list only "student" users, by their role Id). If the organization has more than one kind of student role, then you will need to know that so you can fetch all the possible student roles. Or, you can simply make the call without the roleId query parameter and filter the results after fetching based on the embedded role information you get back.
However, your instructor user may not have the right permissions to make this call; some organizations limit the access to the enrollment information calls like this to administrative users only.
Note that using the grade object method to determine if user is a student will, by default, only returns 20 items. You can override by specifying pageSize parameter with the call, but you may run in to the same permissions issue if you do not have the appropriate permissions.
http://docs.valence.desire2learn.com/res/grade.html#get--d2l-api-le-(version)-(orgUnitId)-grades-(gradeObjectId)-values-

RhoMobile - locally storage and Rhom API

I am fairly new to using Rhomobile, however I am not fully understanding how the local storing works and how to use the Rhom API.
I've set up the RhoStudio and run the configurations.
What I am trying to achieve is basically have two data models (with property bags as default): one for wards, and one for patients so I can create patient and ward objects.
Eventually I would like to list the wards, and the patients that are assigned to the ward objects.
Can someone explain how I use the Rhom API to be able to achieve this?
I have ran a simulation so once I have something like: /app/Patient/{131199009368684.14}/show in the web inspector, so I am assuming that I will need to create an association of some sort.. And then filter it out with a group Query.
In my personal opinion using the RhoMobile Doc's are not helpful enough.
Many thanks if someone can give me a typical example.
Rhodes auto generates unique ids for each instance of a Module, when it is created. This property is called "object". "131199009368684.14" what you got is the "object" of a particular patient that you created. What you can do to link the patients to the ward is:-
Add an additional property to the Patient Model that stores the "object" of the Ward instance you want to link that particular patient to. Thus you will be able to list all the patients in a particular ward by running a find query on column that stores the object of the Ward in the Patient table, by supplying it the particular Ward's object.
Hope this is useful.

Resources