DevCon 2012 Chris Greenough Migrating Data Feeds to IMS Learning Information Services(LIS)

Preview:

DESCRIPTION

Client Presentation

Citation preview

Migrating Data Feeds to IMS Learning Information Services(LIS)

Chris GreenoughEnterprise Web Team LeadNorthern Arizona University

@GreenO

2

Overview

• Background

• Enterprise 1.1 -> IMS

• Learn Setup

• Logging

• Mapping

• LIS WSDL

• Bb LIS B2 Code

• Bb Enabled Methods

• Sample Python Code

3

Background

4

Background – Snow Dogs in Arizona

5

Enterprise 1.1 -> IMS

• Based on, but completely different than Enterprise spec

• Vocabulary• E.g. The type of formatted name vocabulary

formatnmetypevocabularyv1p0.xml

• The Vocabulary loosens the spec (Maybe you call it more extensible)

• Add the Vocabulary and it looks kinda, maybe similar to the Enterprise spec

6

IMS Enterprise Person<person> <comments>An useful comment, hopefully.</comments> <sourcedid> <source>IMS-LMS</source> <id>student_123456</id> </sourcedid> <userid>ColinS</userid> <name> <fn>Chris Greenough</fn> <prefix>Mr</prefix> </name> <demographics> <gender>2</gender> <bday>1958-03-31T00:00</bday> <disability>Blind</disability> </demographics> <email>colin@imsglobal.org</email> <url>http://www.imsglobal.org</url> <tel telnum="1">+44-114-2335007</tel>

<adr> <pobox>345</pobox> <extadd>Region Court</extadd> <street>56 Grange Road</street> <locality>Guildford</locality> <pcode>GU12 5XH</pcode> <country>United Kingdom</country> </adr> <photo imgtype="image/jpg"> <extref>http://www.imsglobal.org/staff/photo.jpg</extref> </photo> <systemrole systemroletype="SysAdmin"/> <institutionrole primaryrole="Yes" institutionroletype="Administrator"/> <datasource>CSU-LMS</datasource></person>

7

IMS LIS Person(Simplified)

<person>

<name>

<nameType>Preferred</nameType>

<partName>

<vocab id=“First”>Chris</vocab>

<vocab id=“Last”>Greenough</vocab>

<vocab id=“Middle”>D</vocab>

</partName>

</name>

<name> <nameType>Full</nameType> <partName> <vocab id=“First”>Christopher</vocab> <vocab id=“Last”>Greenough</vocab> <vocab id=“Middle”>Douglas</vocab> </partName> </name>

8

Actual Partial Person Object

"person":{ "name":{"nameType": {"instanceIdentifier":{"textString":"Preferred"}, "instanceValue":{"textString":"Preferred"}, "instanceVocabulary":"http://www.imsglobal.org/lis/pmsv2p0/nametypevocabularyv1p0"}, #B1.2 "partName": [ {"instanceIdentifier":{"textString":"First"}, "instanceName":{"textString":"First"}, "instanceVocabulary":"http://www.imsglobal.org/lis/pmsv2p0/partnamevocabularyv1p0", "instanceValue":{"textString":"Chris"} }, {"instanceIdentifier":{"textString":"Last"}, "instanceName":{"textString":"Last"}, "instanceVocabulary":"http://www.imsglobal.org/lis/pmsv2p0/partnamevocabularyv1p0", "instanceValue":{"textString":"Last"}} ] #B1.3 },

9

Learn Setup

10

End Points

11

Logging!!!

12

Mapping

13

Demo

14

IMS LIS WSDL

http://www.imsglobal.org/lis/

15

IMS LIS WSDL Vocab

16

Bb LIS B2

package blackboard.dataintegration.lis.webservice;

public class PersonManagementServiceSyncService extends BaseLISWebservice

{

public OMElement changePersonIdentifier( @SuppressWarnings( "unused" ) OMElement element )

{

return doUnsupportedOp( CHANGE_PERSON_IDENTIFIER_RESPONSE, LISWebserviceConstants.PERSON_MANAGEMENT_SERVICE_NAMESPACE );

}

LIS_B2_sample_code.zip

17

Bb Enabled Methods• PersonManagementServiceSyncService

• createPerson(GUID.Type sourcedId, PersonRecord.Type personRecord, )

• deletePerson(GUID.Type sourcedId, )

• replacePerson(GUID.Type sourcedId, PersonRecord.Type personRecord, )

• BulkDataExchangeManagementServiceSyncService• announceBulkDataExchange(LUID.Type transactionId,

BulkBlockManifest.Type bulkBlockManifest, )

• CourseSectionManagerSyncService• createCourseSection(GUID.Type sourcedId,

CourseSectionRecord.Type courseSectionRecord, )

• deleteCourseSection(GUID.Type sourcedId, )

• replaceCourseSection(GUID.Type sourcedId, CourseSectionRecord.Type courseSectionRecord, )

18

Bb Enabled Methods cont• GroupManagementServiceSyncService

• createGroup(GUID.Type sourcedId, GroupRecord.Type groupRecord, )

• deleteGroup(GUID.Type sourcedId, )

• replaceGroup(GUID.Type sourcedId, GroupRecord.Type groupRecord, )

• MembershipManagementServiceSyncService• createMembership(GUID.Type sourcedId,

MembershipRecord.Type membershipRecord, )

• deleteMembership(GUID.Type sourcedId, )

• replaceMembership(GUID.Type sourcedId, MembershipRecord.Type membershipRecord, )

19

Python Sample Code

• GitHub

• Contains Enabled Functions

• https://github.com/greeno/PyLis

20

Wrap-up

• No Read!

• Only create, delete, modify methods

• Sample Code needs to be flushed out• Start on GitHub (Fork Me!)

• Vocab make for flexible yet complicated schema

• Logging is GREAT

• Testing is GREAT

• Mapping is GREAT

• Custom scripts are GREAT!!

21

Questions

22

We value your feedback!Please fill out a session evaluation.