FLEX#64717 geschedulede commando in seconde-intervallen (savepoint)
svn path=/Database/trunk/; revision=49667
This commit is contained in:
149
FAC/FAC_PAC.SRC
149
FAC/FAC_PAC.SRC
@@ -117,8 +117,11 @@ CREATE OR REPLACE PACKAGE fac
|
||||
PROCEDURE clrnotifications (pcode VARCHAR2, pref NUMBER, psubject VARCHAR2, preceiver NUMBER, pextrakey NUMBER);
|
||||
PROCEDURE clrnotifications_xmlnode (pxmlnode VARCHAR2, prefkey NUMBER);
|
||||
PROCEDURE clrtracking_xmlnode (pxmlnode VARCHAR2, prefkey NUMBER);
|
||||
PROCEDURE putnotificationjobs (pcust VARCHAR2);
|
||||
PROCEDURE putnotificationjobs;
|
||||
PROCEDURE putcommandjobs;
|
||||
PROCEDURE putnotificationjobs (pcust VARCHAR2);
|
||||
PROCEDURE putjobnotifications (pviewname VARCHAR2, pmode NUMBER, pflags NUMBER);
|
||||
PROCEDURE putjobcommands (pviewname VARCHAR2, pmode NUMBER, pflags NUMBER);
|
||||
FUNCTION getEmail ( pkey IN NUMBER ) RETURN VARCHAR2;
|
||||
FUNCTION getMobile ( pkey IN NUMBER ) RETURN VARCHAR2;
|
||||
PROCEDURE fac_nightly;
|
||||
@@ -2469,14 +2472,22 @@ CREATE OR REPLACE PACKAGE BODY fac AS
|
||||
AND ft.fac_tracking_refkey = prefkey);
|
||||
END;
|
||||
|
||||
-- Kijk welke jobs gescheduled zijn en nu uitgevoerd moeten worden.
|
||||
-- CUST is inmiddels overbodig, nog voor compatibiliteit only
|
||||
PROCEDURE putnotificationjobs (pcust VARCHAR2)
|
||||
AS
|
||||
BEGIN
|
||||
fac.putnotificationjobs(0);
|
||||
END;
|
||||
|
||||
-- Kijk welke jobs gescheduled zijn en nu uitgevoerd moeten worden.
|
||||
-- Interne functie
|
||||
PROCEDURE putjobs (pcommands NUMBER DEFAULT 0)
|
||||
AS
|
||||
CURSOR c1
|
||||
IS
|
||||
SELECT fac_notificatie_job_key, fac_notificatie_job_view, fac_notificatie_job_oms,
|
||||
fac_notificatie_job_interval, fac_notificatie_job_mode, fac_notificatie_job_nextrun,
|
||||
fac_notificatie_job_flags
|
||||
fac_notificatie_job_flags, fac_notificatie_job_seconds
|
||||
FROM fac_notificatie_job
|
||||
WHERE fac_notificatie_job_nextrun <= SYSDATE OR fac_notificatie_job_nextrun IS NULL; -- eerste keer
|
||||
tnextrun fac_notificatie_job.fac_notificatie_job_nextrun%TYPE;
|
||||
@@ -2484,7 +2495,13 @@ CREATE OR REPLACE PACKAGE BODY fac AS
|
||||
FOR rec1 IN c1
|
||||
LOOP
|
||||
-- Voer de job uit
|
||||
putjobnotifications (rec1.fac_notificatie_job_view, rec1.fac_notificatie_job_mode, rec1.fac_notificatie_job_flags);
|
||||
IF pcommands = 1 AND BITAND(rec1.fac_notificatie_job_flags,32) = 32
|
||||
THEN
|
||||
putjobcommands (rec1.fac_notificatie_job_view, rec1.fac_notificatie_job_mode, rec1.fac_notificatie_job_flags);
|
||||
ELSE
|
||||
putjobnotifications (rec1.fac_notificatie_job_view, rec1.fac_notificatie_job_mode, rec1.fac_notificatie_job_flags);
|
||||
END IF;
|
||||
|
||||
UPDATE fac_notificatie_job
|
||||
SET fac_notificatie_job_lastrun = SYSDATE
|
||||
WHERE fac_notificatie_job_key = rec1.fac_notificatie_job_key;
|
||||
@@ -2496,12 +2513,22 @@ CREATE OR REPLACE PACKAGE BODY fac AS
|
||||
|
||||
WHILE tnextrun <= SYSDATE
|
||||
LOOP
|
||||
-- Interval in hrs, DATE arithmetics are in days, so we will have to divide by 24 hrs a day
|
||||
UPDATE fac_notificatie_job
|
||||
SET fac_notificatie_job_nextrun =
|
||||
COALESCE (fac_notificatie_job_nextrun, SYSDATE)
|
||||
+ rec1.fac_notificatie_job_interval / 24
|
||||
WHERE fac_notificatie_job_key = rec1.fac_notificatie_job_key;
|
||||
IF pcommands = 1 AND BITAND(rec1.fac_notificatie_job_flags,32) = 32
|
||||
THEN
|
||||
-- Command-interval in seconds, DATE arithmetics are in days, so we will have to divide by 24*60*60 seconds a day
|
||||
UPDATE fac_notificatie_job
|
||||
SET fac_notificatie_job_nextrun =
|
||||
COALESCE (fac_notificatie_job_nextrun, SYSDATE)
|
||||
+ rec1.fac_notificatie_job_seconds / 24*60*60
|
||||
WHERE fac_notificatie_job_key = rec1.fac_notificatie_job_key;
|
||||
ELSE
|
||||
-- Notify-interval in hrs, DATE arithmetics are in days, so we will have to divide by 24 hrs a day
|
||||
UPDATE fac_notificatie_job
|
||||
SET fac_notificatie_job_nextrun =
|
||||
COALESCE (fac_notificatie_job_nextrun, SYSDATE)
|
||||
+ rec1.fac_notificatie_job_interval / 24
|
||||
WHERE fac_notificatie_job_key = rec1.fac_notificatie_job_key;
|
||||
END IF;
|
||||
|
||||
SELECT fac_notificatie_job_nextrun
|
||||
INTO tnextrun
|
||||
@@ -2511,6 +2538,18 @@ CREATE OR REPLACE PACKAGE BODY fac AS
|
||||
END LOOP;
|
||||
END;
|
||||
|
||||
-- Dit zijn de 2 die weg bebruikt moeten worden in de schedules
|
||||
PROCEDURE putnotificationjobs
|
||||
AS
|
||||
BEGIN
|
||||
fac.putjobs (0);
|
||||
END;
|
||||
PROCEDURE putcommandjobs
|
||||
AS
|
||||
BEGIN
|
||||
fac.putjobs (1);
|
||||
END;
|
||||
|
||||
-- Voer nu job pcode uit.
|
||||
PROCEDURE putjobnotifications (pviewname VARCHAR2, pmode NUMBER, pflags NUMBER)
|
||||
AS
|
||||
@@ -2625,9 +2664,91 @@ CREATE OR REPLACE PACKAGE BODY fac AS
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
putsystemnotification ('FACILITOR: invalid notification job/view ' || pviewname ||' '|| SQLERRM , 3);
|
||||
putsystemnotification ('Facilitor notifier: Invalid notification job ' || pviewname ||' ('|| SQLERRM ||')' , 3);
|
||||
END;
|
||||
|
||||
-- FLEX#64717 Deze zet commando's in de (notificatie)queue, die worden verstuurd
|
||||
-- volgens de parameters van bedrijfadres. De pmode heeft minstens een 32-bitje gezet
|
||||
-- waardoor de queuehandler (putorders) weet dat het geen gewone notificatie is, maar
|
||||
-- een handler. Optioneel is er ook nog een 16-bit (dus pmode=48) dat net als bij notificaties een
|
||||
-- tracking bij de betreffende entiteit registreert.
|
||||
PROCEDURE putjobcommands (pviewname VARCHAR2, pmode NUMBER, pflags NUMBER)
|
||||
AS
|
||||
TYPE noticursortype IS REF CURSOR;
|
||||
|
||||
commands noticursortype;
|
||||
lbedrijfadres_key prs_bedrijfadres.prs_bedrijfadres_key%TYPE;
|
||||
lxmlnode fac_srtnotificatie.fac_srtnotificatie_xmlnode%TYPE;
|
||||
ldatum fac_notificatie.fac_notificatie_datum%TYPE;
|
||||
ltext fac_notificatie.fac_notificatie_oms%TYPE;
|
||||
lcode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
||||
lrefkey fac_notificatie.fac_notificatie_refkey%TYPE;
|
||||
lsrtnotificatie_key fac_srtnotificatie.fac_srtnotificatie_key%TYPE;
|
||||
BEGIN
|
||||
-- flags: 16 = do tracking of text (requires code, key and text to be NOT NULL)
|
||||
-- 32 = execute *this* function
|
||||
OPEN commands FOR -- goed nadenken, deze namen zijn voor eeuwig. is notbefore nodig?
|
||||
'SELECT prs_bedrijfadres_key, xmlnode, refkey, datum, waarde, code FROM '
|
||||
|| pviewname;
|
||||
|
||||
LOOP
|
||||
FETCH commands
|
||||
INTO lbedrijfadres_key,
|
||||
lxmlnode,
|
||||
lrefkey,
|
||||
ldatum,
|
||||
ltext,
|
||||
lcode;
|
||||
|
||||
EXIT WHEN commands%NOTFOUND;
|
||||
|
||||
IF LENGTH(ltext) > 2048
|
||||
THEN
|
||||
raise_application_error (-20001, 'Facilitor warning: Jobcommand too long');
|
||||
END IF;
|
||||
|
||||
IF lcode IS NOT NULL
|
||||
THEN
|
||||
SELECT fac_srtnotificatie_key
|
||||
INTO lsrtnotificatie_key
|
||||
FROM fac_srtnotificatie
|
||||
WHERE fac_srtnotificatie_code = lcode;
|
||||
END IF;
|
||||
|
||||
IF BITAND (pflags, 16) = 16
|
||||
AND lcode IS NOT NULL
|
||||
AND lxmlnode IS NOT NULL
|
||||
AND lrefkey IS NOT NULL
|
||||
AND ltext IS NOT NULL
|
||||
THEN
|
||||
fac.trackaction (lcode,
|
||||
lrefkey,
|
||||
NULL,
|
||||
NULL,
|
||||
ltext);
|
||||
END IF;
|
||||
|
||||
INSERT INTO fac_notificatie (fac_notificatie_status,
|
||||
fac_notificatie_datum,
|
||||
fac_notificatie_oms,
|
||||
fac_notificatie_refkey,
|
||||
prs_bedrijfadres_key,
|
||||
fac_srtnotificatie_key)
|
||||
VALUES (pmode,
|
||||
ldatum,
|
||||
SUBSTR (ltext, 1, 2048),
|
||||
lrefkey,
|
||||
lbedrijfadres_key,
|
||||
lsrtnotificatie_key);
|
||||
END LOOP;
|
||||
|
||||
CLOSE commands;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
putsystemnotification ('Facilitor notifier: Invalid commands-job ' || pviewname || ' (' || SQLERRM ||')', 3);
|
||||
END;
|
||||
|
||||
PROCEDURE executeactiviteit (pxmlnode VARCHAR2, pactkey NUMBER)
|
||||
AS
|
||||
CURSOR berekendeflex (
|
||||
@@ -2946,10 +3067,10 @@ CREATE OR REPLACE PACKAGE BODY fac AS
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
putsystemnotification (
|
||||
'Facilitor scheduler: opdracht voor activiteit '
|
||||
'Facilitor scheduler: Unable to create planned activity '
|
||||
|| pactkey
|
||||
|| ' kan niet worden aangemaakt: '
|
||||
|| SQLERRM,
|
||||
|| ' ('
|
||||
|| SQLERRM||')',
|
||||
3);
|
||||
END;
|
||||
END;
|
||||
|
||||
@@ -587,6 +587,7 @@ CREATE_TABLE(fac_srtnotificatie, 0)
|
||||
/*
|
||||
* fac_notificatie_status: de actuele verzendingsstatus. Bij de insert is deze gelijk aan fac_srtnotificatie_mode
|
||||
* waarin bitwise is aangegeven hoe de notificatie verspreid moet worden:
|
||||
* 32 = POST conform prs_bedrijfadres
|
||||
* 16 = POST naar prs_perslid_systeemadres
|
||||
* 8 = popup aan receiver prs_perslid_key
|
||||
* 4 = per sms aan receiver prs_perslid_mobiel
|
||||
@@ -663,9 +664,11 @@ CREATE_TABLE(fac_notificatie_job, 0)
|
||||
fac_notificatie_job_mode
|
||||
NUMBER(3),
|
||||
fac_notificatie_job_flags
|
||||
NUMBER(10) default 0, -- 1=view has xemail and xmobile, 2=use fac.notifytracking instead of fac.putnotification(srtprio)
|
||||
NUMBER(10) default 0, -- &1=view has xemail and xmobile, &2=use fac.notifytracking instead of fac.putnotification(srtprio), &32=commando
|
||||
fac_notificatie_job_interval
|
||||
NUMBER(5),
|
||||
fac_notificatie_job_seconds
|
||||
NUMBER(5),
|
||||
fac_notificatie_job_nextrun
|
||||
DATE,
|
||||
fac_notificatie_job_lastrun
|
||||
|
||||
Reference in New Issue
Block a user