Focal Point
[SOLVED]Problem with updating records in a loop

This topic can be found at:
http://forums.informationbuilders.com/eve/forums/a/tpc/f/7971057331/m/2937041276

August 11, 2014, 05:44 PM
andrekilik
[SOLVED]Problem with updating records in a loop
Hi everyone, as I said in a previous post I made i'm really new to Focus, learning it on-th-fly for a project here, and I'm having a problem that no matter how much I look and Work around I can't find a solution.
I'll try to briefly explain the problem here, and then I'll copy the code to see if any of you can help me out with this.
This is FOCUS 7.6.2 on OS/390
The problem is I have a file, and I need to update (or just bypass) a few records on it depending on user action, those records come up in a CRTFORM, and in sequence. When there are no more records in the file to be displayed, I just update the records. The problem I'm having here is that even when some records are displayed on the CRTFORM (making me certain that the record is there), it later rejects the transaction stating there was no match on the segment.
This is the first problem, the biggest issue is that if I enter the screen again, and re-try the update action, everything goes fine, even for the records that were rejected in the first Run.
I'm honestly out of ideas of what could be happening here, if anyone can bring any light to my thoughts it would be really appreciated.
Below is the code:


-SET &&TEMPID='        ';
-TSO RUN GETUSER,&&TEMPID
-SET &&LOGID = EDIT(&&TEMPID, '9999999');
TABLE FILE SECFLLOG
PRINT *
IF SEC_OPERID NE '&&LOGID'
IF VER_STATUS EQ ' '
ON TABLE SET EXTRACT ON
ON TABLE HOLD AS APPRFILE FORMAT FOCUS
END
-RUN
-IF &RECORDS EQ 0 GOTO NOTHING ELSE GOTO LOOPR;
-***
-NOTHING
-***
-SET &ACTION = 'X';
-CRTFORM LINE 1
-"*********************************************************************"
-"* <69 *"
-"*    THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
-"*    PRESS ENTER TO GO BACK <T.&ACTION>                   <69 *"
-"* <69 *"
-"*********************************************************************"
IF &ACTION IS 'X' GOTO EXITIT;
-***
-LOOPR
MODIFY FILE APPRFILE
NEXT USERID
ON NONEXT GOTO NORECS
ON NEXT COMPUTE
VER_OPERID = '&&LOGID';
VER_MAINT_DT = TODAY(VER_MAINT_DT)
VER_TIME = HHMMSS(VER_TIME);
ON NEXT  CRTFORM LINE 1
"*********************************************************************"
"*          APPROVE OR REJECT OUTSTANDING REQUESTS               <69 *"
"*-------------------------------------------------------------------*"
"* ENTER ACTION (A/R/B/X):  <T.VER_STATUS>                       <69 *"
"*-------------------------------------------------------------------*"
"*                          REQUEST DATA                         <69 *"
"* USERID      : <D.USERID          REQ_SYSTEM : <D.REQ_SYSTEM   <69 *"
"* REQ_TYPE    : <D.REQ_TYPE                 REQ_STATUS : <D.REQ_STATUS  <69 *"
"* NAME BEFORE : <D.FIRST_NAM_BF/50                               <69 *"
"* SURNAME BF  : <D.LAST_NAME_BF/50                               <69 *"
"* NAME AFTER  : <D.FIRST_NAM_AF/50                               <69 *"
"* SURNAME AF  : <D.LAST_NAME_AF/50                               <69 *"
"* AUTH. BEFORE: <D.LEVEL_BFOR      AUTH. AFTER : <D.LEVEL_AFTR <69 *"
"*-------------------------------------------------------------------*"
"*            REQUEST            |            VALIDATION         <69 *"
"* SEC_OPERID   : <D.SEC_OPERID       | VER_OPERID   : <D.VER_OPERID   <69 *"
"* SEC_MAINT_DT : <D.SEC_MAINT_DT      | VER_MAINT_DT : <D.VER_MAINT_DT <69 *"
"* SEC_TIME     : <D.SEC_TIME      | VER_TIME     : <D.VER_TIME     <69 *"
"*********************************************************************"
" "
" "
" "
IF VER_STATUS IS 'B' GOTO TOP;
IF VER_STATUS IS 'X' GOTO EXIT;
-***
-*  This last part with the updates are already quite bad to understand, the second ON MATCH was added because
-*  in prior runs i was always losing the update on the last record.
-***
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT GOTO TOP
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NONEXT GOTO NORECS
-***
CASE NORECS
COMPUTE
ACTION/A1 = 'X';
CRTFORM
"**********************************************************************"
"* <69 *"
"*     THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
"*     PRESS ENTER TO GO BACK                                     <69 *"
"* <69 *"
"**********************************************************************"
IF ACTION IS 'X' GOTO EXIT;
ENDCASE
-***
DATA VIA FIDEL
LOG INVALID MSG OFF
END
-***
-EXITIT
-RUN
-EXIT  

This message has been edited. Last edited by: andrekilik,


FOCUS 7.6
Mainframe, Outputs available
August 12, 2014, 03:17 AM
Danny-SRL
Andre,
You do have many problems.
1.
  
TABLE FILE SECFLLOG
PRINT *
IF SEC_OPERID NE '&&LOGID'
IF VER_STATUS EQ ' '
ON TABLE SET EXTRACT ON
ON TABLE HOLD AS APPRFILE FORMAT FOCUS
END

When you use PRINT * and then HOLD FORMAT FOCUS, your key field is going to be FOCLIST.
Are you sure you sure you want to extract all records where the SEC_OPID is NOT EQUAL to the user-id?

Then 2: your NEXT command should be
  
MODIFY FILE APPRFILE
NEXT FOCLIST

Then 3: you are missing a semi colon
ON NEXT COMPUTE
VER_OPERID = '&&LOGID';
VER_MAINT_DT = TODAY(VER_MAINT_DT); <- here
VER_TIME = HHMMSS(VER_TIME);
  

You don't differentiate between A(pprove) and R(eject)

Following your ON NEXT CRTFORM, you have ON MATCH commands which do no got with NEXT processing. Delete them!
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT GOTO TOP
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NONEXT GOTO NORECS
  


Start from all this, and see where it gets you...


Daniel
In Focus since 1982
wf 8.202M/Win10/IIS/SSA - WrapApp Front End for WF

