430 likes | 553 Vues
This presentation explores the customization of the Horizon Information Portal (HIP) for the Hennepin County Library's 26 branches, highlighting the migration from Dynix to Horizon. We address the differences in search interfaces for staff and the public, key functionalities for the Reference Desk, and the challenges posed by the overlap in tasks between Reference and Circulation. Key aspects include the use of XSLT and SQL in customization, data handling, and the need for staff profiles that differ from public access. Our goal is to enhance staff efficiency and improve customer service.
E N D
Creating a Customized HIP for Reference Staff Phil Feilmeyer Hennepin County Library CODI 2005
Backdrop • HIP 3.06a, Windows 2003 • Horizon 7.3.3 • HCL is a single library with 26 branches • Each branch has a HIP profile, but they are essentially identical • Decision-making aspects of customization are centralized • Experience with XSLT, SQL, Web design/graphics, Web Application development • Previous CODI presentations on customizing XSL stylesheets available at: http://www.hclib.org/extranet and http:www.hclib.org/extranet/MorePresentations.html
Backdrop • Migration from Dynix with extensively customized HIP to Horizon, September 2004 to August 2005
Backdrop • Evaluation of the client search interface • Catalog interface much different for staff and public • Team identified essential functionality for Reference Desk interface • Blurry line between Ref and Circ Desk tasks • Reduce introduction of bad data by untrained and/or creative staff • Perceived reduction in level of customer service
Horizon Migration • Evaluation of the client search interface • Catalog interface much different for staff and public • Team identified essential functionality for Reference Desk interface • Blurry line between Ref and Circ Desk tasks • Reduce introduction of bad data by untrained and/or creative staff • Perceived reduction in level of customer service
Searching/Display Item detail Update item status Special indexes Borrower records* View details Reset PIN Update address/phone Requests View title request list Change pickup location Place request* Cancel request* Shuffle queue Convert item-specific to any-copy *Login to My Account without barcode or PIN Reference Desk Tasks not covered in HIP
Separation of Staff and Public • Each branch has two HIP profiles, one for public and one for staff • Staff profile code same as public preceded by an underscore • Public: ap • Staff: _ap • Staff profiles don’t require a PIN • Profile codes used to differentiate between Staff and Public in the XSL stylesheets • Same XSL stylesheets used for both
$isStaffProfile In each of the root stylesheets <xsl:variable name="isStaffProfile"> <xsl:if test="starts-with(//profile, '_')">true</xsl:if> </xsl:variable> To implement a difference between Staff and Public <xsl:choose> <xsl:when test="$isStaffProfile = 'true'"> [code for staff catalog] </xsl:when> <xsl:otherwise> [code for public catalog] </xsl:otherwise> </xsl:choose>
Types of Customizations • All require customizing the XSL stylesheet to change source HTML based on $isStaffProfile • Adding data elements to the XML using the HIP Admin tool • Adding data elements NOT available through the Admin tool and XML • Link to custom web applications that interact directly with Horizon database
HIP Admin + XSL Customization <td> <xsl:value-of select="$status"/> <xsl:if test="$isStaffProfile = 'true'"> <br/> <xsl:value-of select="$status_set"/> </xsl:if> </td>
Data not available from the XML Borrower ID, but no barcode number in the XML
Data not available from the XML • Custom java function in the XSL Processor that pulls in content from a web page • written by Casey Durfee, Seattle Public Library • http://extranet.spl.org/rss-0.5.zip • Instructions: getURL.txt • Code: Utils.jar (in the optional folder) • Create a custom web application to deliver the desired information • Perl CGI and/or ColdFusion • Use SQL to pull data from Horizon database
Data not available from the XML getbbarcode.cfm <cfparam name="borrowerID" default=""> <cfquery datasource="Horizon_Staff" name="getbbarcode"> select bbarcode from borrower_search_cf_view where borrower## = #borrowerID# </cfquery> <cfoutput query="getbbarcode">#bbarcode#</cfoutput>
Data not available from the XML toolbar2.xsl <td> <xsl:value-of select="//security/name"/> <xsl:if test="$isStaffProfile = 'true'"> <xsl:variable name="url"> http://hzapps:8080/getbbarcode.cfm?borrowerID= <xsl:value-of select="//security/patronid"/> </xsl:variable> <br/> <xsl:value-of select="Utils:getURL($url)"/> </xsl:if> </td>
Data not available from the XML Taking this technique to extremes… getSummaryViewData?bibID=1099918&loc=rd numRequests=24+checkedIn=here+refRent= all~509~ref~0~bsx~0~onorder~0~+reqData= 491~491+onOrder=0+ldr06=a+ldr07=m+desc00=+desc01=+desc04=+fixed21= +fixed23= +URL= +niceTitle=Harry Potter and the half-blood prince
Data not available from the XML numRequests=24 checkedIn=here copies=all~509~ref~0~bsx~0~onorder~0 reqData=491~491 onOrder=0 ldr06=a ldr07=m desc00= desc01= desc04= fixed21= fixed23= URL= niceTitle=Harry Potter and the half-blood prince getSummaryViewData?bibID=1099918&loc=rd
Link to Custom Web Applications • Direct link via <a href=…> • Form submission via <form action=…>
Direct link via <a href=…> getrequests.cfm?bib=1088720
Direct link via <a href=…> getrequests.cfm <cfparam name="bib" default=""> <cfquery datasource="Horizon_Staff“ name="getHolds"> SELECT * FROM request WHERE bib## = #bib# and request_status not in (3,6) ORDER BY bib_queue_ord </cfquery>
Direct link via <a href=…> fullnonmarcbib.xsl <a> <xsl:choose> <xsl:when test="($requests > 0) and ($isStaffProfile = 'true')"> <xsl:attribute name="class"> <xsl:value-of select=“$css_small_bold_anchor"/> </xsl:attribute> <xsl:attribute name="href"> http://hzapps:8080/getrequests.cfm?bib= <xsl:value-of select="$bibkey"/> </xsl:attribute> </xsl:when> <xsl:otherwise> <xsl:attribute name="class"> <xsl:value-of select="$css_bold_black_font1"/> </xsl:attribute> </xsl:otherwise> </xsl:choose> Current Requests: <xsl:value-of select="$requests"/> </a>
Form submission via <form action=…> <form name=“ipac”> [code for regular HIP login form] </form> <form name=“NameToBarcodeLookup” action=“http://hzapps:8080/barcodeLookup.cfm”> [custom code for name keyword lookup form] </form>
Security • Separation of staff and public catalogs, helper services • public, universally available • staff, restricted to secure internal network • separate HIP servers • separate database users/permissions for custom applications
Security • Authentication • Staff Catalog cookie • must be from a staff workstation with an internal IP address • username/password • Javascript added to the five root XSL stylesheets to check for the cookie • Tests for cookie (“onLoad”) • Pass, on to the catalog • Fail, redirect to the public catalog
SQL Help • Use Horizon client in debug mode to see the SQL used for a task • Ctrl-Alt-Shift-D
SQL for Change Pickup Location 01-LCH.GUI: 01-LCH.GUI: Nov 6, 2005 06:39:58 01-LCH.GUI: Client version 7.3.200.14 01-LCH.GUI:'HZDEBUG = Comment, DbCommand 01-LCH.GUI:'HZPHASE = GENERAL 01-LCH.GUI: begin tran 01-LCH.GUI: select request#, item#, borrower#, request_date, request_status, hold_exp_date, comment, on_hold_date, expire_date, fill_date, fill_location, pickup_location, reactivate_date, copy_request, timestamp /* kludge */ from request where request# = 402463 for browse 01-LCH.GUI: update request set pickup_location = "ap" where (bib# = 494574) and (bib_queue_ord = 5) and tsequal(timestamp, 0x00010000a62a5e95) 01-LCH.GUI: select distinct table_name, keyCols = convert (varchar (255), null), dbServerColsBkt = convert (int, null) from synch_table where enabled = 1 order by table_name 01-LCH.GUI: commit tran
Creating a Customized HIP for Reference Staff Phil Feilmeyer, Hennepin County Library http://www.hclib.org/extranet pfeilmeyer@hclib.org http://www.hclib.org/catalog CODI, November 2005