1 / 28

Developer Developer

Developer Developer. Chicago ExLibris 9-10 Mar 2011 Ken Herold Hamilton College. [ALL IP MARKS IMPLIED]. ILL requests - integration. Combine VoyagerILL , Ariel, and RapidILL data Voyager 7+ Tomcat Web Voyage; Perl; PHP ../cl_myAccount.xsl (Patron logged in)

zalman
Download Presentation

Developer Developer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Developer Developer Chicago ExLibris 9-10 Mar 2011 Ken Herold Hamilton College [ALL IP MARKS IMPLIED]

  2. ILL requests - integration • Combine VoyagerILL, Ariel, and RapidILL data • Voyager 7+ Tomcat Web Voyage; Perl; PHP • ../cl_myAccount.xsl (Patron logged in) • New “ILL Items – Summary” links and table • Replace Requests Pending table/suppress template • Renew/View 90-day history link (VoyagerILL) • Manage Document Delivery link (Ariel/RAPID) • Table displays title, ILL number, status, date requested, date received, and date due • Automate retrieval/live PDF link when available Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  3. PATRON EMAIL, FORMS, OPENURL VOYAGER ILL ARIEL RAPID ILL CLIODATA.MDB FILESYSTEM SOAP BORROWING REQPDF DELIVERY PERL SQL/PHP PHP/PERL XML INPUT keys: FULL NAME PATRON_ID EMAIL ADDRESS MATCHING ACHIEVED VIA PATRON EXTRACT TO XML FILE MY ACCOUNTS PAGE REQUESTS Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  4. PATRON EMAIL, FORMS, OPENURL VOYAGER ILL ARIEL RAPID ILL Patrons initiate ILL requests via email, online forms, and using OpelURL Resolved links in databases and web resources. Staff input these into OCLC and ingest into ILL Management via ILL Request, the Voyager CLIO modules. Data is managed and responded to in various ways. Books shipped, articles transmitted, Ariel images received, RapidILL documents delivered as pdfs. Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  5. GENERATE HTML/XML FROM 3 SOURCES VOYAGER ILL ARIEL RAPID ILL CLIODATA.MDB FILESYSTEM SOAP API BORROWING REQPDF DELIVERY PERL SQL/PHP PHP/PERL PATRON_ID EMAIL ADDRESS REQUEST # Alex2clio.php Ill2alex.php DocList.pl arielDocs.php Rapid2.cgi cl_myAccount.xsl Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  6. MY ACCOUNTS PAGE REQUESTS LINKS TAKE PATRON TO PRE- AUTHENTICATED PERSONAL HISTORY AND MANAGEMENT DESIGN OBJECTIVE IS A ONE-STOP LOCATION FOR ALL INTERLIBRARY LOAN AND DOCUMENT DELIVERY REQUESTS FOR A LOGGED-IN PATRON IN TOMCAT WEB VOYAGE. XML STREAMS FILL THIS TABLE WITH CITATION DATA, ILL NUMBER, STATUS WITHIN THE LAST HOUR, AND DATES FOR REQUEST, RECEIPT, AND DATE DUE FOR LOANS. Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  7. GENERATED BY ALEX2CLIO.PHP USING INTERNAL PATRON_ID POST Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  8. VOYAGER ILL VoyagerILL Data • Hosted on Windows 2003 R2 server • MS Access 2003 database Cliodata.mdb • System DSN Data Source: cliodata_copy.mdb • BorrowingRequests table updated hourly • Mdb includes patron table refreshed monthly • Requests archived monthly/latest 90 days • Project leverages existing PHP reporting Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  9. VOYAGER ILL ILL2Alex.php – output xml <doc> <illNo>73014956</illNo> <reqDate>2011-01-18</reqDate> <recDate>2011-01-22</recDate> <dueDate /> <bookTitle>Atti del terzoCongressodistudiarabi e islamici. Ravello, 1-6 settembre 1966.; pp: ??</bookTitle> <artTitle>"le nom supreme de dieu"</artTitle> <status>RecCopy</status> </doc> <doc> <illNo>72524358</illNo> <reqDate>2011-01-04</reqDate> <recDate>2011-01-14</recDate> <dueDate>2011-02-19</dueDate> <bookTitle>Los nombres del diablo : ensayosobre la magia, Granada : Universidad de Granada, 2005</bookTitle> <artTitle /> <status>RecLoan</status> </doc> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  10. ARIEL Document Delivery Ariel then sends patron notification email with this pre-formed link: http://{server}/cgi-bin/DocList.pl? PN=$$PIN$$ &EM=$$PATRONEMAIL$$ $$PIN$$ is randomly generated. We do not want patron to have to remember this and do extra login. It and $$PATRONEMAIL$$ is at Ariel PC in antiquated and secured SQL database. Staff enter singly into Ariel DB per patron. ARIEL_{PIN}_... .PDF • ARIEL_{PIN}_... .CTRL • Email xxxxxxx@hamilton.edu • Status {0|1|2} 0=available • ID --ID:-NNNNNNN [-RAPID] • Postdate MM/DD/YYYY • Views {0-5} • Total views 5 Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  11. ARIEL Automate: PHP reads docs folder http://{server}/arielDocs.php?EMAIL=xxxxxxxx@hamilton.edu <?xml version="1.0" ?> <result> <doc> <field2>2</field2> <field3>nnnnnnnnn</field3> <field4>02/01/2010</field4> <field5>3</field5> <field6>5</field6> <file>ARIEL_{PIN}_{Ariel_PC}_20100201152952.PDF</file> </doc> <login>http://{server}/cgi-bin/DocList.pl?PN={PIN}&EM=xxxxxxxx@hamilton.edu</login> </result> • PARSES .CTRL FILES • MATCHES EMAIL AT FIELD1 • CLEANS UP ILL ID NUMBER • GETS DATE POSTED • RE-CREATES PDF FILENAME • CREATES AUTO-LOGIN LINK • BUILDS XML OUTPUT Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  12. RAPID ILL SOAP web service via Perl RAPID API DOCUMENTATION - CSU LIBRARIES – RAPID EXPANSION PROJECT LAST MODIFIED: MARCH 9, 2010 - REV. 1.55 METHOD: RetrieveHistory (Returns the status history of the request in Rapid. ) SOAP Request (Input) <UserName>string</UserName> <Password>string</Password> <RequestingRapidCode>string</RequestingRapidCode> <RequestingBranchName>string</RequestingBranchName> <RequestId>int</RequestId> SOAP Request (Output) <IsSuccessful>boolean</IsSuccessful> <HistoryTransactions /> <JournalYear> string </JournalYear> <JournalTitle> string</JournalTitle> <ArticleTitle> string </ ArticleTitle > <JournalVol> string </JournalVol> <JournalIssue> string </JournalIssue> <JournalPages string </JournalPages> <Issn> string </Issn> <OclcNumber> string </OclcNumber> We send RequestId, which is our negative ILL number, and receive citation data. RAPID added the optional output values following HistoryTransactions at our request. Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  13. RAPID ILL SOAP web service example http://{serverIP}/rapid2.cgi?3705838 <result>The international journal of transitional justice [electronic resource].. Vol 3 (2009); pp: 445- Musila G. M. "Options for Transitional Justice in Kenya: Autonomy and the Challenge of External Prescriptions</result> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  14. SUPPRESS “BORROWS” IN CHARGED AND PENDING ITEMS TABLES Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  15. VoyagerILL with RapidILL Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  16. cl_myAccount.xsl <xsl:variable name="patFN" select="page:page//page:element[@nameId='page.header.logout.link']/page:preText[1]"/> …. <xsl:key name="patrons" match="patron" use="@patName" /> <xsl:template name="displayILLLink"> <xsl:for-each select="document('/m1/…/users.xml')"> <xsl:variable name="patronID"><xsl:value-of select="key('patrons', $patFN)/@patID" /></xsl:variable> <form style="display:inline;float:left" action="http://{serverIP}/alex2clio.php" method="post" target="_blank"> <input type="hidden" name="glomf" value="{$patronID}" /> <span class="yellowBtnLeft">&#160;</span> <input class="yellowBtn" type="submit" name="sendit" value="Renew / View History" /> <span class="yellowBtnRight">&#160;</span>&#160;&#160; </form> </xsl:for-each> </xsl:template> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  17. MY ACCOUNTS PAGE REQUESTS call link, build table <xsl:key name="patrons" match="patron" use="@patName" /> <xsl:template name="displayILLItems"><div style="clear:both;margin-left:3px"><p class="subTitle"><a name="illItems"></a>ILL Items - Summary</p></div> <!-- Ken added to show CLIO link--><p><xsl:call-template name="displayILLLink"/></p> <div id="hctableDisplay"> <table id="hctableILLItems" cellspacing="0" > <tr id="hctableHeadingILLItems"> <th id="hccellILLItem">Title</th> <th id="hccellILLNo">ILL No</th> <th id="hccellILLStatus">Status</th> <th id="hccellILLReqDate">Requested</th> <th id="hccellILLRecDate">Received</th> <th id="hccellILLDueDate">Date Due</th> </tr> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  18. MY ACCOUNTS PAGE REQUESTS get CLIO data <xsl:for-each select="document('/m1/…/users.xml')"><xsl:variable name="patronEM"><xsl:value-of select="key('patrons', $patFN)/@patEmail" /></xsl:variable> <xsl:variable name="patronILL"> http://{serverIP}/ill2Alex.php?email=<xsl:value-of select="$patronEM“> </xsl:value-of></xsl:variable><xsl:for-each select="document($patronILL)/result/doc"> <tr class="{$rowClass}"> <xsl:variable name="hcillNo" select="illNo"/> <!-- store ill# from VoyagerILL--> <xsl:variable name="hcartTitle" select="artTitle"/> <!-- store artTitle --> <xsl:variable name="hcrequestType" select="status"/> <!-- store requestType --> <div style="margin-left:20px;margin-bottom:10px;font-size:.8em"> <td class="tableCell" headers="cellILLItem"> <xsl:value-of select="bookTitle" /> <xsl:if test="string-length($hcartTitle)!=0"> &#160;&#160;<xsl:value-of select="artTitle" /> </xsl:if> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  19. MY ACCOUNTS PAGE REQUESTS test PDF delivery <xsl:variable name="arielDocs“>http://{serverIP}/arielDocs.php?EMAIL= <xsl:value-of select="$patronEM“></xsl:value-of> </xsl:variable><xsl:for-each select="document($arielDocs)/result/doc"><xsl:variable name="hcStatus" select="field2"/> <!-- store status from Ariel --><xsl:variable name="hcillNum" select="field3"/> <!-- store ill# from Ariel --><xsl:variable name="hcLink" select="file"/> <!-- store filename from Ariel --> <xsl:if test="$hcillNo = $hcillNum"> <!-- Match means display link to PDF if status =0 (available) --> <xsl:if test="$hcStatus = '0'"> <br /> <a style="margin-left:5px;padding:0 3px 0 3px;border:1px solid #990000;text-decoration:none" href="http://{server}/ariel/docs/{$hcLink}" target="_blank"><img border="none" src="/vwebv/ui/en_US/images/pdf.gif"> </img></a> </xsl:if> </xsl:if> </xsl:for-each> </td> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  20. MY ACCOUNTS PAGE REQUESTS more CLIO data <td class="tableCell" headers="cellILLNo“><xsl:value-of select="illNo" /></td> <td class="tableCell" headers="cellILLStatus"><xsl:choose> <xsl:when test="$hcrequestType='RecLoan'">Charged&#160; </xsl:when> <xsl:when test="$hcrequestType='RecCopy'">Delivered&#160;</xsl:when> <xsl:when test="$hcrequestType='SHIPPED'">Shipped&#160;</xsl:when> <xsl:when test="$hcrequestType='CONDITIONAL'">Pending&#160;</xsl:when> <xsl:otherwise><xsl:value-of select="status" /></xsl:otherwise> </xsl:choose></td> <td class="tableCell" headers="cellILLReqDate“><xsl:value-of select="reqDate" /> </td> <td class="tableCell" headers="cellILLRecDate“><xsl:value-of select="recDate" /> </td> <td class="tableCell" headers="cellILLDueDate“><xsl:value-of select="dueDate" /> </td> </div></tr></xsl:for-each> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  21. MY ACCOUNTS PAGE REQUESTS get RAPID data <div style="margin-bottom:10px;font-size:.8em"><xsl:variable name="arielDocs2">http://{SERVER}/arielDocs.php?EMAIL= <xsl:value-of select="$patronEM“> </xsl:value-of></xsl:variable><xsl:for-each select="document($arielDocs2)/result/doc"> <tr class="{$rowClass}"> <xsl:variable name="hcStatus2" select="field2"/> <!-- store status from Ariel --> <xsl:variable name="hcillNum2" select="field3"/> <!-- store ill# from Ariel --> <xsl:variable name="hcPostDate" select="field4"/> <!-- store postdate from Ariel --> <xsl:variable name="hcillFile" select="file"/> <!-- store filename from Ariel --> <xsl:variable name="hcillViews" select="field5"/> <!– store times viewed Ariel --> <!-- RAPID ILL requests start with negative sign --> <xsl:if test="starts-with($hcillNum2,'-')" > Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  22. MY ACCOUNTS PAGE REQUESTS more RAPID data <!-- Match means display link to PDF if status =0 (available) --> <xsl:if test="$hcStatus2 = '0'"> <xsl:variable name="rapidData">http://{serverIP}/rapid2.cgi? <xsl:value-of select="field3“> </xsl:value-of></xsl:variable><td class="tableCell" headers="cellILLItem"> <xsl:value-of select="document($rapidData)"/> <!– Fill with citation data from RAPID SOAP service plus PDF icon --> <a style="margin-left:5px;padding:0 3px 0 3px;border:1px solid #990000;text-decoration:none" href="http://{SERVER}/ariel/docs/{$hcillFile}" target="_blank"><img border="none" src="/vwebv/ui/en_US/images/pdf.gif"/> </a> </td> <td class="tableCell" headers="cellILLNo"><xsl:value-of select="field3" /></td> <td class="tableCell" headers="cellILLStatus">Available</td> <td class="tableCell" headers="cellReqDate"></td> <td class="tableCell" headers="cellRecDate"><xsl:value-of select="field4" /></td> <td class="tableCell" headers="cellDueDate"></td> </xsl:if></xsl:if> </tr> </xsl:for-each> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  23. …finish with ARIEL data for second link <xsl:for-each select="document($arielDocs2)/result"> <xsl:variable name="loginLink"><xsl:value-of select="login" /></xsl:variable> <form style="display:inline;float:left" action="{$loginLink}" method="post" target="_blank"><span class="yellowBtnLeft">&#160;</span><input class="yellowBtn" type="submit" name="sendit" value="Manage Document Delivery" /> <span class="yellowBtnRight">&#160;</span>&#160;&#160; </form><p style="clear:both"/> </xsl:for-each> </div> </xsl:for-each> </table> CREDIT: Peter MacDonald for all style elements, css, and page /table behaviors Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  24. ARIEL <?php // arielDocs.php $baseDir = 'd:\\...\\ariel\\docs\\'; $email =$_GET['EMAIL']; // Build the xml output $xml_output = "<?xml version=\"1.0\"?>\n"; $xml_output .= "<result>\n"; $d = opendir($baseDir) or die($php_errormsg); while (false !== ($f = readdir($d))) { if (preg_match('/^ARIEL_.*CTRL/',$f)) { $fh = fopen($baseDir.$f,r) or die($php_errormsg); $s = rtrim(fgets($fh,256)); if ($s == $email) { $xml_output .= "<doc>\n"; for ($i=2; $i<=6; $i++) { $s = rtrim(fgets($fh,256)); $s = preg_replace("|--ID:il|","",$s); $s = preg_replace("|--ID:|","",$s); $s = preg_replace("|ILL:|","",$s); $xml_output .= "<field".$i.">".$s."</field".$i.">\n"; } fclose($fh) or die($php_errormsg); $f = preg_replace("|CTRL|","PDF",$f); $xml_output .= "<file>".$f."</file>\n"; $xml_output .= "</doc>\n"; $pin = preg_split("/_/",$f); } } } closedir($d); $xml_output .= "<login>http://{server}/cgi-bin/DocList.pl?PN=".$pin[1]."&amp;EM=".$email."</login>"; $xml_output .= "</result>"; echo $xml_output; ?> Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  25. RAPID ILL rapid2.cgi – SOAP service use strict;use SOAP::Lite ;my $reqNum = $ENV{QUERY_STRING};# reqNum comes in as negative number$reqNum =~ s/-//;my $soap = SOAP::Lite->new( proxy => ("http://rapid2.library.colostate.edu/rapidapi/apiservice.asmx"),uri => ("http://rapid2.library.colostate.edu/rapidapi"),on_action => (sub{join '', '', @_ }),default_ns => ("http://rapid2.library.colostate.edu/rapidapi/"), autotype => 0); Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  26. RAPID ILL next RetrieveHistory my $method = SOAP::Data->name('RetrieveHistory') ->attr({xmlns => 'http://rapid2.library.colostate.edu/rapidapi/'});my @params = (SOAP::Data->name("input" => \SOAP::Data->value( SOAP::Data->name("UserName" => 'yhm'), SOAP::Data->name("Password" => ‘{password}'), SOAP::Data->name("RequestingRapidCode" => 'yhm'), SOAP::Data->name("RequestingBranchName" => 'Main Library'), SOAP::Data->name("RequestId" => SOAP::Data->value($reqNum) )) )); Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  27. RAPID ILL then parse/format result my $result = $soap->call($method => @params);my $data = $result->valueof('//RetrieveHistoryResponse/RetrieveHistoryResult/JournalTitle');$data .= ". Vol ";$data .= $result->valueof('//RetrieveHistoryResponse/RetrieveHistoryResult/JournalVol');$data .= " (";$data .= $result->valueof('//RetrieveHistoryResponse/RetrieveHistoryResult/JournalYear');$data .= "); pp: ";$data .= $result->valueof('//RetrieveHistoryResponse/RetrieveHistoryResult/JournalPages');$data .= " ";$data .= $result->valueof('//RetrieveHistoryResponse/RetrieveHistoryResult/ArticleTitle');$data =~ s/-eoa/- /g;$data =~ s/-EOA/- /g;$data =~ s/\<|\>//g;print "Content-type: text/xml\n\n<result>".$data."</result>"; exit(0); NOTE: oXygen XML Editor contains an invaluable WSDL SOAP Analyzer tool Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

  28. exit; // Thank You! // kherold@hamilton.edu Ken Herold Hamilton College 9-10 Mar 2011 ExLibris Chicago Developer - Developer

More Related