August 12, 2014, 12:38 PM
andrekilik
quote:
Originally posted by Danny-SRL:
Andre,
You do have many problems.
1.
TABLE FILE SECFLLOG
PRINT *
IF SEC_OPERID NE '&&LOGID'
IF VER_STATUS EQ ' '
ON TABLE SET EXTRACT ON
ON TABLE HOLD AS APPRFILE FORMAT FOCUS
END 

When you use PRINT * and then HOLD FORMAT FOCUS, your key field is going to be FOCLIST.
Are you sure you sure you want to extract all records where the SEC_OPID is NOT EQUAL to the user-id?

Yes I do, if I didn't that wouldn't be my condition would it?
I need to show all the records that were input by other users, and that have a ver_status in blank (in system meaning, all pending requests opened by other users, i can't see my own opened records).
I was using * because I need all the fields in the file, as in the CRTFORM shown subsequently, that are all the file fields.
Following your sugestion, I changed it to a list of all the fields naming each one. The problem kept being the same.

quote:
You don't differentiate between A(pprove) and R(eject)

Because I don't need to, I just want to jump over to the next record if the action entered was B, and get out if it was X, if it is either A or R, it should just update the record with the corresponding value. There's another focexec that takes care of reading this updated info to take action later in the process.

quote:
Following your ON NEXT CRTFORM, you have ON MATCH commands which do no got with NEXT processing. Delete them!

I think I had pointed clearly in the comment that I had left this on match because without it, the last record was never updated, if you understand why then explain me, and how it should be...

But spite all of that, using your recommendations, I was able to find out that basically my problem was the APPRFILE that I was using.
It was really losing it's key fields even when I had inputed all the fields (I later use a match to input the records from apprfile updated back to secfllog)

So I started looking at all the process, and thought of a solution that is working almost perfectly, now it updates perfectly, but it shows all records on file, and I need to filter records using that condition on the first table file I have shown earlier.
Here is the code that I'm using now, I tried skipping records that matched my condition using VALIDATE, but to no avail. Is there a way to filter the records properly? MY ONLY PROBLEM NOW IS THE FILTERING OF THE RECORDS
Some of your previous pointed errors, might still be here, because it was the only I found to make the last record be updated..

-TSO RUN GETUSER,&&TEMPID
-SET &&LOGID = EDIT(&&TEMPID, '9999999');
TABLE FILE SECFLLOG
PRINT REQ_SYSTEM
      USERID   AND HOLD
IF SEC_OPERID NE '&&LOGID'
IF VER_STATUS EQ ' '
END
-RUN
-IF &RECORDS EQ 0 GOTO NOTHING ELSE GOTO LOOPR;
-***
-NOTHING
-***
-SET &ERRMSG = ' ';
-SET &ACTION = 'X';
-CRTFORM LINE 1
-"*********************************************************************"
-"* <69 *"
-"*    THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
-"*    PRESS ENTER TO GO BACK <T.&ACTION>                   <69 *"
-"* <69 *"
-"*********************************************************************"
-"  "
-"  "
-"<.HD.&ERRMSG"
-***
-IF &ACTION IS 'X' GOTO EXITIT;
-LOOPR
-*MODIFY FILE APPRFILE
MODIFY FILE SECFLLOG
NEXT REQ_SYSTEM USERID
-****
-*   the below validates are what I'm trying to use right now to skip the records 
-*   that should not be shown in screen, but didn't work. 
-*   actually this is what i need, HOW TO FILTER THE RECORDS SHOWN.
-****
VALIDATE
OPETEST = SEC_OPERID NE '&&LOGID';
ON INVALID GOTO JUMPREC
VALIDATE
VERTEST = VER_STATUS EQ ' ';
ON INVALID GOTO JUMPREC
ON NONEXT GOTO NORECS
ON NEXT COMPUTE
VER_OPERID = '&&LOGID';
VER_MAINT_DT = TODAY(VER_MAINT_DT);
VER_TIME = HHMMSS(VER_TIME);
ON NEXT  CRTFORM LINE 1
"*********************************************************************"
"*          APPROVE OR REJECT OUTSTANDING REQUESTS               <69 *"
"*-------------------------------------------------------------------*"
"* ENTER ACTION (A/R/B/X):  <T.VER_STATUS>                       <69 *"
"*-------------------------------------------------------------------*"
"*                          REQUEST DATA                         <69 *"
"* USERID      : <D.USERID          REQ_SYSTEM : <D.REQ_SYSTEM   <69 *"
"* REQ_TYPE    : <D.REQ_TYPE                 REQ_STATUS : <D.REQ_STATUS  <69 *"
"* NAME BEFORE : <D.FIRST_NAM_BF/50                               <69 *"
"* SURNAME BF  : <D.LAST_NAME_BF/50                               <69 *"
"* NAME AFTER  : <D.FIRST_NAM_AF/50                               <69 *"
"* SURNAME AF  : <D.LAST_NAME_AF/50                               <69 *"
"* AUTH. BEFORE: <D.LEVEL_BFOR      AUTH. AFTER : <D.LEVEL_AFTR <69 *"
"*-------------------------------------------------------------------*"
"*            REQUEST            |            VALIDATION         <69 *"
"* SEC_OPERID   : <D.SEC_OPERID       | VER_OPERID   : <D.VER_OPERID   <69 *"
"* SEC_MAINT_DT : <D.SEC_MAINT_DT      | VER_MAINT_DT : <D.VER_MAINT_DT <69 *"
"* SEC_TIME     : <D.SEC_TIME      | VER_TIME     : <D.VER_TIME     <69 *"
"*********************************************************************"
" "
" "
" "
IF VER_STATUS IS 'B' GOTO TOP;
IF VER_STATUS IS 'X' GOTO EXIT;
-***
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT GOTO TOP
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NONEXT GOTO NORECS
-***
CASE NORECS
COMPUTE
ACTION/A1 = 'X';
CRTFORM
"**********************************************************************"
"* <69 *"
"*     THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
"*     PRESS ENTER TO GO BACK                                     <69 *"
"* <69 *"
"**********************************************************************"
IF ACTION IS 'X' GOTO EXIT;
ENDCASE
CASE JUMPREC
NEXT REQ_SYSTEM USERID
GOTO TOP
ENDCASE
-***
DATA VIA FIDEL
LOG INVALID MSG OFF
END
TABLE FILE SECFLLOG
PRINT USERID AND HOLD AS USERFILE
IF VER_OPERID EQ '&&LOGID'
IF VER_STATUS EQ 'A'
IF VER_MAINT_DT EQ '&PROCDATE'
END
-RUN
-IF &RECORDS EQ 0 GOTO EXITIT;
-READLOOP
-READ USERFILE NOCLOSE &USERID.A7.
TSO EX   'EPO.ENP1.PCS.CLIST(SUBCLIST)' '&USERID'
-PROMPT &TESTE
-IF &IORETURN NE 0 GOTO EXITIT;
-GOTO READLOOP;
-***
-EXITIT
-RUN
-EXIT



FOCUS 7.6
Mainframe, Outputs available
August 13, 2014, 03:47 AM
Alan B
When using MODIFY, there are some basics that should be adhered to, the main one is the order of statements, and how MODIFY interprets these.

The first block of code is an implied CASE TOP with an implied ENDCASE.

In its basic form, When a NEXT is issued, ALL following statements until an ENDCASE is encountered are based on the ON NEXT or ON NONEXT conditions. This means that using and IF or VALIDATE without one of these conditions causes these commands to be processed out of sequence.

As Danny said, an ON MATCH has no place within NEXT processing. Whatever the issues that exist this is incorrect syntax.

Rather than changing the base logic, which was fine, simplify to what it should be:
MODIFY FILE APPRFILE

-* implied CASE TOP
NEXT USERID
ON NONEXT GOTO NORECS
ON NEXT COMPUTE
VER_OPERID = '&&LOGID';
VER_MAINT_DT = TODAY(VER_MAINT_DT);
VER_TIME = HHMMSS(VER_TIME);
ON NEXT CRTFORM LINE 1
"*********************************************************************"
"*          APPROVE OR REJECT OUTSTANDING REQUESTS               <69 *"
"*-------------------------------------------------------------------*"
"* ENTER ACTION (A/R/B/X):  <T.VER_STATUS>                       <69 *"
"*-------------------------------------------------------------------*"
"*                          REQUEST DATA                         <69 *"
"* USERID      : <D.USERID          REQ_SYSTEM : <D.REQ_SYSTEM   <69 *"
"* REQ_TYPE    : <D.REQ_TYPE                 REQ_STATUS : <D.REQ_STATUS  <69 *"
"* NAME BEFORE : <D.FIRST_NAM_BF/50                               <69 *"
"* SURNAME BF  : <D.LAST_NAME_BF/50                               <69 *"
"* NAME AFTER  : <D.FIRST_NAM_AF/50                               <69 *"
"* SURNAME AF  : <D.LAST_NAME_AF/50                               <69 *"
"* AUTH. BEFORE: <D.LEVEL_BFOR      AUTH. AFTER : <D.LEVEL_AFTR <69 *"
"*-------------------------------------------------------------------*"
"*            REQUEST            |            VALIDATION         <69 *"
"* SEC_OPERID   : <D.SEC_OPERID       | VER_OPERID   : <D.VER_OPERID   <69 *"
"* SEC_MAINT_DT : <D.SEC_MAINT_DT      | VER_MAINT_DT : <D.VER_MAINT_DT <69 *"
"* SEC_TIME     : <D.SEC_TIME      | VER_TIME     : <D.VER_TIME     <69 *"
"*********************************************************************"
" "
" "
" "
ON NEXT IF VER_STATUS IS 'B' GOTO TOP;
ON NEXT IF VER_STATUS IS 'X' GOTO EXIT;
-***
ON NEXT UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT GOTO TOP
-***
-* implied ENDCASE

CASE NORECS
COMPUTE
ACTION/A1 = 'X';
CRTFORM
"**********************************************************************"
"* <69 *"
"*     THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
"*     PRESS ENTER TO GO BACK                                     <69 *"
"* <69 *"
"**********************************************************************"
IF ACTION IS 'X' GOTO EXIT;
ENDCASE
-***
DATA VIA FIDEL
LOG INVALID MSG OFF
END

This code should work as you expect. With the correct syntax any issues that appear can be investigated. If the syntax is wrong it is problematic to cure issues.


Alan.
WF 7.705/8.007
August 13, 2014, 06:26 AM
andrekilik
Oh thanks for that, but that still doesn't answer my question main question. How do I filter the records for the modify?
Using the first example of extracting a file, some records are always rejected, using the second example I can't filter any records... And that's what I really need...


FOCUS 7.6
Mainframe, Outputs available
August 13, 2014, 07:08 AM
andrekilik
This is how my code looks now, and even when it show me the records in the screen, it rejects then when trying to merge with the original data file:
The thing is, I need to modify only the records that have this filtering option, when I try merging the files, some records give me a nomatch, and are rejected...
Is there a way I can use modify directly into SECFLLOG applying that filter to show only the records I want on the CRTFORM?
IF not, what am I doing wrong in this merging of the datafiles?
-SET &&TEMPID='        ';
-TSO RUN GETUSER,&&TEMPID
-SET &&LOGID = EDIT(&&TEMPID, '9999999');
TABLE FILE SECFLLOG
PRINT REQ_SYSTEM
      USERID
      FIRST_NAM_BF
      FIRST_NAM_AF
      LAST_NAME_BF
      LAST_NAME_AF
      REQ_TYPE
      REQ_STATUS
      SEC_OPERID
      SEC_MAINT_DT
      SEC_TIME
      VER_OPERID
      VER_MAINT_DT
      VER_TIME
      VER_STATUS
      LEVEL_BFOR
      LEVEL_AFTR
IF SEC_OPERID NE '&&LOGID'
IF VER_STATUS EQ ' '
BY REQ_SYSTEM BY USERID
ON TABLE SET EXTRACT ON
ON TABLE HOLD AS APPRFILE FORMAT FOCUS INDEX REQ_SYSTEM USERID
END
-RUN
-IF &RECORDS EQ 0 GOTO NOTHING ELSE GOTO LOOPR;
-***
-NOTHING
-***
-SET &ERRMSG = ' ';
-SET &ACTION = 'X';
-CRTFORM LINE 1
-"*********************************************************************"
-"* <69 *"
-"*    THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
-"*    PRESS ENTER TO GO BACK <T.&ACTION>                   <69 *"
-"* <69 *"
-"*********************************************************************"
-"  "
-"  "
-"<.HD.&ERRMSG"
-***
IF &ACTION IS 'X' GOTO EXITIT;
-LOOPR
MODIFY FILE APPRFILE
-*MODIFY FILE HOLD
NEXT REQ_SYSTEM USERID
ON NONEXT GOTO NORECS
ON NEXT COMPUTE
VER_OPERID = '&&LOGID';
VER_MAINT_DT = TODAY(VER_MAINT_DT);
VER_TIME = HHMMSS(VER_TIME);
ON NEXT  CRTFORM LINE 1
"*********************************************************************"
"*          APPROVE OR REJECT OUTSTANDING REQUESTS               <69 *"
"*-------------------------------------------------------------------*"
"* ENTER ACTION (A/R/B/X):  <T.VER_STATUS>                       <69 *"
"*-------------------------------------------------------------------*"
"*                          REQUEST DATA                         <69 *"
"* USERID      : <D.USERID          REQ_SYSTEM : <D.REQ_SYSTEM   <69 *"
"* REQ_TYPE    : <D.REQ_TYPE                 REQ_STATUS : <D.REQ_STATUS  <69 *"
"* NAME BEFORE : <D.FIRST_NAM_BF/50                               <69 *"
"* SURNAME BF  : <D.LAST_NAME_BF/50                               <69 *"
"* NAME AFTER  : <D.FIRST_NAM_AF/50                               <69 *"
"* SURNAME AF  : <D.LAST_NAME_AF/50                               <69 *"
"* AUTH. BEFORE: <D.LEVEL_BFOR      AUTH. AFTER : <D.LEVEL_AFTR <69 *"
"*-------------------------------------------------------------------*"
"*            REQUEST            |            VALIDATION         <69 *"
"* SEC_OPERID   : <D.SEC_OPERID       | VER_OPERID   : <D.VER_OPERID   <69 *"
"* SEC_MAINT_DT : <D.SEC_MAINT_DT      | VER_MAINT_DT : <D.VER_MAINT_DT <69 *"
"* SEC_TIME     : <D.SEC_TIME      | VER_TIME     : <D.VER_TIME     <69 *"
"*********************************************************************"
" "
" "
" "
IF VER_STATUS IS 'B' GOTO TOP;
IF VER_STATUS IS 'X' GOTO EXIT;
-***
ON NEXT UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT GOTO TOP
-***
CASE NORECS
COMPUTE
ACTION/A1 = 'X';
CRTFORM
"**********************************************************************"
"* <69 *"
"*     THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
"*     PRESS ENTER TO GO BACK                                     <69 *"
"* <69 *"
"**********************************************************************"
IF ACTION IS 'X' GOTO EXIT;
ENDCASE
-***
DATA VIA FIDEL
LOG INVALID MSG OFF
END
-***
-UPDLOG
MATCH FILE APPRFILE
SUM  REQ_SYSTEM
     FIRST_NAM_BF
     FIRST_NAM_AF
     LAST_NAME_BF
     LAST_NAME_AF
     REQ_TYPE
     REQ_STATUS
     SEC_OPERID
     SEC_MAINT_DT
     SEC_TIME
     VER_OPERID
     VER_MAINT_DT
     VER_TIME
     VER_STATUS
     LEVEL_BFOR
     LEVEL_AFTR
BY REQ_SYSTEM BY USERID
RUN
FILE SECFLLOG
SUM REPORT_ST
BY REQ_SYSTEM BY USERID
AFTER MATCH HOLD OLD-AND-NEW
END
RUN
-***
MODIFY FILE SECFLLOG
COMPUTE
FIXFORM FROM HOLD
MATCH REQ_SYSTEM USERID
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NOMATCH REJECT
DATA ON HOLD
END
-EXITIT
-RUN
-EXIT



FOCUS 7.6
Mainframe, Outputs available
August 13, 2014, 11:35 AM
j.gross
A few points to consider:

IF VER_STATUS IS 'B' GOTO TOP;
IF VER_STATUS IS 'X' GOTO EXIT;

-- those should be conditioned with ON NEXT. Modify rearranges the directives in the top (or only) case, and generally promotes all unconditional ones to the top, ahead of the MATCH (or NEXT). (Use the MODIFY ... ECHO facility to verify the structure that will actually be run.)

I would sooner drive the MODIFY with a transation file, using MATCH rather than NEXT. With NEXT, GOTO TOP may reset position so you never get past the first segment instance.



MATCH FILE APPRFILE
SUM REQ_SYSTEM
...
BY REQ_SYSTEM BY USERID
RUN

-- It's not advisable to have two identically named columns, in the transation file fed to the final MODIFY.

-- If you only want to update rows marked Approved or Rejected by the user: add
WHERE VER_STATUS IN ('A','R'); to the first part of the MATCH FILE.

-- since you make no further reference to REPORT_ST, why do you need a MATCH FILE step at all? By construction, all the rows in APPRFILE are matchable. A simple TABLE FILE APPRFILE ... ON TABLE HOLD should do.

-- If you still get unexpected NOMATCH in the MODIFY, investigate the content of the HOLD file.


- Jack Gross
WF through 8.1.05
August 13, 2014, 12:39 PM
andrekilik
quote:

-- If you only want to update rows marked Approved or Rejected by the user: add
WHERE VER_STATUS IN ('A','R'); to the first part of the MATCH FILE.

-- since you make no further reference to REPORT_ST, why do you need a MATCH FILE step at all? By construction, all the rows in APPRFILE are matchable. A simple TABLE FILE APPRFILE ... ON TABLE HOLD should do.

As I stated I'm very new to focus, having to use it for a project here now. I'm using that MATCH FILE, because it's the only way I know to merge data from one source to another.
My problem is: I have the file SECFLLOG, I need to show in a loop through a CRTFORM all records that have a ver_status equal ' ', and that have the sec_operid different from the current logged userid.
I have tried two approaches for that:
1 - Directly using a MODIFY SECFLLOG: With this one, my records were all updated properly, but I couldn't filter the user or the status, it would simply loop through all the records, and that's not what is functionally needed.

2 - Since my first approach didn't work, I tried making it through a hold file, containing all records that would apply to my filtering. (THE APPRFILE shown earlier)
The problem here is, even when I point out the fields I want as index, it looks like FOCUS creates the FOCLIST index mentioned here earlier, and this makes it loose itself when I try merging it back to SECFLLOG
quote:
If you still get unexpected NOMATCH in the MODIFY, investigate the content of the HOLD file.

That's exaclty the problem IT's inserting 8bytes before the first field (req_system), the start of the data for all records looks like this:
:: : :SYSTEUSERID78

I believe that those at the beginning are what are causing my nomatchs.
My last try right now, was to make a -read from the hold file, excluding those 8first bytes as a filler field...
Also didn't work.. It gives me now FOC209.. saying that data exceeds lenght...
I'm completely frustated here...

SO AGAIN, is there a way to filter the records directly through MODIFY? If not, is there a way to create a HOLD without this FOCLIST parameter, or if this is not caused by the FOCLIST, what is causing it? How can I make my data matchable?


FOCUS 7.6
Mainframe, Outputs available
August 13, 2014, 01:02 PM
andrekilik
BTW, I can't use MODIFY ... ECHO here.
It gives me a " FOCUS ENDED DUE TO ERROR+"


FOCUS 7.6
Mainframe, Outputs available
August 13, 2014, 03:33 PM
j.gross
Need allocation of HLIPRINT. See this


- Jack Gross
WF through 8.1.05
August 13, 2014, 03:40 PM
j.gross
FOCLIST occurs when you use PRINT, or in MATCH FILE if the sort keys on the two sides of the match are not identically named and formatted. Neither of those conditions apply in the code you posted.

Toss in

?FF HOLD
-EXIT

before the finAl MODIFY, and post the output.
August 13, 2014, 04:12 PM
andrekilik
this link is broken, tried searching about it on the FOCUS tech lib i have here (http://ecl.informationbuilders.com/focus/index.jsp?topic=%2Fshell_76%2Fsup%2Fsu_cms%2F02cmssu8.htm)

Seems like this will give me more trouble than anything else (i'm already overdue with this, and I don't even have authorization to do some of the things required to use this sinkmachine and HLIPRINT).
I have 10 years of cobol experience, and this FOCUS thing is driving me mad... I came to this forum because I was completely hopeless, for me It's like FOCUS has WILL, and works based on his will not on the code.

Seriously guys, is there no way to filter records on a modify? If there's a way, please point me.

If there's no way, I really need to know why my data doesn't match... I just looked up the data on both files, and was capable to make an exact copy of my original SECFLLOG into APPRFILE. Still, it didn't load the data using a fixform.
Below, follow the complete code and the original focmast, of what I'm trying to do.
If you look closely, My last resort was trying to make a read from the hold file, with all the fields using the same format they have on the original FOCMAST, and STILL got an error... The second part of what i copied, Is an actual execution, not code. So the run values are in there, and at least I can't see anything wrong with the data, even because I'm moving it positionally...

This is how my focmast looks:
FILENAME  = SECFLLOG,SUFFIX  = FOC
SEGNAME   = SECFLROT,SEGTYPE = S1

FIELDNAME = REQ_SYSTEM  ,            ,FORMAT = A5          ,INDEX=I   ,$
FIELDNAME = USERID      ,            ,FORMAT = A8          ,INDEX=I   ,$
FIELDNAME = FIRST_NAM_BF,            ,FORMAT = A15         ,          ,$
FIELDNAME = FIRST_NAM_AF,            ,FORMAT = A15         ,          ,$
FIELDNAME = LAST_NAME_BF,            ,FORMAT = A25         ,          ,$
FIELDNAME = LAST_NAME_AF,            ,FORMAT = A25         ,          ,$
FIELDNAME = REQ_TYPE    ,            ,FORMAT = A1          ,          ,$
FIELDNAME = REQ_STATUS  ,            ,FORMAT = A1          ,          ,$
FIELDNAME = SEC_OPERID  ,            ,FORMAT = A7          ,          ,$
FIELDNAME = SEC_MAINT_DT,            ,FORMAT = A8          ,          ,$
FIELDNAME = SEC_TIME    ,            ,FORMAT = A8          ,          ,$
FIELDNAME = VER_OPERID  ,            ,FORMAT = A7          ,          ,$
FIELDNAME = VER_MAINT_DT,            ,FORMAT = A8          ,          ,$
FIELDNAME = VER_TIME    ,            ,FORMAT = A8          ,          ,$
FIELDNAME = VER_STATUS  ,            ,FORMAT = A1          ,          ,$
FIELDNAME = LEVEL_BFOR  ,            ,FORMAT = A1          ,          ,$
FIELDNAME = LEVEL_AFTR  ,            ,FORMAT = A1          ,          ,$



-SET &&TEMPID='        ';
-TSO RUN GETUSER,&&TEMPID
-SET &&LOGID = EDIT(&&TEMPID, '9999999');
TABLE FILE SECFLLOG
PRINT REQ_SYSTEM
      USERID
      FIRST_NAM_BF
      FIRST_NAM_AF
      LAST_NAME_BF
      LAST_NAME_AF
      REQ_TYPE
      REQ_STATUS
      SEC_OPERID
      SEC_MAINT_DT
      SEC_TIME
      VER_OPERID
      VER_MAINT_DT
      VER_TIME
      VER_STATUS
      LEVEL_BFOR
      LEVEL_AFTR
IF SEC_OPERID NE '&&LOGID'
IF VER_STATUS EQ ' '
BY REQ_SYSTEM BY USERID
ON TABLE SET EXTRACT ON
ON TABLE HOLD AS APPRFILE FORMAT FOCUS INDEX REQ_SYSTEM USERID
END
-RUN
-IF &RECORDS EQ 0 GOTO NOTHING ELSE GOTO LOOPR;
-***
-NOTHING
-***
-SET &ERRMSG = ' ';
-SET &ACTION = 'X';
-CRTFORM LINE 1
-"*********************************************************************"
-"* <69 *"
-"*    THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
-"*    PRESS ENTER TO GO BACK <T.&ACTION>                   <69 *"
-"* <69 *"
-"*********************************************************************"
-"  "
-"  "
-"<.HD.&ERRMSG"
-***
IF &ACTION IS 'X' GOTO EXITIT;
-LOOPR
MODIFY FILE APPRFILE
-*MODIFY FILE HOLD
NEXT REQ_SYSTEM USERID
ON NONEXT GOTO NORECS
ON NEXT COMPUTE
VER_OPERID = '&&LOGID';
VER_MAINT_DT = TODAY(VER_MAINT_DT);
VER_TIME = HHMMSS(VER_TIME);
ON NEXT  CRTFORM LINE 1
"*********************************************************************"
"*          APPROVE OR REJECT OUTSTANDING REQUESTS               <69 *"
"*-------------------------------------------------------------------*"
"* ENTER ACTION (A/R/B/X):  <T.VER_STATUS>                       <69 *"
"*-------------------------------------------------------------------*"
"*                          REQUEST DATA                         <69 *"
"* USERID      : <D.USERID          REQ_SYSTEM : <D.REQ_SYSTEM   <69 *"
"* REQ_TYPE    : <D.REQ_TYPE                 REQ_STATUS : <D.REQ_STATUS  <69 *"
"* NAME BEFORE : <D.FIRST_NAM_BF/50                               <69 *"
"* SURNAME BF  : <D.LAST_NAME_BF/50                               <69 *"
"* NAME AFTER  : <D.FIRST_NAM_AF/50                               <69 *"
"* SURNAME AF  : <D.LAST_NAME_AF/50                               <69 *"
"* AUTH. BEFORE: <D.LEVEL_BFOR      AUTH. AFTER : <D.LEVEL_AFTR <69 *"
"*-------------------------------------------------------------------*"
"*            REQUEST            |            VALIDATION         <69 *"
"* SEC_OPERID   : <D.SEC_OPERID       | VER_OPERID   : <D.VER_OPERID   <69 *"
"* SEC_MAINT_DT : <D.SEC_MAINT_DT      | VER_MAINT_DT : <D.VER_MAINT_DT <69 *"
"* SEC_TIME     : <D.SEC_TIME      | VER_TIME     : <D.VER_TIME     <69 *"
"*********************************************************************"
" "
" "
" "
IF VER_STATUS IS 'B' GOTO TOP;
IF VER_STATUS IS 'X' GOTO EXIT;
-***
ON NEXT UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NEXT GOTO TOP
-***
CASE NORECS
COMPUTE
ACTION/A1 = 'X';
CRTFORM
"**********************************************************************"
"* <69 *"
"*     THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
"*     PRESS ENTER TO GO BACK                                     <69 *"
"* <69 *"
"**********************************************************************"
IF ACTION IS 'X' GOTO EXIT;
ENDCASE
-***
DATA VIA FIDEL
LOG INVALID MSG OFF
END
-***
-UPDLOG
MATCH FILE APPRFILE
SUM  REQ_SYSTEM
     FIRST_NAM_BF
     FIRST_NAM_AF
     LAST_NAME_BF
     LAST_NAME_AF
     REQ_TYPE
     REQ_STATUS
     SEC_OPERID
     SEC_MAINT_DT
     SEC_TIME
     VER_OPERID
     VER_MAINT_DT
     VER_TIME
     VER_STATUS
     LEVEL_BFOR
     LEVEL_AFTR
BY REQ_SYSTEM BY USERID
RUN
FILE SECFLLOG
SUM REPORT_ST
BY REQ_SYSTEM BY USERID
AFTER MATCH HOLD OLD-AND-NEW
END
RUN
-***
MODIFY FILE SECFLLOG
COMPUTE
FIXFORM FROM HOLD
MATCH REQ_SYSTEM USERID
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
ON NOMATCH REJECT
DATA ON HOLD
END
TABLE FILE APPRFILE 
PRINT REQ_SYSTEM 
      USERID
      VER_OPERID 
      VER_MAINT_DT
      VER_TIME
      VER_STATUS AND HOLD AS USERFILE
IF VER_OPERID IS '&&LOGID'
IF VER_STATUS IS 'A'
END
-RUN
-IF &RECORDS EQ 0 GOTO EOJ;
-READLOOP 
-READ USERFILE NOCLOSE  &HSYS.A5. &HFIL.A3. &HUSER.A8., 
- &HOPER.A7. &HFIL.A1. &HDT.A8. &HTM.A8. &HSTAT.A1. 
-TYPE &hsys &huser &hoper &hdt &htm &hstat
BTCCS CHKLF01  CHKTMPC   08/11/14 15.43.35 A 
-RUN 
MODIFY FILE SECFLLOG 
COMPUTE 
REQ_SYSTEM = 'BTCCS'; 
USERID = 'CHKLF01 '; 
MATCH REQ_SYSTEM USERID 
ON NOMATCH REJECT 
ON MATCH COMPUTE 
VER_OPERID = 'CHKTMPC'; 
VER_MAINT_DT = '08/11/14'; 
VER_TIME = '15.43.35'; 
VER_STATUS = 'A'; 
ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS 
DATA ON USERFILE 
END 
-RUN 
(FOC209) THE DATA VALUE EXCEEDS ITS LENGTH SPECIFICATION: BTCCS 
EDSNETO CHKTMPC 08/11/1415.43.37A 
-*TSO EX   'EPO.ENP1.PCS.CLIST(SUBCLIST)' '&USERID' 
-IF        0 NE 0 GOTO EOJ;, 
-GOTO READLOOP;


Sorry for all the bothering guys, and if I seemed harsh to anyone, but I'm almost throwing punches against the monitor here... Been on this for almost a week, and still got no clue of what is wrong.


FOCUS 7.6
Mainframe, Outputs available
August 13, 2014, 05:13 PM
andrekilik
quote:
Originally posted by j.gross:
FOCLIST occurs when you use PRINT, or in MATCH FILE if the sort keys on the two sides of the match are not identically named and formatted. Neither of those conditions apply in the code you posted.

Toss in

?FF HOLD
-EXIT

before the finAl MODIFY, and post the output.


Answering your questions:
I've made it to the APPRFILE and SECFLLOG (used it on the last piece of code, so no Hold)
>,,>,?ff apprfile 
 , 
  FILENAME=  APPRFILE, 
 , 
  REQ_SYSTEM    E01           A5, 
  USERID        E02           A8, 
  FIRST_NAM_BF  E03           A15, 
  FIRST_NAM_AF  E04           A15, 
  LAST_NAME_BF  E05           A25, 
  LAST_NAME_AF  E06           A25, 
  REQ_TYPE      E07           A1, 
  REQ_STATUS    E08           A1, 
  SEC_OPERID    E09           A7, 
  SEC_MAINT_DT  E10           A8, 
  SEC_TIME      E11           A8, 
  VER_OPERID    E12           A7, 
  VER_MAINT_DT  E13           A8, 
  VER_TIME      E14           A8, 
  VER_STATUS    E15           A1, 
  LEVEL_BFOR    E16           A1, 
  LEVEL_AFTR    E17           A1, 
>,,>,?ff secfllog 
 , 
  FILENAME=  SECFLLOG, 
 , 
  REQ_SYSTEM                  A5, 
  USERID                      A8, 
  FIRST_NAM_BF                A15, 
  FIRST_NAM_AF                A15, 
  LAST_NAME_BF                A25, 
  LAST_NAME_AF                A25, 
  REQ_TYPE                    A1, 
  REQ_STATUS                  A1, 
  SEC_OPERID                  A7, 
  SEC_MAINT_DT                A8, 
  SEC_TIME                    A8, 
  VER_OPERID                  A7, 
  VER_MAINT_DT                A8, 
  VER_TIME                    A8, 
  VER_STATUS                  A1, 
  LEVEL_BFOR                  A1, 
  LEVEL_AFTR                  a1,


So structurally both files are identical, but when I try to simply do a modify using fixform, I get this:

MODIFY FILE SECFLLOG 
 ENTER SUBCOMMANDS:, 
COMPUTE 
FIXFORM FROM APPRFILE 
MATCH REQ_SYSTEM USERID 
ON NOMATCH REJECT 
ON MATCH UPDATE VER_OPERID VER_STATUS VER_MAINT_DT VER_TIME 
DATA ON APPRFILE 
END 
STARTING:, 
 (FOC415)TRANS     1 REJECTED  NOMATCH SECFLROT, 
 :   BTCCSEDSNETO TEST                          3, 
                    APCHKTMPB08/11/1414.40.37CHKTMPC08/11/1417.02.04A3 :::::::: 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

It kept giving me trans 2 rejected, trans 3 rejected... up to 10 or 11 transactions, when all I had in APPRFILE was one record...
Where's it getting all this data from?


FOCUS 7.6
Mainframe, Outputs available
August 13, 2014, 05:26 PM
j.gross
The FOC209 is a side-effect of the fact that the final Modify lacks an input directive (fixform freeform or crtform), so Modify is supplying a default one. Not important -- the Table and Modify in the loop are extraneous; the earlier Modify already applied the update.

I think this is what you need --
-SET &&TEMPID='        ';
-TSO RUN GETUSER,&&TEMPID
-SET &&LOGID = EDIT(&&TEMPID, '9999999');
TABLE FILE SECFLLOG
PRINT
      FIRST_NAM_BF  (1)
      FIRST_NAM_AF
      LAST_NAME_BF
      LAST_NAME_AF
      REQ_TYPE
      REQ_STATUS
      SEC_OPERID
      SEC_MAINT_DT
      SEC_TIME
      VER_OPERID
      VER_MAINT_DT
      VER_TIME
      VER_STATUS
      LEVEL_BFOR
      LEVEL_AFTR
BY REQ_SYSTEM
BY USERID
IF SEC_OPERID NE '&&LOGID'
IF VER_STATUS EQ ' '
ON TABLE HOLD AS APPRFILE FORMAT FOCUS  (2)
END
-RUN
-IF &RECORDS EQ 0 GOTO NOTHING ELSE GOTO LOOPR;
-***
-NOTHING
-***
-SET &ERRMSG = ' ';
-SET &ACTION = 'X';
-CRTFORM LINE 1
-"*********************************************************************"
-"* <69 *"
-"*    THERE ARE NO PENDING REQUESTS THAT YOUR USERID CAN APPROVE <69 *"
-"*    PRESS ENTER TO GO BACK <T.&ACTION>                   <69 *"
-"* <69 *"
-"*********************************************************************"
-"  "
-"  "
-"<.HD.&ERRMSG"
-***
- GOTO EXITIT

-LOOPR
?FF APPRFILE
CHECK FILE APPRFILE PICT (3)
-RUN
MODIFY FILE APPRFILE
NEXT REQ_SYSTEM USERID FOCLIST
  ON NONEXT GOTO EXIT
  ON NEXT COMPUTE
    VER_OPERID = '&&LOGID';
    VER_MAINT_DT = TODAY(VER_MAINT_DT);
    VER_TIME = HHMMSS(VER_TIME);
  ON NEXT  CRTFORM LINE 1
"*********************************************************************"
"*          APPROVE OR REJECT OUTSTANDING REQUESTS               <69 *"
"*-------------------------------------------------------------------*"
"* ENTER ACTION (A/R/B/X):  <T.VER_STATUS>                       <69 *"
"*-------------------------------------------------------------------*"
"*                          REQUEST DATA                         <69 *"
"* USERID      : <D.USERID          REQ_SYSTEM : <D.REQ_SYSTEM   <69 *"
"* REQ_TYPE    : <D.REQ_TYPE                 REQ_STATUS : <D.REQ_STATUS  <69 *"
"* NAME BEFORE : <D.FIRST_NAM_BF/50                               <69 *"
"* SURNAME BF  : <D.LAST_NAME_BF/50                               <69 *"
"* NAME AFTER  : <D.FIRST_NAM_AF/50                               <69 *"
"* SURNAME AF  : <D.LAST_NAME_AF/50                               <69 *"
"* AUTH. BEFORE: <D.LEVEL_BFOR      AUTH. AFTER : <D.LEVEL_AFTR <69 *"
"*-------------------------------------------------------------------*"
"*            REQUEST            |            VALIDATION         <69 *"
"* SEC_OPERID   : <D.SEC_OPERID       | VER_OPERID   : <D.VER_OPERID   <69 *"
"* SEC_MAINT_DT : <D.SEC_MAINT_DT      | VER_MAINT_DT : <D.VER_MAINT_DT <69 *"
"* SEC_TIME     : <D.SEC_TIME      | VER_TIME     : <D.VER_TIME     <69 *"
"*********************************************************************"
" "
" "
" "
  ON NEXT  IF VER_STATUS IS 'X' GOTO EXIT;
  ON NEXT  IF VER_STATUS IS 'B' GOTO TOP;
-***
  ON NEXT UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
  ON NEXT GOTO TOP
-***
DATA VIA FIDEL
LOG INVALID MSG OFF
END
-***
-UPDLOG
TABLE FILE APPRFILE
PRINT
     VER_OPERID  (4)
     VER_MAINT_DT
     VER_TIME
     VER_STATUS
BY REQ_SYSTEM
BY USERID
IF VER_STATUS EQ 'A' OR 'R'  (5)
ON TABLE HOLD
END
-RUN
?FF HOLD
?FF SECFLLOG
-***
MODIFY FILE SECFLLOG
FIXFORM FROM HOLD
MATCH REQ_SYSTEM USERID
  ON NOMATCH REJECT
  ON MATCH UPDATE VER_OPERID VER_MAINT_DT VER_TIME VER_STATUS
DATA ON HOLD
END


NOTES:

(1) Omit REQ_SYSTEM and USERID here, they are already included because of the BY clauses.

(2) INDEX is not needed

(3) FOCLIST is automatically introduced as a tie-breaker key in the FOCUS Hold file, because of the PRINT verb.

(4) Include just the fields to be matched and those to be updated

(5) Filter out the records that are not marked Accept or Reject
August 13, 2014, 05:31 PM
j.gross
quote:
FOC415


You cannot directly use a Focus file as a DATA source; you have to extract a flat Hold file to hold the transactions.
August 13, 2014, 06:53 PM
andrekilik
I used the code you provided. Keep getting the same error.

Here is how the data looks inside both the APPRFILE and HOLD (didn't print all fields though)

REQ_SYSTEM  USERID    VER_STATUS  VER_OPERID 
----------  ------    ----------  ---------- 
WHS         USERID1   A           APPRUSR 
WHS         USERID2   A           APPRUSR 


This is how the data gets on SECFLLOG, after the matches...

REQ_SYSTEM  USERID    VER_STATUS  VER_OPERID 
----------  ------    ----------  ---------- 
WHS         USERID1 
WHS         USERID2   A           APPRUSR 


And this is the error message, that I'm still getting
 (FOC415)TRANS     2 REJECTED  NOMATCH SECFLROT, 
 WHS     EDSNETO CHKTMPB 08/13/1418.45.57A,


It happens all the times.
What seems to be even more weird, is that if I enter the screen again, It will show me the record that wasn't updated, and on this second run, it updates normally...


FOCUS 7.6
Mainframe, Outputs available
August 13, 2014, 08:31 PM
j.gross
quote:
And this is the error message, that I'm still getting

(FOC415)TRANS 2 REJECTED NOMATCH SECFLROT,
WHS EDSNETO CHKTMPB 08/13/1418.45.57A,


From which MODIFY -- The final section of the code I posted, or your Modify-in-a-loop following that?


- Jack Gross
WF through 8.1.05
August 14, 2014, 05:56 AM
andrekilik
quote:
Originally posted by j.gross:
quote:
And this is the error message, that I'm still getting

(FOC415)TRANS 2 REJECTED NOMATCH SECFLROT,
WHS EDSNETO CHKTMPB 08/13/1418.45.57A,


From which MODIFY -- The final section of the code I posted, or your Modify-in-a-loop following that?


removing all my code, leaving just yours...
this happens with the modify that has the fixform from hold.


FOCUS 7.6
Mainframe, Outputs available
August 14, 2014, 06:45 AM
Alan B
quote:
This is how my focmast looks:
FILENAME = SECFLLOG,SUFFIX = FOC
SEGNAME = SECFLROT,SEGTYPE = S1

FIELDNAME = REQ_SYSTEM , ,FORMAT = A5 ,INDEX=I ,$
FIELDNAME = USERID , ,FORMAT = A8 ,INDEX=I ,$
FIELDNAME = FIRST_NAM_BF, ,FORMAT = A15 , ,$
FIELDNAME = FIRST_NAM_AF, ,FORMAT = A15 , ,$
FIELDNAME = LAST_NAME_BF, ,FORMAT = A25 , ,$
FIELDNAME = LAST_NAME_AF, ,FORMAT = A25 , ,$
FIELDNAME = REQ_TYPE , ,FORMAT = A1 , ,$
FIELDNAME = REQ_STATUS , ,FORMAT = A1 , ,$
FIELDNAME = SEC_OPERID , ,FORMAT = A7 , ,$
FIELDNAME = SEC_MAINT_DT, ,FORMAT = A8 , ,$
FIELDNAME = SEC_TIME , ,FORMAT = A8 , ,$
FIELDNAME = VER_OPERID , ,FORMAT = A7 , ,$
FIELDNAME = VER_MAINT_DT, ,FORMAT = A8 , ,$
FIELDNAME = VER_TIME , ,FORMAT = A8 , ,$
FIELDNAME = VER_STATUS , ,FORMAT = A1 , ,$
FIELDNAME = LEVEL_BFOR , ,FORMAT = A1 , ,$
FIELDNAME = LEVEL_AFTR , ,FORMAT = A1 , ,$


I think that the SEGTYPE = S1 is incorrect. Shouldn't it be S2?


Alan.
WF 7.705/8.007
August 14, 2014, 10:33 AM
j.gross
REQ_SYSTEM  USERID    VER_STATUS  VER_OPERID
----------  ------    ----------  ----------
WHS         USERID1   A           APPRUSR
WHS         USERID2   A           APPRUSR

REQ_SYSTEM  USERID    VER_STATUS  VER_OPERID
----------  ------    ----------  ----------
WHS         USERID1
WHS         USERID2   A           APPRUSR

...

 (FOC415)TRANS     2 REJECTED  NOMATCH SECFLROT,
 WHS     EDSNETO CHKTMPB 08/13/1418.45.57A,


The records in HOLD and the transaction string under FOC415 do not correspond! I suspect it is somehow picking up a different HOLD file.

Try
WHENCE HOLD MASTER
WHENCE HOLD FOCTEMP

And try changing HOLD to something less generic, maybe SECFLVER.


Note also that the segtype=S1 declaration would cause all transations against REQ_SYSTEM=WHS to be applied to a single instance (even if there is a whole series of USERID's under WHS), *if* Modify (incorrectly) treats a Match of a key- and non-key field (MATCH REQ_SYSTEM USERID) as just a Match on the key-field (MATCH REQ_SYSTEM). Just a suspicion.

Get that SEGTYPE changed to S2, rebuild the SECFLLOG Focus file, verify that all the records are now in proper sequence (TABLEF FILE SECFLLOG PRINT REQ_SYSTEM USERID ...), and try again.

HTH


- Jack Gross
WF through 8.1.05
August 14, 2014, 01:22 PM
andrekilik
Jack And Alan,
Changed the SEGTYPE to S2, rebuilt the files and it worked smoothly. Thanks a lot for this one.
I would never think the problem was in the focmast.


FOCUS 7.6
Mainframe, Outputs available