|
Ed, Will the following game plan work for us? During Sunday's upgrade, V5R1's QUSRSYS/QUSEXRGOBJ did indeed overlay & destroy the top level of our function registry. Now I don't want to roll back our QUSRSYS to V4R5. However, I think I can fix the problem like this (unless I hear a warning). The internal QSYS objects of type X'0ECA' (object name = our administrable function name) still exist in QSYS library, and the user profiles still have private authorities to these X'0ECA' objects. We had named all of our administrable functions beginning with the five characters "RVWK_". Today I wrote a program that does MATCTX on the QSYS object types X'0ECA' and object names that begin with "RVWK_". For each index system pointer in this materialization, I printed the index object name, and did MATAUU function X"22" to get the system pointers to user profiles that have private authorities to the index objects, then did MATUP and printed the user profile names under each index name. Next, I might run DESINX on all the object types X'0ECA' in QSYS with object names beginning with "RVWK_". Next, armed with these printouts of the administrable function names and the user names, I might be able to re-key our company's entire function structure from scratch, using "QsyRegisterFunction" API and "QsyChangeFunctionUsageInfo" API. Although the printouts don't show our prior function product names and function group names, I'm pretty sure I can reconstruct that part from memory. Here is the program, with DESINX commented, and with the printing part omitted in order to shorten this e-mail. I hope this works when I un-comment the DESINX. dcl sysptr ?Qsys auto init("QSYS", type(ctx)); dcl dd Mat auto char(H"2000") bdry(16); dcl dd * def(Mat) pos(1) bin(4) init(H"2000"); dcl dd IndexCount def(Mat) pos(5) bin(4); dcl spcptr ?Mat auto init(Mat); dcl spcptr ?Travel auto; dcl dd IndexName bas(?Travel) pos(3) char(30); dcl sysptr ?Index bas(?Travel) pos(H"21"); dcl dd Mat2 auto char(H"2000") bdry(16); dcl dd * def(Mat2) pos(1) bin(4) init(H"2000"); dcl dd UserCount def(Mat2) pos(11) bin(2); dcl spcptr ?Mat2 auto init(Mat2); dcl spcptr ?Travel2 auto; dcl sysptr ?UserProf bas(?Travel2) pos(H"11"); dcl dd Mat3 auto char(H"100") bdry(16); dcl dd * def(Mat3) pos(1) bin(4) init(H"100"); dcl dd UserName def(Mat3) pos(11) char(10); dcl spcptr ?Mat3 auto init(Mat3); matctx ?Mat, ?Qsys, X"030600050ECAD9E5E6D26D"; /* "RVWK_" */ subn(s) IndexCount, H"60"; addspp ?Travel, ?Mat, H"60"; AA: /* print index name here */ matauu ?Mat2, ?Index, X"22"; addspp ?Travel2, ?Mat2, H"10"; BB: matup ?Mat3, ?UserProf; /* print user name here */ addspp ?Travel2, ?Travel2, H"20"; subn(sb) UserCount, 1 / pos(BB); /* desinx ?Index; */ addspp ?Travel, ?Travel, H"30"; subn(sb) IndexCount, H"30" / pos(AA); pend;
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.