OUS / Benachrichtigung bei Bereitstellung einer Vormerkung Schematische Darstellung & Scripts / UB Rostock / Stand: 31.08.2011 - v004 1) Schematische Darstellung des Ablaufs Ablaufschritt / Script 1. sybase / crontab 2. hro<ILN>_read_userdat08_start_script hro<ILN>_read_userdat08_result_script Beschreibung > Prozess zur Generierung der Info-Mails wird 1x täglich gestartet > Script ermittelt via SQL-Abfrage hro<ILN>_read_userdat08_usr_sql alle Benutzer, für die eine Vormerkung bereitliegt > Daraus wird eine ausführbare Datei hro<ILN>_read_userdat08_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_userdat08_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 Vormerkung ist eingetroffen Wir möchten Ihnen mitteilen, dass bestellte Medien für Sie eingetroffen sind und eine Woche zur Abholung bereit liegen. Liste der betreffenden Medien: -------------------------------------------------------------------------Autor/Titel: Gebesmair, Andreas : Die Fabrikation globaler Vielfalt : Struktur und Barcode/Signatur: 563$000373656 / 563:Sbf 50, Gebes, Fab Fällig am: 02-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_userdat08_start_script batch hro62_read_userdat08_start_script #!/bin/ksh # # hro<ILN>_read_userdat08_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=08 # eindeutige Script-Identifikationsnummer ILN=62 # ILN MODE=inter # Ausfuehrungsmode batch oder inter(aktiv) COLUMNWITDH=300 # Spaltenbreite fuer SQL-Text SYBASEUSR=ro-user # RO-User LBS-Datenbank SYBASEUSRPW=passwd # Passwort fuer RO-User LBS-Datenbank [email protected] # Empfaenger LOG-File SLOG="reservation reminder service" # 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_userdat08_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 Vormerkungen ' '///////////////////////////////////////////////////////' '' SELECT "Start information service at"= getdate () go SET ROWCOUNT 0 go DECLARE @iln smallint, @day_diff int /* ----------------------------------------------------------------------------------------------- */ /* A = Benachrichtigung eingetroffene Vormerkungen */ /* ----------------------------------------------------------------------------------------------- */ 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 Vormerkung / 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.date_of_issue) = @day_diff /* Nur folgende Nutzertypen - only the following borrower types */ AND b.borrower_type < 81 /* Status muss 4 = Vormerkregal sein */ AND l.loan_status = 4 /* 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_userdat08_text_sql /* /* /* /* /* /* /* -------------------------------------------------------------------- */ hro<ILN>_read_userdat08_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 SELECT @iln = 62, /* ILN */ @day_diff = -1, /* Tagesdifferenz */ @address_id_nr = Xaddress_id_nrX /* Substitute-Ausdruck fuer CR_REMIND! */ PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT PRINT '#Informationsservice' '#Universitätsbibliothek Rostock und Bibliotheken im Ausleihverbund' '#' '#Betreff : Ihre Vormerkung ist eingetroffen' '#' '#Wir möchten Ihnen mitteilen, dass bestellte Medien für Sie eingetroffen' '#sind und eine Woche zur Abholung bereit liegen.' '#' '#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 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 6 and l.volume_number = v.volume_number and v.epn = c.epn /* @day_diff Tage vorher benachrichtigen */ AND DATEDIFF(day,GETDATE(),l.date_of_issue) = @day_diff /* Nur folgende Nutzertypen - only the following borrower types */ AND b.borrower_type < 81 /* Status muss 4 = Vormerkregal sein */ AND l.loan_status = 4 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_userdat08_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_userdat08_text_sql >/global/sybase/tmp/62_$4_remind08.sql $SYBASE/OCS-12_0/bin/isql -Uro-user -Ppasswd -w300 -i/global/sybase/tmp/62_$4_remind08.sql > /global/sybase/tmp/62_$4_remind08.tmp # SQL-Result-File aufbereiten: cat /global/sybase/tmp/62_$4_remind08.tmp | grep "#" | sed 's/#//' > /global/sybase/tmp/62_$4_remind08.sed cat /global/sybase/tmp/62_$4_remind08.sed > /global/sybase/tmp/62_$4_remind08.txt rm -f /global/sybase/tmp/62_$4_remind08.tmp rm -f /global/sybase/tmp/62_$4_remind08.sed { echo "From: $1" echo "To:$2" | sed 's/ /, /' echo "Subject: $3" cat /global/sybase/tmp/62_$4_remind08.txt } > /global/sybase/tmp/mailtmp_62_08_user_$4.txt /usr/lib/sendmail -t $2 < /global/sybase/tmp/mailtmp_62_08_user_$4.txt 2>&1 >/dev/null } CR_REMIND [email protected] "[email protected]" "Informationsservice UB Rostock `date +"%d.%m.%y"` / Ihre Vormerkung / s n 0028001189X" 20640 CR_REMIND [email protected] "[email protected]" "Informationsservice UB Rostock `date +"%d.%m.%y"` / Ihre Vormerkung / s n 00280014767" 6378 # u.s.w. 8