Thursday, January 23, 2014

Alma and ILLiad some Partial Integration...

Decided we wanted to try and streamline the ILLiad item creation as much as we could until their is actual NCIP messages from ILLiad to the ExLibris' Alma system.

When we first got Alma we were creating Resource Sharing Borrowing Requests by hand, and then receiving them at the Circulation Desk. Okay, although our volume is pretty low you still had to key in some of the information.

In a conversation with Jeremy McWilliams at Lewis & Clark College library he mentioned they were working on trying to do something with creating the their temp ILL items at a point in the ILLiad processing where you can generate an excel spreadsheet of incoming items.

That got me to thinking, if I could read through that Excel spreadsheet and create MARC records that might to the trick.

So are workflow now is basically this:

  1. Receive/check items in within ILLiad.
  2. Click on the ILLiad menu where it shows Borrowing items which are Awaiting post receipt processing.
  3. Export the sheet and save it to a shared drive with a file name of loans.xsl.
  4. We the run a web php script, that uses pear MARC.php and PHPExcel to read through the excel file, as it reads each line it builds a MARC record, so when done you have a file of MARC records:

foreach ($sheetData as $row) {

   $marc = new File_MARC_Record();
   $count = $count + 1;
   $barcode = $row['A'];
   $marc->appendField(new File_MARC_Data_Field('900', array(
        new File_MARC_Subfield('a', $barcode),
    ), null, null
   ));

   $author = $row['D'];
   $marc->appendField(new File_MARC_Data_Field('100', array(
        new File_MARC_Subfield('a', $author),
    ), null, null
   ));

   $title = $row['E'];
   $marc->appendField(new File_MARC_Data_Field('245', array(
        new File_MARC_Subfield('a', $title),
    ), null, null
   ));

   $policy = 'ILL';
   $marc->appendField(new File_MARC_Data_Field('901', array(
        new File_MARC_Subfield('a', $policy),
    ), null, null
   ));

  5. Once we have the file of MARC records we can run an import of the records into ALMA and the items are set to checkout to the patrons with the correct item policy.

  6. We then check them out to the patrons with the correct due date. 

Monday, December 23, 2013

Come On Tomcat...

Over the break I ran a 5K race with my son called the Jingle Bell dash, when I got home I decided to do a quick check of my e-mail to show some pictures to him. I then noticed a "system alert" that one of our servers that delivers library images was currently down.

Awesome a chance for me to show off that I can fix some systems problems. Hopped onto the server "lib-tomcat", where we have tomcat running a couple applications. Tried the usual service restart command, /usr/service/tomcat6 restart, but it would not start. Guess I was going to have to at the log to see what was causing the problem.

However, before I looked at the log I thought this would be a great chance to test out our new "System Alert Form", basically a php mail script that also includes all of our phone numbers to the systems folks. So along with an email we also get a text alert. I notified the other systems staff that I was having issues restarting Tomcat.

I then decided to go straight to the bin directory and stop and then start Tomcat. That did the trick and image server was back up and running. I then later got an email from my supervisor who thanked me for fixing the problem and also letting me know he got the text message. A nice "Systems" example for the Christmas break vacation.

Tuesday, December 17, 2013

Alma: Batch Patron Delete

This past summer we migrated from Innovative Interfaces (III) to ExLibris' Alma system. III had some great batch delete options for patron records. However with Alma those tools do not yet exist, we needed some way to batch delete a number of patron records.

It got me to thinking, what if I read an excel file of barcodes of patrons which we want to delete, and basically sent a deleteUser call based on the userID to the Alma user web service.

Below are the steps we used:

  1. First we installed PHPExcel 1.7.9. This lets us easily read through the spreadsheet.
  2. Using Alma Analytics we created a spreadsheet of the users that we wanted to delete.
  3. Next we set up a file to make the call to the UserWebServices wsdl.
  4. There are a number of functions available on from the web service and one is "deleteUser".
  5. So we basically read through the excel file and delete each patron record. If success, we report back the ID that was deleted. If the delete fails, books on loan, patron has fines, or the user id no longer exists the report lets you know who it could not delete and the reason why it failed.

    Here is a sample of the report:

    UserID 2044325 HAS been deleted
    UserID 2045274 HAS been deleted
    UserID 2046383 HAS been deleted
    UserID 2046389 HAS been deleted
    UserID 2046625 HAS been deleted
    UserID 2046757 HAS been deleted
    UserID 2046897 Could not be deleted because User not found
    UserID 2046918 Could not be deleted because User not found
    UserID 2048022 HAS been deleted
    UserID 2048028 Could not be deleted because User not found
    UserID 2048220 Could not be deleted because User not found
    UserID 2049102 Could not be deleted because User not found
    UserID 2049493 Could not be deleted because User not found
    UserID 2058282 Could not be deleted because User not found
    UserID 1694234 Could not be deleted because User not found
    UserID 1856181 Could not be deleted because User not found
    UserID 2114672 Could not be deleted because User not found
    944 Patrons records handled.    


Tracking My "Systems" Librarian Work

In need some method for tracking some of the "systems" related tasks that I do within my role as a systems librarian at Willamette University's Mark O. Hatfield Library, I have decided to try and maintain a blog on the topic. 

I tend to be someone who does not want to program all day, and I like to work with students more than a computer. However, I'm hoping I can occasionally capture some of what I believe are "system" related tasks in this blog.