IGELU 2012 Zurich - 12 September 2012 Reports in a complex enviroment Zeno Tajoli – z.tajoli@ cineca.it 12.Sep.2012 Main points • • • • • • More Modules ? To use cron Retrieve from BIB Retrieve from ADM Display with Excel Util e and GUI 12.Sep.2012 More Modules ? • The language used: perl 5.8.x • Two perl on Aleph500: – OS perl – Perl installed with Aleph500 • You can use both • Perl installed with Aleph500 has more modules that SUN or RHEL perl 12.Sep.2012 More Modules ? • Useful extra modules: – Unicode::Lite – Convert::Translit • Sun solution: – Install a third perl (like /usr/local/bin/perl) • RHEL solution: – Add modules to OS perl with CPAN 12.Sep.2012 To use cron • • • • Better to not repeat tasks Cron is not the command line Cron is a different enviroment So you need to configure it to have the same results • Our solution [ crontab –l ] 12.Sep.2012 To use cron #List serials 34 10 31 12 * csh -c "/exlibris/aleph/list.csh" > /tmp/log18 -c [script] reads commands from the specified script file 12.Sep.2012 #!/bin/csh source /exlibris/aleph/.cshrc source /exlibris/aleph/a20_1/alephm/.cshrc source /exlibris/aleph/u20_1/alephe/aleph_start source $aleph_proc/def_local_env set user = aleph setenv LOGNAME aleph cd /exlibris/aleph/serials /exlibris/aleph/serials/list_serials.pl <params> 12.Sep.2012 Retrieve from BIB • Cataloguers have insert data in bib records instead of ADM records • Elaborate a bibliography – Extract with p-ret-01 and p-print-03 – Tuning tab expand – As format: “MARC with alphanumeric tags” – Do you need a fix routine ? – Or a character conversion ? 12.Sep.2012 use MARC::Batch; #Work one record at time my $batch = MARC::Batch->new( 'USMARC', $input_file ); $batch->warnings_off(); $batch->strict_off(); RECORD: while () { my $record; eval { $record = $batch->next() }; if ($@) { print ERRFILE "Bad MARC record " . $records_read . ": skipped.\n"; next; } last unless ($record); $records_read++; list_serials($record); } 12.Sep.2012 sub list_serials{ my $record = shift; my $tipo =''; my $ldr = $record->leader(); my $id = $record->field('001')->data(); eval{$tipo = $record->field('200')->subfield("b")>data()}; if ($@) {$tipo = ''}; my @arr958 = $record->field('958'); 12.Sep.2012 if ((substr($ldr,5,3) eq 'nas') and (length($tipo)< 1)){ my $presenza_subs = 0; foreach my $campo (@arr958){ my $dato = $campo->subfield('a'); if (length($dato)>1){ $dato = substr($dato,0,3); if (length($dato)>1){ $presenza_subs++; $dato =~ s/\://g; $dato =~ s/\s//g; my $i = $subs_presenti{$dato}; if ($i<1){ $subs_presenti{$dato} = 1; }else{ $i++; $subs_presenti{$dato}= $i; }; } } } if ($presenza_subs > 0){$contatore_serials_globale++} 12.Sep.2012 sub send_avviso{ use MIME::Lite; my $val_subject = $_[0]; my $val_body=$_[1]; my $msg=MIME::Lite->new( From=>'list_ser@opac.myuser.it', To=>‘mymail@cilea.it', Subject=>$val_subject, Type=>'multipart/mixed'); $msg->attach(Type=>'TEXT',Data=>$val_body); $msg->attach(Type=>'text/plain', Path=>"/exlibris/aleph/lista.dat", Filename=>"lista.dat", Disposition=>'attachment'); MIME::Lite->send('smtp', 'localhost', Timeout=>60); $msg->send; }; 12.Sep.2012 Retrieve from ADM • You retrieve data from Oracle • DBI, Unicode::Lite • Read the Oracle documentation from Doc Portal • Explore data with Oracle SQL Developer • Setup the oracle environment in the scripts 12.Sep.2012 Retrieve from ADM • A selection: $ENV{ORACLE_OWNER} = "oracle"; $ENV{ORACLE_VERSION} = "11"; $ENV{ORACLE_SID} = "aleph20"; $ENV{ORACLE_BASE} = "/exlibris/app/oracle"; $ENV{ORACLE_HOME} = "/exlibris/app/oracle/product/11"; $ENV{ORACLE_CONF} = "/exlibris/aleph/ora_aleph"; • Use printenv to see 12.Sep.2012 Retrieve from ADM • Order and group data with ORDER BY and GROUP BY $piano_sql = qq{ select z305_rec_key from xxx.z305}; $sel_ids = $lda->prepare($piano_sql); $main::sel_ids->execute(); my $ref_arr_ids = $sel_ids->fetchall_arrayref(); foreach my $row(@$ref_arr_ids){ my ($idz305) = @$row; 12.Sep.2012 select count(z35_rec_key), z35_sub_library from z35 where Z35_event_date like '2011%' and (z35_event_type = '71' OR z35_event_type = '71' OR z35_event_type = '72' OR z35_event_type = '73' OR z35_event_type = '74') group by z35_sub_library; 12.Sep.2012 select z36h_sub_library, count(z36h_rec_key) from z36h where z36h_item_status = '20' AND Z36h_LOAN_DATE between '20120101' and '20121231' group by z36h_sub_library select z36_status, count(z36_rec_key) from z36 where z36_sub_library = 'BF ' AND Z36_LOAN_DATE between '20120101' and '20121231' group by z36_status 12.Sep.2012 • select z305_bor_status, count(z305_rec_key) from z305 where z305_rec_key like '%FIL ' group by z305_bor_status; • In a for cicle with all sublibraries • With a translation for bor status 12.Sep.2012 Display with Excel • • • • SYmbolic LinK (SYLK) format http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) http://wiki.tcl.tk/9800 http://netghost.narod.ru/gff/graphics/summary/mic sylk.htm • It’s plain text • Quick and dirty 12.Sep.2012 Display with Excel • Column name with bold • • • • • • Formatting values Format dates Excel and Calc (LibreOffice) Selected ten years ago Now better Open Document Format (XML) http://standards.iso.org/ittf/PubliclyAvailableStandar ds/c043485_ISO_IEC_26300_2006(E).zip 12.Sep.2012 Util e and GUI • Util e 15 and 16 are like cron – Setup time and parameters – Open when Aleph is open # From p_custom_01 source $aleph_proc/def_local_env start_p_generic_proc /exlibris/aleph/repotes.pl echo "Fine lavori" exit: bl_end rm_f_symbol exit 12.Sep.2012 Util e and GUI • From Doc Portal: – How to make a home made custom service (19+) – How_to_add_additional_privileges_to_user_funct ion_lng • You can use GUI to: – Send parameters – Send time – Use task Manager – Setup permission 12.Sep.2012