Wenn der ERP-Lieferant nicht mitspielt, hast du trotzdem die Möglichkeit, dein Berechtigungskonzept zu realisieren.
Die Vorgehensweise von Dieter (und wie SAP es macht) ist die einzig Richtige und kann von keinem ERP-Anbieter "verboten" werden.
Am einfachsten ist es wirklich mit:
GRTOBJAUT OBJ(MYDTALIB) OBJTYPE(*LIB) USER(*PUBLIC) AUT(*EXCLUDE)
CHGOWNALL LIB(MYPGMLIB) NEWOWN(ERPMASTER) CUROWNAUT(*REVOKE)
CHGPGM PGM(MYPGMLIB/*ALL) USRPRF(*OWNER)
Für alle PF's, die einen "Fremd"-Zugriff benötigen, erstelle ich halt eine Lib mit speziellen LF's.
Das ganze am besten per CLP, so dass beim nächsten ERP-Release ein DLTLIB und anschließendes CALL vollkommen ausreicht, den Zustand wiederherzustellen.
Beispiel für CHGOWNALL:
CLP dazu:Code:CMD PROMPT('Ändern OBJOWN LIB/*all') PARM KWD(LIB) TYPE(*NAME) LEN(10) MIN(1) MAX(1) + EXPR(*YES) PROMPT('Bibliothek') PARM KWD(NEWOWN) TYPE(*NAME) LEN(10) MIN(1) + EXPR(*YES) PROMPT('Neuer Eigner') PARM KWD(CUROWNAUT) TYPE(*CHAR) LEN(10) + RSTD(*YES) DFT(*REVOKE) SPCVAL((*REVOKE) + (*SAME)) EXPR(*YES) PROMPT('Aktuelle + Eignerberechtigung')
Code:PGM PARM(&LIB &NEWOWN &CUROWNAUT) /* PARAMETER AUS KOMMANDO */ DCL VAR(&LIB) TYPE(*CHAR) LEN(10) DCL VAR(&NEWOWN) TYPE(*CHAR) LEN(10) DCL VAR(&CUROWNAUT) TYPE(*CHAR) LEN(10) /* VARIABLEN FÜR FEHLERAUSGANG */ DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGL) TYPE(*CHAR) LEN(10) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(512) DCL VAR(&MSGK) TYPE(*CHAR) LEN(4) /* TEMPORÄRE DATEI ERSTELLT */ DCL VAR(&CRTF) TYPE(*CHAR) LEN(1) DCLF FILE(QADSPOBJ) MONMSG MSGID(CPF0000 CPF1907) EXEC(GOTO + CMDLBL(FEHLER)) /* ÜBERWACHUUNG SYSTEMANFRAGE 2 */ SNDPGMMSG MSG('/* */') TOPGMQ(*SAME) MSGTYPE(*RQS) RCVMSG PGMQ(*SAME) MSGTYPE(*RQS) RMV(*NO) + KEYVAR(&MSGK) DSPOBJD OBJ(&LIB/*ALL) OBJTYPE(*ALL) DETAIL(*BASIC) + OUTPUT(*OUTFILE) OUTFILE(QTEMP/CHGOBJALL) + OUTMBR(*FIRST *REPLACE) CHGVAR VAR(&CRTF) VALUE('X') OVRDBF FILE(QADSPOBJ) TOFILE(QTEMP/CHGOBJALL) SCHLEIFE: RCVF MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(ENDE)) IF COND(&ODOBOW *NE &NEWOWN) THEN(DO) CHGOBJOWN OBJ(&ODLBNM/&ODOBNM) OBJTYPE(&ODOBTP) + NEWOWN(&NEWOWN) CUROWNAUT(&CUROWNAUT) ENDDO GOTO CMDLBL(SCHLEIFE) ENDE: IF COND(&CRTF *NE ' ') THEN(DO) DLTF FILE(QTEMP/CHGOBJALL) MONMSG MSGID(CPF0000) ENDDO RMVMSG PGMQ(*SAME) MSGKEY(&MSGK) CLEAR(*BYKEY) MONMSG MSGID(CPF0000) RETURN FEHLER: RCVMSG PGMQ(*SAME) MSGTYPE(*EXCP) MSGDTA(&MSGDTA) + MSGID(&MSGID) MSGF(&MSGF) MSGFLIB(&MSGL) RMVMSG PGMQ(*SAME) MSGKEY(&MSGK) CLEAR(*BYKEY) MONMSG MSGID(CPF0000) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGL/&MSGF) + MSGDTA(&MSGDTA) TOPGMQ(*PRV) MSGTYPE(*ESCAPE) ENDPGM
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks