Well, i typed it once and it was gone ... ill do it one more time :D
My Problem:
We need stop QUEUEs and wait until in that QUEUEs there is no more Object working.
Solution:
SCRI Objekt that checks every 60 Seconds if there are Object running in that QUEUEs
Script Function (Thank to the Support that helped me out with that)
GET_UC_SETTING (QUEUE,"QUEUE_NAME",ACTIVE_COUNT)
VARA.PARAMETER
KEY VALUE1 VALUE2
SHOP1_QUEUE_ABBRUCH_ZEIT 11:30 HH:MM
SHOP1_QUEUE_LISTE QUEUE_MASTER1#QUEUE5 QUEUE_WORK1#QUEUE_WORK2
SHOP1_QUEUE_PRUEINTERVALL 60
SHOP1_QUEUE_SUM_ERL_OBJ_ANZAHL 0
First Script that STOPs the QUEUEs from VARA.PARAMETER
SCRI.QUEUE_@STOP
:RSET &VARANAME# = 'VARA.PARAMETER'
:RSET &VERFAHREN# = 'SHOP1'
! Start / Stop ermitteln
:DEFINE &ARR_NAME#,STRING,5
:FILL &ARR_NAME#[] = STR_SPLIT(&$NAME#,"@")
:PSET &QSTATUS# = STR_UC(&ARR_NAME#[2])
! Queue Liste ermitteln und in Array packen
:SET &QUEUELISTE# = GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_LISTE")
:DEFINE &ARR_QLISTE#,STRING,30
:FILL &ARR_QLISTE#[] = STR_SPLIT(&QUEUELISTE#,"#")
:SET &USED# = LENGTH(&ARR_QLISTE#[],SIZE)
:PRINT ****
:SET &CNT# = 1
:WHILE &CNT# LE &USED#
: PRINT "&ARR_QLISTE#[&CNT#] Status auf &QSTATUS# setzen"
: SET &RET# = MODIFY_SYSTEM("MODE", "&ARR_QLISTE#[&CNT#]", "&QSTATUS#")
: IF &RET# = "0"
: PRINT "Statusänderung [&QSTATUS#] der Queue &ARR_QLISTE#[&CNT#] war erfolgreich"
: ELSE
: PRINT "&ARR_QLISTE#[&CNT#] Fehler beim ändern des Status [&QSTATUS#]"
: ENDIF
: SET &CNT# = &CNT# + 1
:ENDWHILE
:PRINT ENDE
:PRINT ****
Script to check if there are Object running:
SCRI.QUEUES_EMPTY
:RSET &VARANAME# = 'VARA.PARAMETER'
:RSET &VERFAHREN# = 'SHOP1'
:RSET &QUEUE_ABBRUCH_ZEIT# = GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_ABBRUCH_ZEIT")
:RSET &ZEITFORMAT# = GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_ABBRUCH_ZEIT",2)
:RSET &JETZT_HHMM# = SYS_TIME_PHYSICAL('&ZEITFORMAT#')
:RSET &QUEUE_ERL_OBJKT_SUM# = GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_SUM_ERL_OBJ_ANZAHL")
:RSET &QUEUE_PRUEF_INTERVA# = GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_PRUEINTERVALL")
! Queue Liste ermitteln und in Array packen
:SET &QUEUELISTE# = GET_VAR(&VARANAME#,"&VERFAHREN#_QUEUE_LISTE",2)
:DEFINE &ARR_QLISTE#,STRING,30
:FILL &ARR_QLISTE#[] = STR_SPLIT(&QUEUELISTE#,"#")
:RSET &ARR_USED# = LENGTH(&ARR_QLISTE#[],SIZE)
:PRINT ****
! Initialparameter für WHILE-Schleife setzen
:SET &PRUEFUNG_AKTIV# = "JA"
:SET &CNT# = 1
! So lange die Prüfung &PRUEFUNG_AKTIV# ("JA") aktiv ist durchlaufen wir immer wieder alle &QUEUELISTE# Objekte
:WHILE &PRUEFUNG_AKTIV# = "JA"
: PRINT " ____________________________________"
: PRINT "| &ARR_QLISTE#[&CNT#] Infos:"
: PRINT "|____________________________________"
: SET &ACTIVE_COUNT# = GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",ACTIVE_COUNT)
: SET &ACTIVE_COUNT# = FORMAT(&ACTIVE_COUNT#)
: PRINT "| Aktive Objekte: &ACTIVE_COUNT#"
: SET &CONSIDER_ERT# = GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",CONSIDER_ERT)
: SET &CONSIDER_ERT# = FORMAT(&CONSIDER_ERT#)
: PRINT "| CONSIDER_ERT: &CONSIDER_ERT#"
: SET &MAX_SLOTS# = GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",MAX_SLOTS)
: IF ISNUMERIC(&MAX_SLOTS#) = "Y"
: SET &MAX_SLOTS# = FORMAT(&MAX_SLOTS#)
: ENDIF
: PRINT "| MAX_SLOTS: &MAX_SLOTS#"
: SET &PRIORITY# = GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",PRIORITY)
: SET &PRIORITY# = FORMAT(&PRIORITY#)
: PRINT "| Priorität: &PRIORITY#"
: SET &STATE# = GET_UC_SETTING (QUEUE,"&ARR_QLISTE#[&CNT#]",STATE)
: SET &STATE# = FORMAT(&STATE#)
: PRINT "| Status: &STATE#"
: PRINT
! Alle aktiven Objekte aller Queues addieren:
: SET &SUMME_AKTIVER_OBJ# = &SUMME_AKTIVER_OBJ# + &ACTIVE_COUNT#
: SET &SUMME_AKTIVER_OBJ# = FORMAT(&SUMME_AKTIVER_OBJ#)
: IF &CNT# = &ARR_USED#
! &CNT# jetzt wieder auf 1 setzen damit von vorne alle Queues durchgeprüft werden
: SET &CNT# = 1
: IF &SUMME_AKTIVER_OBJ# > &QUEUE_ERL_OBJKT_SUM#
: PRINT "!! In Summe gibt es &ACTIVE_COUNT# aktive Objekte. Erlaubt sind &QUEUE_ERL_OBJKT_SUM# !!"
: SET &JETZT_HHMM# = SYS_TIME_PHYSICAL('&ZEITFORMAT#')
: IF &JETZT_HHMM# >= &QUEUE_ABBRUCH_ZEIT#
: SET &PRUEFUNG_AKTIV# = "NEIN"
: PRINT "Wir warten nur bis &QUEUE_ABBRUCH_ZEIT# Uhr und die Zeit ist vorbei. Patchverarbeitung wird,"
: PRINT "trotz &SUMME_AKTIVER_OBJ# aktiver Objekte, fortgesetzt!!"
: ELSE
: PRINT " ---------> &QUEUE_PRUEF_INTERVA# Sekunden bis zur nächsten Prüfung warten [max. bis: &QUEUE_ABBRUCH_ZEIT#Uhr]"
: WAIT &QUEUE_PRUEF_INTERVA#
: ENDIF
: ELSE
: PRINT "!! Erlaubt sind &QUEUE_ERL_OBJKT_SUM# aktive Objekte. Derzeit aktiv sind: &SUMME_AKTIVER_OBJ# !!"
: PRINT "Beende Script und fahre mit Patchmanagement fort"
: SET &PRUEFUNG_AKTIV# = "NEIN"
: ENDIF
: SET &SUMME_AKTIVER_OBJ# = 0
: ELSE
: SET &CNT# = &CNT# + 1
: ENDIF
:ENDWHILE