OUS / Benachrichtigung bei Vormerkung auf eine Entleihung Schematische Darstellung & Scripts / UB Rostock / Stand: 31.08.2011 - v004 1) Schematische Darstellung des Ablaufs Ablaufschritt / Script 1. sybase / crontab 2. hro<ILN>_read_userdat10_start_script hro<ILN>_read_userdat10_result_script Beschreibung > Prozess zur Generierung der Info-Mails wird 1x täglich gestartet > Script ermittelt via SQL-Abfrage hro<ILN>_read_userdat10_usr_sql alle Benutzer, auf deren Entleihungen eine Vormerkung eingegangen ist > Daraus wird eine ausführbare Datei hro<ILN>_read_userdat10_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_userdat10_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 : Vormerkung auf entliehenes Medium Wir möchten Ihnen mitteilen, dass auf ein von Ihnen entliehenes Medium eine Vormerkung eingegangen ist. Bitte beachten Sie die Leihfrist, da eine Verlängerung jetzt nicht mehr möglich ist. Liste der betreffenden Medien: -------------------------------------------------------------------------Autor/Titel: Müller-Richter, Klaus : "Kampf der Metapher!" : Studien zum Widerstrei Barcode/Signatur: 28$004421043 / 28/BB2:CC 4800 M947 K1 Fällig am: 17-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: 55 04 * * * /global/sybase/com/hro62_read_userdat10_start_script batch hro62_read_userdat10_start_script #!/bin/ksh # # hro<ILN>_read_userdat10_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=10 ILN=62 MODE=inter COLUMNWITDH=300 SYBASEUSR=ro-user SYBASEUSRPW=passwd [email protected] SLOG="reservation to" # # # # # # # # 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 3 echo { 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_userdat10_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 VormerkungenAuf vom Vortag' '///////////////////////////////////////////////////////' '' SELECT "Start information service at"= getdate () go SET ROWCOUNT 0 go DECLARE @iln smallint, @day_diff int, @inter_lib_loan tinyint /* ----------------------------------------------------------------------------------------------- */ /* A = Benachrichtigung aufgegebene VormerkungenAuf vom Vortag */ /* ----------------------------------------------------------------------------------------------- */ SELECT @iln = 62 /* UB ROSTOCK */, @day_diff = -1 /* Tagesdifferenz */, @inter_lib_loan = 9 /* Ausleihtyp fuer Fernleihe */ /* 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) + "` / Vormerkung auf entliehenes Medium / s n " + b.borrower_bar + CHAR(34) + " " + CONVERT(VARCHAR(20), b.address_id_nr) FROM borrower b, loans_requests l, reservation r WHERE b.iln=@iln /* 62 = Rostock */ /* @day_diff Tage vorher benachrichtigen */ AND DATEDIFF(day,GETDATE(),r.reservation_date_time) = @day_diff /* Nur folgende Nutzertypen - only the following borrower types */ AND b.borrower_type < 80 /* Status muss 5 = ausgeliehen sein */ AND l.loan_status = 5 /* Nicht Ausleihtyp Fernleihe */ AND NOT (l.type_of_loan = @inter_lib_loan) /* Nur fuer erste Vormerkung, ggf. auch mehrere an einem Tag */ AND ((SELECT COUNT(*) from reservation WHERE volume_number = r.volume_number) = (SELECT COUNT(*) from reservation WHERE reservation_date_time = r.reservation_date_time)) /* email adresse vorhanden */ AND NOT (PATINDEX('%@%', b.email_address) = 0) /* Verknuepfungen der Tabellen */ AND b.iln = l.iln AND b.iln = r.iln AND b.address_id_nr = l.address_id_nr AND l.volume_number = r.volume_number GROUP BY b.address_id_nr SELECT "End information service at"= getdate () go 5 hro62_read_userdat10_text_sql /* /* /* /* /* /* /* -------------------------------------------------------------------- */ hro<ILN>_read_userdat10_text_sql */ Text und Titelliste fuer Benachrichtigung Vormerkung 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 @inter_lib_loan tinyint SELECT @iln = 62, /* ILN */ @day_diff = -1, /* Tagesdifferenz */ @inter_lib_loan = 9, /* Ausleihtyp fuer Fernleihe */ @address_id_nr = Xaddress_id_nrX /* Substitute-Ausdruck fuer CR_REMIND! */ PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT '#Informationsservice' '#Universitätsbibliothek Rostock und Bibliotheken im Ausleihverbund' '#' '#Betreff : Vormerkung auf entliehenes Medium' '#' '#Wir möchten Ihnen mitteilen, dass auf ein von Ihnen entliehenes Medium eine' '#Vormerkung eingegangen ist. Bitte beachten Sie die Leihfrist, da eine Verlängerung' '#jetzt nicht mehr möglich ist.' '#' '#' '#Liste der betreffenden Medien:' '#--------------------------------------------------------------------------' -- SELECT Statement kalkuliert mit CASE auch leeren ous_copy_cache ein (author, shorttitle, signature) SELECT CASE WHEN (c.shorttitle IS NULL) AND (c.author IS NULL) THEN '# ' -- STUFF: Jahresangaben beim Autor in Runden Klammern entfernen WHEN (c.shorttitle IS NULL) AND (c.author IS NOT NULL) THEN '#Autor: ' + CONVERT(char(70), STUFF(c.author, CHARINDEX('(', c.author), CHARINDEX(')', c.author) CHARINDEX('(', c.author) + 1, '')) + ' ' WHEN (c.shorttitle IS NOT NULL) AND (c.author IS NULL) THEN '#Titel: ' + CONVERT(char(70), c.shorttitle) WHEN (c.shorttitle IS NOT NULL) AND (c.author IS NOT NULL) THEN '#Autor/Titel: ' + CONVERT(char(70), RTRIM(STUFF(c.author, CHARINDEX('(', c.author), CHARINDEX(')', c.author) - CHARINDEX('(', c.author) + 1, '')) + -- Doppelpunt als Trennzeichen nur, wenn Autor vorhanden CASE WHEN RTRIM(STUFF(c.author, CHARINDEX('(', c.author), CHARINDEX(')', c.author) - CHARINDEX('(', c.author) + 1, '')) IS NOT NULL THEN ' : ' END + SUBSTRING(c.shorttitle,1,50)) + ' ' 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(42), 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, reservation r WHERE l.iln = @iln 6 and v.iln = @iln and c.iln = @iln and b.iln = @iln and r.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 l.volume_number = r.volume_number and v.epn = c.epn /* @day_diff Tage vorher benachrichtigen */ AND DATEDIFF(day,GETDATE(),r.reservation_date_time) = @day_diff /* Nur folgende Nutzertypen - only the following borrower types */ AND b.borrower_type < 81 /* Status muss 5 = ausgeliehen sein */ AND l.loan_status = 5 /* Nicht Ausleihtyp Fernleihe */ AND NOT (l.type_of_loan = @inter_lib_loan) /* Nur fuer erste Vormerkung, ggf. auch mehrere an einem Tag */ AND ((SELECT COUNT(*) from reservation WHERE volume_number = r.volume_number) = (SELECT COUNT(*) from reservation WHERE reservation_date_time = r.reservation_date_time)) ORDER BY l.no_renewals DESC PRINT 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_userdat10_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_userdat10_text_sql >/global/sybase/tmp/62_$4_remind10.sql $SYBASE/OCS-12_0/bin/isql -Uro-user -Ppasswd -w300 -i/global/sybase/tmp/62_$4_remind10.sql > /global/sybase/tmp/62_$4_remind10.tmp # SQL-Result-File aufbereiten: cat /global/sybase/tmp/62_$4_remind10.tmp | grep "#" | sed 's/#//' > /global/sybase/tmp/62_$4_remind10.sed cat /global/sybase/tmp/62_$4_remind10.sed > /global/sybase/tmp/62_$4_remind10.txt rm -f /global/sybase/tmp/62_$4_remind10.tmp rm -f /global/sybase/tmp/62_$4_remind10.sed { echo "From: $1" echo "To:$2" | sed 's/ /, /' echo "Subject: $3" cat /global/sybase/tmp/62_$4_remind10.txt } > /global/sybase/tmp/mailtmp_62_10_user_$4.txt /usr/lib/sendmail -t $2 < /global/sybase/tmp/mailtmp_62_10_user_$4.txt 2>&1 >/dev/null } CR_REMIND [email protected] "[email protected]" "Informationsservice UB Rostock `date +"%d.%m.%y"` / Vormerkung auf Ihre Entleihung / s n 00280007337" 5640 CR_REMIND [email protected] "[email protected]" "Informationsservice UB Rostock `date +"%d.%m.%y"` / Vormerkung auf Ihre Entleihung / s n 00280015178" 55839 # u.s.w. 8