forked from blackboard/anthologydevdocs
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5312690
commit 5bfa36b
Showing
16 changed files
with
166 additions
and
3 deletions.
There are no files selected for viewing
124 changes: 124 additions & 0 deletions
124
docs/rest-apis/student/best-practices/SaveStudentTransferCredit .md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
--- | ||
title: 'Using the SaveStudentTransferCredit command API' | ||
id: studentapi-savestudenttransfercredit-details | ||
sidebar_position: 1 | ||
author: Jim Burns | ||
published: '2024-06-26' | ||
edited: '2024-06-26' | ||
--- | ||
|
||
<VersioningTracker frontMatter={frontMatter}/> | ||
|
||
A common use case for integrators is to persist data for courses completed at other institutions. There is capability in Anthology Student for a student to have course requirements satisfied with course work that has been completed at other institutions. The high level process is for a user to create a student transfer credit record which consists of the course(s) that have been completed at other institutions as well as the internal course(s) that the external course work will be satifying. There are many cases where the process of articulating which external courses satisfy which internal courses is handled outside of the Anthology Student applicatuin boundary. In this case, it is critical to be able to persist this data into Anthology Student so that business processes that have dependencies on transfer credit data will operate as expected. The command API endpoint that is used for persisting this data is api/commands/Admissions/StudentTransferCredit/SaveStudentTransferCredit. This document will document the pertinent details for being able to successfully leverage and execute this API. | ||
|
||
## Swagger documentation | ||
|
||
To access the Swagger documentation, append 'swagger' to the end of the base URI that is used to launch the Anthology Student web client application. Once the Swagger landing page is loaded, use the Domain and Functional Area drop down filters at the top of the swagger page to access the documentation for the save transfer credit endpoint. Select 'Admissions' for Domain and 'Student Transfer Credit' for Functional Area and then select Refresh. Then click the lightning bolt icon to see the command API endpoints for the StudentTransferCredit entity. | ||
|
||
![Operations for Student entity](/assets/img/SaveStudentTransferCreditAPI1.png) | ||
![Operations for Student entity](/assets/img/SaveStudentTransferCreditAPI2.png) | ||
|
||
When the list of available operations is displayed, select the SaveStudentTransferCredit operation. NOTE: Do not use the SaveAdvanceStudentTransferCredit endpoint. This API is not fully implemented and will not provide the desired result of saving student transfer credit data. | ||
|
||
![Operations for Student entity](/assets/img/SaveStudentTransferCreditAPI3.png) | ||
|
||
## Request payload | ||
|
||
The high level data model for persisting transfer credit data consists of 3 main entities. The StudentTransferCredit entity is the header record for the transfer credit information. This entity will store the summary of the transfer credit record such as College or High School the external courses were completed at, overall status of the transfer credit record and the transfer credit type. This entity also includes 2 child entities as part of its definition. StudentTransferCreditMultipleExternalCourse is the entity that contains 1 or more rows for each course the student completed at the external institution. The StudentTransferCreditMultipleInternalCourse entity will contain 1 or more rows for the instiitution courses that the external courses are satisfying. You will see that these are defined as collection properties within the request payload. -- StudentTransferCreditExternalCourseList and StudentTransferCreditInternalCourseList. | ||
|
||
You will see properties on the StudentTransferCredit entity that are deprecated and no longer used. The original implementation of the Student Transfer Credit feature in Anthology Student did not have child tables defined for recording external course work and the internal courses that the external course work was satisfying. Instead a row would exist in the StudentTransferCredit entity for each external course that was taken. For this reason, the following properties on the StudentTransferCredit entity can be ignored as they are no longer used: | ||
|
||
- CollegeCourseId | ||
- CollegeId | ||
- LetterGrade | ||
- CourseId | ||
- CreditHoursEarned | ||
- CollegeCourseLetterGrade | ||
- CollegeCourseCreditHoursAttempted | ||
- CollegeCourseClockHoursAttempted | ||
- CollegeCourseGradePoints | ||
- CollegeCourseCreditHoursEarned | ||
- CollegeCourseClockHoursEarned | ||
- CollegeCourseStartDate | ||
- ClockHours | ||
- ClockHoursEarned | ||
- HighSchoolCourseId | ||
- HighSchoolId | ||
|
||
All of the details for the external course work taken will reside on the ExternalCourses child entity collection property. All of the details for the internal courses that that the external course work is satisfying will reside on the InternalCourses child entity collection property. | ||
|
||
IMPORTANT NOTE: When looking at the request payload documentation in Swagger, you will see the StudentTransferCreditEntity defined as a property in the StudentTransferCreditExternalCourseList property AND the StudentTransferCreditInternalCourseList property. This should be completely ignored and not populated as part of the request. Anything populated in the StudentTransferCreditEntity properties is ignored in the API execution logic. | ||
|
||
An example payload for this API is below. | ||
|
||
approvedDate: null | ||
isApproved: false | ||
rowVersion: null | ||
studentEnrollmentPeriodId: 961 | ||
studentId: 50873 | ||
studentTransferCreditExternalCourseList: | ||
0: { | ||
collegeCourseClockHours: null | ||
collegeCourseClockHoursAttempted: null | ||
collegeCourseClockHoursEarned: null | ||
collegeCourseCreditHoursAttempted: 0 | ||
collegeCourseCreditHoursEarned: 0 | ||
collegeCourseCredits: 0 | ||
collegeCourseGrade: "A" | ||
collegeCourseGradePoints: 0 | ||
collegeCourseId: 8 | ||
collegeCourseStartDate: "2023/12/01 00:00:00" | ||
collegeId: 4 | ||
completionDate: "2023/12/31 00:00:00" | ||
entityState: 0 | ||
highSchoolCourseId: null | ||
highSchoolId: null | ||
id: -1} | ||
1: { | ||
collegeCourseClockHours: 0 | ||
collegeCourseClockHoursAttempted: 0 | ||
collegeCourseClockHoursEarned: 0 | ||
collegeCourseCreditHoursAttempted: 3 | ||
collegeCourseCreditHoursEarned: 3 | ||
collegeCourseCredits: 3 | ||
collegeCourseGrade: "B" | ||
collegeCourseGradePoints: 0 | ||
collegeCourseId: 7 | ||
collegeCourseStartDate: "2022/09/01 00:00:00" | ||
collegeId: 3 | ||
completionDate: "2022/10/31 00:00:00" | ||
entityState: 0 | ||
highSchoolCourseId: null | ||
highSchoolId: null | ||
id: -1} | ||
studentTransferCreditId: -1 | ||
studentTransferCreditInternalCourseList: | ||
0: { | ||
courseId: 10 | ||
credits: 3 | ||
entityState: 0 | ||
hours: 0 | ||
id: -1} | ||
termId: null | ||
transferCreditStatusId: "1" | ||
transferCreditTypeId: "4" | ||
|
||
In the example, there are 2 external courses taken that are satisfying the requirements for 1 internal course. | ||
|
||
The TransferCreditStatusId property value will determine if the student's degree progress audit and transcript data will be updated when the API executes. The Transfer Credit Status table is reference data that is configured by the instituion. Any number of statuses can be configured that can be used to track the transfer credit process (i.e. Transfer credits are submitted, transfer credits are being reviewed, transfer credit is approved etc.). Each row in the Transfer Credit Status reference data entity has a boolean property called IsApproved. If the IsApproved attribute is true for the TransferCreditStatusId property value specified in the request, then the execution logic will perform the needed updates so that there is a Transfer grade recorded for the internal course Id provided and also update the degree progress audit data so that the requirement of taking the internal course Id shows as Fulfilled when generating the students Degree Progress Audit. | ||
|
||
## Additional notes: | ||
|
||
### Authorization required for this API endpoint | ||
|
||
In order to be able to execute this API endpoint, the user that the API call is authenticating under must have the Academics - Student Transfer Credit - New task included in the list of tasks/operations that the user is authorized to. This is done from the security console application. | ||
|
||
![Operations for Student entity](/assets/img/SaveStudentTransferCreditAPI4.png) | ||
|
||
### Optional properties in request payload | ||
|
||
There are a number of properties in the request payload that are optional. The nuances of if/how to populate these will need to be determine via iterative testing and validation with the client. The sample request payload provided above can be used as a starting point but will likely need to be fine tuned in order to satisfy all requirements for recording student transfer credit data. | ||
|
||
If there are questions after reviewing this document and the corresponding swagger documentation, you can submit them by sending an email to [email protected]. | ||
|
||
<AuthorBox frontMatter={frontMatter}/> |
38 changes: 38 additions & 0 deletions
38
docs/rest-apis/student/best-practices/StudentQueryModelMetadata.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
--- | ||
title: 'Student query model metadata' | ||
id: studentapi-querymodel-metadata | ||
sidebar_position: 4 | ||
author: Jim Burns | ||
published: '2024-06-26' | ||
edited: '2024-06-26' | ||
--- | ||
|
||
<VersioningTracker frontMatter={frontMatter}/> | ||
|
||
The student data model is comprised of hundreds and hundreds of entities. One of the fundamental requirements for integration partners is to be able to retrieve data out of the query model. There are numerous OData controller methods implemented that can be used to retrieve data. However, the purpose of these methods is to supply the needed data for the web client UI pages. Thus, the design and function of these methods are extremely prescribed. In most cases, when there is a need to retrieve data from Anthology Student, the solution will be to write a custom OData query using the ds/odata endpoint. To maximize the power of this capability, it is important to understand the query data model and specifically, the navigation properties available on each entity in the model. The Data Views feature in the Anthology Student web client is a very powerful tool and can be very helpful in gaining an increased understanding of the query data model. However, one of the limitations in this tool is that many navigation properties for entities are not visible. The only navigation properties that are exposed in the Data Views UI are ones that have a one to one multiplicity with the base entity. Navigation properties that have a one to many multiplicity are hidden from the UI. In order to see a complete inventory of all navigation properties available in the query model, you can use an endpoint that returns the complete metadata for the query model. | ||
|
||
## Metadata endpoint | ||
|
||
In order to retrieve the metadata for the query model, append 'ds/odata/$metadata' to the base URL that is used to load the web client application. The output from this will be the metadata for the entire query model. Since a large amount of data is being returned, the execution time for returning the metadata output can be lengthy. Occasionally, you may get a timeout error. If this occurs, then just try issuing the URL again. | ||
|
||
Example URL: https://sisclientweb-900065.campusnexus.cloud/ds/odata/$metadata | ||
|
||
## Metadata sample output | ||
|
||
The first page of the metadata endpoint response is below. | ||
|
||
![Query Model Metadata](/assets/img/StudentQueryModelMetadata1.png) | ||
|
||
To locate the metadata for a given entity in the model, use the Find operation <Ctrl/> F and then enter "EntityType Name=#####" in the search box replacing ##### with the name of the entity you are searching for. | ||
|
||
The screen shots below show the metadata for the StudentEnrollmentPeriod entity. This is one of the larger entities in the data model. Notice that there is a section that lists the name and type of every property defined for the entity. | ||
|
||
![Query Model Metadata](/assets/img/StudentQueryModelMetadata2.png) | ||
|
||
The next area of the output lists all of the navigation properties defined for the entity. There are dozens of navigation properties defined for the StudentEnrollmentPeriod entity. The Name attribute is the navigation property name. This is the name that would be specified for the $expand argument in the OData query. The Type attribute on each Navigation Property element defines the entity in the model that this navigation property will expand to when it is referenced within the odata query being written. If the multiplicity is one to many, the type will be specified as Collection(entity name). Otherwise the multiplicity is one to one. | ||
|
||
![Query Model Metadata](/assets/img/StudentQueryModelMetadata3.png) | ||
|
||
In conclusion, the Data Views feature in the web client UI can be utilized as a starting point for building custom odata queries and visually seeing available properties and relationships between entities. However, it is important to always review the output from the $metadata endpoint to ensure you are seeing the complete model metadata including ALL available navigation properties for a given entity. | ||
|
||
<AuthorBox frontMatter={frontMatter}/> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.