OUS_ErinnerungVorAbl.. - Universitätsbibliothek Rostock

Werbung
OUS / Erinnerung vor Ablauf der Leihfrist
Schematische Darstellung & Scripts / UB Rostock / Stand: 31.08.2011 - v008
1) Schematische Darstellung des Ablaufs
Ablaufschritt / Script
1. sybase / crontab
2. hro<ILN>_read_userdat03_start_script
hro<ILN>_read_userdat03_result_script
Beschreibung
> Prozess zur Generierung der Info-Mail wird 1x täglich
gestartet
> Script ermittelt via SQL-Abfrage
hro<ILN>_read_userdat03_usr_sql alle Benutzer, deren
Entleihungen in x-Tagen ablaufen
> Daraus wird eine ausführbare Datei
hro<ILN>_read_userdat03_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_userdat03_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 : Ablauf der Leihfrist
Bitte beachten Sie, dass Leihfristen Ihrer Entleihungen in 3 Tagen ablaufen.
Liste der betreffenden Medien:
-------------------------------------------------------------------------Autor/Titel: Lenz, Hanfried : Grundlagen der Elementarmathematik
Barcode/Signatur: 28$002561069 / 28/BB1:SK 110 L575(3)
Fällig am: 05-07-10
Verlängerungen: 3
Autor/Titel: Aigner, Martin : Diskrete Mathematik : mit 600 Übungsaufgaben
Barcode/Signatur: 28$006090982 / 28/BB1:SK 170 A292(5)
Fällig am: 05-07-10
Verlängerungen: 0
Autor/Titel: Basieux, Pierre : Abenteuer Mathematik : Brücken zwischen Wirklichke
Barcode/Signatur: 28$005483042 / 28/BB1:SN 100 B311(2)
Fällig am: 05-07-10
Verlängerungen: 0
Autor/Titel: Engel, Wolfgang : Mathematik in Aufgaben : ein Auswahl aus den Olymp
Barcode/Signatur: 28$005912318 / 28/BB1:SM 940 E57 M42
Fällig am: 05-07-10
Verlängerungen: 0
-------------------------------------------------------------------------Bitte geben Sie die Medien zurück oder verlängern Sie die Leihfrist
in Ihrem Nutzerkonto selbst (max.10x).
https://katalog.ub.uni-rostock.de/loan/DB=1/LNG=DU/USERINFO_LOGIN
Für vorgemerkte Medien, Fernleihen und Kurzausleihen ist keine
Verlängerung möglich.
Mit freundlichen Grüßen
Ihre Bibliothek
1
3) Verwendete Scripts
sybase / crontab:
30 04 * * * /global/sybase/com/hro62_read_userdat03_start_script batch
hro62_read_userdat03_start_script
#!/bin/ksh
#
# hro${ILN}_read_userdat03_start_script
# Scriptgenerierung aus LBS-Datenbank mit SQL-Script
# ---------------------------------------------------------# historie:
# 02.07.10 - created, j.s. - ub hro
# 05.07.10 - Script neu geordnet mit MODE als Parameter $1
#
# Parameter: $1 = MODE
# ---------------------------------------------------------# ---------------------------------------------------------# Parameter fuer Ausfuehrung setzen
# ---------------------------------------------------------# Steuerung
# --------SCRIPTID=03
# 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="3daysbefore 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
3
echo
rm -f $TMPDIR/${ILN}_\$4_remind${SCRIPTID}.sed
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_userdat03_usr_sql
/* ------------------------------------------------------------- */
/* Historie : */
/* 26-10-2007 - js: Nutzertyp 71 ergaenzt */
/* 04-02-2010 - js: Dauerschliessfach ueber v.free_text ausgeschlossen */
/* 01-07-2010 - js: address_id_nr fuer Titeldaten integriert */
/* ------------------------------------------------------------- */
/* SELECT @@VERSION ; go */
use lbsdb
go
PRINT
PRINT
PRINT
PRINT
PRINT
''
'///////////////////////////////////////////////////////'
'62-5. Erinnerungsservice - 3 Tage vor Leihfrist Ende'
'///////////////////////////////////////////////////////'
''
SELECT "Start information service at"= getdate ()
go
SET ROWCOUNT 0
go
DECLARE @iln smallint,
@day_diff int,
@free_text char(20)
/* ----------------------------------------------------------------------------------------------- */
/* A = Nutzertypen ohne Beruecksichtigung der Kulanzfrist, day_diff Tage vor Rückgabedatum
*/
/* ----------------------------------------------------------------------------------------------- */
SELECT
@iln = 62 /* UB ROSTOCK */,
@day_diff = 3 /* Tagesdifferenz */,
@free_text = "%Dauerschliessfach%" /* Dauerschliessfach hier nicht erinnern */
/* 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) + "` / Ablauf der Leihfrist / s n " + b.borrower_bar + CHAR(34) + " "
+ CONVERT(VARCHAR(20), b.address_id_nr)
FROM
borrower b, loans_requests l, volume v
WHERE
b.iln=@iln /* 62 = Rostock */
/* Nur folgende Nutzertypen - only the following borrower types */
AND (b.borrower_type = 10 OR b.borrower_type = 20 OR b.borrower_type = 50 OR
b.borrower_type = 70 OR b.borrower_type = 71 OR b.borrower_type = 80 )
/* @day_diff Tage vorher erinnern */
AND DATEDIFF(day,GETDATE(),l.expiry_date_loan) /* + r.number1 */ = @day_diff
/* Wenn keine Mahnungen - if there are no reminders */
AND l.no_reminders = 0
/* Status muss 5 = ausgeliehen sein */
AND l.loan_status = 5
/* email adresse vorhanden */
AND NOT (PATINDEX('%@%', b.email_address) = 0)
/* Kein Dauerschliessfach */
AND NOT (v.free_text like @free_text)
/* Verknuepfungen der Tabellen */
AND b.iln = l.iln
AND l.volume_number = v.volume_number
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_userdat03_text_sql
/*
/*
/*
/*
/*
/*
/*
-------------------------------------------------------------------- */
hro_read_userdat03_text_sql
*/
Text und Titelliste fuer Vorab-Erinnerung 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,
@free_text
char(20)
SELECT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
@iln
= 62,
/* ILN */
@day_diff
= 3,
/* Tagesdifferenz */
@free_text
= "%Dauerschliessfach%", /* Dauerschliessfach hier nicht erinnern */
@address_id_nr
= Xaddress_id_nrX
/* Substitute-Ausdruck fuer CR_REMIND! */
'#Informationsservice'
'#Universitätsbibliothek Rostock und Bibliotheken im Ausleihverbund'
'#'
'#Betreff : Ablauf der Leihfrist'
'#'
'#Bitte beachten Sie, dass Leihfristen Ihrer Entleihungen in 3 Tagen ablaufen.'
'#'
'#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) + '# Verlängerungen: ' + CONVERT(char(2), l.no_renewals),
CHAR(10) + '#'
FROM
loans_requests l, volume v, ous_copy_cache c
WHERE
l.iln = @iln
and v.iln = @iln
and c.iln = @iln
and l.address_id_nr = @address_id_nr
6
and l.volume_number = v.volume_number
and v.epn = c.epn
/* @day_diff Tage vorher erinnern */
and DATEDIFF(day,GETDATE(),l.expiry_date_loan) = @day_diff
/* Status muss 5 = ausgeliehen sein */
AND l.loan_status = 5
/* Kein Dauerschliessfach */
AND NOT (v.free_text like @free_text)
ORDER BY
l.no_renewals DESC
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
'#--------------------------------------------------------------------------'
'#'
'#Bitte geben Sie die Medien zurück oder verlängern Sie die Leihfrist'
'#in Ihrem Nutzerkonto selbst (max.10x).'
'#https://katalog.ub.uni-rostock.de/loan/DB=1/LNG=DU/USERINFO_LOGIN'
'#'
'#Für vorgemerkte Medien, Fernleihen und Kurzausleihen ist keine '
'#Verlängerung möglich.'
'#'
'#'
'#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_userdat03_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_userdat03_text_sql
>/global/sybase/tmp/62_$4_remind03.sql
$SYBASE/OCS-12_0/bin/isql -Uro-user -Ppasswd -w300 -i/global/sybase/tmp/62_$4_remind03.sql
> /global/sybase/tmp/62_$4_remind03.tmp
# SQL-Result-File aufbereiten:
cat /global/sybase/tmp/62_$4_remind03.tmp | grep "#" | sed 's/#//' >
/global/sybase/tmp/62_$4_remind03.sed
cat /global/sybase/tmp/62_$4_remind03.sed > /global/sybase/tmp/62_$4_remind03.txt
rm -f /global/sybase/tmp/62_$4_remind03.tmp
rm -f /global/sybase/tmp/62_$4_remind03.sed
{
echo "From: $1"
echo "To:$2" | sed 's/ /, /'
echo "Subject: $3"
cat /global/sybase/tmp/62_$4_remind03.txt
} > /global/sybase/tmp/mailtmp_62_03_user_$4.txt
/usr/lib/sendmail -t $2 < /global/sybase/tmp/mailtmp_62_03_user_$4.txt 2>&1 >/dev/null
}
CR_REMIND [email protected] "[email protected]"
"Informationsservice UB Rostock `date +"%d.%m.%y"` / Ablauf der Leihfrist / s n
00280005334" 13533
CR_REMIND [email protected] "[email protected]"
"Informationsservice UB Rostock `date +"%d.%m.%y"` / Ablauf der Leihfrist / s n
00280007183" 20622
# u.s.w.
8
Herunterladen