SITS Interactive Apps at St Andrews • Two key applications that interact with SITS: – MMS: institutional data flow management tool suite – Admissions: does what it says on the tin • As of Jan 2013 MMS is read/write via DB • Admissions is read via DB, write-back using StuTalk MMS • MMS is primarily designed to minimise manual handling of data • Extracts data from SITS over database links, including: – Courses, course enrolment – Degree intention, supervisors (PGR) – Course results for degree classification – Exceptional circumstances – Disability information MMS (2) • Data written back semi-automatically • CSV files generated for end-of-course results • Imported in batch operations through SITS client • As of Jan 2013, work partially completed for writing back automatically as XML feeds MMS (Students on Module) Admissions • Reads SITS data directly from database – Performance issues performing mass-reads over StuTalk • Reads SITS data for update over StuTalk • Writes decisions back via StuTalk web services • Student details, applications, etc. written back via StuTalk XML Admissions (Applicant Import) Feedback • Very positive response to user interfaces – Substantially simpler to adopt institutional look and feel – SITS-specific detail generally hidden from user • Issues with performance • Issues with reliability • Hiding implementation detail can cause confusion StuTalk Web Services v8.5.1 • SOAP based • Ability to run processes – Assign new student ID – Generate reports – Etc. • Immediate feedback on success/failure – Useful for development – Well suited to small interactive tasks – Can report outcome directly to user StuTalk Web Services (2) • Poorly designed – JSON in SOAP • XML in JSON in SOAP! – Base64 in App XMLEngine in JSON in SOAP!? Datastore – No use of standard authentication tools – No transaction safety • Slow (200-500ms/request) • Limited support for writing multiple records – Embedded XML feeds StuTalk Web Services Request <soapenv:Body> <urn:ACTION> <urn:USER>stutalk</urn:USER> <urn:PASSWORD>topsecret</urn:PASSWORD> <urn:DELIMITER>JSON</urn:DELIMITER> <urn:FUNCTION>DMU</urn:FUNCTION> <urn:PARAMETERS>{"ACTION":"UPDATE","DCT":"SRS","ENT":"CAP"}</urn:PARAMETERS> App Engine Datastore <urn:INDATA> { "cap_stuc":"120004054", "cap_apfs":"01", "cap_seqn":"01", "cap_blok":"24", "cap_qstc":"NQ", } </urn:INDATA> <urn:MD5>b447291e73dc268a717e276c2e96da0b</urn:MD5> </urn:ACTION> </soapenv:Body> StuTalk XML • • • • Intended for bulk data import/export Appear more robust for simple data sets Some issues with mixed data sets Writing back inter-related data sets has issues with primary key generation – For example CAP, APF and STU for a new student application • Require shared space for storing XML files StuTalk XML Example <EXCHANGE> <stu> <stu.ins> <stu_code>01234567890</stu_code> <stu_had1>1 Made Up Street</stu_had1> App Engine Datastore <stu_had2>Edinburgh</stu_had2> <stu_hapc>EH1 2AA</stu_hapc> <stu_haem>student@example.org</stu_haem> </stu.ins> </stu> </EXCHANGE> Reading by Database • Fast – Especially joining tables • Risk of issues due to schema changes • Non-database fields cannot be accessed – Unaware of any times this was an actual problem Writing by Database • Fast, however: – No SITS triggers – No integrity constraints – No feedback • Cannot run processes – For example student ID assignment • Usable only in very simple use-cases StuTalk Interaction Layer • Developed in-house at St Andrews • Web service & XML wrapping layer • Hides implementation details – Allows easy re-targeting of SOAP & XML interfaces • Simple object-mapping layer – Data object definitions automatically generated from SITS ENT & FLD records Summary • • • • In theory, good In practice, some significant challenges Likely to be worth persevering with Upcoming changes/improvements to StuTalk? – “Beta” API in 8.5.1 Suggestions • StuTalk XML feed into EUGEX • Staging database for changes to go to SITS • Work with Tribal on API to improve key issues: – Lack of transaction support – Performance (session instantiation?) – Read/write related records as a batch Questions?