If you are familiar with Legacy Snapshot (the Command Line Snapshot Tools) the SIS Framework Flat File type brings no change to the format other than the addition of headers for the new data objects supported and the requirement for including a few previously optional fields.

The same rules of order apply for Snapshot Flat Files as for Legacy Snapshot - in short feeds will not succeed unless dependencies have been met. For example, a membership feed will not succeed until both the user feed and the course feed containing the membership related objects has been processed or a child course may not be tied to a parent course until the master course (parent) has been created. This logic applies to terms and nodes as well.

Also note that system behavior on processing data posted to the endpoints is configurable via the integration edit page.

For a complete description of URLs and their functions, see Snapshot Flat File.

ANGEL clients switching to Learn

There are differences between Learn and ANGEL data feed formats. These differences are called out in the ANGEL to LEARN data mapping knowledge path.

Acceptable character set for integration data

The inclusive safe character set on the core data fields is:

A-Z a-z 0-9 . ' , " : ! ? $ @ [ ] { } - _ *

The password and external keys may also contain:

% & # < > = \ + /

Samples using minimum data fields

Note these samples are the minimal required data for the feed - additional objects for each feed may be derived from the SIS Framework Snapshot Flat File Advanced Configuration Custom Headers UI. Also you may derive the required nature of a field from the Field Mapping UI. A full listing with descriptions, examples of default and acceptable values for each object is at the end of this document. Full URLs as used for your installation are discoverable via the SIS Framework Admin UI under HTTP Configuration. To learn more, see Snapshot Flat File.

The below samples use the pipe character - '|' - as the delimiter. You may select which delimiter is used when you configure your implementation.

For more complex data usage samples, see Snapshot Flat File Examples.

Users

Task: Creating/Updating Users (Persons)

URL: Person Store or Refresh

Sample:

external_person_key|user_id|passwd|firstname|lastname|system_role
testPerson1|aanderson_test|changeme|Alpha|Anderson|none
testPerson2|bbrown_test|changeme|Beta|Brown|none
testPerson3|ccharlie_test|changeme|Chi|Charlie|none
testPerson4|ddavis_test|changeme|Delta|Davis|none
testPerson5|eedwards_test|changeme|Epsilon|Edwards|none

While email is not a required field to create a User, not doing so will limit system capabilities such as emailing of course notifications, etc.

Task: Deleting/Disabling users (Persons)

URL: Person Delete

Sample:

external_person_key
testPerson1

Task: Person Secondary Institution Role Feed

URL: Role Store/Refresh /Delete

Sample:

external_person_key|role_id
testPerson1|ALUMNI
testPerson1|PROSPECTIVE_STUDENT
testPerson2|ALUMNI

Task: Person to Observer Association Feed

URL: Association Store/Refresh /Delete

Sample:

external_observer_key|external_user_key
testPerson6|testPerson1

Courses

Task: Creating/Updating new Courses

URL: Course Store or Refresh

Sample:

external_course_key|course_id|course_name
testCourse1|TEST_COURSE_1|Test Course 1
testCourse2|TEST_COURSE_2|Test Course 2
testCourse3|TEST_COURSE_3|Test Course 3

Task: Determine Course View

URL: Course Store or Refresh

Sample:

external_course_key|course_id|course_name|course_experience
testCourse1|TEST_COURSE_1|Test Course 1|Original
testCourse2|TEST_COURSE_2|Test Course 2|Ultra
testCourse3|TEST_COURSE_3|Test Course 3|Instructor choice

Supported values are: Original, Ultra, or Instructor choice. These values are insert only, and can't be updated through SIS framework. 

Task: Deleting/Disabling new Courses

URL: Course Delete

Sample:

external_course_key
testCourse1

Add the template_course_key field to course feed file when you wish for a new course to be populated with the contents of a master course. For example, all new math courses should initially contain the materials from a master math course.

Organizations

Task: Creating/Updating new Organizations

URL: Organizations Store or Refresh

Sample:

external_organization_key|organization_id|organization_name
testOrg1|TEST_ORG_1|Test Org 1
testOrg2|TEST_ORG_2|Test Org 2
testOrg3|TEST_ORG_3|Test Org 3

Task: Disabling new Organizations

URL: Organizations Delete

Sample:

external_organization_key
testOrg1

Memberships

Task: Creating/Updating Course Memberships

URL: Course Membership Store or Refresh

Sample:

external_person_key|external_course_key|role
testPerson1|testCourse1|instructor
testPerson1|testCourse2|student
testPerson2|testCourse1|student
testPerson3|testCourse1|student
testPerson4|testCourse2|instructor
testPerson5|testCourse3|student

Task: Disabling Course Memberships

