Andornot Consulting
Tuesday, August 17, 2010 11:19 AM

Ottawa Hospital Library Launches Inmagic Genie

by Jonathan Jacobsen

The Ottawa Hospital Library is the latest Andornot client to launch Genie (part of the Inmagic DB/Text Library Suite).

Ottawa_Hospital_Library_Catalogue_Search_Results2 The hospital library serves both hospital staff and patients from multiple locations in Ottawa. Previously, staff used several separate DB/Textworks databases to manage collections of materials for these different audiences and locations. In moving to Genie, these databases were consolidated into the single Genie Catalog to simplify access.

Most of the data conversion, including mapping of fields and converting data into the Genie databases, was done by librarian Risa Shorr. As an experienced DB/TextWorks user, Risa was able to see the similarities between her databases and those used by Genie, and use the features available in DB/TextWorks to move the data over. Andornot provided guidance and recommendations as needed.

"The combination of expertise between Andornot and Risa meant that our move to Genie was cost effective. Andornot was extremely supportive of the collaborative approach to installing and customizing Genie to meet our needs," says Margaret Quirie, Director, Library Services.

With Genie launched for library staff, the library asked Andornot to develop a new OPAC for hospital staff and patients. The new OPAC is based on the Andornot Starter Kit and features:

  • quick and advanced search screens for all library materials;
  • a specific search screen for patients, targeted just at those materials they may access;
  • Andornot extras such as Google style search syntax with automatic ANDing of terms and stemming of words, plus enhanced navigation and display options;
  • automatic display of the five most recent additions to the catalog on the Quick Search page, and a link to a canned search showing the latest materials;
  • tick boxes to allow users to mark items as they find them, then submit a request to the library for those materials indicating their preferred pickup location, or email a copy of the list to themselves or a colleague, or save or print the list;
  • icons in the search results to help users more easily identify the types of materials in their search results;
  • Google Book Covers and links to more information on titles in the Google Books database; and
  • “permalinks” and a Share button to expedite bookmarking of records and sharing with colleagues via social networking services.

View the new OPAC here.

The library often has multiple copies of a title, in different locations. As a result of the data conversion, these are represented as individual records in the Genie Catalog textbase (rather than a single Catalog record with multiple Item records). This is quite a common occurrence after a data conversion, and while it’s possible to clean it up, in this case it was simpler to modify the OPAC to group records by title, but still show the edition and location information for each individual record.

The Google Book Covers have been a particularly well-received feature, with users remembering books based on the cover they saw.

Please contact Andornot for more information on Genie, the Andornot Starter Kit, and our consulting services.

Thursday, June 03, 2010 5:15 PM

Link a Genie Borrower to their Loans, Reserves, Orders and Routed Serials

by Jonathan Jacobsen

Genie’s MyGenie feature is a great way for a user to log in and view their active loans, reserves, orders and routed serials. But what if a library staff member wants the same at-a-glance snapshot of a borrower? Currently, the Genie Borrower full record display shows the Borrower’s contact information and the serials routed to them, but not their active loans, reserves or orders. However, with some additional entries in the MyReports.config file, you can create hyperlinks to bring up this information with a single click.

Genie_Borrower_Full_with_links Each hyperlink is essentially a pre-created search into the appropriate Genie module (loans, serials, orders and reserves) to find records for the selected borrower. It’s the same as going to that module and searching for that borrower, but reduced to a single click!

To add these links to your Genie Borrower full record display, open the MyReports.config file in a text editor such as Notepad++ (making a backup of your existing copy first, of course) and scroll to the BorrowerFull report. Add the following lines after all the other fields in the report:

<Field Display="&lt;br/&gt;&lt;b&gt;View More Information for this Borrower&lt;/b&gt;">%%Label</Field>

<Field Name="BorrID" Display="" Header="&lt;a href=&quot;reserves_report.aspx?TN=Reserves&amp;QY=find%20(ResStatus%20%3Dactive)%20and(ResBorrID%20ct%20" Footer=")&amp;MR=20&amp;NP=255&amp;RL=0&amp;DL=0&amp;CS=0&amp;AC=QBE_QUERY&quot;&gt;Active Reserves&lt;/a&gt;" />

<Field Name="BorrID" Display=" " Header="&lt;a href=&quot;loans_report.aspx?TN=Loans&amp;QY=find%20(LoanBorrID%20ct%20" Footer="%20not%20(LoanDateReturned%20%3D*)&amp;MR=20&amp;NP=255&amp;RL=0&amp;DL=0&amp;CS=0&amp;ReportName=LoansByBorrower&amp;AC=QBE_QUERY&quot;&gt;Active Loans&lt;/a&gt;" />

