OUS / Erinnerung vor Ablauf der Leihfrist

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