OUS / Benachrichtigung bei Bereitstellung einer Fernleihe Schematische Darstellung & Scripts / UB Rostock / Stand: 31.08.2011 - v004 1) Schematische Darstellung des Ablaufs Ablaufschritt / Script 1. sybase / crontab 2. hro<ILN>_read_userdat09_start_script hro<ILN>_read_userdat09_result_script Beschreibung > Prozess zur Generierung der Info-Mail wird 1x täglich gestartet > Script ermittelt via SQL-Abfrage hro<ILN>_read_userdat09_usr_sql alle Benutzer, für die eine Fernleihe bereitliegt > Daraus wird eine ausführbare Datei hro<ILN>_read_userdat09_result_script generiert, die mit Ihrer Ausführung für alle selektierten Benutzer den Text generiert und per E-Mail sendet > Zur Protokollierung wird eine E-Mail an den LBS-Admin gesendet > Script erzeugt zu versendende E-Mails inkl. Titeldaten mit dem SQL-Template hro<ILN>_read_userdat09_text_sql und versendet sie > Dazu wird im SQL-Template die jeweilige address_id_nr des Benutzers eingetragen und per SQL-Abfrage (isql) der Text inkl. der Liste der betreffenden Titel erstellt 2) Ergebnismail Informationsservice Universitätsbibliothek Rostock und Bibliotheken im Ausleihverbund Betreff : Ihre Fernleihbestellung ist eingetroffen Wir möchten Ihnen mitteilen, dass über Fernleihe bestellte Medien für Sie eingetroffen sind und zur Abholung innerhalb der nächsten 14 Tage oder zur Einsicht im Lesesaal bis Fristende bereit liegen. Liste der betreffenden Medien: -------------------------------------------------------------------------Bestellnr/Kurztitel: A102568790 / Meister Bertram Barcode/Signatur: 28$012023590 / 28-FL:SB Berlin 129074113010 Fällig am: 03-08-10 Bestellnr/Kurztitel: A102563861 / Francois de Cuvillies Barcode/Signatur: 28$005676037 / 28-FL:UB Hannover 89104534001 Fällig am: 03-08-10 Bestellnr/Kurztitel: A102521832 / Zisterzienser und ihre Barcode/Signatur: 28$008865361 / 28-FL:ULB Halle 310000208612 Fällig am: 03-08-10 -------------------------------------------------------------------------Sie können Ihre Nutzerdaten unter der folgenden Adresse einsehen : https://katalog.ub.uni-rostock.de/loan/DB=1/LNG=DU/USERINFO_LOGIN Mit freundlichen Grüßen Ihre Bibliothek 1 3) Verwendete Scripts sybase / crontab: 00 05 * * * /global/sybase/com/hro62_read_userdat09_start_script batch hro62_read_userdat09_start_script #!/bin/ksh # # hro<ILN>_read_userdat09_start_script # Scriptgenerierung aus LBS-Datenbank mit SQL-Script # ---------------------------------------------------------# historie: # 06.07.10 - created, j.s. - ub hro # # Parameter: $1 = MODE # ---------------------------------------------------------# ---------------------------------------------------------# Parameter fuer Ausfuehrung setzen # ---------------------------------------------------------# Steuerung # --------SCRIPTID=09 ILN=62 MODE=inter COLUMNWITDH=300 SYBASEUSR=ro-user SYBASEUSRPW=passwd [email protected] SLOG="ill reminder service" # # # # # # # # eindeutige Script-Identifikationsnummer ILN Ausfuehrungsmode batch oder inter(aktiv) Spaltenbreite fuer SQL-Text RO-User LBS-Datenbank Passwort fuer RO-User LBS-Datenbank Empfaenger LOG-File Suject fuer LOG-File # Verzeichnisse # ------------SCRIPTDIR=$HOME/com TMPDIR=$HOME/tmp LOGDIR=$HOME/log # Dateien # ------SQLUSR=hro${ILN}_read_userdat${SCRIPTID}_usr_sql # SQL-Script Nutzerliste SQLTEXT=hro${ILN}_read_userdat${SCRIPTID}_text_sql # SQL-Script Text an Nutzer RESULTSCRIPT=hro${ILN}_read_userdat${SCRIPTID}_result_script # Auszufuehrendes ResultScript MAILTMP=mailtmp_${ILN}_${SCRIPTID}_user_ # fuer Generierung temp. File fuer Mailversand LOGFILE=mailtmp_${ILN}_${SCRIPTID}_log.txt # Logfile SEDSCRIPT=hro_remind_ous_sedscript # sed-Script zum Bearbeiten der SQLAusgabe Nutzerliste # ---------------------------------------------------------# LOGFILE an Administrator senden CR_SUBJECT() { { echo "From: sqlscript" echo "Subject: SQL-LOG_${ILN}: hro${ILN}_read_userdat${SCRIPTID} - ${SLOG}" echo "\nSQL-LOG: hro${ILN}_read_userdat${SCRIPTID} - ${SLOG}\n" echo "Mail-Script fuer reminder service erzeugt und ausgefuehrt: $SCRIPTDIR/$RESULTSCRIPT" echo echo "SCRIPT:" echo "---------------" cat $SCRIPTDIR/$RESULTSCRIPT } > $TMPDIR/$LOGFILE /usr/lib/sendmail -t $1 < $TMPDIR/$LOGFILE } # ---------------------------------------------------------# Start des Main-Scripts # ---------------------------------------------------------- 2 # MODE als Parameter uebergeben if [ $# = 1 ] then if [ $1 = "batch" ] then MODE=batch # Make sure this script is only executed from batch/crontab. # If so read .profile else stop execution #tty 1>/dev/null 2>&1 if [ $? -eq 0 ] then echo "MODE batch can only be executed from batch/crontab !!" exit 1 else . ${HOME}/define_sybase 1>/dev/null 2>&1 # SYBASE='/global/sybase/ASE_120'; export SYBASE fi else MODE=inter fi else MODE=inter fi # Check SYBASEUSR Verbindung zur Datenbank echo exit > $SCRIPTDIR/test_${SYBASEUSR}_pw.login $SYBASE/OCS-12_0/bin/isql -U$SYBASEUSR -P$SYBASEUSRPW i$SCRIPTDIR/test_${SYBASEUSR}_pw.login > $LOGDIR/test_${SYBASEUSR}.ok found="`wc -l $LOGDIR/test_${SYBASEUSR}.ok | awk '{ print $1 } ' | tr -d '[:space:]'`" rm $LOGDIR/test_${SYBASEUSR}.ok if [ $found != "0" ] then echo "\n\tWrong password for user $SYBASEUSR !!\n" exit fi # Loeschen Files der letzten Ausfuehrung { rm $TMPDIR/$LOGFILE rm -f $TMPDIR/${ILN}_*remind${SCRIPTID}.sql rm -f $TMPDIR/${ILN}_*remind${SCRIPTID}.txt rm -f $TMPDIR/${MAILTMP}*.txt } 2> /dev/null # Ausfuehrbare Datei fuer remind service erzeugen { echo CR_REMIND\(\) echo { echo \# Zuerste Mahntext mit Titelliste generieren echo \# Parameterliste echo \# 1 = E-Mail Absender echo \# 2 = E-Mail Empfaenger echo \# 3 = E-Mail Betreff echo \# 4 = address_id_nr Benutzer echo \# ACHTUNG - DIESER AUSDRUCK MUSS MIT DEM INHALT VON @address_id_nr IM SQL-SCRIPT UEBEREINSTIMMEN ! echo SUBST_ADDRESS_ID_NR=\"Xaddress_id_nrX\" echo \# Eigenes SQL-Script fuer Aufstellung genererien, substitute Aufstellung mittels sed echo sed s/\$SUBST_ADDRESS_ID_NR/\$4/ $SCRIPTDIR/$SQLTEXT \>$TMPDIR/${ILN}_\$4_remind${SCRIPTID}.sql echo \$SYBASE/OCS-12_0/bin/isql -U$SYBASEUSR -P$SYBASEUSRPW -w$COLUMNWITDH i$TMPDIR/${ILN}_\$4_remind${SCRIPTID}.sql \> $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.tmp echo \# SQL-Result-File aufbereiten: echo cat $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.tmp \| grep \"#\" \| sed \'s/#//\' \> $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.sed echo cat $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.sed \> $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.txt echo rm -f $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.tmp echo rm -f $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.sed echo { 3 echo echo \"From: \$1\" echo echo \"To:\$2\" \| sed \'s/ /, /\' echo echo \"Subject: \$3\" echo cat $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.txt echo } \> $TMPDIR/${MAILTMP}\$4.txt echo /usr/lib/sendmail -t \$2 \< $TMPDIR/${MAILTMP}\$4.txt 2\>\&1 \>/dev/null echo } } > $SCRIPTDIR/$RESULTSCRIPT case $MODE in 'inter') $SYBASE/OCS-12_0/bin/isql -U$SYBASEUSR -P$SYBASEUSRPW -i$SCRIPTDIR/$SQLUSR | sed f$SCRIPTDIR/$SEDSCRIPT | tee -a $SCRIPTDIR/$RESULTSCRIPT ;; 'batch') $SYBASE/OCS-12_0/bin/isql -U$SYBASEUSR -P$SYBASEUSRPW -i$SCRIPTDIR/$SQLUSR | sed f$SCRIPTDIR/$SEDSCRIPT >> $SCRIPTDIR/$RESULTSCRIPT ;; *) echo "Invalid argument" exit 1 ;; esac sleep 10 # Execute setzen und ausfuehren chmod 755 $SCRIPTDIR/$RESULTSCRIPT $SCRIPTDIR/$RESULTSCRIPT CR_SUBJECT $MAILLOGTO exit 4 hro62_read_userdat09_usr_sql /* ------------------------------------------------------------- */ /* Historie : */ /* 06-07-2010 - js: address_id_nr fuer Titeldaten integriert */ /* ------------------------------------------------------------- */ /* SELECT @@VERSION ; go */ use lbsdb go PRINT PRINT PRINT PRINT PRINT '' '///////////////////////////////////////////////////////' '62-5. Erinnerungsservice Fernleihen' '///////////////////////////////////////////////////////' '' SELECT "Start information service at"= getdate () go SET ROWCOUNT 0 go DECLARE @iln smallint, @day_diff int /* ----------------------------------------------------------------------------------------------- */ /* A = Benachrichtigung eingetroffene Fernleihen */ /* ----------------------------------------------------------------------------------------------- */ SELECT @iln = 62 /* UB ROSTOCK */, @day_diff = -1 /* Tagesdifferenz */ /* SELECT Statement Ausgabe fuer Befehlsdatei */ SELECT "CR_REMIND [email protected] " + CHAR(34) + rtrim(b.email_address) + CHAR(34) + " " + CHAR(34) + "Informationsservice UB Rostock `date +" + CHAR(34) + "%d.%m.%y" + CHAR(34) + "` / Ihre Fernleihbestellung / s n " + b.borrower_bar + CHAR(34) + " " + CONVERT(VARCHAR(20), b.address_id_nr) FROM borrower b, loans_requests l WHERE b.iln=@iln /* 62 = Rostock */ /* @day_diff Tage vorher benachrichtigen */ AND DATEDIFF(day,GETDATE(),l.edit_date) = @day_diff /* Nur folgende Nutzertypen - only the following borrower types */ AND b.borrower_type < 81 /* Status muss 3 = in der Leihstelle sein */ AND l.loan_status = 3 /* Ausleihtyp muss 9 = Fernleihe sein */ AND l.type_of_loan = 9 /* email adresse vorhanden */ AND NOT (PATINDEX('%@%', b.email_address) = 0) /* Verknuepfungen der Tabellen */ AND b.iln = l.iln AND b.address_id_nr = l.address_id_nr GROUP BY b.address_id_nr SELECT "End information service at"= getdate () go 5 hro62_read_userdat09_text_sql /* /* /* /* /* /* /* -------------------------------------------------------------------- */ hro<ILN>_read_userdat09_text_sql */ Text und Titelliste fuer Benachrichtigung Fernleihen generieren */ */ Historie: */ 01.07.10 js: created */ -------------------------------------------------------------------- */ /* LBS-DATENBANK */ use lbsdb go /* HIER ALLGEMEIN VERWENDETE VARIABLEN */ DECLARE @iln int, @address_id_nr int, @day_diff int, @FLtext varchar(20) SELECT @iln = 62, /* ILN */ @day_diff = -1, /* Tagesdifferenz */ @FLtext = 'xFernleihex', /* FL-Text aus Titelanzeige entfernen */ @address_id_nr = Xaddress_id_nrX /* Substitute-Ausdruck fuer CR_REMIND! */ PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT '#Informationsservice' '#Universitätsbibliothek Rostock und Bibliotheken im Ausleihverbund' '#' '#Betreff : Ihre Fernleihbestellung ist eingetroffen' '#' '#Wir möchten Ihnen mitteilen, dass über Fernleihe bestellte Medien' '#für Sie eingetroffen sind und zur Abholung (14 Tage) oder' '#zur Einsicht im Leesesaal bis Fristende bereit liegen.' '#' '#Liste der betreffenden Medien:' '#--------------------------------------------------------------------------' -- SELECT Statement kalkuliert mit CASE auch leeren ous_copy_cache ein (author, shorttitle, signature) -- Fernleihen: Kein Autor, Titelanfang: 'xFernleihex' herausschneiden, keine Signatur SELECT CASE WHEN (c.shorttitle IS NULL) AND (c.author IS NULL) THEN '# ' WHEN (c.shorttitle IS NULL) AND (c.author IS NOT NULL) THEN '#Bestellnr: ' + CONVERT(char(20), c.author) + ' ' WHEN (c.shorttitle IS NOT NULL) AND (c.author IS NULL) THEN '#Kurztitel: ' + CONVERT(char(50), LTRIM(STUFF(c.shorttitle, CHARINDEX(@FLtext, c.shorttitle), 11, ''))) WHEN (c.shorttitle IS NOT NULL) AND (c.author IS NOT NULL) THEN '#Bestellnr/Kurztitel: ' + CONVERT(char(50), c.author + ' / ' + LTRIM(STUFF(c.shorttitle, CHARINDEX(@FLtext, c.shorttitle), 11, ''))) + ' ' END, CASE WHEN (c.signature IS NULL) THEN CHAR(10) + '# Barcode: ' + CONVERT(char(12), v.volume_bar) WHEN (c.signature IS NOT NULL) THEN CHAR(10) + '# Barcode/Signatur: ' + CONVERT(char(60), v.volume_bar + ' / ' + c.signature) END, CHAR(10) + '# Fällig am: ' + CONVERT(char(8), l.expiry_date_loan,5), CHAR(10) + '#' FROM loans_requests l, volume v, ous_copy_cache c, borrower b WHERE l.iln = @iln and v.iln = @iln and c.iln = @iln and b.iln = @iln and l.address_id_nr = @address_id_nr AND b.address_id_nr = l.address_id_nr and l.volume_number = v.volume_number and v.epn = c.epn /* @day_diff Tage vorher benachrichtigen */ AND DATEDIFF(day,GETDATE(),l.edit_date) = @day_diff 6 /* Nur folgende Nutzertypen - only the following borrower types */ AND b.borrower_type < 81 /* Status muss 3 = in der Leihstelle sein */ AND l.loan_status = 3 /* Ausleihtyp muss 9 = Fernleihe sein */ AND l.type_of_loan = 9 ORDER BY l.no_renewals DESC PRINT PRINT PRINT PRINT PRINT PRINT PRINT '#--------------------------------------------------------------------------' '#' '#Sie können Ihre Nutzerdaten unter der folgenden Adresse einsehen :' '#https://katalog.ub.uni-rostock.de/loan/DB=1/LNG=DU/USERINFO_LOGIN' '#' '#Mit freundlichen Grüßen' '#Ihre Bibliothek' go hro_remind_ous_sedscript # sed script zur aufbereitung der kommandodatei informationsservice # 16 zeilen vom anfang loeschen 1,16d # von DELETE-Marke (x rows affected) bis Dateiende loeschen /(/,$d 7 hro62_read_userdat09_result_script CR_REMIND() { # Zuerste Mahntext mit Titelliste generieren # Parameterliste # 1 = E-Mail Absender # 2 = E-Mail Empfaenger # 3 = E-Mail Betreff # 4 = address_id_nr Benutzer # ACHTUNG - DIESER AUSDRUCK MUSS MIT DEM INHALT VON @address_id_nr IM SQL-SCRIPT UEBEREINSTIMMEN ! SUBST_ADDRESS_ID_NR="Xaddress_id_nrX" # Eigenes SQL-Script fuer Aufstellung genererien, substitute Aufstellung mittels sed sed s/$SUBST_ADDRESS_ID_NR/$4/ /global/sybase/com/hro62_read_userdat09_text_sql >/global/sybase/tmp/62_$4_remind09.sql $SYBASE/OCS-12_0/bin/isql -Uro-user -Ppasswd -w300 -i/global/sybase/tmp/62_$4_remind09.sql > /global/sybase/tmp/62_$4_remind09.tmp # SQL-Result-File aufbereiten: cat /global/sybase/tmp/62_$4_remind09.tmp | grep "#" | sed 's/#//' > /global/sybase/tmp/62_$4_remind09.sed cat /global/sybase/tmp/62_$4_remind09.sed > /global/sybase/tmp/62_$4_remind09.txt rm -f /global/sybase/tmp/62_$4_remind09.tmp rm -f /global/sybase/tmp/62_$4_remind09.sed { echo "From: $1" echo "To:$2" | sed 's/ /, /' echo "Subject: $3" cat /global/sybase/tmp/62_$4_remind09.txt } > /global/sybase/tmp/mailtmp_62_09_user_$4.txt /usr/lib/sendmail -t $2 < /global/sybase/tmp/mailtmp_62_09_user_$4.txt 2>&1 >/dev/null } CR_REMIND [email protected] "[email protected]" "Informationsservice UB Rostock `date +"%d.%m.%y"` / Ihre Fernleihbestellung / s n 00280004079" 4159 CR_REMIND [email protected] "[email protected]" "Informationsservice UB Rostock `date +"%d.%m.%y"` / Ihre Fernleihbestellung / s n 00280008007" 18503 # u.s.w. 8