<Field Name="BorrID" Display=" " Header="&lt;a href=&quot;orders_report.aspx?TN=Orders&amp;QY=find%20(OrdStatus%20%3Dnew)%20and(OrdReqID%20ct%20" Footer=")&amp;MR=20&amp;NP=255&amp;RL=0&amp;DL=0&amp;CS=0&amp;AC=QBE_QUERY&quot;&gt;Active Orders&lt;/a&gt;" />

<Field Name="BorrName" Display=" " Header="&lt;a href=&quot;serials_report.aspx?TN=Serials&amp;QY=find%20(SerRouteList%20%3D" Footer=")&amp;MR=20&amp;NP=255&amp;RL=0&amp;DL=0&amp;CS=0&amp;AC=QBE_QUERY&amp;ReportName=SerialsRouteMaint&quot;&gt;Serial Routing Lists&lt;/a&gt;" />

The first line is a heading and the next four are each a canned query, using one of the Borrower fields (either BorrID or BorrName) as a parameter. Some of the queries include other parameters, like limiting reserves, loans and orders to active ones only, and specifying which Genie report to use to display the results.

If you prefer not to have each link open the results in a new browser window or tab, just remove

target=&quot;_blank&quot;

from each line.

The Serial Routing Lists link in the above duplicates the Manage routing lists for this borrower link that may already be present on the Borrower full display, so you may wish to disable that by setting ShowManageRouteListLink=”false” in the BorrowerFull report header.

Please feel free to contact us for assistance adding these lines to your Genie MyReports.config file, or customizing them further.

Thursday, June 03, 2010 8:20 AM

Copying an older Genie OPAC report design

by Kathy Bryce

I was working with a long-time Genie client yesterday who was getting very frustrated that a new report for her Genie OPAC was not showing selected fields. She had scrutinized the code over and over again, checking that she had the syntax right. To create this new report she had copied the code from an existing report, which usually is a great idea. However in this case the report dated from an early version of Genie and referenced Form="GenieBrief" in the first line. In older versions of Genie, you needed to put any fields that you wished to show in a brief OPAC display into a TextWorks form called GenieBrief. Hence her report showed obvious fields like Title etc. but not CatSerHoldings, which is the one she wanted to add. We removed the Form="GenieBrief", reset Genie and the field was then visible.

Wednesday, May 12, 2010 10:10 AM

Adding Google Analytics without touching your site

by Ted Jardine

I had a problem: Kathy and Denise wanted Google Analytics configured for our demo Genie site that can be found at http://genie.andornot.com. However, Genie doesn't provide an easy way to centrally add the couple lines of Google Analytics code to every page served up by the application. For that matter, neither does any WebPublisher PRO site right out-of-the-box (easy-peasy though if we're using ASK and our WebPubResults control).

You might also have the same problem: you recognize that having multiple means of tracking and analyzing your site's traffic is no longer optional. However, while you've got server log file analysis handled (we use SmarterStats for all our hosted clients) your site doesn't have a single central place (such as site-wide central templates) to easily integrate a javascript-based page tagging solution such as Google Analytics.

So what do we do? Instead of updating 10s if not 100s or 1000s of files manually one-by-one (crossing my fingers that I could find them all) and hoping my code wouldn't need to change anytime soon, I came up with a modified version of the Web Analytics Tracking Module available on Microsoft's IIS.net site. Now, with a little elbow grease for initial server setup (seriously, not very much elbow grease at all), turning on site tracking for any site on our servers is simply a matter of placing a DLL in our application's bin directory, and adding a couple lines to our site's Web.config. Sweet.

Why not just use the original IIS.net Web Analytics Module?

