OUS_Benachrichtigung.. - Universitätsbibliothek Rostock

Werbung
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
Herunterladen