Integration Between “Things”™ - with a Catch<br />Chris GreenoughNorthern Arizona University<br />Chris.Greenough@nau.edu@...
Background<br />Initially PeopleSoft extracts were IMS Enterprise 1.01 Vista 3 was IMS Enterprise 1.1<br />Needs in our SI...
What’s wrong with direct Integration<br />Data in your SIS is not Life in your LMS<br />Incompletes<br />Guests Lecturers<...
Basic Overview<br />Export<br />Logic<br />Import<br />
Technical Details<br />Originally written in Java ported to Python<br />“Event”/Snapshot based<br />LMS Enterprise 1.1 Bas...
Inbound Sources<br />
Business Logic<br />IMS Enterprise Based Objects<br />Business Logic<br />Update Local Database<br />Apply “Override” Info...
Outbound Sources<br />
IMS Objects<br />Objects<br />Group<br />Relationship<br />Properties<br />Membership<br />Member<br />Bulk load<br />Meth...
DB Schema<br />LMS_GROUP_INFO<br />LMS_MEMBER_INFO<br />LMS_ENROLLMENT_INFO<br />LMS_DESTINATION_INFO<br />LMS_OVERRIDE_IN...
Web Service Integration<br />Vista <br />Multipart IMS XML Web Upload to SIAPI<br />BBLearn9.1<br />WS-Security SOAP reque...
Conclusion<br />There is a need to control every field of data from the SIS to the LMS<br />Distil all sources to common d...
Questions/Links<br />IMS Enterprise Spec 1.1 http://www.imsglobal.org/enterprise/<br />Python http://code.google.com/p/bbp...
Please provide feedback for this session by emailingBbWorldFeedback@blackboard.com. <br />The title of this session is:<br...
defprocessMembership(self,membership):<br />membership.cacheId="%s:%s"%(membership.sourcedidid,membership.sourcedidsource)...
defprocessGroup(self,group):<br />group.cacheId="%s:%s"%(group.sourcedidid,group.sourcedidsource)<br />logger.info("Starti...
http://code.google.com/p/bbpy/source/browse/trunk/bbpy/src/BbPy/security/SignatureHandler.py<br />http://code.google.com/p...
CREATE OR REPLACE VIEW "OVERRIDE_VISTA_GROUP_INFO" ("VISTA_GROUP_ID", "SOURCEDID_ID", "SOURCEDID_SOURCE", "LC_PARENT_ID", ...
Upcoming SlideShare
Loading in …5
×

Integration Between Blackboard Learn™, Release 9.1, Vista 8, Others and PeopleSoft - with a Catch

7,335 views

Published on

This is a presentation I gave at BBWorld 2011 on integrations with Blackboard Learn 9.1, Vista 8, PeopleSoft and other applications on campus.

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
7,335
On SlideShare
0
From Embeds
0
Number of Embeds
2,248
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Integration Between Blackboard Learn™, Release 9.1, Vista 8, Others and PeopleSoft - with a Catch

  1. 1. Integration Between “Things”™ - with a Catch<br />Chris GreenoughNorthern Arizona University<br />Chris.Greenough@nau.edu@GreenO<br />
  2. 2. Background<br />Initially PeopleSoft extracts were IMS Enterprise 1.01 Vista 3 was IMS Enterprise 1.1<br />Needs in our SIS did not match the needs in our LMS<br />More need around campus for enrollment data<br />Constant development since 2008<br />
  3. 3. What’s wrong with direct Integration<br />Data in your SIS is not Life in your LMS<br />Incompletes<br />Guests Lecturers<br />Cross Listed Classes (What a mess)<br />Name Changes<br />Anything else you can think of! <br />
  4. 4. Basic Overview<br />Export<br />Logic<br />Import<br />
  5. 5. Technical Details<br />Originally written in Java ported to Python<br />“Event”/Snapshot based<br />LMS Enterprise 1.1 Based<br />Oracle Backend<br />Multiple Destinations<br />
  6. 6. Inbound Sources<br />
  7. 7. Business Logic<br />IMS Enterprise Based Objects<br />Business Logic<br />Update Local Database<br />Apply “Override” Information<br />IMS Enterprise Based Objects<br />
  8. 8. Outbound Sources<br />
  9. 9. IMS Objects<br />Objects<br />Group<br />Relationship<br />Properties<br />Membership<br />Member<br />Bulk load<br />Methods to get override values(default) and underlying values<br />
  10. 10. DB Schema<br />LMS_GROUP_INFO<br />LMS_MEMBER_INFO<br />LMS_ENROLLMENT_INFO<br />LMS_DESTINATION_INFO<br />LMS_OVERRIDE_INFO<br />TABLE_NAME<br />TABLE_ID<br />FIELD<br />VALUE<br />
  11. 11. Web Service Integration<br />Vista <br />Multipart IMS XML Web Upload to SIAPI<br />BBLearn9.1<br />WS-Security SOAP requests to API<br />Using Internally Developed BbPy Web Service Bindings<br />
  12. 12. Conclusion<br />There is a need to control every field of data from the SIS to the LMS<br />Distil all sources to common data sources, IMS Enterprise Spec<br />Separate inbound and outbound data<br />Hopefully LIS will help the connections<br />Allows for future expansion<br />
  13. 13. Questions/Links<br />IMS Enterprise Spec 1.1 http://www.imsglobal.org/enterprise/<br />Python http://code.google.com/p/bbpy/<br />About.Mehttp://about.me/greeno<br />Twitter@GreenO<br />
  14. 14. Please provide feedback for this session by emailingBbWorldFeedback@blackboard.com. <br />The title of this session is:<br />Integration Between Blackboard Learn™, Release 9.1, Vista 8, Others and PeopleSoft - with a Catch<br />
  15. 15. defprocessMembership(self,membership):<br />membership.cacheId="%s:%s"%(membership.sourcedidid,membership.sourcedidsource)<br />logger.info("Starting Membership %s:%s"%(membership.sourcedidid,membership.sourcedidsource))<br />logger.debug(membership)<br /> if(self.shouldProcess(membership)):<br /> group = self.odb.getGroup(membership.sourcedidid, membership.sourcedidsource)<br />self.setSubroleToNothing(membership)<br />self.addMissingMembershipTags(membership)<br />self.updateRoles(membership)<br />self.emplidToRegid(membership)<br />self.updateMembershipFromOverride(membership)<br /> if getattr(membership,"snap",False):<br />self.processSnap(membership)<br />self.updateDb(membership)<br />self.processExpire(membership, group)<br />self.removeGraders(membership)<br />self.markDestinations(membership)<br />self.markVistaUpdates(membership)<br />self.markDuelEnrollments(membership)<br />self.checkRollup(membership,group)<br />self.runEndPoints(membership)<br />logger.info("Ending Membership")<br />logger.debug(membership)<br />
  16. 16. defprocessGroup(self,group):<br />group.cacheId="%s:%s"%(group.sourcedidid,group.sourcedidsource)<br />logger.info("Starting Group %s:%s"%(group.sourcedidid,group.sourcedidsource))<br />self.logInfo(group, "Starting Group")<br />self.checkDeleted(group)<br />self.updateGroupFromOverride(group)<br /> if hasattr(group,"incomplete"):<br /> raise DatabaseErrors.GroupNotFound("Group Not Found!")<br />self.addMissingGroupTags(group)<br /> if group.sourcedidsource == config.datasource:<br />self.updateGroupTitle(group)<br />self.createLCH(group)<br />self.createRollups(group)<br />self.updateDb(group)<br />self.extendEndDates(group)<br />self.markVistaUpdates(group)<br />self.markDestinations(group)<br />self.runEndPoints(group)<br />self.sendMembership(group)<br />self.logInfo(group,"Ending Group")<br />
  17. 17. http://code.google.com/p/bbpy/source/browse/trunk/bbpy/src/BbPy/security/SignatureHandler.py<br />http://code.google.com/p/bbpy/source/browse/trunk/bbpy/src/BbPy/ContextWS.py<br />
  18. 18. CREATE OR REPLACE VIEW "OVERRIDE_VISTA_GROUP_INFO" ("VISTA_GROUP_ID", "SOURCEDID_ID", "SOURCEDID_SOURCE", "LC_PARENT_ID", "ROLLUP_ID", "TYPE_LEVEL", "SHORT_DESCRIPTION", "LONG_DESCRIPTION", "FULL_DESCRIPTION", "ORG_ID", "ORG_NAME", "BKHIERARCHY", "DIVISION", "BEGIN_DATE", "BEGIN_RESTRICT", "END_DATE", "END_RESTRICT", "ADMIN_PERIOD", "EMAIL", "URL", "WEBCT_TEMPLATE", "CREATE_TS", "MODIFY_TS", "EXPIRE_TS", "COMMENTS", "VISTA_DATA_SOURCE_ID") AS <br /> (select VISTA_GROUP_ID, SOURCEDID_ID, SOURCEDID_SOURCE, LC_PARENT_ID,<br />decode( (select 1 from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='ROLLUP_ID'), <br />null, i.ROLLUP_ID, 1,(select value from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='ROLLUP_ID'), '') as ROLLUP_ID,TYPE_LEVEL,decode( (select 1 from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='SHORT_DESCRIPTION'), null, i.SHORT_DESCRIPTION, 1,(select value from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='SHORT_DESCRIPTION'), '') as SHORT_DESCRIPTION, decode( (select 1 from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='LONG_DESCRIPTION'), null, i.LONG_DESCRIPTION, 1,(select value from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='LONG_DESCRIPTION'), '') as LONG_DESCRIPTION, decode( (select 1 from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='FULL_DESCRIPTION'), null, i.FULL_DESCRIPTION, 1,(select value from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='FULL_DESCRIPTION'), '') as FULL_DESCRIPTION, ORG_ID, ORG_NAME, BKHIERARCHY, DIVISION,decode( (select 1 from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='BEGIN_DATE'), null, i.BEGIN_DATE, 1,(select value from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='BEGIN_DATE'), '') as BEGIN_DATE, BEGIN_RESTRICT, decode( (select 1 from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='END_DATE'), null, i.END_DATE, 1,(select value from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='END_DATE'), '') as END_DATE, END_RESTRICT, ADMIN_PERIOD, EMAIL, URL, WEBCT_TEMPLATE, CREATE_TS, MODIFY_TS,decode( (select 1 from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='EXPIRE_TS'), null, i.EXPIRE_TS, 1,(select value from vista_ims_adm.vista_override_info o where table_name='VISTA_GROUP_INFO' and table_id=i.vista_group_id and field='EXPIRE_TS'), '') as EXPIRE_TS,COMMENTS, VISTA_DATA_SOURCE_ID from vista_ims_adm.vista_group_infoi)<br /> ;<br />

×