Before jumping in and explaining how to set everything up, I should explain that I needed create my own custom build of the module because the module on IIS.net only works under IIS 7's integrated pipeline, not under IIS 7's classic pipeline (which Genie needs to run under) or IIS 6. The required changes ended up being relatively minor:

  1. Modified the ReadModuleConfiguration method in WebAnalyticsHttpModule.cs to the following:
  2. /// <summary>
    
    /// Reads the module specific configuration properties
    
    /// </summary>
    
    /// <param name="context"></param>
    
    /// <returns>Boolean indicating the success/failure</returns>
    
    private bool ReadModuleConfiguration(HttpContext context)
    
    {
    
         try
    
         {
    
             ConfigurationSection section = null;
    
             if (HttpRuntime.UsingIntegratedPipeline)
    
                section = WebConfigurationManager.GetSection(context, "system.webServer/webAnalytics", typeof(WebAnalyticsSection));
    
             else
    
                section = WebConfigurationManager.GetSection(context, "system.web/webAnalytics", typeof(WebAnalyticsSection));
    
              if (section != null)
    
                 _webAnalyticsModuleConfig = (WebAnalyticsSection)section;
    
         }
    
         catch (Exception)
    
         {
    
             return false;
    
         }
    
           return _webAnalyticsModuleConfig != null;
    
        }
    
    }
  3. Add the classic pipeline <system.web>/<webAnalytics> schema to WebAnalytics_schema.xml:
  4. <sectionSchema name="system.web/webAnalytics">
    
        <attribute name="trackingEnabled" type="bool" defautlValue="false"></attribute>
    
        <attribute name="trackingScript" type="string"  defautlValue="This is a default text"></attribute>
    
        <attribute name="insertionPoint" type="enum" defaultValue="body">
    
            <enum name="head" value="0" />
    
            <enum name="body" value="1" />
    
        </attribute>
    
    </sectionSchema>
    
  5. To make sure there's no versioning conflicts, I updated the Assembly's version to v1.1 in AssemblyInfo.cs (note the v1.1 references in the instructions below as opposed to v1.0):
  6. [assembly: AssemblyVersion("1.1.0.0")]
    
    [assembly: AssemblyFileVersion("1.1.0.0")]

 

Configure your server (one time only)

  1. Register the WebAnalyticsModule.dll in the GAC (for shiny stuff in the IIS 7 Manager GUI).

    gacutil -if WebAnalyticsModule.dll
  2. Copy the WebAnalytics_schema.xml to "%windir%\system32\inetsrv\config\schema" folder.
  3. Add the following section definition to the "%windir%\system32\inetsrv\config\applicationhost.config" file in the sectionGroup for "system.webServer"
  4. <section name="webAnalytics" overrideModeDefault="Allow" />
  5. Add the module to the IIS Manager configuration by adding to two collections in the "%windir%\system32\inetsrv\config\administration.config" file:
    • Add the following to the moduleProviders collection:
    • <add name="WebAnalytics" type="WebAnalyticsModule.WebAnalyticsProvider, WebAnalyticsModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=c6b7132bcfe43312" /> 
      
    • Add the following to the modules collection:
    • <add name="WebAnalytics" />


web-analytics-tracking-in-iis
Web Analytics Tracking now directly available in IIS 7 Manager (at least for sites running under Integrated Pipeline).

 

Configure your site/s

For each site you wish to have Google Analytics enabled on (or any other script/text/html you wish to have run on every page in the site), enable it according to the following instructions (slightly different for different flavours of IIS/pipeline).

IIS 7 Integrated Pipeline

  1. Place the same WebAnalyticsModule.dll in your application's bin directory or reference the GAC version via the Web.config's <system.web>/<compilation>/<assemblies> element.
  2. Add the module to the <modules> element in your Web.config. This can be done through the IIS Manager, but it's easier to simply add it directly in the Web.config:
  3. <modules>
    
      ...
    
      <add name="WebAnalytics" type="WebAnalyticsModule.WebAnalyticsHttpModule, WebAnalyticsModule, Version=1.1.0.0, Culture=neutral, PublicKeyToken=c6b7132bcfe43312" />
    
    </modules>
  4. Specify the script/text you wish to have inserted and the location to insert it at. Again, this can be added directly in the Web.config. However, because the actual script/text needs to be encoded in order to keep your config file from going boink, it's a lot easier to just use the GUI.

  5. web-analytics-tracking-in-iis-configuration
    Easy configuration within the IIS 7 Manager GUI, including properly encoding the script for the Web.config (safe for XML).

    Enabling the above adds a <webAnalytics> element to the <system.webServer> section, looking something like (note the encoding):
    <webAnalytics trackingEnabled="true" trackingScript="&lt;script type=&quot;text/javascript&quot;>&#xD;&#xA;  var _gaq = _gaq || [];&#xD;&#xA;  _gaq.push(['_setAccount', 'UA-494411-1']);&#xD;&#xA;  _gaq.push(['_setDomainName', '.andornot.com']);&#xD;&#xA;  _gaq.push(['_trackPageview']);&#xD;&#xA;  (function() {&#xD;&#xA;    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;&#xD;&#xA;    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';&#xD;&#xA;    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);&#xD;&#xA;  })();&#xD;&#xA;&lt;/script>" insertionPoint="head" />

 