URL: Course Membership Delete

Sample:

external_person_key|external_course_key
testPerson1|testCourse1

Task: Creating/Updating Organization Memberships

URL: Organization Membership Store or Refresh

Sample:

external_person_key|external_organization_key|role
testPerson1|testOrg1|instructor
testPerson1|testOrg2|student
testPerson2|testOrg1|student
testPerson3|testOrg1|student
testPerson4|testOrg2|instructor
testPerson5|testOrg3|student

Task: Disabling Organization Memberships

URL: Organization Membership Store or Refresh

Sample:

external_person_key|external_organization_key|role
testPerson1|testOrg1|instructor

Terms

Task: Create/Update Terms

URL: Term Store or Refresh

Sample:

external_term_key|name
testTerm1|Test Term 1

Task: Disable a Term

URL: Term Delete URL

Sample:

external_term_key
testTerm1

Nodes

Task: Create/Update Nodes

URL: Node Store or Refresh

Sample:

external_node_key|name
testNode1|Test Node 1
testNode2|Test Node 2

Task: Disable Terms

URL: Node Delete

Sample:

external_node_key
testNode1

Node association

Task: Create/Update /Disable Course to Node Association

URL: Course Association Store/Refresh /delete

Sample:

external_association_key|external_course_key|external_node_key
testCourseAssociation1|testCourse1|testNode1
testCourseAssociation2|testCourse2|testNode2

Task: Create/Update /Disable User to Node Association

URL: User Association Store/Refresh /Delete

Sample:

external_association_key|external_user_key|external_node_key
testUserAssociation1|testPerson1|testNode1
testUserAssociation2|testPerson2|testNode1
testUserAssociation3|testPerson1|testNode2

Task: Create/Update /Disable Organization to Node Association Feed

URL: Organization Association Store/Refresh /Delete

Sample:

external_association_key|external_organization_key|external_node_key
testOrgAssociation1|testOrg1|testNode1
testOrgAssociation2|testOrg2|testNode2

Category support

Task: Create/Update /Disable Course Category Feed

URL: Course Category Store/Refresh /Delete

Sample:

external_category_key|title
testCourseCategory1|Course Category 1
testCourseCategory2|Course Category 2

Task: Create/Update /Disable Organizations Category Feed

URL: Organizations Category Store/Refresh /Delete

Sample:

external_category_key|title
testOrgCategory1|Org Category 1
testOrgCategory2|Org Category 2

Task: Create/Update /Disable Course Category Membership Feed

URL: Course Category Membership Store/Refresh /Delete

Sample:

external_course_key|external_category_key|available_ind
testCourse1|testCourseCategory1|Y
testCourse2|testCourseCategory2|Y
testCourse3|testCourseCategory1|Y

Task: Create/Update /Disable Organization Category Membership Feed

URL: Organization Category Membership Store/Refresh /Delete

Sample:

external_organization_key|external_category_key|available_ind
testOrg1|testOrgCategory1|Y
testOrg2|testOrgCategory2|Y
testOrg3|testOrgCategory1|Y

Parent Child Support

Add the 'master_course_key' field to a course feed when there a parent:child relationship is desired.

You must create parent courses before assigning child relationships.

Task: Create a Parent Child relationship between courses

URL: Course Store/Refresh

Sample:

external_course_key|course_id|course_name|master_course_key
testCourse1|TEST_COURSE_1|Test Course 1|
testCourse2|TEST_COURSE_2|Test Course 2|testCourse1
testCourse3|TEST_COURSE_3|Test Course 3|testCourse1
testCourse4|TEST_COURSE_4|Test Course 4|
testCourse5|TEST_COURSE_5|Test Course 5|testCourse4

In this example, TEST_COURSE_2 and TEST_COURSE_3 are children of the parent course TEST_COURSE_1 while TEST_COURSE_4 is not. You may also run a child course feed separately from a course feed where all courses would contain an entry for the appropriate master_course_key - use Course Store for this operation to retain previously stored courses.

Course copy/template

Add the 'template_course_key' field to course feed populating when you wish for a new course to be populated with the contents of a 'Master' course. Eg: all new math courses should initially contain the materials from a master math course.

Sample:

external_course_key|course_id|course_name|master_course_key|template_course_key
testCourse1|TEST_COURSE_1|Test Course 1||test_course_template1
testCourse2|TEST_COURSE_2|Test Course 2|testCourse1|
testCourse3|TEST_COURSE_3|Test Course 3|testCourse1|
testCourse4|TEST_COURSE_4|Test Course 4||test_course_template1

For an understanding of course copy and course templates, refer to Create Courses by Copying Existing Courses.

Learn more

Snapshot Flat File Header Descriptions