Search code examples
mainframezosafp

How to print conditional fields in PPFA code


How do I print a conditional field using PPFA code. When a value is an 'X' then I'd like to print it. However, if the 'X' is not present then I'd like to print an image. Here is my code:

LAYOUT C'mylayout' BODY
  POSITION .25  in ABSOLUTE .25 in
  FONT TIMES
  OVERLAY MYTEMPOVER  8.5 in 11.0 in;
  FIELD START  1 LENGTH 60
  POSITION 2.0  in 1.6  in;

Where it has FIELD START 1 LENGTH 60 that will print the given text at that location. But based on the value I want to print either the given text or an image. How would I do that?


Solution

  • Here is an answer from the AFP-L list:

    I would create two PAGEFORMATS, one with LAYOUT for TEXT and one with LAYOUT for IMAGE. With CONDITION you can jump between the Pageformats (where Copygroup is always 'NULL')

    If you work in a z/OS environment, be careful of 'JES Blanc Truncation'. That means in one sentence:

    • if there is a X in the data, condition is true
    • if there is nothing in the data, condition doesn't work and is always wrong (nothing happens) In this case you must create a Condition which is always true. I call it a Dummy-Condition.

    PPFA sample syntax:

    CONDITION TEST start 1 length 1 
    when eq 'X' NULL PAGEFORMAT PRTTXT
    when ge x'00' NULL PAGEFORMAT PRTIMAGE;
    

    You must copy this CONDITION into both PAGEFORMATS after LAYOUT command. Blanc truncation is a difficult problem on z/OS.

    In this sample, the PAGEFORMAT named PRTTXT contains all the formatting and printing directives when the condition is true, and the other called PRTIMAGE contains every directive needed to print the image.

    HTH