IIS 7 Classic Pipeline

Exactly the same as the IIS 7 integrated pipeline instructions above, with the following changes:

  1. Add the module reference to the classic pipeline specific <system.web>/<httpModules> section instead of the <system.webServer>/<modules> section.
  2. Make it easy for yourself, and add the script-specific settings (as in step 3 above) via the GUI in order to make sure it's all encoded properly, but then move/copy the resulting <webAnalytics> element from <system.webServer> (IIS 7 integrated pipeline specific) to <system.web>.
  3. Add the following to the <configuration>/<configSections> element in your Web.config (there should be a better way to add another sub-section to the already defined <system.web> declaration in the <configSections> element, so let me know in the comments if you know what it is):
  4. <sectionGroup name="system.web" type="System.Web.Configuration.SystemWebSectionGroup, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> 
    
        <section name="webAnalytics" type="WebAnalyticsModule.WebAnalyticsSection, WebAnalyticsModule" /> 
    
    </sectionGroup> 
    

Caveat: as your app is running under classic pipeline, not all text/html resources are running through ASP.NET, and therefore, if you have for i.e. .html and/or .asp pages you want the script automatically added to, you will need to map those extensions to also route through the ASP.NET runtime. Pretty standard classic pipeline stuff: without doing so, only pages with the .aspx extension will have the script added.

 

IIS 6 (Classic Pipeline)

I haven't tested it, but I see no reason why it won't work with the same set up as IIS 7 Classic Pipeline, with the same caveats.

Notes:

  1. As you might have guessed, you can automatically insert *anything* using this module, as long as you don't mind it inserting just before the closing </head> tag or the closing </body> tag. Copyright statements, survey scripts, "Ted wuz here" alerts for every page...if you think of it, you can do it!
  2. Again, the fancy GUI stuff doesn't help you in classic pipeline scenarios (other than an XML-encoding aid as described above).
  3. Typically you want to register scripts as close to the end of your page as possible (various technical performance and usability reasons). However, Google Analytics' latest scripts have a "push" functionality making this a moot point: so register the latest scripts right before the closing </head> tag. See the "Asynchronous Tracking Usage Guide" for more information.

Different web analytics packages have different strengths and weaknesses, and it's only with multiple different perspectives on your site traffic that you even begin to get a clear picture of what is really happening with your site. Using this web analytics module makes it even easier to add and maintain a page tagging solution on your site.

 

Download

I'd like to just directly link to my compiled DLL and schema file of the module, but unfortunately, it's not at all clear what licensing model is associated with the original module (although it's clear from his article explaining the module, that Microsoft's Ruslan Yakushev intends for us to use it). Therefore, I'll be requesting clarification on this issue, but in the meantime, just download the source code from the original article and make the quick modifications as described above. If you have problems doing so, or you want help deploying it for your site, drop us a line.

Tuesday, April 06, 2010 1:43 PM

Printing Single Labels in Genie

by Jonathan Jacobsen

Many of our Genie clients have asked how they can print just one label for a book from the Genie catalogue when they have several Item records. Typically, when selecting a Catalogue record, adding it to the InfoCart, and printing labels, a label for each Item record is produced. This is fine when initially adding multiple copies of a work to your collection, but if you later add another copy, you really only need to print a label for that additional copy.

A sharp-eyed Genie user noticed this entry in the Genie Technical Notes (p. 33 of the Genie 3.3 version):

Attribute

Required

Default

Explanation

ItemCallNumberRequired

No

"false"

If set to "true", only the labels with nonempty ItemCallNumber field values will be printed.

"Ah-ha!" we said. "This could be the answer."

For this client, we edited the label report in MyLabels.config to add ItemCallNumberRequired="true" to the label definition, and ensured the ItemCallNumber field (rather than the CatCallNumber field) was on the spine label area of the label. Their existing Item Records don't have call numbers in the ItemCallNumber field, only the CatCallNumber field in the Catalogue record. As they add additional copies of works already in the Catalogue, they will enter a call number in the ItemCallNumber field. With the changes made to the label format, a label will be generated for just that one new copy. Brilliant! And with the Edit link added to the InfoCart (described in this blog post), they can quickly fix errors in records before printing the label.

This won't work quite as well for everyone though. If you already have call numbers in Item records, a label will still be generated for all of them. Nonetheless, it's good to have an option that can be adapted to other situations.