APPX is the Premier Development and Runtime Environment for Business Application Software
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility :
APPX Development Environment
This category contains a variety of subcategories for FAQ's relating to APPX Application Design.
Subcategories:
(Category) Tips & Techniques
(Category) ILF (Integrated Language Facility)
(Category) Menu Processes
(Category) Job Processes
(Category) Input Processes
(Category) Output Processes
(Category) Query Processes
(Category) Update Processes
(Category) Status Processes
(Category) Inquiry Processes
(Category) Subroutine Processes
(Category) Data Dictionary
(Category) Other Application Design Questions
(Category) APPXIO File Access Method
(Category) Image Editor
(Category) Compile Time Error Messages
(Answer) New Item
[New Answer in "APPX Development Environment"]
2007-Mar-08 1:43pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Tips & Techniques
Tips & Techniques relating to APPX design.
Subcategories:

Answers in this category:
(Answer) How can my APPX process tell if a user is running the GUI client?
(Answer) Is it possible to suppress the binoculars on a field that has a DLU defined?
(Answer) How to build a UNIX script to run an APPX process (cron job).
(Answer) How to refresh parent screen after a child process.
(Answer) How do I send a file to a client PC and open the file with a client side App? (i.e. Excel)
(Answer) How can I import consecutive (flat) files into APPX?
(Answer) Checking return code after a Stream Write.
(Answer) How can I run a constrained input process via ILF?
(Answer) Is it possible to get APPX to automatically convert Gregorian date fields to Julian dates?
(Answer) How to determine IO mode (READ,WRITE,HOLD) within a FLEP
(Answer) How to create dynamic rollover tool-tips.
(Answer) How to play sounds.
(Answer) What is pdf "---ENTRY SELECTED PATH" used for?
(Answer) How do you create a vertical or horizontal line on an input image?
(Answer) How do I keep production applications from accidentally being changed?
(Answer) Scope of cached files!
(Answer) How data sharing is accomplished in APPX!
(Answer) What is the difference between file content and file stream?
(Answer) What does scope refer to?
(Answer) What is the scope of a work field?
(Answer) Can I change the date and time APPX uses for testing date/time sensitive applications?
(Answer) How can I read the USER list?
(Answer) How to make a negative sign appear in front of the number (instead of behind)
(Answer) How to display high ASCII characters.
(Answer) How to get User Security Codes using ILF.
(Answer) How to QUERY/INPUT via Cache!
(Answer) How to get the name of the Parent Process.
(Answer) GUI themes via ILF!
(Answer) Example of a random number generator using ILF!
(Answer) How to retrieve an occurrence number with ILF!
(Answer) How to see a trace of executed process
(Answer) Use of --- DEFAULT MODE
(Answer) How to determine a leap year!
(Answer) How can I position a widget exactly where I want it?
(Answer) Can we colorize the "auto gui" widgets by ILF in order to adapt them to color schemes?
(Answer) Help in debugging AppxIO
(Answer) How to put multiple of lines of text on a button or label widget.
(Answer) How to add pulldown menu entries with ILF
(Answer) How to close an external ASCII file (RT_CLOSE_STREAM)?
(Answer) How to read data to an external ASCII file (RT_READ_STREAM)?
(Answer) How to write data to an external ASCII file (RT_WRITE_STREAM)?
(Answer) How to open an external ASCII file (RT_OPEN_STREAM)?
(Answer) How to put APPX in sleep (pause) mode (RT_SLEEP)?
(Answer) How to get the current process parent name (RT_GET_PROC_NAM)?
(Answer) How to get the APPX runtime parameters (RT_GETPARAM)?
(Answer) How to get the environment variables (RT_GETENV)?
(Answer) Dynamic linking using the CALL statement.
(Answer) How to access APPX Query parameters.
(Answer) How do you call a window API function?
(Answer) How do you copy from one application database to another within APPX.
(Answer) How to display detailed data from a scrolling input.
(Answer) How to read EXCEL files from Appx.
(Answer) How do I search the electronic APPX manual(s) for multiple keywords?
(Answer) The underline character is not displayed under the shortcut letter!
(Answer) How to get printer friendly pages from the APPX web site.
(Answer) How do you run an os command and pipe the results through a stream read?
(Answer) Now that I can generate PDF files from APPX, how can I get the PDF to display as such in a browser?
(Answer) What is the correct Date Mask for: Apr 13 09:23:00 2004?
(Answer) Can Current Release of Appx support LDAP?
(Answer) How does LOCAL and RECEIVE statements work?
(Answer) Can i have environment variable APPX_41_EPS set while designing in 4.2?
(Answer) I noticed that all of a sudden i have Applications tab on my Java client. How did it get there and how to get rid of it?
(Answer) I have set my --- OPTION = END PARAGRAPH, but it doesn't seem to do anything. Why is that?
(Answer) I am trying to PASTE a statement into the ILF editor, but it put "**" in the front of it and it looks miss-aligned. What did i do wrong?
(Answer) Is there a way to get rid of the automatic drop down menus that appear on my GUI menus processes?
(Answer) Is there a way to get rid of the big red X (Cancel) and the green arrow (Return)?
(Answer) Is there a way to set child constraints on a data lookup field in an Input Process?
(Answer) How can I wait on Windows-systems without consuming CPU?
(Answer) I am using a --- STREAM WRITE call on a file that is > 2GB. It doesn't crash or return an error code, but it doesn't write to a file either
(Answer) When I execute SLEEP command from an Appx CALL i get the error 'You've CALL'ed C:\WINDOWS\SYSTEM32\kernel32.dll,Sleep with the wrong calling convention'
(Answer) How can i set default values during data entry and make Appx remember them from one entry to the next one?
(Answer) Copying Files between Databases/Versions
(Answer) Adding new fileds with defualt values to an existent file
(Answer) I have an ALPHA field with a validation table, but it allows for any value to be entered, regardless of the validation table values
(Answer) What is the proper usage of --- STREAM READ LENGTH field?
(Answer) Can the STREAM READ look for the presence of the \r character as a record delimeter?
(Answer) The --- COMPARE file contains the fields that are different after an IF DIFF is executed. If a field has multiple occurances, how can I tell which occurance changed?
(Answer) How to create a PDF Form Overlay
(Answer) How to create an ASCII fixed length flat file using Appx
(Answer) Execution Cycle in Appx 4.2
(Answer) Under what circumstances you need to set NLS_LENGTH_SEMANTICS

[New Answer in "Tips & Techniques"]
2008-May-13 2:38pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How can my APPX process tell if a user is running the GUI client?
Is there a way in ILF to determine what type of client the user is using to run APPX? For example, if a user is running a "text" client, we want to display a text menu. But, if the user is running a GUI client we want to display a GUI menu.

      GOSUB    --- CHECK GUI CLIENT
      IF       --- RETURN CODE        EQ     1
T     *        Running with a GUI client
F     *        Running with a character client
[Append to This Answer]
2003-Nov-06 6:17am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Is it possible to suppress the binoculars on a field that has a DLU defined?
The APPX GUI Client automatically creates a binoculars icon that is attached to the right-hand side of any field that has a DLU (data look-up) defined. Is there any way to suppress this auto-GUI feature?
There isn't a design specification or runtime "preference" to control whether or not the APPX GUI Client appends the binocular icon to a data lookup (DLU) field. The client doesn't use an external picture file but rather has the binocular icon compiled into the Java code. This means that you cannot simply swap one icon file with another. However, APPX will only append the icon if there are two blank spaces immediately to the right of the DLU field. So, an indirect method of eliminating the icon would be to make sure that one of the two fields is not blank. Type a "." or "*" or place a MODIFIABLE field immediately to the right of the field to suppress the binoculars. If you had your own icon you wished to display or wanted to display the non-modifiable look up value (field), create that widget on the screen and then drag it over the "*".

While overriding this “standard behavior” is possible, there are serious program maintenance issues that should be considered.

[Append to This Answer]
2007-Oct-05 5:00pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to build a UNIX script to run an APPX process (cron job).
To run a background process (cron job) in UNIX, build a script as follows;


  export APPXPATH=/appx/appx350/data
  export TERM=ibm3151
  su - xxx -c "/appx/appx350/appx -s -d=ddd -a=TRN -t=JOB -p=BATCH_CYCLE" 1>/dev/null 2>/dev/null


The first export command is the APPXPATH directory for your APPX installation.
Example: /appx/appx350/data 


The second export command defines the terminal type.  Example: ibm3151.  Even
thought the process is running in the background, the terminal type must be
defined.


The su command line parameters:

     xxx is the o/s userid of who is running this process
        -c " then the APPX application path
        -s tells APPX to automatically pass through any entry screens
           like sort and disposition that might be encountered.
        -d ddd is the database id of the APPX application
        -a application id
        -t process type, most likely a JOB
        -p the name of your process followed by ".  The underscore maintains
           the space you may have in the APPX process name.
        1> and 2> tells appx to send interactive message to the null device.
           These two parameters are to be included in the su line.  

Of course you would have one script for each process you wanted to run in
background.
[Append to This Answer]
2004-Jan-27 3:11pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to refresh parent screen after a child process.
APPX 4.1
If a child process is invoked from an input process and the child process modifies a displayed data element from the PCF, you can instruct APPX to redisplay the parent screen by putting a DISPLAY statement (no Application Id or Field name) in the Post Invocation of the child process. The data processed in the child may have to be re-written depending on the type of child being invoked.

APPX 4.2
Starting with APPX 4.2, the parent screen is automatically redisplayed when returning from a child process. The DISPLAY statement in the child’s Post Invocation Event Point is not needed.

[Append to This Answer]
2004-Jan-15 5:52am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How do I send a file to a client PC and open the file with a client side App? (i.e. Excel)
The following code sends the file from the server to the Windows client PC and runs a command on the client. You need the Java client for this to work. This example sends a spreadsheet file and launches Microsoft Excel to open the file on the client.
      *
      *        Send the file to the client
      *
      SET      --- TEMP 80                    =      /tmp/info.csv
      SET      --- TEMP 132                   =      c:\temp\info.csv
      PASS     --- TEMP 80                    FIELD            SHARE? Y
      PASS     --- TEMP 132                   FIELD            SHARE? Y
      CALL         ,RT_SEND_FILE              RESIDENT? N  END? N  FAIL 0
      *
      *        Run Excel and open the file
      *
      SET      --- TEMP 256                   =      @
      APPEND   --- TEMP 256                   0      "C:\Program Files\Micr
      APPEND   --- TEMP 256                   0      osoft Office\Office\EX
      APPEND   --- TEMP 256                   0      CEL.EXE"
      *
      APPEND   --- TEMP 256                   1      c:\temp\info.csv
      *
      SET      --- LI                         =      256
      PASS     --- TEMP 256                   FIELD            SHARE? Y
      PASS     --- LI                         FIELD            SHARE? Y
      CALL         ,RT_LOAD_URL               RESIDENT? N  END? N  FAIL 0
      *
See also: (Xref) Diagnose SUBR --- SEND FILE TO CLIENT problems
_
[Append to This Answer]
2003-Dec-09 4:24pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How can I import consecutive (flat) files into APPX?
APPX users often find the need to import data from external sources into APPX. What methods can be used to bring consecutive (flat) data files into the APPX database files?
Here are three approaches:

1. If the file is "columnar" (all the data lines up into columns, and all the records have the same fixed length), define an APPX Data Dictionary file and fields corresponding to the columns for the fields, and read it directly. Have a 2-byte alpha field at the end, the 'absorb' the hex(0d0a) that Windows apps usually put on the end of each of the line, to denote end of line. See "to import a flat file" below.

2. Create an APPX consecutive file with a single 1-byte alpha field. Use it to read the text file into APPX, one byte at a time. Build a record buffer, testing for hex(0d0a) to determine the end of each record, and then writing it out to the file.

3. Using the ",RT_" commands to read the file. 'RT' commands are unsupported and subject to modification, but are often used for these sorts of tasks. We use them in the UPDATE process generated by our "Comma Delimited Update" process within Utilities/Toolbox. You might look at an UPDATE generated by this utility, to get a feel for how the commands work.

To import Tab delimited variable length files into APPX, check this document from "Sparky and Spike" at CANSYS West: http://www.cansyswest.com/importin.htm

--------------------------------------------------------------------------------
To import a flat file into APPX (for example, from an Excel spreadsheet) try the following:

1. Export the file from Excel into a fixed length format.

2. Define a Consecutive file in APPX, with all Alpha fields, matching the column widths of each Excel column, as exported.

3. Add a 2 byte alpha at the end of the APPX DD, to receive the hex(0d0a) that Excel and other Windows applications append to records to denote record boundaries.

4. Design Transfer the design for the Consecutive file defined above into a 2nd APPX file.

5. Change the field types you want to be other than Alpha, into their other field type. (Numeric, Date, or whatever.) Add indices.

6. Run 'Create Files' on both the Consecutive and Indexed files.

7. FTP the file to your Unix box in ASCII format.

8. Move the FTP'd file into your Data directory as the name of the Consecutive f ile. (Filename is all upper case, with a lower case .dat suffix.)

9. Write an OUTPUT that reads the Consecutive file and reports on its contents.

Within the 'Select Image' event point, write ILF that moves field contents from the Consecutive file into the Indexed file. Write the new record.

If you try to write two records with the same Primary or Unique Key, the WRITE will fail. Check the False condition on a WRITE to catch that and handle it accordingly.

Set --- ALTERNATE IMAGE NUMBER in Select Image to selectively display/print records of interest.

Date fields will require special manipulation. Use SET TEMP commands, to get them into APPX date format.

Run the above OUTPUT on this FTP'd file, converting it from Consecutive into Indexed format. Examine the resulting files. Modify your OUTPUT as needed.

[Append to This Answer]
2003-Nov-18 3:07pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Checking return code after a Stream Write.
In 4.1.a under Windows, the Stream Write always returns a failed (False) condition. You can't test the return code, you can only assume it worked.
[Append to This Answer]
2003-Nov-20 11:19am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How can I run a constrained input process via ILF?
APPX does not provide a direct method of running a constrained INPUT process via ILF. However, you can define a JOB process that runs the INPUT process constrained and you can run the JOB process via ILF. Be sure to run the JOB process with an invocation type of SUBPROCESS so that the constraint fields will be available within the JOB.
[Append to This Answer]
2003-Nov-22 10:24am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Is it possible to get APPX to automatically convert Gregorian date fields to Julian dates?
A display mask of 555 will display the Julian day number. A mask like "8807 - 555" would display a date as 2004-247 for example.
[Append to This Answer]
2003-Nov-24 9:19am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to determine IO mode (READ,WRITE,HOLD) within a FLEP
Is it possible to tell inside a FLEP whether it is being called from a READ or a READ w/ Hold? Or whether it's being called from a WRITE or REWRITE?
The --- MODE PDF should tell you this information. READ with HOLD sets MODE = CHANGE, without HOLD sets MODE = INQUIRE. On the PCF update event points it sets MODE = ADD for a WRITE and MODE = CHANGE for a REWRITE, MODE = DELETE for a DELETE.
[Append to This Answer]
2004-Jan-07 2:14pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to create dynamic rollover tool-tips.
To create rollover tooltips dynamically from ILF at runtime, get (or create) the WIDGET record, populate it’s WIDGET TOOLTIP (text 60) field with the desired text, and WRITE it to the widget file.
[Append to This Answer]
2003-Nov-24 9:34am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to play sounds.
APPX 4.2

The --- PLAY SOUND command ( audio subroutine ) in ILF will support .wav, .au, and .aiff file formats.  Examples;


      SET      --- TEMP 512                   =      /home/pete/test.wav
      PASS     --- TEMP 512                   FIELD            SHARE? N
      GOSUB    --- PLAY SOUND

                                                                        
      SET      --- TEMP 512                   =      file:///home/pete/test
      APPEND   --- TEMP 512                   0      .wav
      PASS     --- TEMP 512                   FIELD            SHARE? N
      GOSUB    --- PLAY SOUND

                                                                        
      SET      --- TEMP 512                   =      http://www.wavsite.com
      APPEND   --- TEMP 512                   0      /sounds/62369/grail22.
      APPEND   --- TEMP 512                   0      wav
      PASS     --- TEMP 512                   FIELD            SHARE? N
      GOSUB    --- PLAY SOUND
[Append to This Answer]
2003-Dec-01 4:26pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
What is pdf "---ENTRY SELECTED PATH" used for?
"--- ENTRY SELECTED PATH" is not documented because it's really for internal use only (and it will change, so don't use it).
You can use the "--- ACCESS PATH" pdf to determine which key field is currently in use. Unfortunately, that's a read-only PDF so you can't conveniently change back just by setting it again.
[Append to This Answer]
2003-Dec-08 9:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How do you create a vertical or horizontal line on an input image?
APPX 4.2
Appx doesn’t have a Line widget however starting in release 4.2 you can create lines using the following techniques. To get a horizontal line, add a box widget to the screen and set the height adjustment parameter to -90. To produce a vertical line, create a label widget with the height adjustment set to -80. Note that the use of negative values are supported in release 4.2 (and up) only.
[Append to This Answer]
2003-Dec-18 2:58pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How do I keep production applications from accidentally being changed?
Go to:

Appx main menu > System Administration > Databases/Applications > Applications.

Select the application you want to protect from changes. Press ENTER to go to the popup continuation window. Turn off the flag in the lower right of that window called "Allow Design?".

This makes that application "Inquire Mode Only" from within application design.

Release 4.2 was change to have the default mode in Application Design be Inquire rather than Change mode. Part of the reasoning behind that decision was to assist in protecting applications from accidentally being changed.

[Append to This Answer]
2004-Jan-15 5:59am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Scope of cached files!
When you create a cached version of a file, the contents are treated as a temporary detached memory file. You still have to choose whether each stream is attached to the cache file or the base file (see the topic, “What is the difference between file content and file stream?”).

You create the cache once, but you use OPEN-CACHE?=Y to control each stream. You can switch a given stream back and forth between the cached and base files by executing OPEN statements.

When Appx creates a file stream, it uses the base. If you have file A open in a process, and then invoke a subprocess child, we don't open file A again (and we don't create a new stream). The child shares the parent's stream. You can prove that to yourself by putting a TRAP in the File-level Open event point for file A - it won't get hit when you invoke the child process.

In the case of cached files, the file contents are always created in the first stack frame (i.e. the cached file contents are detached). The file stream always has a subprocess scope.

Here's a test scenario to illustrate how this works. I defined a simple permanent index file with two fields, TESTSCOP NUMBER and TESTSCOP NAME. Then I created a simple scrolling input process (TESTSCOP as the PDF) and entered five test records. I painted --- CHILD ID on the header frame to make it easier to see which input process was running. Next, I wrote a job that invoked the input process six times:

      CHILD ID  Invocation Type  Pre-invocation Open?   
      --------  ---------------- --------------------   
      1ST       Subprocess       No                     
      2ND       Subprocess       Yes - open cached      
      3RD       Subprocess       No                     
      4TH       Related          No                     
      5TH       Subprocess       No                     
      6TH       Subprocess       Yes - open base        
Here are the steps and results:

When the job runs, the first child displays data in the base file (PDF).

In the pre-invocation event point of the 2ND child, I CREATE the cache (type = LOAD), then OPEN the cache, then looped thru each record and appended the word CACHED to each name field. So now the base file is unchanged, but the cache file has the word CACHED in every record. When the 2ND child process runs, it displays the cached file.

When the 3RD child runs, I see the cached records because the stream is shared between the parent and children 2 and 3 (and 5 and 6).

The 4TH child is invoked related. Stream objects are not shared with related invocations, so the base PDF records are displayed.

The 5TH child is invoked subprocess and is identical to the 3RD. I added this child to illustrate that the file contents are persistent. The 5TH child shows the cached records.

In the pre-invocation event point of the 6TH child, I OPEN the CUST file, this time with CACHE set to NONE. The 6TH child displays the base records, as expected.

[Append to This Answer]
2004-Jan-15 5:41am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How data sharing is accomplished in APPX!
Each process refers to a list of objects (we call them areas internally). An object is a record buffer, a work field, file contents, or a file stream. (There are a few other object types, but we'll ignore them for now).

When you invoke a process, APPX pushes a stack frame onto the process execution stack. A stack frame contains a set of objects. Important point: a process (actually an EM) contains a set of references, a stack frame contains a set of objects.

Data sharing matches each reference to the appropriate object.

When a process is invoked, APPX walks through the list of references and determines which stack frame should contain the corresponding object.

If a process has no parent (i.e. it is the first process), all objects are created in the first stack frame. If a process has a parent, we look at the sharing characteristics of the object and of the ancestor processes. If the object is shared with subprocesses, we stop traversing the stack as soon as we encounter a related or detached invocation. If the object is shared with related processes, we stop traversing the stack as soon as we find a detached invocation. If the object is shared with detached processes, we stop when we find the first stack frame.

For example:

  Process A
          |
       detached
          |
  Process B
          |
       related
          |
  Process C
          |
      subprocess
          |
  Process D
          |
      subprocess
          |
  Process E
Let's say that you have just invoked process E (which is a subprocess child of process D, which is a subprocess child of C, which is a related child of B...).

We now process the list of references in process E's EM. If we find a reference to a private object (i.e., one that should never be shared, such as --- PROCESS TYPE), we create the object in process E's stack frame. If we find a reference to an object that should be shared with subprocesses, we look back up the stack until we find the most recently invoked related or detached process; in this case, process C. We create any subprocess-scoped objects in the stack frame for process C. If we find a reference to a related object, we look back until we find the most recently invoked detached process (in this case process B) and create related-scope objects in that stack frame. If we find a reference to an object when should be shared with detached invocations (such as --- USER ID), we create them in the first stack frame.

As we process each reference, we locate the desired object (creating it required) and point the reference to the object. That means that the references for a particular invocation can point into four different stack frames (private, subprocess, related, and detached).

Looking back at the stack frame above, consider what will happen when process E ends. All objects private to E are destroyed, but what about other objects? Any subprocess-scoped objects were created in the stack frame for process C so they are not destroyed until process C ends. There are some interesting consequences to this. First, the stack frame for any given invocation can contain objects that are not referenced by that process.

For example, if process E refers to a field named WORK TOTAL (subprocess-scoped), that object is created in C's stack frame even if process C does not refer to WORK TOTAL. Now when process E ends, WORK TOTAL is not destroyed - it lives in C's stack frame until C ends. Let's say that, after process E ends, process D invokes process F (so E and F are siblings even though E dies before F was born). If process F refers to WORK TOTAL, it will find that object in process C's stack frame - in fact, WORK TOTAL will reflect the last value assigned by process D.

[Append to This Answer]
2004-Jan-15 6:03am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
What is the difference between file content and file stream?
There are two parts to a file: the file contents, and the file stream. File contents can be permanent or temporary. If temporary, the contents can be scoped as subprocess, related, or detached. The file stream is always subprocess.

That means that if you have a stream positioned at record 10, and invoke a child as a subprocess, and READNEXT within the child, you will be sharing the stream with the parent and the parent will now be positioned at record 11. On the other hand, if you invoke the child as related or detached, the child has its own stream and a READNEXT will not affect the parent's stream.

A stream has four components:

  -  readnext position (record number/key value plus key path)
  -  an optional record lock
  -  a record buffer
  -  pointer to cached or base file

[Append to This Answer]
2004-Jan-15 6:04am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
What does scope refer to?
Please go to http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=656 for a detailed explanation of scoping as it applied to APPX.
[Append to This Answer]
2003-Dec-22 3:35pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
What is the scope of a work field?
Input#1 calls Input#2 with a 'scope' of Subprocess, Related, or Detached. Work fields (and work files) are also defined with scopes of Subprocess, Related, or Detached.

The following rules apply:

A Subprocess work field will only survive a Subprocess level of Process Invocation.

A Related work field survives both Subprocess and Related Process Invocations.

A Detached work field survives all Invocations (and in general survives until the user exits Appx).


                            Input Process Invocation Type
              ------------------------------------------------------------
              | Invocation Type   | SubProcess |  Detached  |   Related  |
              |-------------------|------------|------------|------------|
              |                   |            |            |            |
              | SubProcess        |    Yes     |     No     |     No     |
  Work Field  |                   |            |            |            |
  Invocation  | Detached          |    Yes     |     Yes    |     Yes    |
  Type        |                   |            |            |            |
              | Related           |    Yes     |     No     |     Yes    |
              |                   |            |            |            |
              ------------------------------------------------------------
Yes=Work field is passed No=Work field is not passed

[Append to This Answer]
2004-Jan-15 6:09am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Can I change the date and time APPX uses for testing date/time sensitive applications?
Yes, there is an environment variable called APPX FAKE TIME that you set to what looks like a starting date/time. Then run APPX and it uses this as the starting date/time for the session (i.e. the clock ticks forward from that date time as time rolls forward).

 If you ...
          export APPX_FAKE_TIME="2001061510000000"
          appx

 ... you get a date/time of ...
          6/15/2001 8:00am

 ... and the clock ticks forward from there as time goes by.

[Append to This Answer]
2004-Jan-15 6:11am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How can I read the USER list?
The following code will traverse the USER list.

   BEG READ 0SA USER      HOLD 0      KEY IS
   SET      0SA USER ID            =  0SA USER ID
   SET      0SA USER NAM           =  0SA USER NAM
   END READ 0SA USER

When you enter the BEG READ into the ILF editor, it will give you a message "WARNING - File not found", which you can ignore (option 88).

Be very careful what you do with these techniques, as THEY ARE NOT SUPPORTED BY APPX SOFTWARE, and may change without notice.

[Append to This Answer]
2003-Dec-31 8:57am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to make a negative sign appear in front of the number (instead of behind)
First, go to the Data Dictionary for the numeric source field, and enter a default display mask with the minus sign whenever you want it. Note: You can also put currency symbols, commas, and anything else you might need.

Then, in the process where you want to move it to an alpha, you just say:

             CNV TEXT <alpha field> = <numeric field>

The CNV TEXT field will honor the default display mask, and put the minus sign where you want. If you put currency symbols, commas, etc, they will also be formatted into the alpha field. The same thing applies if you use a date field as the source, APPX will format the date according to the date mask, so you don't get '20010517--------', you get '5/17/2001'.

APPX will use your default mask in other places as well, which may or may not be a good thing (inputs and outputs that use the numeric field will be affected). If you are concerned about that, you can create a new numeric field with the default mask you want, SET the original field into the new one, and then use CNV TEXT.

[Append to This Answer]
2004-Jan-07 2:16pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to display high ASCII characters.
To get the degree symbol (ASCII 176), for example, onto APPX OUTPUT and INPUT screens.

Depending on what version of APPX you are using and how you are accessing it, you may be able to hold down ALT, use the numeric keypad to type the ascii code value in decimal, and release ALT, to enter that ASCII char.

Or you can do it with ILF code;

 SET OWN WF ASCII CODE = 176
 CNV BIN OWN WF ALPHA 1

 ... where WF ALPHA 1 is painted on the report or screen. The other variable
 is a three-digit numeric field.

[Append to This Answer]
2003-Dec-31 1:13pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to get User Security Codes using ILF.
Is there a general way for the Application designer to manually control
process behavior, based on Security?  For example I would like to 'hide' 
optional children, if the user does not have the required security.  Can I 
determine the security key of the process in ILF?

You can read the 0AD PROCESS file to find out the security class that might 
be assigned to a process.

You can then set up a memory indexed file with a single field of Alpha(4).
Define it as the Record Access security field.  Then, from ILF set the field
to the security code you want to test, write it, and then try to read it back.  If you can't read it back, then you don't have access to that security code.

Details:

1) Create a memory file with one field designated as the RECORD PROTECT
   field, as follows:

2) Make sure that you set the Record Access field for the file as follows:
        
    Record Protection Fields            
        Delete Protection = blank
        Key Protection = blank
        Record Access = SECURITY_CODE

3) The following ILF code will create and populate the memory file and test
   for a specific code.  The READ returns a true if the user has access to the
   specified code.  The READ returns a false is the user does not have access
   to the specified code.

      SCRATCH  SPF SECURITY            FAIL 0 CACHE? N
      CREATE   SPF SECURITY  SHARE? Y  FAIL 0 CACHE NONE
      *        The write will always succeed
      SET      SPF SECURITY CODE              =      0001
      WRITE    SPF SECURITY               FAIL 0
      *        The read will fail if the user does not have access to code 0001
      SET      SPF SECURITY CODE              =      0001
      READ     SPF SECURITY               HOLD 0 FT 0 BY SECURITY CODE
F     ERROR    User Doesn't Have Access To Code 0001
[Append to This Answer]
2004-Jan-02 10:54am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to QUERY/INPUT via Cache!
When you want a QUERY to constrain an INPUT process (the regular INPUT Child 
Constraints can't be satisfied using CC's 'EQ' comparison operator only), you 
can use the following technique:

Create a JOB with Job Steps:
    QUERY
    UPDATE   (uq=query)
    INPUT

All three processes use the same PCF.

The UPDATE's Start of Process is:

      SCRATCH  AAA FILENAME              CACHE? Y
      CREATE   AAA FILENAME   SHARE? Y   CACHE? NOLOAD
      OPEN     AAA FILENAME   SHARE? Y   CACHE? N

The UPDATE's Record frame contains only:

      OPEN     AAA FILENAME   SHARE? Y   CACHE? Y
      WRITE    AAA FILENAME
      OPEN     AAA FILENAME   SHARE? Y   CACHE? N

The INPUT's JobStep's Pre-Invocation sets the following detached workfield:

      SET      AAA WORK USE-CACHED-PCF        =      1

The INPUT's Start of Process contains:

      IF       AAA WORK USE-CACHED-PCF        EQ     1
 T    OPEN     AAA FILENAME   SHARE? Y   CACHE? Y

The INPUT's Post-Invocation sets:

      SET      AAA WORK USE CACHED PCF        =      0

This example does not pass changes to the CACHEed version on to the disk 
version.  You'd have to put code in the INPUT's End of Process for that.
[Append to This Answer]
2004-Jan-02 11:22am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to get the name of the Parent Process.
There is an internal APPX subroutine which can be used to retrieve the name of the parent process to the current process.

 GOSUB --- GET PARENT PROCESS

 ... then check the values of:

 0AD WORK PROC TYPE
 0AD WORK PROC NAM
 0AD WORK AP

[Append to This Answer]
2005-May-03 11:40am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
GUI themes via ILF!
If you want theme-like behavior, you can implement at least a portion of it yourself, so that you can get a consistent look and feel for your buttons (or other gui elements).

What you would do is create a standard subroutine that reads all WIDGET records, looking for widgets of X type (like button). When it finds a widget of that type, it could set the font, text, rollover colors, etc.

Then, call this subr in Pre-Display of any process you want to have the consistent look and feel.

One enhancement you could do is put all the attrs in a one-rec param file, so that you can change them on the fly at run-time without having to touch the code.

This works only for setting attributes for existing GUI elements, and doesn't let you create new elements and add them to processes on the fly (for example, if you want a standard button to always appear on the bottom line of all INPUT processes).

[Append to This Answer]
2004-Jan-02 4:07pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Example of a random number generator using ILF!
The follow sample will work for any range of numbers where the total numbers
in the range is a maximum of 10,000 (eg., 1 - 10000, 50000 - 60000, 
1678  -11678).  If you use a larger range, you will need to increase the
generating time (TI) by some factor to allow at least one full pass through
the range of numbers.

 
     *        Set start and end of desired number range.
     SET      --- AI                         =      1
     SET      --- ZI                         =      10000
     *        Use current time to get random number of seconds & hundredths
     *        (WORK RGEN TIME SS defined as date field with seconds only)
     *        (WORK RGEN TIME TH defined as date field with hundredths only)
     SET DATE 1EX WORK RGEN TIME SS
     SET      --- SI                         =  1EX WORK RGEN TIME SS
     SET DATE 1EX WORK RGEN TIME TH
     SET      --- TI                         =  1EX WORK RGEN TIME TH
     *        Add number of seconds to number of hundredths
     COMPUTE  --- TI                         +  --- SI
     IF       --- TI                         LT     1
T    SET      --- TI                         =      1
     *        Set Number counter to one less than specified start of range.
     SET      --- NI                         =  --- AI
     COMPUTE  --- NI                         -      1
     *        Calculate time to stop generator by starting at current time
     *        and increasing it by adding the value in TI to the th's part.
     *        (WORK RGEN RUN END defined as date field with YY thru th)
     SET DATE 1EX WORK RGEN RUN END
     DATE ADD 1EX WORK RGEN RUN END          1  --- TI
     *        Start infinite loop that will exit when end time is reached.
     BEG LOOP LI = 001 TO 001  STEP 000
     COMPUTE  --- NI                         +      1
     *        If number count reaches end of range, go back to start.
     IF       --- NI                         GT --- ZI
T    SET      --- NI                         =  --- AI
     *        If current time has reached end time, exit loop.
     *        (WORK RGEN RUN START defined as date field with YY thru th)
     SET DATE 1EX WORK RGEN RUN START
     IF       1EX WORK RGEN RUN START        GE 1EX WORK RGEN RUN END
F    END LOOP LI
     *          ==>  Resulting generated number is in ---NI
[Append to This Answer]
2004-Jan-02 4:14pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to retrieve an occurrence number with ILF!
Retrieve and occurrence example:
     TRN WORK DATE occurs 66 times (DD)         
        . . .
     SET --- TEMP 30     =     WORK DATE (note this is a literal)
     SET 0AD ELEMENT NAM = --- TEMP 30
     READ 0AD ELEMENT  HOLD 0 FT 0 BY ELEMENT NAM 
     SET --- AI = 0AD ELEMENT OCC

AI will contain 66 in this example.
Now in 4.2 you can use the two new PDFs --- CURSOR AT APPLICATION and --- CURSOR AT FIELD
just in case the user happened to be sitting on the field of interest.
...
     SET --- NEXT APPLICATION = --- CURSOR AT APPLICATION
     OPEN 0AD ELEMENT
T    SET --- TEMP 30     = --- CURSOR AT FIELD
T    SET 0AD ELEMENT NAM = --- TEMP 30
TT   READ 0AD ELEMENT  HOLD 0 FT 0 BY ELEMENT NAM 
...
I haven't tested this to see if it really works and I'm not sure if the
T    SET --- TEMP 30     = --- CURSOR AT FIELD
would really be required.
[Append to This Answer]
2004-Jan-14 6:21pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to see a trace of executed process
There is a very useful utility to examine the 'stack' of Appx Processes you invoked, to get down to the currently executing Appx Process:

     --- Input   STACK (EDIT)

This ILF must be coded within an image level EP. Run against any Database.

This is most convenient if you define it as your SysAdmin 'Direct Process 1', or if you put it on a Direct Process 1 menu. Then, in a trapped routine, you can invoke direct process one, cntl+1. This will display the process stack which shows the process name, process type and invocation type. For a detailed description of the process stack see http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=171 .

[Append to This Answer]
2004-Jan-07 2:19pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Use of --- DEFAULT MODE
Setting PDF (--- DEFAULT MODE) before invoking an INPUT process, specifies the initial mode of the INPUT process. In addition to setting the desired value into the PDF, you must ...

 1) Ensure that the INPUT process does not specify a "Default Mode" 
   (which it always does)

 2) Ensure that the child spec does not specify an "Override Default Mode"
    (which it normally doesn't)

 3) Invoke the INPUT process with an invocation type of SUBPROCESS.  
    (--- DEFAULT MODE has a share class of SUBPROCESS.)

Think of INPUT Additional Attribute field "Default Mode" as "Initial Mode". Specifying "Default Mode" tells APPX to run the INPUT with that mode as the Initial Mode. APPX then ignores any value you might have set into the PDF.

If a parent INPUT process is running in Inquire or Change mode and you set the PDF to ADD mode before invoking a child INPUT, APPX runs the child INPUT process in Inquire or Change mode instead.

You can control the INPUT process mode by setting the desired mode into --- DEFAULT MODE in the child INPUT's Start of Process.

[Append to This Answer]
2004-Jan-06 4:13pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to determine a leap year!
Create a work date field as CC-DD, in the example below this work field is 
WORK DATE and the year I am checking is in WORK YEAR.

Using ILF:

        SET      TRN WORK DATE                      =     TRN WORK YEAR
        SET      TRN WORK DATE                      =     ----0229--------
        IF       TRN WORK DATE                      EQ    ------29--------
T       (the year in WORK YEAR is a leap year)

When 0229 is put in a date field that contains a year, APPX will determine 
if 0229 is valid for that year.  If it is, 0229 will remain.  If not, APPX 
date logic will convert the 0229 to 0301.  In the example above, the first 
SET puts the year in the CC-DD date field.  The second set puts Feb 29 into 
that year.  The IF checks to see if the day is still 29.  If it is, then this 
is a leap year.  
[Append to This Answer]
2004-Jan-07 2:20pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How can I position a widget exactly where I want it?
Hold the shift key down when positioning something on the image using your mouse. This is a fairly common Windows key combination in various image editors, allowing exact positioning of objects, as opposed to the 'snap to grid' that APPX does by default.

The row and column position on the widget will still be the nearest row/col intersection, but the micro adjustment field will be filled in with the percentage adjustment away from that row/col. The same thing applies to drawing buttons, etc. - without the shift key you get 'snap to grid', but if you use the shift key, you can make it any size.

[Append to This Answer]
2004-Jan-20 10:18am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Can we colorize the "auto gui" widgets by ILF in order to adapt them to color schemes?
The "auto-GUI" capabilities of APPX come from two sources. Part of the auto-GUI is created by the "engine" in the form of WIDGET records that are modifiable. Another part of the auto-GUI is created by the client. The client part is not modifiable since there are no WIDGET records for that part. Future releases of APPX will shift more of the auto-gui to the engine leaving less for the client to synthesize.
[Append to This Answer]
2004-Feb-13 8:48am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Help in debugging AppxIO
If you're using AppxIO to store data, you can get a complete log of all file I/O by setting the following env. variables:

APPX_IO_LOG=filename APPX_FMT_IO_LOG=1

The first will tell Appx to log all AppxIO actions to filename. The second will tell Appx to format the log so that mere mortals can read it.

The log file will show all reads, readnexts, writes, deletes, and rewrites. Each entry will show a complete dump of the data being read, written, or deleted. For read operations, the log will show the key number and key value being retrieved.

You'll also see log entries for each process that runs so you can tell which process caused each I/O.

[Append to This Answer]
2004-Feb-19 4:29pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to put multiple of lines of text on a button or label widget.
Buttons and Labels on input screens and menus can use html to enhance the
text.  Enter the html code in the Label or Button text field in the object
property(ies).  Example; <html>Request<br>Ship Date will be displayed on two
lines.


----------------
|              |
|  Request     |
|  Ship Date   |
|              |
----------------

 

The caveat is that the individual lines delineated by the <br> formatting 
may not obey all the label's gui settings, CENTER for example.  


In the case of CENTER the justification is applied to all lines at though 
there all the length of the longest segement.  You can revised the html tag 
to center each line of the label as follows;

<html><p align="center">Request<br>Ship Date
[Append to This Answer]
2004-Jul-07 2:15pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to add pulldown menu entries with ILF
Here is a sample menu structure to create:

Daily
-- Transactions
----- Enter Transactions
----- Print Journal
Monthly
-- Postings
----- Balancing Report
----- Post Transactions

To create this, enter the following in pre-display:
*                                                                         
*        Restore and set defaults for creating CHILD widget records       
*                                                                         
   RESTORE  --- WIDGET                     DEFAULT RECORD                    
   SET      --- WIDGET PARENT TYPE         =      CHILD                      
   SET      --- WIDGET POSITION ROW        =      0                          
   SET      --- WIDGET POSITION COLUMN     =                                 
*                                                                         
*        Create the "Daily" top level pulldown                            
*                                                                         
   SET      --- WIDGET LABEL               =      Daily                      
   SET      --- WIDGET GROUP NAME          =                                 
   SET      --- WIDGET OPTION              =      USER 1                     
   SET      --- WIDGET SHORTCUT            =      D                          
   SET      --- WIDGET ADD TO MENU         =      Y                          
   GOSUB        :WRITE CHILD WIDGET                                          
*                                                                         
*        Create the "Transactions" pullout menu and attach to "Daily"     
*                                                                         
   SET      --- WIDGET LABEL               =      Transactions               
   SET      --- WIDGET GROUP NAME          =      Daily                      
   SET      --- WIDGET OPTION              =      USER 2                     
   SET      --- WIDGET SHORTCUT            =      T                          
   SET      --- WIDGET ADD TO MENU         =      Y                          
   GOSUB        :WRITE CHILD WIDGET                                          
*                                                                         
*     Create the "Enter Transactions" item and attach to "Transacti.." 
*                                                                         
   SET      --- WIDGET LABEL               =      Enter Transactions         
   SET      --- WIDGET GROUP NAME          =      Transactions               
   SET      --- WIDGET OPTION              =      USER 3                     
   SET      --- WIDGET SHORTCUT            =      E                          
   SET      --- WIDGET ADD TO MENU         =      Y                          
   GOSUB        :WRITE CHILD WIDGET                                          
*                                                                         
*        Create the "Print Journal" item and attach to "Transactions"     
*                                                                         
   SET      --- WIDGET LABEL               =      Print Journal              
   SET      --- WIDGET GROUP NAME          =      Transactions               
   SET      --- WIDGET OPTION              =      USER 4                     
   SET      --- WIDGET SHORTCUT            =      P                          
   SET      --- WIDGET ADD TO MENU         =      Y                          
   GOSUB        :WRITE CHILD WIDGET                                          
*                                                                         
*        Create the "Monthly" top level pulldown                          
*                                                                         
   SET      --- WIDGET LABEL               =      Monthly                    
   SET      --- WIDGET GROUP NAME          =                                 
   SET      --- WIDGET OPTION              =      USER 11                    
   SET      --- WIDGET SHORTCUT            =      M                          
   SET      --- WIDGET ADD TO MENU         =      Y                          
   GOSUB        :WRITE CHILD WIDGET                                          
*                                                                         
*        Create the "Postings" pullout menu and attach to "Monthly"       
*                                                                         
   SET      --- WIDGET LABEL               =      Postings                   
   SET      --- WIDGET GROUP NAME          =      Monthly                    
   SET      --- WIDGET OPTION              =      USER 12                    
   SET      --- WIDGET SHORTCUT            =      P                          
   SET      --- WIDGET ADD TO MENU         =      Y                          
   GOSUB        :WRITE CHILD WIDGET                                          
*                                                                         
*        Create the "Balancing Report" item and attach to "Postings"      
*                                                                         
   SET      --- WIDGET LABEL               =      Balancing Report           
   SET      --- WIDGET GROUP NAME          =      Postings                   
   SET      --- WIDGET OPTION              =      USER 12                    
   SET      --- WIDGET SHORTCUT            =      B                          
   SET      --- WIDGET ADD TO MENU         =      Y                          
   GOSUB        :WRITE CHILD WIDGET                                          
*                                                                         
*        Create the "Post Transactions" item and attach to "Postings"     
*                                                                         
   SET      --- WIDGET LABEL               =      Post Transactions          
   SET      --- WIDGET GROUP NAME          =      Postings                   
   SET      --- WIDGET OPTION              =      USER 14                    
   SET      --- WIDGET SHORTCUT            =      P                          
   SET      --- WIDGET ADD TO MENU         =      Y                          
   GOSUB        :WRITE CHILD WIDGET                                          
*                                                                         
END                                                                       
*                                                                         
*        Write WIDGET and increment POSITION ROW to create unique keys    
*                                                                         
   LABEL    :WRITE CHILD WIDGET                                              
   WRITE    --- WIDGET                 FAIL 0                                
-  COMPUTE  --- WIDGET POSITION ROW        +      1                          
F  GOTO     :WRITE CHILD WIDGET                                              
   RETURN    
[Append to This Answer]
2004-Feb-20 10:38am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to close an external ASCII file (RT_CLOSE_STREAM)?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=693

The information above is incorrect. See the STREAM FILE (EXAMPLE) subroutine in the 1EX/00 application.
[Append to This Answer]
2004-Oct-05 10:09am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to read data to an external ASCII file (RT_READ_STREAM)?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=693

The information above is incorrect. See the STREAM FILE (EXAMPLE) subroutine in the 1EX/00 application.
[Append to This Answer]
2004-Oct-05 10:10am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to write data to an external ASCII file (RT_WRITE_STREAM)?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=693

The information above is incorrect. See the STREAM FILE (EXAMPLE) subroutine in the 1EX/00 application.
The information above is incorrect. See the STREAM FILE (EXAMPLE) subroutine in the 1EX/00 application.
[Append to This Answer]
2004-Oct-05 10:11am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to open an external ASCII file (RT_OPEN_STREAM)?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=693

The information above is incorrect. See the STREAM FILE (EXAMPLE) subroutine in the 1EX/00 application.
[Append to This Answer]
2004-Oct-05 10:11am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to put APPX in sleep (pause) mode (RT_SLEEP)?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=693
http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=161

[Append to This Answer]
2005-Apr-15 8:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to get the current process parent name (RT_GET_PROC_NAM)?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=693

[Append to This Answer]
2004-Mar-02 9:13am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to get the APPX runtime parameters (RT_GETPARAM)?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=693

[Append to This Answer]
2004-Mar-02 9:14am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to get the environment variables (RT_GETENV)?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=693

[Append to This Answer]
2004-Mar-02 9:14am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Dynamic linking using the CALL statement.
Please refer to:

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=649

http://www.appx.com/ftp/appx/conference/presentations/InterfacingWithExtSubrs.doc
[Append to This Answer]
2005-Oct-13 11:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to access APPX Query parameters.
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=647

[Append to This Answer]
2004-Mar-02 9:18am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How do you call a window API function?
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=628

[Append to This Answer]
2004-Mar-02 9:18am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How do you copy from one application database to another within APPX.
To copy all CUSTOMER records from one database to another:

    SET       --- NEXT DATABASE   =    DB1
    OPEN      TAR CUSTOMER        SHARE? Y FAIL 0
    *
    BEG READ  TAR CUSTOMER        Hold? N
    *
    *         The DB1 Customer file is currently accessible
    *         through the CUSTOMER file name - we just read 
    *         a record from the DB1 Customer file.  Now we 
    *         Want to write this record to the DB2 Customer
    *         file - have to open it first
    *
    SET       --- NEXT DATABASE   =    DB2
    OPEN      TAR CUSTOMER        SHARE? Y FAIL 0
    WRITE     TAR CUSTOMER                 FAIL 0
    F CANCEL unexpected error (duplicate key?) WRITEing CUSTOMER 
    *
    *         Now we have to switch databases again before we
    *         do the END READ
    *
    OPEN      TAR CUSTOMER        SHARE? Y FAIL 0
    END READ  TAR CUSTOMER 
 
No CLOSE statement is needed - APPX simply switches the internal data structures between databases with each OPEN statement. This turns out to be much faster than the SPEED II method which required physically closing the file and reopening it for each database switch. Of course you have more files open with the APPX method.

When APPX needs to open a file, it does so in two phases... a logical open and a physical open. The logical open takes place when APPX opens the file automatically OR when you open the file with an OPEN statement - this phase sets up internal memory structures to keep track of the file - the structure files are also verified during the logical open (this is expensive).

The physical open only takes place when you actually do the first I/O to the file (a read, write, etc.).

A file name (use "CUSTOMER" as an example) actually acts as a file multiplexor - you can get to multiple CUSTOMER files using the same file name. You do this by setting --- NEXT DATABASE and executing an OPEN statement to open a CUSTOMER file in a different database.

[Append to This Answer]
2004-Mar-02 9:22am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to display detailed data from a scrolling input.
I have a scrolling INPUT on a set of data. I would like the Automatic Child to jump to a full screen display of the full set of data. I have an existing INQUIRY that has the exact look and feel of what I want, and the users are familiar with this screen. How can I reuse this existing INQUIRY? (A simple Automatic Child doesn't work.)
Before invoking the INQUIRY, set --- PROCESS CODE to "DISP". In the Key Entry frame's Global Pre-Display event point, execute:

      *
      *         RETURN to Display, 1st time thru
      *
      IF       --- PROCESS CODE               EQ     DISP
      T SET --- OPTION = RETURN
      T SET --- PROCESS CODE = DONE
      *
      *         END to go back to INPUT, 2nd time thru
      *
      F IF --- PROCESS CODE EQ DONE
      FT SET --- OPTION = END 

(All this can be done in a SUBR, called from Key Entry's Global Pre-Display event point.)

When the INQUIRY starts, PROCESS CODE is DISP, so the KEY ENTRY frame is skipped. Since the INQUIRY is constrained to one record, it displays only that record from the INPUT.

When the user presses ENTER or END after viewing the data, Key Entry executes again, but since PROCESS CODE is now DONE, it sets OPTION to END. INQUIRY ends, and control is returned to the parent.

[Append to This Answer]
2004-Mar-02 9:24am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to read EXCEL files from Appx.
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=785

[Append to This Answer]
2004-Mar-02 9:26am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How do I search the electronic APPX manual(s) for multiple keywords?
On the Search tab in the search text box, ‘Type in the keyword to find:’, use AND between the keywords. Example, “menu AND job AND input” would return topic pages that contain menu, job, and input. Likewise, typing “cnv AND text”, returns the occurrences of the CNV TEXT command.
[Append to This Answer]
2005-Jun-02 11:13am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
The underline character is not displayed under the shortcut letter!
There is a setting on the desktop that controls whether the underline character appears when the Alt key is pressed (default for Windows XP) or if the underline character should always be displayed. Right click on the desktop, Properties > Appearance Tab > Effects > uncheck Hide underline letters for keyboard navigation until I press the Alt key. The underline character should now be displayed under your shortcut letter(s).
[Append to This Answer]
2004-May-18 3:45pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to get printer friendly pages from the APPX web site.
On every page there is a little icon of a printer at the top/right corner. Click this to get a printable version of the page.
[Append to This Answer]
2004-Jul-09 4:43pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How do you run an os command and pipe the results through a stream read?
   SET      --- STREAM OPEN TYPE           =      r
   SET      --- TEMP 256                   =      |ls -la /usr1/appx/
   APPEND   --- TEMP 256                   0      data/C01/AGP/Files/
   APPEND   --- TEMP 256                   0  AGP FILES NAME
   SET      --- STREAM FILE PATHNAME       =  --- TEMP 256
   GOSUB    --- STREAM OPEN
   IF       --- STREAM RETURN CODE         NE     0
T  ERROR    Cannot Get File Listing
T  END
   *    
   SET      --- STREAM EOR SEQUENCE        =      LF
   GOSUB    --- STREAM READ
   *        The results will be in --- STREAM BUFFER         
   DISPLAY  --- STREAM BUFFER              (AT APPEARANCE #    )
  Don't forget to close, GOSUB    --- STREAM CLOSE
[Append to This Answer]
2009-Mar-19 2:00pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Now that I can generate PDF files from APPX, how can I get the PDF to display as such in a browser?
Changing the content type tag in the script to "application/pdf" which is the content type for pdf documents.
[Append to This Answer]
2004-Jul-09 5:36pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
What is the correct Date Mask for: Apr 13 09:23:00 2004?
Mon Jan 05, 0807 Would result in the date displayed as Tue Apr 13, 2004
[Append to This Answer]
2004-Jul-09 5:37pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Can Current Release of Appx support LDAP?
That depends on platform. Windows and Linux - yes.
Appx can make use of LDAP (since Appx is a language and you can call LDAP functions/executables with CALL and RUN statements). We also use LDAP for authentication if the server's operating system is configured to use LDAP.
[Append to This Answer]
2005-Mar-09 4:14pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How does LOCAL and RECEIVE statements work?
First: a LOCAL statement is (nearly) equivalent to a RECEIVE statement that executes without a matching PASS statement (the RECEIVE statement will set the next T/F to F, but a LOCAL statement doesn't change the T/F flags).
Second: when you execute a LOCAL (or RECEIVE) statement, the engine has to decide the point in time that the original value should be restored.
If you execute a LOCAL (or RECEIVE) while there is a GOSUB active (in the current event point), the original value is restored when you execute a RETURN statement.
If there is no GOSUB active, the original value is restored when the event point ends (with one exception). That means that you can add LOCAL statements to the beginning of an event point to protect variables that you want to use in that event point. You could instead add a RECEIVE statement, but that would be kind of weird (that may let you PASS a value in one event point and RECEIVE it in the next event point, but I can't recommend doing that).
If you execute a LOCAL statement (and there is no active GOSUB) in the StartOfProcess event point, you are protecting a variable for the life of the process (the original value is restored when the process ends).
[Append to This Answer]
2005-Jan-27 3:46pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Can i have environment variable APPX_41_EPS set while designing in 4.2?
No, you can't. APPX_41_EPS variable is a temporary, run time environment variable only. This variable was designed to give you a temporary Appx 41 behavior capabilities, while you are working on bringing your applications up to 4.2 capabilities.
[Append to This Answer]
2005-Apr-13 1:47pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
I noticed that all of a sudden i have Applications tab on my Java client. How did it get there and how to get rid of it?
Application tab and menu gets generated by Direct Process 1 or Direct Process 2. You can get rid of Direct Process 1 and/or Direct Process 2 and it will get rid of the Applications tab for you.
[Append to This Answer]
2005-Apr-13 4:02pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
I have set my --- OPTION = END PARAGRAPH, but it doesn't seem to do anything. Why is that?
END PARAGRAPH is listed as a valid value for --- OPTION, but setting this value into OPTION doesn't seem to do anything. Also, the END PARAGRAPH keystroke does not trigger the Option Intercept Event Point, so the designer can't test for this.


Options whose numeric values are >= 20000 are handled by the client and never make it to the engine (things like TAB, CURSOR UP, END PARAGRAPH, ...). But, you can assign any of those tokens to WIDGET OPTION, WIDGET OPTION FOC G, or WIDGET OPTION FOC L.

[Append to This Answer]
2005-Apr-14 8:59am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
I am trying to PASTE a statement into the ILF editor, but it put "**" in the front of it and it looks miss-aligned. What did i do wrong?
When you PASTE a block of statements into the ILF editor, Appx tries to convert each line of text in the clipboard into a valid ILF statement. If it can't, it converts the offending text into a comment.
So, Appx doesn't like *something* about the statement you're trying to paste. The most likely problem is that the alignment of the fields is wrong (you have a space where you shouldn't have one or you don't have a space where you need one).
If you've copied the IF DIFF statement from another event point, that's not likely to be the problem. Instead, it may be that the operands won't convert properly in the context that you're pasting in to.
Next time it fails, you might try pasting into an empty subroutine just to see if that work.
[Append to This Answer]
2005-Apr-19 3:31pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Is there a way to get rid of the automatic drop down menus that appear on my GUI menus processes?
I think that you'll find (most of) the automatic menus and toolbar buttons in the --- WIDGET file. If you don't want them to show up, just delete them from --- WIDGET in the Pre-Display event point (or disable them if you want to see them but you don't want them to do anything). If you want a more pervasive solution, you can hook the --- STANDARD TOOLBARS input process.
[Append to This Answer]
2005-Jun-02 11:09am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Is there a way to get rid of the big red X (Cancel) and the green arrow (Return)?
I think that you'll find (most of) the automatic menus and toolbar buttons in the --- WIDGET file. If you don't want them to show up, just delete them from --- WIDGET in the Pre-Display event point (or disable them if you want to see them but you don't want them to do anything). If you want a more pervasive solution, you can hook the --- STANDARD TOOLBARS input process.
[Append to This Answer]
2005-Jun-02 11:10am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Is there a way to set child constraints on a data lookup field in an Input Process?
You can constrain the scan list by creating a cached version of the file you want to do the data lookup on an populating it with only the records that meet your criteria. Create the cached file with NOLOAD, then once you have a PCF record use a begin at/end at contraint to read the records from the disk file and write them to the cached file. You will have to OPEN each instance of the file before the reads and writes. Something like this:
 SCRATCH APP FILENAME FAIL 0 CACHE? Y
 CREATE APP FILENAME SHARE? Y FAIL 0 CACHE NOLOAD
 OPEN APP FILENAME SHARE? Y FAIL 0 CACHE? N (for disk version)
Then to populate:
BEG AT APP FILENAME IN some constraint END AT APP FILENAME IN some constraint BEG READ APP FILENAME HOLD 0 KEY IS FILENAME KEY FIELD OPEN APP FILENAME SHARE? Y FAIL 0 CACHE? Y (for cached version) WRITE APP FILENAME OPEN APP FILENAME SHARE? Y FAIL 0 CACHE? N (for disk version) END READ APP FILENAME OPEN APP FILENAME SHARE? Y FAIL 0 CACHE? Y (so process will use cached version)
Now the data lookup should work on the cached file.
You could also build a memory file and do the same thing and have the data lookup work on the memory file.

[Append to This Answer]
2005-Jul-06 8:36am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How can I wait on Windows-systems without consuming CPU?
You might want to try "sleep" command. You can put the command into a .bat file and execute it from Appx with /w. Here is link for a free download of a resource kit tool for Windows 2003 that contains sleep.exe command: http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en
Or you can take an approach as outlined there:
http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=161


[Append to This Answer]
2005-Jul-29 4:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
I am using a --- STREAM WRITE call on a file that is > 2GB. It doesn't crash or return an error code, but it doesn't write to a file either
The STREAM WRITE subroutine uses the standard fputs() function (part of the C Runtime Library). That function is limited to files smaller than 2GB in size. If you want to write to a larger file, you'll have to use a different API (that means that you'll have to write a C routine and CALL that routine instead of using STREAM WRITE).
[Append to This Answer]
2005-Aug-29 8:53am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
When I execute SLEEP command from an Appx CALL i get the error 'You've CALL'ed C:\WINDOWS\SYSTEM32\kernel32.dll,Sleep with the wrong calling convention'
You need to add a '@' to the end of the subroutine name:

C:\WINDOWS\SYSTEM32\kernel32.dll,Sleep@

That tells Appx to call the Sleep subroutine with the correct calling convention (for some reason, Windows supports a number of different "calling conventions", or rules for calling a function, and most of the kernel32 routines use a non-standard convention - there's no way for Appx to know which convention to use so you have to tell us).

Windows supports two different (and incompatible) "calling conventions" - __stdcall and __cdecl. By default, most applications (including Appx) use the __cdecl calling convention. When you invoke a function that uses the __cdecl calling convention, the caller (that's Appx) pops arguments off the top of the runtime stack when the function ends. When you invoke a function that uses the __stdcall convention, that function cleans its own arguments off of the top of the runtime stack before it returns to the caller. Appx can't tell the difference between __cdecl and __stdcall functions. Appx assumes (unless you tell it otherwise) that you want to call __cdecl functions. If you invoke a __stdcall function (and you don't tell Appx that you're calling a __stdcall function), the runtime stack will be corrupted.
APPX tries to recover from this error but will also display a CASSERT message that tells you that you've CALL'ed a function with the wrong convention (the message includes the name of the function that you've called). If you see that message, add a '@' to the end of the function name (or, if you already have a '@' at the end of the function name, remove it). The '@' is the "windows way" to tell Appx to use the __stdcall convention to call your function. For example, you currently invoke the Kernel32,DeleteFileA - change that to Kernel32,DeleteFile@.
So how can you tell which functions are __stdcall and which functions are __cdecl? That's not an easy question to answer - that information is included with the Microsoft C compiler, but I don't see it anywhere else. That's why I'm displaying the CASSERT message here; so you'll know when you run into a problem. In general, most of the functions that you find in Kernel32.dll will be __stdcall functions (so you need to add an @ to the end of each Kernel32.dll function name).
P.S. If you want to learn more about calling conventions: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/_core_Calling_Conventions_Topics.asp

[Append to This Answer]
2006-Jan-03 12:00pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How can i set default values during data entry and make Appx remember them from one entry to the next one?
What you are looking for is CTRL+F3 - SET ENTRY ATTRIBUTES option.
The SET ENTRY ATTRIBUTES option,is activated by selecting the CTRL+F3 keys. This option allows you to designate the following four attributes that pertain to input processing:
    *Save as Default allows you to designate whether you want to re-display on 
each subsequent screen, the value that you entered on the prior input process screen. For example, if you are entering customer information and have a number of customers from the same city, you could save yourself keying time by having APPX redisplay the city as you begin to enter each subsequent customer record. You can change the city name if you want, but if it stays the same you do not need to re-enter the value each time.
    
    *Auto Read Next allows you to control which record will be read and 
displayed by APPX after you are done modifying, deleting, or displaying a record. If you select Auto Read Next and complete a change to the record on the screen, the next record automatically displays.
    *Auto Read First allows you to control which record will be read and 
displayed by APPX if you try to call up a record without specifying a key value. If you select Auto Read First, the first record in the file automatically displays.
    *Exact Key Required allows you to specify whether or not a complete key must
be entered when accessing a record from a file. For example, if the specified key path to the CUSTOMER file is CUSTOMER NAME, you can designate whether you must enter the entire name to retrieve a record, or whether APPX will use a partial key value (e.g., the letters “SMI”) to retrieve a record. If you set Exact Key Required to No, entering “SMI” would retrieve the first customer name beginning with these three letters (“SMILEY,” for example). This partial key feature is helpful because it can minimize the number of keystrokes you need to enter.
To set or modify these options, position the cursor on the desired item and select the SET ENTRY ATTRIBUTES option. You see the four SET ENTRY ATTRIBUTES options display on the screen. Note that the Save as Default value applies to the item you positioned the cursor on; the other three values apply to the input process as a whole. Examine the values and change them by clicking on the appropriate checkbox to toggle it from “yes” to “no”.

[Append to This Answer]
2005-Sep-08 2:24pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Copying Files between Databases/Versions
The following example shows how all of the records in the CUSTOMER file in database AAA can be copied to the CUSTOMER file in database BBB:
      *      
      *        Open file in source database      
      *      
      SET      --- NEXT DATABASE              =      AAA      
      OPEN     SPF CUSTOMER  SHARE? Y  FAIL 0 CACHE? N      
      *
      BEG READ SPF CUSTOMER               HOLD 0 KEY IS  CUSTOMER NO
      *
      *        Open file in destination database
      *
      SET      --- NEXT DATABASE              =      BBB
      OPEN     SPF CUSTOMER  SHARE? Y  FAIL 0 CACHE? N
      WRITE    SPF CUSTOMER               FAIL 0
      *
      *        Open file in source database
      *
      SET      --- NEXT DATABASE              =      AAA
      OPEN     SPF CUSTOMER  SHARE? Y  FAIL 0 CACHE? N
      *
      END READ SPF CUSTOMER
When you use the above technique to switch between a file that has been created in two different databases, the two databases MUST be associated with the same application version. In the System Administration file for Databases / Applications, database AAA and database BBB must both identify a startup application with the same Version.
For example, if the Startup Application for database AAA is XXX 01, then the startup application for database BBB must also have a version of "01". The application ID can be different but the version must be the same.

[Append to This Answer]
2005-Oct-07 3:43pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Adding new fileds with defualt values to an existent file
Would APPX place the default value of the new field into every existing record in the file?
We do in fact add the default value to every record when you restructure. The restructure process generates an event point that BEG/END READ's through the old file, SET's the old fields into the new structure, then WRITE's the new record. After each read, we RESTORE DEFAULT RECORD (into the new record) - that assigns the default values to all fields.
But, if you do a quick restructure (that is, you add a field to a variable-record-length file), we don't read copy the records.


[Append to This Answer]
2005-Oct-11 9:59am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
I have an ALPHA field with a validation table, but it allows for any value to be entered, regardless of the validation table values
You need to make sure, that "Required Table Value" in the Additional attributes of the field is either NULL or Y. If it is set to blank or N, it will allow for any value to be entered.
[Append to This Answer]
2005-Nov-11 3:03pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
What is the proper usage of --- STREAM READ LENGTH field?
I have a job that takes a tab-delimited file and reformats it to an appxio file. The STREAM READ only returns a valid record the first time, subsequent reads return varying data.
My simple subroutine looks like this:
     SET      --- STREAM OPEN TYPE           =      r
     SET      --- STREAM READ LENGTH         =
     GOSUB    --- STREAM OPEN
     SET      --- STREAM EOR SEQUENCE        =      LF
     IF       --- STREAM RETURN CODE         NE     0
     *
     *        read tab file record
     LABEL    :NEXT RECORD
     TRAP
     GOSUB    --- STREAM READ
     IF       --- STREAM RETURN CODE         EQ     0
     IF       --- STREAM BUFFER              EQ
     GOTO     :NEXT RECORD 

The field --- STREAM READ LENGTH is used for two things. If set to a value other than zero the READ subroutine will limit the data bytes it reads to no more than that many bytes. What gets you is that your READ routine also uses that field to tell you how many bytes it actually did read. So, the first time you call it the value was zero, it read in number of bytes (if you count the tab bytes) up to the linefeed and set that number of bytes into this field. Since you didn't reset it to zero that value carried forward to the next read. It read that number of bytes and stopped leaving the rest<lf> unread. The next time you called read it read the remaining number of bytes up to the linefeed and set the length to that number. And so on.....
So, you need to set this field to zero before each read attempt.

[Append to This Answer]
2006-Jan-18 8:57am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Can the STREAM READ look for the presence of the \r character as a record delimeter?
Or is it limited to looking for the \r\n combination?
It depends on the platform. On Unix/Linux hosts, fgets() looks for \n to terminate each line. On Windows hosts, fgets() looks for \r\n. That follows the standard on each platform.
When you set the line terminator in Appx, that doesn't affect fgets(), it just tells Appx which characters you want stripped from the end of the string. If you set the line terminator to NONE, Appx just calls fgets() and gives you whatever fgets() returns. If you set the line terminator to LF or CR\LF, Appx will strip those characters from the end of the string (if present).
We've never really made a link between STREAM READ and the format of an Appx print file (in other words, we don't produce print files using the --- STREAM functions). STREAM READ will simply treat the form-feed character as just another character. If you want to treat a form-feed as a line delimiter, you can always search for a form-feed in the buffer (a simple IF statement will find any form-feeds and TEXT AT POSITION will tell you where it appears).
Or, you can use any other C runtime function (or OS-provided function) to read any file that you like. STREAM READ is just a convenient wrapper around the fgets() C runtime function.
[Append to This Answer]
2006-Feb-08 8:41am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
The --- COMPARE file contains the fields that are different after an IF DIFF is executed. If a field has multiple occurances, how can I tell which occurance changed?
You really can't tell which occurance changed, because --- COMPARE doesn't support multiple occurances and --- COMPARE FIELD NAME is a primary key to the file.
[Append to This Answer]
2006-Apr-20 3:12pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to create a PDF Form Overlay
Please refer to the Output Processes for complete instructions on using this technique. http://board.appx.com/faq/cache/639.html
[Append to This Answer]
2007-Jan-24 4:05pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
How to create an ASCII fixed length flat file using Appx
Create a consecutive file in your application with the necessary fields. All fields must be type Alpha. If needed, add a two character field for carriage return/line (last field).

Create an update process and simply SET, or CNV TEXT, fields from your source file (PCF) into the alpha fields of the consecutive file. The actual Appx file (filename.dat) in the database Data directory will contain the ASCII text file. You might consider renaming it to filename.txt before using or sending the file to someone else.

The carriage return/line feed characters can be added as follows;

     In Start of Process…
         CNV BIN --- CDF HEX00                    =  0
         CNV BIN --- CDF HEX0A                   =  10

     In Start if Frame…
         APPEND  --- TEMP 2                            0  --- CDF HEX0A    
         APPEND  --- TEMP 2                            0  --- CDF HEX00
Numeric and Date fields must be converted to text using the CNV TEXT command. Other formatting may need to be performed depending on your particular specifications.

Don’t forget to WRITE the records to the consecutive file. Also, you must SCRATCH and CREATE the flat file on each execution of the Update process. If the file is not scratched, data will be appended to the end of the file.

[Append to This Answer]
2007-Jan-31 1:22pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Execution Cycle in Appx 4.2
By setting APPX_41_EPS=1 environment variable, you can get previous EP behavior.
This variable, however, can not be set for design. It is for Run time only.

Execution cycle in 4.2 has been changed in 3 areas:
1.      Input execution after OC
2.      Input execution on Delete
3.      Input execution auto execution of child process.


On #1 – input Execution after OC – if you have ORDER1 Input Process, and execute opt1 to run Line Items process, we changed execution cycle when you come back from a child.
The order of the events as follows:
1.      Read the PCF record with HOLD
2.      Executes Post PCF Read
3.      Executes Post Invocation of the Child
4.      Executes Select Image
5.      Executes Pre-Display/Verify EP
6.      Executes Pre-Display
7.      We display the Screen

4 – 6 – is what changed in 4.2.

On #2 – Input Execution on Delete – if you delete a record, Appx will execute Pre-Update EP, after Delete – Post_PCF Update EP.
Prior to 4.2 – Pre-PCF Update Ep wasn’t executing.

On#3  Input Execution auto execution of child process – Key change, record delete (for example, you have ORDER1 and ORDER2 as an AC to ORDER1. If you delete ORDER1 record, you need to delete all corresponding ORDER2 records).
It looks to see if ORDER2 needs to be run.
It executes ORDER2 in autoexecute, it goes through all the steps to delete ORDER2 records.

It executes:
Post PCF read
Pre PCF Update
Post PCF Read
Delete – Post PCF Update

It will execute all these EP’s for each line item.

In 4.1, it wasn’t executing Post PCF Read and Pre PCF Update.
[Append to This Answer]
2007-Mar-15 4:11pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Tips & Techniques :
Under what circumstances you need to set NLS_LENGTH_SEMANTICS
First a short introduction on the choice of character set and length semantics: 
Using Unicode as a character set will allow you to store any character, 
not just the western European characters you are normally limited to.

Unicode is a multi-byte character set which means that a single character could use more than a single byte. So what do you mean by VARCHAR2(10)? 
Is this 10 characters or 10 bytes? 
This used to be the same with our single byte character set, but with UTF8 this is no longer true. 
You can specify VARCHAR2(10 BYTE) or VARCHAR2(10 CHAR) if you want to be specific. 

However, APPX doesn’t use this syntax and does not specify either. 
This is where the NLS_LENGTH_SEMANTICS parameter comes in. 
You can set this to BYTE or CHAR basically defining which one of the two is the default when not specifying it explicitly.
 
A default Oracle installation will use BYTE semantics which will work with APPX.  
However, if the default is changed to CHAR semantics, then APPX won't work without setting the following environment variable:

NLS_LENGTH_SEMANTICS=BYTE
[Append to This Answer]
2008-May-13 2:55pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
ILF (Integrated Language Facility)
FAQ's relating to the APPX ILF editor and ILF statements.
Subcategories:

Answers in this category:
(Answer) Is the documentation for the CNV TEXT statement wrong regarding the use of occurrence "000"?
(Answer) How do I get the my current APPX Process ID
(Answer) ILF verb shortcuts (abbreviations).
(Answer) GOSUB/SUBR/COPY exit considerations.
(Answer) GOSUB/COPY/SUBR usage considerations?
(Answer) Variable Scoping considerations with GOSUB/COPY and SUBR.
(Answer) Load time, memory usage, and caching considerations when determining using GOSUB, COPY and SUBR.
(Answer) Why are there lowercase I/O Verbs in ILF?
(Answer) ILF Option 94
(Answer) ILF Force Save Option 88
(Answer) ILF Option 95
(Answer) Text and Icon Position via ILF --- WIDGETs
(Answer) I keep loosing my toolbar when I go in and out of the Image Editor.

[New Answer in "ILF (Integrated Language Facility)"]
2004-Mar-19 4:54pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
Is the documentation for the CNV TEXT statement wrong regarding the use of occurrence "000"?
New Page 1

In Chapter 4-6: ILF Keyword Reference <CNV TEXT> of the designer manual, under CNV TEXT, it says:

    ••••• CNV TEXT ••• •••••••••••••••••••••• ••• =  ••• •••••••••••••••••••••• •••
    (1)            (2) (3)                    (4)    (5) (6)                    (7)

(1) T/F execution conditions

(5) Source application ID

(2) Destination application ID

(6) Source field name, PDF, or constant

(3) Destination field name or PDF

(7) Source occurrence (constant/index)

(4) Destination occ (constant/index)

 

Restrictions

When all occurrences of the sending field are selected as the CNV TEXT data (by entering occurrence number 000), all occurrences are treated as a single, rectangular alpha field. When the data is copied from the sending field, a check is made to ensure that soft spaces are compressed, ensuring that the next “word” is separated from the previous one by just one space.

... should the first "sending field" text instead be Destination field?  

 

With respect to the second one, the ILF editor that lets you set it up appears to be broken.   It won't take an occurrences of "000" on the RHS (Source side), it just disappears, and is treated normally (as if it were '1').   The '000' CNV TEXT spec only works on the LHS (Destination)...

 

Unless both the LHS and RHS fields are multi-occurrence.  In which case the ILF editor will accept 000 for the RHS occurrence.

 

There's something I'm not understanding here.

-pat-


The documentation is correct. The ILF editor has a bug that prevents this statement from being used as documented.
[Append to This Answer]
2003-May-12 5:37am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
How do I get the my current APPX Process ID
======================================================================
SUBROUTINE  Process Name:     GET PROCESS ID
 
      GOSUB    --- GET CONFIGURATION INFO 
      SET      --- CONFIG TYPE                =      PID 
      READ     --- CONFIG                 HOLD 0      BY CONFIG TYPE 
F     CANCEL    unexpected error trying to READ "--- CONFIG" 
      SET      --- TEMP 32                    =  --- CONFIG DATA 
      *        --- TEMP 32 contains the unique Process ID 

====================================================================== 
[Append to This Answer]
2004-Mar-16 1:58pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
ILF verb shortcuts (abbreviations).
The following list of shortcuts can be used while entering statements in the ILF editor.

S  =  SET
W  =  WRITE
A  =  APPEND
G  =  GOSUB
I  =  IF
T  =  TRAP

BA (or BEG A) =  BEG AT
BR (or BEG R) =  BEG READ
BL (or BEG L) =  BEG LOOP

EA (or END A) =  END AT
ER (or END R) =  END READ
EL (or END L) =  END LOOP

CA    =  CALC
CO    =  COMPUTE
READN =  READNEXT
R     =  READ
REW   =  REWRITE

RECIEVE = RECEIVE   (auto correct)
[Append to This Answer]
2005-Jul-14 1:14pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
GOSUB/SUBR/COPY exit considerations.
If you need to exit early from your subroutine, you need to be careful about how it is called. You normally use an EXIT to return from a SUBR, a RETURN to exit from a GOSUB, and a GOTO/LABEL to exit from a COPY'd routine. Falling out the bottom (process an END statement) is the best method and will work in all cases, as will the GOTO/LABEL concept.

If you use an EXIT or RETURN statement in the subroutine, then you may be setting yourself up for a problem.

Exiting a subroutine with a RETURN for GOSUB calls will generate an EM Compiler error if you try to call it as a SUBR. A SUBR is a standalone process that now has a RETURN without a GOSUB.

A worse problem is using an EXIT in the subroutine. This works fine when you call it as a SUBR. It also does not complain when you call it as a GOSUB. The problem is that the GOSUB brings the code inline. This means that the EXIT statement in the subroutine will also exit the calling code. This can be handy if this is what you really intended to do. This can be bad if you forget and call it with a GOSUB intending on it to return back when the GOSUB is done.

Try not to include a RETURN or EXIT in an external subroutine. Since you can never be completely sure of how it will be called in the future.

[Append to This Answer]
2004-Mar-17 10:35am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
GOSUB/COPY/SUBR usage considerations?
COPY and GOSUB are almost identical in that they both bring the code inline 
to your process.  In fact, when you code something like:


 GOSUB    XXX SUBROUTINE


where SUBROUTINE is *not* a label in the current event point, then APPX will 
create


 LABEL    SUBROUTINE
 COPY     XXX SUBROUTINE
 RETURN


The major difference between COPY and GOSUB is that GOSUB has its own set of 
T/F flags, whereas COPY just copies the requested code into the event point 
at that location, and if there are any T/F flags involved, the copied routine 
better know about them.  Example:


   READ   <some file>
F  COPY   <routine a>


The code in routine <routine a> will have the F flag set in the first position 
when it starts running, and any T/F flags it changes will be visible to the 
code following the COPY.  If the copy was a GOSUB instead, then in <routine 
a>, the first T/F flag would not be set, and any T/F  flags it changes would 
*not* be visible to the statements following the GOSUB. 


A SUBR is another process invocation, so:


 - the code exists as a separate process, which is sometimes required.
   For example, you can call SUBR within a BEG READ/END READ loop, and
   the routine can also do a BEG READ/END READ on the same file without
   any problems.


 - you can control sharing via the SUBPROCESS/RELATED/DETACHED invocation


 - the code is *not* compiled into the calling program, thus reducing EM
   size (but who cares, really).


 - you cannot exit the routine with a RETURN, you must have an END or
   EXIT, or just run out of statements.


 - takes longer to invoke, as a separate process needs to be brought
   into memory and control passed to it, and then returned to the caller.
   Not a problem for data entry programs but can add run time if it's
   in a update & gets invoked hundreds of times.


Because of the difference in exiting a SUBR (with END/EXIT) vs. a GOSUB (with 
RETURN), you can't really call the routine one way or the other.  You must 
decide if it's going to be invoked as SUBR or GOSUB, and code accordingly.  
If a SUBR attempts to exit with RETURN, you will get a run time error, however,
if a GOSUB encounters an END/EXIT, then you have just ended the execution of 
the entire Event Point, not just that subroutine.  This is a subtle programming 
error that can lead to difficult to track down bugs, ie, sometimes a post just 
skips part of the updating for a record because someone put an END instead of 
RETURN in a GOSUB'd routine.


As to which one to use:


 - COPY if you just want to bring in some straightforward code, i.e., for
   this current ORDER2 record, read the ORDER1, CUSTOMER and PRODUCT files.


 - GOSUB if you need to preserve the T/F flags


 - SUBR if you *need* the special advantages it offers.
[Append to This Answer]
2003-Dec-31 1:02pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
Variable Scoping considerations with GOSUB/COPY and SUBR.
This concept deals with variable values and memory as you branch into and  
return from subroutines.  If you have a process that is using --- AI as a 
counter and at some point in the code you branch into a subroutine and return, 
the variable --- AI may have been changed (or stepped on) by the subroutine.  
That is because GOSUBs and COPYs bring the code into the current process.  
You can have the subroutine STORE and RESTORE any variables it uses, but that 
only works one level deep.  

If a subroutine is called by a GOSUB and it in turn calls another subroutine 
with a GOSUB, then the STORE in the second subroutine will step on the STARE 
done by the first subroutine.  This is because there is only one STORE/RESTORE 
area per variable/process. 

Example:

Process: TEST
SET      --- AI                 =     10
GOSUB    AAA DO SOMETHING
SET      --- BI                 = --- AI
*
END
*
LABEL    DO SOMETHING
STORE    --- AI
SET      --- AI                 =     20
GOSUB    AAA DO SOMETHING ELSE
RESTORE  --- AI
RETURN
*
LABEL    DO SOMETHING ELSE
STORE    --- AI
SET      --- AI                 =     30
RESTORE  --- AI
RETURN

So, instead of --- BI getting a value of 10, it would get a value of 30.  This 
is because the second GOSUB'd routine wrote over the STORE buffer created by 
the first routine.

On the other hand, if you use SUBR calls, then each SUBR routine contains it's 
own STORE/RESTORE buffer area that can never step on the parent process 
STORE/RESTORE buffer or be stepped on by any child process the SUBR calls.  
This way, you are safe to use any variable as long as you STORE it first and 
RESTORE it when done.  Process sharing characteristics are also handy for this.
If you call SUBRs as related, and SUBPROCESS variables are local and any 
RELATED variables are shared.  This also allows for easy recursion.
[Append to This Answer]
2003-Dec-31 1:11pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
Load time, memory usage, and caching considerations when determining using GOSUB, COPY and SUBR.
If you have a very large process like order entry. Breaking it up into separate processes and ILF subroutines can shorten initial load time since the separate process will only get loaded when it is needed for execution. This can also consume less memory and modules used less often can get cached out under the EM caching mechanism.

The downside, is that there may be a very slight, theoretical, performance penalty since you are branching between separate processes, but I doubt this is a measurable difference unless you are very low on memory and other modules have to be cached back in.

[Append to This Answer]
2003-Dec-31 1:12pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
Why are there lowercase I/O Verbs in ILF?
After upgrading to 4.1, previously existing APPX I/O statements (READ, WRITE, etc.) are now printed in technical documentation in lowercase (read, write, etc.).

APPX 4.1.3 has new I/O statements, with different formats than the prior I/O statements. To prevent conflicts, instead of replace the APPX I/O statements, we added new ones. But, we wanted the new one to have the name of the old ones.

Our solution was to convert the current I/O statement names from upper to lower case, then have the new statements be the names with uppercase.

So, the old I/O statements are still there and work. A lower case "read" is the old READ statement and an upper case "READ" is the new I/O statement.

The statements are converted as you edit ILF code. When an ILF event point series is loaded into the ILF editor, the "read" statements are converted to "READ" statements. When you save the code, the I/O statements have been updated to the new I/O statement format.

If you select "upper/lower" with opt-6, the command goes in as "read" instead of "READ", and the remainder of the line uses the old format (8-character file name, etc.) instead of the new. It also does not verify the key path on entry, as READ does.

[Append to This Answer]
2004-Jan-02 10:52am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
ILF Option 94
ILF Browse (Opt-94 within the ILF editor) lets you drill down into design elements embedded in ILF code.

The results of performing an Opt-94 from within the ILF editor depends on the statement at which the cursor is currently positioned and sometimes where the cursor is positioned within the statement.

If you're positioned to a statement that names a label or a process (GOSUB, SUBR, INPUT, etc.), then your cursor can be anywhere on that line and Opt-94 will take you to either the local label, or the process.

Some statements will jump to the DD, not to a process. In those cases you must have your cursor positioned within the field name on the statement. Some statements can contain more than one field name (like IF, APPEND, SET).

With a statement like BEG READ, you can jump to 3 different places. Based on the cursor position, you can jump to the FILE, the FIELD, or the END READ.

If you're not positioned somewhere where ILF Browse can determine where to jump to, then it invokes Xcopy logic. This is the beginning of an enhanced Xcopy that hasn't been implemented yet. For example, you might want to ILF Browse to a subroutine and mark some statements to be Xcopy'd. Someday you should be able to do that.

[Append to This Answer]
2004-Jan-06 4:26pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
ILF Force Save Option 88
ILF will normally be saved upon exiting the editor. In a case where you want to save the code, with or without errors, use option 88.
[Append to This Answer]
2004-Jan-02 10:57am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
ILF Option 95
In the ILF Editor, position your cursor on a LABEL command and hit Option 95 (normally ~~95). APPX takes you to the first GOTO or GOSUB command within that event point for that LABEL. Hit it again and it will take you to the next GOSUB, etc.
[Append to This Answer]
2004-Jan-06 4:24pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
Text and Icon Position via ILF --- WIDGETs
Which fields in the --- WIDGET file correspond to the GUI attribute input fields "Text Position" and "Icon Position", and how are they decoded?
 
Text Position    WIDGET ALIGN HORIZ  WIDGET ALIGN VERT
---------------- ------------------  -----------------
{null}           {null}              {null}
CENTER           CENTER              CENTER
TOP              CENTER              TOP
RIGHT            RIGHT               CENTER
BOTTOM           CENTER              BOTTOM
LEFT             LEFT                CENTER
UPPER LEFT       LEFT                TOP
UPPER RIGHT      RIGHT               TOP
LOWER RIGHT      RIGHT               BOTTOM
LOWER LEFT       LEFT                BOTTOM


                 WIDGET TEXT  WIDGET TEXT  WIDGET TILING 
Icon Position     POS HORIZ    POS VERT     MODE 
---------------- -----------  -----------  -------------
{null}           {null}       {null}       {null}
BEHIND TEXT      CENTER       CENTER       {null}
ABOVE TEXT       CENTER       BOTTOM       {null}
TRAILING TEXT    LEFT         CENTER       {null}
BELOW TEXT       CENTER       TOP          {null}
LEADING TEXT     RIGHT        CENTER       {null}
ABOVE & LEADING  RIGHT        BOTTOM       {null}
ABOVE & TRAILING LEFT         BOTTOM       {null}
BELOW & TRAILING LEFT         TOP          {null}
BELOW & LEADING  RIGHT        TOP          {null}
EXPAND TO FILL   {null}       {null}       EXPAND
EXPAND PROP'L    {null}       {null}       TILE
    
[Append to This Answer]
2004-Feb-11 4:09pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) ILF (Integrated Language Facility) :
I keep loosing my toolbar when I go in and out of the Image Editor.
Prior to release 4.2, the icons that appear on the Image Editor using the Java client were painted by the client. Starting in release 4.2, the APPX engine was changed to get all toolbar functionality from the engine.
[Append to This Answer]
2004-Mar-19 4:55pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Menu Processes
FAQ's relating to the design of Menu Processes.
Subcategories:

Answers in this category:

[New Answer in "Menu Processes"]
2004-Jan-07 2:26pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Job Processes
FAQ's relating to the design of Job Processes.
Subcategories:

Answers in this category:
(Answer) How can I get a date range from an input to the heading on an output?

[New Answer in "Job Processes"]
2003-Nov-18 10:18am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Job Processes :
How can I get a date range from an input to the heading on an output?
I have a job that includes an input, a query, and an output. The input prompts for a beginning and ending date range, which are stored in work fields. I would like to use the dates in the query to select the proper records and in the output to display the date range in the page heading. The dates are present at the end of the input, but are empty in the query and output processes. How can I get the work fields from the input to the other job steps?
The most common reason that the work fields in the input are not seen by the other steps of the job is the share class of the work variables. The default share class of work fields is Subprocess, while the default invocation type of job steps is Related. Subprocess variables are only visible to the parent process and any children invoked as Subprocess. When the input ends the next step is executed as Related, so any Subprocess variables are no longer visible.

Change the Share Class in the Additional Attributes of the work field(s) in the data dictionary to Related and the fields should become visible to both the query and output.

For more information on invocation type and share class refer to Chapter 1-5; Interprocess Communications in the online APPX Application Design Manual at http://www.appx.com/common/documents/manuals/appx/designer/helpset.htm.

[Append to This Answer]
2003-Nov-18 10:44am
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Input Processes
FAQ's relating to the design of Input Processes.
Subcategories:

Answers in this category:
(Answer) How can I scale a picture on an Input screen?
(Answer) How to add a second image to a frame in an input process
(Answer) Message “Scrolling Frame Must Precede All Interactive Frames”
(Answer) How to have a scrolling input process display in-progress messages?
(Answer) Display spaces instead of MM/DD/CCYY on an input screen which is inquiry only
(Answer) Can my scrolling input refresh itself when a record is added or deleted?
(Answer) Can I use different image sizes in my scrolling input?
(Answer) How do I create a dynamically sized scrolling input?
(Answer) When using the PICTURE command I get Load Error!
(Answer) How to set button (widget) colors!
(Answer) How to print tech doc for GUI input processes?
(Answer) How to get information about why the --- SEND FILE TO CLIENT subroutine failed?
(Answer) How can I dynamically apply Special Characteristics (Underline, Bold, Inverse Video)
(Answer) What’s PreDisplay/Verify for?
(Answer) How to display the HELP text for the current Menu?
(Answer) How do you create dynamic screen titlebar text with ILF?
(Answer) What are the rules for non-positive widget positions within an image?
(Answer) How do I stop APPX from automatically displaying the next record during INQUIRY.
(Answer) How can I make a constrained field editable?
(Answer) Which fields in the --- WIDGET file correspond to the GUI attr. input fields?
(Answer) When I go into an Input screen with Optional Children exceeding option number 130 - options 1 through 30 are not there.
(Answer) Word wrapping on multi-line text fields.
(Answer) Is it possible to make the cursor on APPX thicker or more visible?
(Answer) How to blank out or make invisible a Field on an Image
(Answer) Optional frame may result in infinite loop
(Answer) How To Add a Picture to an input process

[New Answer in "Input Processes"]
2006-Apr-27 9:40am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How can I scale a picture on an Input screen?
I created an item widget with a control type of Picture to display on an Input screen. The actual picture is larger than the area available to display it on the screen. How can I scale the picture to fit nicely in the defined space?
As of Appx 4.1.a the Picture control type for an alpha item does not let you set anything to adjust the size or aspect of the image for the item. In order to scale the image, go to change mode on the item and pull up the GUI attributes. Change the control type from Picture to Label. This will open several different attribute field for entry. Change the Icon Position field to EXPAND PROP'L. Now chage the control type back to Picture and save the changes. The Picture control will retain the Icon Position setting and scale the image to fit the defined area.
[Append to This Answer]
2003-Nov-04 4:03pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How to add a second image to a frame in an input process
APPX 4.1
In order to add more than one input image to a frame, the check box under the column heading Mul Img (Multiple Images) on the Frames specification window must be set to "yes" (checked). The default value for this box is “no” (unchecked). If you are in change mode at the image level and want to add another image to this frame, pressing ADD will take you back to the Frames window. Check the Mul Img box and press Enter. You can now add additional images
A Warning message will be displayed at the Frames level when the Mul Img box is checked and Enter is pressed. This is to remind you to code the SET statement in Select Image. The designer must SET the --- ALTERNATE IMAGE NUMBER in the Select Image Event Point to control which image will be displayed for this frame at run time. Refer to the Images section in Chapter 3-1 of the Application Design Manual for a discussion of alternate images.
[Append to This Answer]
2003-Nov-07 2:32pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
Message “Scrolling Frame Must Precede All Interactive Frames”
APPX 4.1

This message will appear when a scrolling input function is invoked that has multiple image specifications defined and the display only (Dspl Only?) checkbox is set to “no” on an image prior to the scrolling image. Within a Frame, all the images defined before a scrolling image must be display only.

Note; if a modifiable field is specified on an image that is defined as display only, APPX will automatically set the Dspl Only? flag to “no” when the image is saved. You can reset the flag to “yes” if your application requires a modifiable field on the image. Refer to Chapter 3-6 of the Application Design Manual for further information on the Dspl Only? specification.

[Append to This Answer]
2004-Jan-07 2:39pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How to have a scrolling input process display in-progress messages?
The technique used in the 0 apps for things like Build EMs or Restructure Files is in the 1EX application.
[Append to This Answer]
2003-Dec-26 3:03pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
Display spaces instead of MM/DD/CCYY on an input screen which is inquiry only
The only way currently to get a truly blank date display on an INPUT in Inquiry mode is to paint an alpha field on your Image, then fill it with all blanks or an alpha value constructed from the source date field, depending on whether the source date is blank or not..
[Append to This Answer]
2004-Jan-07 2:28pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
Can my scrolling input refresh itself when a record is added or deleted?
I have a scrolling input that displays some basic information about the records. This input has an optional child process that will let the user pull up a full screen process to add, change, or delete a record. When the user is returned to the scrolling parent I would like the scrolling input to refresh to reflect the changes made by the user.
You can refresh a scrolling input by designing it as a single step in a job. The input will not actually refresh, it will be terminated and re-executed, which will give the appearance of refreshing the screen.

Instead of executing the input directly, execute the job. Place a value in the CHILD ID field for the job step, such as RERN. In the Post Invocation event point add ILF code to test the value of a work variable to see if the input should re-execute or if the job should terminate. To re-execute the input set the value of --- NEXT CHILD ID to the value you entered on the job step (RERN). This will cause Appx to change its default behavior and go the job step with that child id and start processing from there.

In the parent input process, go to the Additional Attributes of the optional child and set the Parent Disposition to End Before. In places appropriate to your processing in the parent and/or the optional child (the full screen process) set the variable you are going to check in the Post Invocation of the job to a value to indicate if the parent input should be re-executed or not (this is the code mentioned above). Make sure the share class of the variable and the invocation type of the inputs are set so that the variable you use is visible to the Post Invocation event point of the job.

Here is an example from 1EX:


I added the following code to the ORDER2 Input Process, in 1EX, frame 200,
Option Intercept:

      SET      1EX  WORK LOG                  EQ     0

      *        Copy current line
      IF       --- OPTION                     EQ     USER 1

T     STORE    1EX ORDER2                     RECORD

T     BEG LOOP WI = 000 TO 001  STEP 000

T     COMPUTE  1EX ORDER2 SNO                 +      1

T     WRITE    1EX ORDER2                 FAIL 0


TT    SET      1EX WORK LOG                   EQ     1

TT    END PROC


Then in the parent process - INPUT ORDER1, i went to the  AA and gave it a

child ID of TSTT.

Then in the Post Invocation of the Child Rule i added:


    IF       1EX WORK LOG                   EQ     1

T   SET      --- NEXT CHILD ID              =      TSTT


It causes the child process to re-display silently and the newly added record

is displayed to a user.
[Append to This Answer]
2007-Feb-26 2:27pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
Can I use different image sizes in my scrolling input?
To display different sizes of images for records in a scrolling input set the Scroll Type for the scrolling frame to Columnar rather than Down and set the Multiple Images flag to Y(es). Create the desired images and add the appropriate code in the Select Image event point for the scrolling frame to decide which image should be displayed.
[Append to This Answer]
2003-Nov-20 4:47pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How do I create a dynamically sized scrolling input?
Some users have larger monitors and I would like to run Appx with more rows and columns to take advantage of the screen sizes. How can I create a scrolling input that will display more data on the larger monitors?
One way is to design the scrolling input with four frames. Each frame will use a different value for the starting row position or row size. Each frame will contain the same value for the column size.

The first frame will have a starting position of row 1, column 1 (or whatever you want as your upper left corner anchor). The size will be set to -1 for the rows and however wide you would like for the data you need to display. The -1 tells Appx to end the frame one line up from the bottom of the display area. Set the box attribute to Y. Do no create an image for this frame (do not go to the image editor). This will be a display only frame.

The second frame will be the heading frame. The starting position will be the same as the first frame. The size will be the number of rows needed for the headings. This will be a display only frame.

The third frame is the footing frame. The starting position will be a negative number set to the number of rows needed for you footing information. This negative number tells Appx to start the frame that many rows from the bottom of the display area. This will be a display only frame.

The fourth frame will be the scrolling area. The starting row will be one more than the starting row of the heading frame plus the row size of the heading frame. The row size of this frame will be a negative number, one less than the starting row of the footing frame. That indicates to Appx to end the frame size that many lines up from the bottom of the display area.

See the image below for an example of the frame specifications listed above.

                       
                       (Appxscreen1.png)

[Append to This Answer]
2003-Nov-25 10:45am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
When using the PICTURE command I get Load Error!
In an input process I am trying to display a picture using the PICTURE command and Load Error! is being displayed. What does this error message mean?
The only image files you can use in APPX is .png or .gif or .jpg. If your file type is not one of these, you will get the Load Error! message.
You could get this message if your path to the image in misspelled or not accessible to the user running APPX.
Or, the picture field is not large enough to hold the complete path to the image.
[Append to This Answer]
2004-May-21 11:05am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How to set button (widget) colors!
When you create the button (or any other widget), assign a name on the
Button Properties screen.

In Pre-Display, based on the condition you wish to check:

     SET     --- WIDGET NAME =  <Name you gave the widget>
     READ    --- WIDGET HOLD 1 FT 0  BY WIDGET NAME
F    CANCEL      Widgit not found
     IF          <Condition you need to test on>
T    SET     --- WIDGET COLOR EN FG R  = <red value: 0-255>
T    SET     --- WIDGET COLOR EN FG B  = <blue value: 0-255>
T    SET     --- WIDGET COLOR EN FG G  = <green value 0-255>
T    SET     --- WIDGET COLOR EN BG R  = <red value: 0-255>
T    SET     --- WIDGET COLOR EN BG B  = <blue value: 0-255>
T    SET     --- WIDGET COLOR EN BG G  = <green value 0-255>
    *       Set the default color for button 
F    SET     --- WIDGET COLOR EN FG R  = <red value: 0-255>
F    SET     --- WIDGET COLOR EN FG B  = <blue value: 0-255>
F    SET     --- WIDGET COLOR EN FG G  = <green value 0-255>
F    SET     --- WIDGET COLOR EN BG R  = <red value: 0-255>
F    SET     --- WIDGET COLOR EN BG B  = <blue value: 0-255>
F    SET     --- WIDGET COLOR EN BG G  = <green value 0-255>
   *
     SET     --- WIDGET COLOR EN FG NL = 1   <so color is not ignored>
     SET     --- WIDGET COLOR EN BG NL = 1   <so color is not ignored>
     REWRITE --- WIDGET FAIL 0

The color values are the decimal values for the colors.  For example; hex 
color value #FFFFFF (white) is decimal value 255 for red, green, and blue.

The FG fields set the text color (foreground) on the button.  The BG fields 
set the background color.  When you save the ILF READ and WRITE statements, 
if it says the widget file could not be found, use Opt 88 to save the code.
[Append to This Answer]
2005-Jan-12 2:52pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How to print tech doc for GUI input processes?
RC1 of APPX 4.2.0 includes the ability to print Tech Doc for GUI input processes.
GUI Tech Doc now requires a minimum form width of 96 printable characters instead of the 80 character width that was previously used. However, if you define a form with a wider width (such as 120) then you will find that the screen image will be printed without splitting it into two parts. This will be especially useful for those of you who are designing input screens with a size of 28x110. The screen image will also be more accurately depicted if it does not need to be split into two parts to be printed.
Input process tech doc also includes complete documentation for all widgets that are defined in the input process and a rendition of the screen that closely resembles what you see at design time.
[Append to This Answer]
2003-Dec-26 2:03pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How to get information about why the --- SEND FILE TO CLIENT subroutine failed?
Start a session, try the SEND FILE TO CLIENT, then immediately look at the tail end of (Xref) home\appxlog.txt on the client system. There should be some info there about why it might have failed.
[Append to This Answer]
2004-Apr-02 4:43pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How can I dynamically apply Special Characteristics (Underline, Bold, Inverse Video)
If you look in the 1EX application that is shipped and installed along with APPX, you will find an input process called SPECDSPL which has an example of how to directly apply special screen attributes to the window via ILF code. This is not the field oriented method of ULINE, BLINK, etc. Instead, you give an screen row, col, height, width, and what characteristics you want and it directly paints them there. The example shows how to underline and bold a sub-region of a text field.
[Append to This Answer]
2004-Jan-07 2:33pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
What’s PreDisplay/Verify for?
There are three event points which complement each other in order to provide the flexibility actually needed when designing a well behaved, complex input process. We will ignore the OPTION INTERCEPT event point (and others) for the purposes of this discussion. They are:

     PRE-DISPLAY
     PRE-DISPLAY/VERIFY
     VERIFY

VERIFY is executed after the operator keys data and presses ENTER. It is not executed prior to displaying the screen. It is only executed after data entry. The this event point's purpose to validate data entered and to allow for displaying of ERROR and WARNING messages..

PRE-DISPLAY is executed only once when a record is initially retrieved in Change mode or Inquire mode, just before the screen is displayed. In Add mode it is executed once for each ENTRY LEVEL which occurs, just before the screen is displayed.

Pre-Display's primary purpose is to allow default values to be set, and screen attributes such as NO INPUT, etc.

The PRE-DISPLAY/VERIFY event point is the most difficult to understand because it is more or less a combination of the other two event points although there are some differences. It is executed before the screen is displayed after retrieving a record (much like PRE-DISPLAY).

However, it is also executed after data entry - after the VERIFY event point - just before the screen is redisplayed. It can be executed multiple times for a record being processed, not just once like PRE-DISPLAY. This is intended to facilitate displaying of related information such as data lookups, results of calculations, etc.

This event point should not be used to validate data unless the ERROR and WARNING messages are intended to be displayed when the screen is initially displayed since they will be executed at that point as well. This behavior is the source of the current discussion regarding error messages which display in inquire mode as well as other modes.

It is my contention that the prior behavior (before 3.3) of APPX was the correct one and there is a good chance that the next release (3.4) will revert back to that behavior.

[Append to This Answer]
2003-Dec-31 12:09pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How to display the HELP text for the current Menu?
The following technique displays the user documentation text for the current Menu:

 Create a detached Optional Child:

               --- SUBROUTINE   HELP (PROCESS)

 Give it a Pre-Invocation ILF command:

               GOSUB    --- HELP (GRAB CURRENT PROCESS)

[Append to This Answer]
2004-Jan-07 2:41pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How do you create dynamic screen titlebar text with ILF?
Either of:

1) If no Window Label is defined in the widget, the label value comes from the first row of the screen. That will include the display values of any fields that are on line 1.

2) If there is a Window Label defined in the Window widget, that is used instead of the line1 text. You can name the widget and use ILF in Pre-Display of the image that contains the Window Widget definition. Read the widget by name, change the label, and rewrite it.

If you have an INPUT process with a Window widget Label and call another INPUT process that is the same or smaller size but has no Window widget and has Box? = No, the screen contents will be layered into the prior window and the prior windows widget will still be enforced. You can break this reuse by setting Box? = "?" on the child process frame, and/or add a Window widget to the child image.

[Append to This Answer]
2004-Jan-06 4:18pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
What are the rules for non-positive widget positions within an image?
If widget row = 0, Appx will center the widget (vertically) within the image
If widget row < 0 the widget will appear abs(row) rows above the bottom of the image
If widget column = 0, the widget will be centered (horizontally) within the image
If widget column < 0, the widget will appear abs(column) columns to the left of the right edge of the image
[Append to This Answer]
2004-Jan-09 9:59am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How do I stop APPX from automatically displaying the next record during INQUIRY.
In an INQUIRY process, when the user enters a nonexistent key, the next record in sequence is automatically displayed. If you don’t want this to occur in the INQUIRY Start of Process event point, code:

            SET   --- EXACT KEY REQUIRED   =    Y

When the INQUIRY is in Key Entry, if a non-existing key value is entered, it will then not advance to the next record. Also, by setting:

            SET   --- AUTO READNEXT        =    N

... after a valid key has been entered and the INQUIRY has been run, when END is pressed, it will then not auto advance to the next key value. (Setting READ NEXT to NO in the INQUIRY's Additional Attributes does not accomplish this.)

[Append to This Answer]
2004-Jan-20 10:20am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How can I make a constrained field editable?
Setting the field to OK INPUT (or maybe Entry Level=0) will make the 
field editable. But, then you will need the following trick to actually 
get the changed value to save because APPX always restores the constraint 
field values just before rewriting the PCF record.


In Pre-Update
STORE   XXX HOLD    RECORD


In Post-Update
READ    XXX HOLD (with hold) 
RESTORE XXX HOLD    RECORD
REWRITE XXX HOLD
[Append to This Answer]
2004-Feb-13 8:45am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
Which fields in the --- WIDGET file correspond to the GUI attr. input fields?
Text Position    WIDGET ALIGN HORIZ       WIDGET ALIGN VERT
---------------- ------------------------ --------------------
{null}           {null}                   {null}
CENTER           CENTER                   CENTER
TOP              CENTER                   TOP
RIGHT            RIGHT                    CENTER
BOTTOM           CENTER                   BOTTOM
LEFT             LEFT                     CENTER
UPPER LEFT       LEFT                     TOP
UPPER RIGHT      RIGHT                    TOP
LOWER RIGHT      RIGHT                    BOTTOM
LOWER LEFT       LEFT                     BOTTOM

Icon Position    WIDGET TEXT POS HORIZ    WIDGET TEXT POS VERT    WIDGET TILING MODE
---------------- ------------------------ ----------------------- -------------
{null}           {null}                   {null}                  {null}
BEHIND TEXT      CENTER                   CENTER                  {null}
ABOVE TEXT       CENTER                   BOTTOM                  {null}
TRAILING TEXT    LEFT                     CENTER                  {null}
BELOW TEXT       CENTER                   TOP                     {null}
LEADING TEXT     RIGHT                    CENTER                  {null}
ABOVE & LEADING  RIGHT                    BOTTOM                  {null}
ABOVE & TRAILING LEFT                     BOTTOM                  {null}
BELOW & TRAILING LEFT                     TOP                     {null}
BELOW & LEADING  RIGHT                    TOP                     {null}
EXPAND TO FILL   {null}                   {null}                  EXPAND
EXPAND PROP'L    {null}                   {null}                  TILE
[Append to This Answer]
2004-Feb-19 4:33pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
When I go into an Input screen with Optional Children exceeding option number 130 - options 1 through 30 are not there.
I have to go past 30 and then use the scroll bar - and scroll up one line at a time to see the Optional Children.
This bug has been reported and is logged in the BugTracker system as bug report #624. Two other related bugs are #458 and #459. The BugTracker system can be found at;

http://bugtracker.appx.com:81/

[Append to This Answer]
2004-Mar-19 4:56pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
Word wrapping on multi-line text fields.
On Character Mode and Win32 client interfaces, word wrapping on multi-line text fields only works if there are no other editable fields on the same row. The Java client interface does not have this limitation.
[Append to This Answer]
2004-Mar-19 4:59pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
Is it possible to make the cursor on APPX thicker or more visible?
Using the Java Client for 4.2.x you can set the "caretcolor" under the advanced options to something like #FF0000 to get solid red but, as yet, there's nothing that'll make it wider.
[Append to This Answer]
2004-Mar-19 5:00pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How to blank out or make invisible a Field on an Image
`
Using ILF control, to temporarily remove a Widget (field) from an Image, perform:
   SET  --- WIDGET INVIS = Y
See also the ILF verb 'BLANK', in the Application Design Reference Manual:
  www.appx.com > Support > Online Manuals > Application Design Manual
`
[Append to This Answer]
2004-Apr-21 12:03pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
Optional frame may result in infinite loop
When an error is detected in an event point past the normal display cycle, such as "record already on file" in pre-pcf update, APPX attempts to re-invoke the last frame in that input process. If that frame is optional and alternate image number is zero, the frame will not be displayed and you'll fall right back to pre-pcf update, an infinite loop.

You can check for duplicate keys, primary and unique alternates, within a displayed frame and send a message to the status line informing the user of the condition. You could also set a flag in pre-pcf update and check this flag in select image and set the alternate image number to non-zero so the frame will be displayed.

[Append to This Answer]
2004-May-25 10:39am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Input Processes :
How To Add a Picture to an input process
You can use PRODUCT file input in 1EX application as an example. Make sure you have a little room to the right of the boxes on the input. We can use that area to add a picture of the product to the screen so that the order entry clerks can see what they are working with.
 
With buttons, labels, and picture widgets we used icons and images that are constant. The same image appears on the screen every time it is displayed. With the product input we will want to have a different picture displayed for each product.
 
This is accomplished by adding a field to the PRODUCT file to store the name of the image and using GUI attributes to tell APPX where the picture is located. You can add the alpha field to the screen and define it as a picture type (in Object Properties).
 
Add an alpha field to the PRODUCT file. It should be large enough to contain the name, or path and name, for the image. In this case we will not need a large field since the names we will be using are short. Don’t forget to restructure the PRODUCT file.
 
Add the new field to the PRODUCT input in two places. One entry will be the text field so that the image name can be entered. The second will be the location you want the picture displayed. That field should be non-modifiable and should have the rows and columns set to cover an area large enough for the image. In this exercise make the field fit into the area to the right of the data by inserting the image and using the size handles to drag it out. You may need to adjust the size after running a test.
 
On the second field, pull up the GUI properties screen and select the picture control. Set the location to DESIGN FILE. We will use a couple of existing images. In real life you would probably have a central repository on the server and would point to SERVER FILE.
 
That is it. We should be able to run the PRODUCT input and select an item in change mode. Enter image name in the modifiable product picture location field. The image should display in the second field.
 
The images are loaded into cache in memory when first displayed in order to keep from downloading the image each time it is displayed. Sometimes the cache does not clear when an image is entered incorrectly the first time. You may need to exit APPX and get back in if the name was entered incorrectly the first time.
 


[Append to This Answer]
2004-Nov-05 11:07am
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Output Processes
FAQ's relating to the design of APPX Output Processes.
Subcategories:

Answers in this category:
(Answer) How do I keep an Output from automatically printing Grand Totals?
(Answer) Can I print a date in Julian format?
(Answer) When I add rows at the frame level the rows on the image do not change.
(Answer) Does APPX support printing a bar code on an output form?
(Answer) How to get a setup grid on a PDF report?
(Answer) How to format a date to automatically display day of week or month of year!
(Answer) Can I format the date on automatic OUTPUT header(s)?
(Answer) Why are my labels in an output PDF report being truncated?
(Answer) How do I pass 'ESCape' sequences to my printer?
(Answer) How to print duplex, print on front and back of each page
(Answer) How to program an exception report, example of ALTERNATE IMAGE NUMBER
(Answer) Can GRAND TOTAL be controlled via ILF
(Answer) Additional help on PDF layout options
(Answer) Now that I can generate PDF files from APPX, how can I get the PDF to display as such in a browser?
(Answer) What is the best format to print a logo, images?
(Answer) We need to be able to use a specific font to support an OCR scan line
(Answer) HTML tags that can be used within a text field that is to be displayed with an HTML Viewer widget type via the APPX client.
(Answer) Can I print an OCR font in a PDF document?
(Answer) How to embed an image on an output?
(Answer) I have upgraded to 4.2.6 recently and now my PDF output text is shifted
(Answer) Is there a limit to the number of lines PAGE-END can have?
(Answer) HTML in PDF Documents
(Answer) How to create a PDF Form Overlay.

[New Answer in "Output Processes"]
2007-Jan-24 3:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
How do I keep an Output from automatically printing Grand Totals?
There is a flag in each query process called “Grand Total”. Set it to “None”.
[Append to This Answer]
2003-Nov-17 4:41pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Can I print a date in Julian format?
A display mask of 555 will display the Julian day number. A mask like "8807 - 555" would display a date as 2004-247.
[Append to This Answer]
2003-Nov-26 3:07pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
When I add rows at the frame level the rows on the image do not change.
The number of rows are set in additional attributes at the IMAGE LEVEL. The number of rows (and columns) in an image by default are the same as the number of rows and columns of the frame. You can set the number of rows and columns for each image in the additional attributes for the image. If the numbers of rows are set to 2 at the image level (in additional attributes) and you change the number of rows at the frame level from 2 to 5, the image size will not change. The image size cannot exceed the frame size.
[Append to This Answer]
2004-Jan-07 2:43pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Does APPX support printing a bar code on an output form?
No. As of release 4.2, there isn’t a bar code font supported within APPX..
[Append to This Answer]
2003-Dec-26 1:38pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
How to get a setup grid on a PDF report?
There's a field in the PDF form definition process labeled "Print Grid?". Set that to "Y" if you want a grid to be overlaid on your report during design.
[Append to This Answer]
2003-Dec-26 1:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
How to format a date to automatically display day of week or month of year!
If in painting a date field onto an OUTPUT image, you edit the display masks with the Day-of-the-Week or the Month-of-the-Year, you will get appropriate substitutions. For example:

A display mask of "Monday January 05, 04:03 am" will (on 9/16/96) yield a displayed Date of "Monday September 16, 11:48 am".

A display mask of "05 January 0807" will (on 9/16/96) yield a displayed Date of "16 September 1996".

Also, the 'SET DATE' ilf command can extract the Day-of-the-Week or the Month-of-the-Year, as documented in ...

            http://www.appx.com/manuals/appl-dsgn/drm282.html

[Append to This Answer]
2003-Dec-31 8:53am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Can I format the date on automatic OUTPUT header(s)?
Date masks on OUTPUT Report Page Headings can be controlled by means of a
System-Parameter, or Application-override Date masks, and an environment
variable 'APPX STD PGH MASK'.

For Example:

If I have no System or Application date mask override set, and I run an
OUTPUT with a standard page heading, I get a page heading date (for example)
of "03/25/1999 00:16 23.83"

If I had set my System or Application date mask to 

"06/05/07 - 04:03:02.01"

I get a page heading date of

"03/25/99 - 00:16 23.83"
[Append to This Answer]
2003-Dec-31 8:52am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Why are my labels in an output PDF report being truncated?
Several things might be causing this problem. First check to see if the report will print on another printer. It’s been reported that this problem occurs on a Xerox Docucenter 440ST. If it does, there may be a problem with the print driver.

If you are trying to print using Adobe Acrobat, make sure that the image is not being modified by the viewer when it prints. In Acrobat 6.x, on the File/Print screen set Page Scaling to none, Auto Rotate to no, and Choose Paper Source to yes. Set the "Bitmap" ("Image" in English?) option under the Advanced button on the bottom-right of the Adobe print screen.

Also ensure that the form definition is defined and allows enough ‘grid’ space for the elements on the output page.

                        

Bruce Johnston Jan 12, '04:
wrt the Xerox driver, the problem was only appearing for right-justified label widgets but was there regardless of whether a PCL or PS driver was used.
Have a care when changing the drivers for experimentation. I tried the latest and greatest and it reverted to a previous bug in which white space in fixed-space fonts was being calculated as zero which really messed thigns up.
Note that printing as Image or Bitmap will be slower but only really noticable in slower LAN/WAN connections to the printer since each page can be a couple of Mb vs. the KB range for native .pdf requests.
[Append to This Answer]
2004-Jan-16 2:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
How do I pass 'ESCape' sequences to my printer?
The ILF code ...

         CNV BIN  --- TEMP 1           = 27

 ... puts an "ESC" Escape character (hex(1b)) into TEMP 1.  You can then SET
this into an Alpha field, append other control codes as necessary, then embed
Alpha fields constructed in this manner in our OUTPUT report.

 ('ESCape' = Hex(1b) = 16 + 11 = decimal(27).)

See the ILF manual on the CNV BIN verb, for more detail on how it works.  

 www.appx.com > Support > Manuals > Application Design > Search > CNV BIN

On APPX/Windows platforms, you'll need to send a 'Form Control' of "-raw", in
order to tell the Windows Print Spooler not to filter out your escape codes.

WARNING:  Winprint interfaces to the printer's printer driver.  Some printer
drivers don't honor '-raw' pass through of hex codes.  The only way to find 
out is to try it.
[Append to This Answer]
2004-Jan-02 10:48am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
How to print duplex, print on front and back of each page
For occasionally printing in duplex mode, you can put -interactive into the Form or Printer Control string. This calls up the printer driver's interactive setup screen (just like Word's File; Print; Properties screen). You should be able to set front/back printing there.

If you need to hard code it in the body of your output file with escape/hex codes, you must turn on the -raw flag in the Form or Printer Control string.

WARNING: Winprint interfaces to the printer's printer driver. Some printer drivers don't honor '-raw' pass through of hex codes. The only way to find out is to try it.

Bruce Johnston Jan 14, '04: Under Unique things are easier to manage, Go down to the formfont directory and look for files named "formname.printermake" as in "136.HP" and inside you should see something like Duplex=1 or Duplex=2 The first results in long-edge binding the second in short-edge binding.
Always back things up first.
[Append to This Answer]
2004-Jan-15 8:54am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
How to program an exception report, example of ALTERNATE IMAGE NUMBER
On an exceptions report, I only want to print records with problems. How do I tell it to skip (not print) the good ones? Do I do this in Pre-Display?
Start your OUTPUT Frame's "Select Image" ILF series with:

           SET --- ALTERNATE IMAGE NUMBER = 0

Put the ILF that tests for exceptions below that. If a Record (or set of conditions in a Range-End frame) qualifies as an exception:

           SET --- ALTERNATE IMAGE NUMBER = 1

You can also issue MESSAGE, WARNING, ERROR, or CANCEL ILF commands at this point. Paint whatever fields and text you'd like on the OUTPUT Frame's Image, and you have a customized exception report!

[Append to This Answer]
2004-Jan-06 4:15pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Can GRAND TOTAL be controlled via ILF
The "Grand Total?" design spec is editable in the QUERY editor, and displayed at run-time on the QUERY sort order screen. Manipulating the "Grand Total?" spec would get into editing the run time Q files.

The design spec, "Grand Totals", is used to set the following QSORT fields:

     QSORT SUBT
     QSORT SUBT NEW PG

They are set respectively as follows:

     NO       N,N
     STANDARD Y,N
     NEW PAGE Y,Y

Note that there are multiple QSORT records. This one is the one with QSORT SNO=0. The other QSORT records would be for the other "Sort Order" records. The field QSORT ACTV probably also needs set to 'Y'.

You're dealing with APPX internals here, so ASI does not provide support for the viewing and manipulation of these files. You're on your own.

[Append to This Answer]
2004-Jan-06 4:30pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Additional help on PDF layout options
If you haven't already tried it, create a new PDF form and set Print Grid? to Y (and then print your reports with the new form). You should get an extra page at the end of each report that explains how to use the APPX_GRID_STYLE environment variable to control a few useful layout options.
[Append to This Answer]
2004-Jan-09 9:56am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Now that I can generate PDF files from APPX, how can I get the PDF to display as such in a browser?
Normally I use a CGI script that designates the content type as "text/html". I can create a link on the website that runs a subroutine that creates a PDF report, but in sending it back to the browser, it's treating it as text, so all of the PDF codes you would see if you looked at it in Notepad are displayed instead of launching Acrobat. How can I send the PDF file as a *.pdf back to the browser so it knows to open Acrobat?

Changing the content type tag in the CGI script to "application/pdf", which is the content type for *.pdf documents, will do the trick.

[Append to This Answer]
2004-Apr-07 3:39pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
What is the best format to print a logo, images?
In general to get the best scaled images, you want as much resolution as you can get in pixels (within reason) and also a high number of colors in the image bit depth.

The high resolution means the image will be scaled down for the pdf form instead of up. Scaling formulas do a lot better job throwing away extra detail than they do creating detail where it doesn't exist.

The large color depth gives the formula a much better ability to anti- alias. If you are using a black and white (1 bit) color depth, it can't anti-alias at all and will always create a jagged border. If you are using straight black and white, just converting the image to a gray scale image will make a big difference in the result of scaling.

As for image processing software, you can use Adobe Photoshop. But almost any tool will allow you to alter the image color depth and save under a number of formats. If you have linux, it comes with a tool called "gimp" that is an open source knockoff of photoshop without the fancy user interface.

Is .JPG the 'best' file type? Or is there a better one? And for that matter, what other formats are acceptable (if any)?

For screens, you can use JPG, GIF, and PNG files. JPG's aren't good for line drawing (because the images are compressed with a lossy algorithm - sharp lines disappear).

GIF's are patent-encumbered.

If you want to include a resource image that has fine, crisp, details, you don't want to use JPG to store the image. JPG uses pixel averaging which distorts and drops out fine detail. Like very thin lines and such. JPG was create to store high color, low detail images like photographs.

PNG is the best bet. It's the newest if the three and does a fine job.


[Append to This Answer]
2004-Apr-28 4:32pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
We need to be able to use a specific font to support an OCR scan line
We need to be able to use a specific font to support an OCR scan line in an output process with APPX 4.2.4. How would we go about using the following font: OCR A Extended

Go the the output editor and bring up your output image. In the Object Properties > GUI Attributes of the field there is a selection for Font (in Font Options box). This is a drop down list showing the fonts that are available to you. Select the font you want. Of course this has to be a PDF document for printing this report. If the font is not listed in the drop down, then the font will have to be installed on your machine.

[Append to This Answer]
2004-Jun-16 9:15am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
HTML tags that can be used within a text field that is to be displayed with an HTML Viewer widget type via the APPX client.
For a new line, use CTL RETURN.

<p>               - new paragraph (does not require an ending </p>)
<pre> ... </pre>  - new paragraph with Courier font and fixed spacing
&nbsp             - fixed space (needed when not using <pre>)
<b> ... </b>      - bold
<i> ... </i>      - italic
<li> ... </li>    - each bullet
<ul> ... </ul>    - to indent bullets
<font size="n"> ... </font> where n=1-9 (1=8,2=10,3=12,4=14,5=18,6=24,7=36pt)

A good example of usage to look at is the new IF DIFF statement under 
System APPLICATION DESIGN, Subsystem ILF STATEMENTS.  
Remember, in INQ mode, you see the HTML tags applied; 
in CHG mode, you see the actual HTML tags coded.
[Append to This Answer]
2004-Jun-24 8:30am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Can I print an OCR font in a PDF document?
No, currently (rel 4.2.4) the only fonts supported for PDF output are the ones listed on the pulldown list. Unfortunately, it is not possible with APPX release 4.2 to use an OCR font for PDF output.
[Append to This Answer]
2004-Jul-09 5:39pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
How to embed an image on an output?
If you'd like to embed an image (i.e. company logo) at the PAGE-START of the output, you need to do following:
1. Design transfer STANDARD PAGE HEADING output from 0LC to your application.
2. Modify STANDARD PAGE HEADING to include following code:
   RESTORE  --- WIDGET                     DEFAULT RECORD
      SET      --- WIDGET PARENT TYPE         =      WIDGET
      SET      --- WIDGET WIDGET TYPE         =      PICTURE
      SET      --- WIDGET POSITION ROW        =      1
      SET      --- WIDGET POSITION COLUMN     =      2
      SET      --- WIDGET LOC OFFSET COL      =      -100
      SET      --- WIDGET SIZE ROWS           =      3
      SET      --- WIDGET SIZE COLUMNS        =      15
      SET      --- WIDGET RESOURCE TYPE       =      RESOURCE
      SET      --- WIDGET RESOURCE NAME       =      <your resource name>
      SET      --- WIDGET RESOURCE AP         =      <your app>
      SET      --- WIDGET TEXT POS HORIZ      =
      SET      --- WIDGET TEXT POS VERT       =
      SET      --- WIDGET TILING MODE         =      TILE
      WRITE    --- WIDGET                 FAIL 0
This code needs to go right before the very last statement of the STANDARD PAGE HEADING, which is
COPY --- STANDARD COLUMN HEADING (GUI)
3. You need to go to the System Administration Menu --> System Setup --> Hook records and hook your process.
4. You have to have resource defined. We recommend to have your mage on the server. Your image can be .png, .gif or .jpeg. Some image types can be more restrictive than the other's, so try it with different types and see which one works the best (.jpeg should almost always work).
Remember, that this will work with PDF outputs only and you have to run Java client.
If you want picture displayed anywhere on your image, you need to have a WIDGET defined as PICTURE, give it location type and Resource Name. Make sure you have Resource defined.
[Append to This Answer]
2005-Mar-08 2:33pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
I have upgraded to 4.2.6 recently and now my PDF output text is shifted
You need to make sure that in your Form Definition, the default Font is left blank. The default font for PDF documents is Courier. If you define a font in the Form definition, Appx will use it instead of the default and it may cause your PDf document not to look right. This field was ignored prior to version 4.2.6.
[Append to This Answer]
2005-Apr-01 3:45pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
Is there a limit to the number of lines PAGE-END can have?
There's a 255-line limit on any frame class.
[Append to This Answer]
2005-Jul-25 1:52pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
HTML in PDF Documents
I thought we could use HTML in PDF outputs? I have a TEXT type field that I have filled with some simple HTML:
<html>
Address 1<br>
Address 2<br>
Phone<br>
</hmtl>

The <br> is ignored, and the text prints w/o a break.

I used a LABEL control type. This works fine in an input process.

What I am doing wrong?


 <br> is ignored...  
You can change fonts and colors inside of a PDF field (using HTML tags), but not layout (at least not yet). You should be able to use:
<font size=10 color=#00FF00> set size and color at once, you can also do stuff like:
size=+2 or size=-3 </font> <big> next larger font </big> <strong> bold </strong>
 <i> italics </i> <em> italics </em> <tt> tele-type font (courier) </tt> <small>
 next smaller font </small>
<u> underline </u>
More tags likely in future releases
[Append to This Answer]
2006-Jan-10 10:51am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Output Processes :
How to create a PDF Form Overlay.
A PDF form overlay is a predefined image, or electronic form, that is printed along with data fields in an output process. The use of form overlays can help eliminate the need for preprinted forms. These instructions explain the basic steps for creating an output process with a form overlay.

You will have to determine the scale of your image in relation to the form size that will be used for the output. It may be necessary to create a form in System Administration that is adequate for the overlay you are using. For this example, I have a form named PDF-6P10 that is a type PDF with form length of 60 and width of 80. The overlay image is a .png file named POForm.png.

Although Appx accepts jpg, gif and png images, the png format is the recommended image type to use.

1. The first step is to obtain or develop the electronic form you wish to use in your output process and create the Appx form definition as described above.

2. Copy the overlay file (POForm.png in this example) to the AppxPath/vv/aaa/Resource directory where vv is the application version and aaa is the application.

3. In Application Design add a Named Resource (PO FORM in this example). Make the State ENABLED and set the Type to Design File. The Location is the name of the overlay file, POForm.png. Note; match the case in the Location to that of the actual file name in the Resource directory. The image will not display if the name and case is not exactly the same.

4. Now create an output process. In my example I add a new output process called PRINT PO, Columns set to 80, Standard Page heading set to No, Column headings set to No, and remove the default Separator character (=).

5. Set the Preferred Form in Additional Attributes with the predefined form for this output process, PDF-6P10 in my example. If the default form is not set to the form name you have defined the printed result may not match your design.

6. Select PAGE-START for the first output image.

7. Set the length and width to match the form you will be using. In this example the form is length 60 and width of 80.

8. Navigate to the image editor.

9. Select the Picture icon from the toolbar and drag out a box the size of the display area.

10. Enter the Resource name you added above, PO FORM in this example (don’t forget to include the Application Id). Save these settings.

11. Page the image down (Cntl-down arrow) and drag the bottom of the Picture widget to the bottom of the display area. Repeat this step until you are at the bottom of the display area, line 60.

12. Go back to the top of the display area (Cntl-up arrow).

13. Edit the Picture properties and set the scale to a number that fits your liking. This might be a trail and error process until the overlay is exactly the way you want it. If necessary the overlay image may have to be adjusted using an editing tool such as MS Paint or PhotoShop.

14. Save the output image.

15. Return to the Frame level and set the length to 1, explanation below.

16. Add other frames as needed to complete the output process. On my PO FORM there is a place for repeating and non-repeating data. For the non-repeating fields, the top of the PO FORM, I set the Size of this frame to 21 by 80. There are 21 rows on the form before the repeating line items begin.

17. In the image area for ach frame add the fields, placing them at the approximate location to match your form. You can fine tune their locations while testing the process.

18. Create a Job process to include a Disposition. The Disposition Form Id must be the form you added for this output (PDF-6P10) and the Format must be PDF. You can set these parameters in Pre-Invocation of the Disposition job step for testing.

19. Run the job to test the output process and make adjustments as necessary.

The PAGE-START frame was changed back to 1 line after dragging the picture widget out so that the output would be a single page. PDF output cannot distinguish blank areas within a widget. If the length was left at 60 lines, the output would have printed the form as a page followed by the text on the second page based on my form and image sizes. By changing the length to 1 the output prints only one line, although the actual image extends beyond that. The text image then starts on line 2 of the output for the length indicated. The result is that your data is printed on top the overlay image on a single page.

The fit of the fields into the boxes of the form can be further refined by creating the text or fields as widgets and using micro adjustments to move the widgets into the exact location. Don’t forget you can also adjust the font type, size and color for each widget.

    

[Append to This Answer]
2007-Feb-08 5:15pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Query Processes
FAQ's relating to the design of APPX Query Processes.
Subcategories:

Answers in this category:
(Answer) Query stops before processing entire file!
(Answer) Why doesn’t my QUERY use the file’s index?
(Answer) Can I create a Cached copy of a file to use in my pre-user selection event point?
(Answer) Is there a way to edit query and sort order screens?

[New Answer in "Query Processes"]
2004-Jul-09 4:50pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Query Processes :
Query stops before processing entire file!
When running a job/update process that uses a query, we got an Appx error during the selecting records phase. This was about 10000 records into the file, out of ~180000, and stated that it couldn't scratch the work file because the record length was invalid.
That's caused by a known bug in earlier versions of Appx. You can work around that problem by setting an environment variable, try this:
        APPX_RUN_MEM=2097150
This tells Appx to allocate 2MB to process a give query before it falls back to using an on-disk sort strategy.
[Append to This Answer]
2003-Nov-20 11:10am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Query Processes :
Why doesn’t my QUERY use the file’s index?
A query for (FLD EQ "A") used the index on FLD to select records, a query for (FLD EQ 1) OR (FLD EQ 2) OR (FLD EQ 3) doesn't use the index, why? (Determined by looked in APPX QUERY LOG and saw what it was doing.)

The Query compiler currently (as of 4.1.9) stops looking for indexes once it runs into an OR condition.

Bruce Johnston Feb 5, '04: Starting in 4.1 you can use the new Query Event Point, Establish PCF Range, to boost performance where OR conditions are on leading portions of a key field. In the following example, a memory file, MCUST, contains customer master record keys of interest obtained using a prior scolling input... ...
      *                                                                         
      *        Customer of interest were supplied in an earlier input.          
      *                                                                         
      BEG READ DAR MCUST                  HOLD 0 KEY IS  MCUST CUSTOMER NO      
      BEG AT   DAR TRANSACT IN DAR MCUST CUSTOMER NO                            
      END AT   DAR TRANSACT IN DAR MCUST CUSTOMER NO                            
      BEG READ DAR TRANSACT               HOLD 0 KEY IS  TRANSACT KEY           
      GOSUB    --- PROCESS QUERY RECORD                                         
      END READ DAR TRANSACT                                                     
      END READ DAR MCUST                                                        
... This is effectively an OR condition for each value of MCUST CUSTOMER NO. You could have additional OR conditions on other key fields by simply cloning the above sequence and then modifying it. I have verified Steve's assertion that you can't end up with the same record selected twice.
Note that the presence of ANY code in this series even something as innocuous as a simple TRAP or comment line will disable the Fast Query which might otherwise occur on design/runtime criteria normally specified though additional selection criteria are honoured. The records acted upon by --- PROCESS QUERY RECORD are simply the only candidates considered for the selection criteria.
[Append to This Answer]
2004-Feb-05 6:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Query Processes :
Can I create a Cached copy of a file to use in my pre-user selection event point?
Yes, CREATE the cached file in Start of Query Execution
[Append to This Answer]
2004-Jul-09 4:49pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Query Processes :
Is there a way to edit query and sort order screens?
Yes (rel 4.2 and up). Look at 0LC 00: Inputs

QSLCT EDIT QSLCT EDIT (EXPR) QSORT EDIT

[Append to This Answer]
2004-Jul-09 4:50pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Update Processes
FAQ's relating to designing APPX Update Processes.
Subcategories:

Answers in this category:
(Answer) How can I show my users a progress message?
(Answer) How to change the Progress bar color during an update!

[New Answer in "Update Processes"]
2003-Dec-31 9:05am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Update Processes :
How can I show my users a progress message?
There are three ways to show an in progress message so the user knows the process has not hung.

The first, and simplest, is the APPX_SHOW_PROGRESS environment variable. Setting this variable with a value to 1 when APPX is started will cause APPX to display the record counts for selection and processing in queries, update, and outputs. The message is displayed on the status line at the bottom of the APPX screen. The count will display starting at 1 and then changing the frequency of the display as the count increases. It starts at 1, then every 10, then every 100, then every 1000, etc. as the file is processed.

Method two is the REFRESH command. If you would like more control over the display you can issue a REFRESH command based on your own calculations. The REFRESH command will display your message on the status line at the time the command is executed.
The third method is to execute an input from ILF code during the processing of the update. If you would like to display a pop-up style message you can issue an INPUT command based on your count. Make sure the input is display only so that it will not wait for user intervention to continue and set the frame’s End Disposition in Additional Attributes to HOLD so that the screen will remain after execution returns to the update.
[Append to This Answer]
2003-Nov-21 3:59pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Update Processes :
How to change the Progress bar color during an update!
Give the progress bar widget a name, and update the color at runtime using the --- WIDGET file.
[Append to This Answer]
2004-Mar-29 2:33pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Status Processes
FAQ's relating to the design of APPX Status Processes.
Subcategories:

Answers in this category:

[New Answer in "Status Processes"]
2003-May-09 1:34pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Inquiry Processes
FAQ's relating to the design of APPX Inquiry Processes.
Subcategories:

Answers in this category:

[New Answer in "Inquiry Processes"]
2003-May-09 1:36pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Subroutine Processes
FAQ's relating to the design of APPX Subroutine Processes.
Subcategories:

Answers in this category:
(Answer) Invocation error when subroutines with the same name in different applications

[New Answer in "Subroutine Processes"]
2004-Jan-07 2:49pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Subroutine Processes :
Invocation error when subroutines with the same name in different applications
Example:

GOSUB TRN TEST ABC
GOSUB XFR TEST ABC
GOSUB TRN TEST ABC

The subroutine TRN TEST ABC will be invoked in all cases. Now reverse the App Id's so that XFR TEST ABC is invoked first. Now only XFR TEST ABC is invoked.

This is a document bug in APPX (Bug #799).

[Append to This Answer]
2004-Jan-07 2:49pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Data Dictionary
FAQ's relating to the use of the APPX Data Dictionary.
Subcategories:

Answers in this category:
(Answer) How many fields can be defined for a file in the Data Dictionary?
(Answer) I changed the alignment of the field from left to right but the sorting remains the same, why?
(Answer) Can I invoke another process in a FLEP?
(Answer) FLEP’s may not execute when the cache priority it set to 1.
(Answer) What is the scope of a FLEP?
(Answer) Can I pass information into a FLEP?
(Answer) How many times does Post-PCF Read FLEP fire?
(Answer) Do many duplicate keys decrease the performance?
(Answer) Can ERROR statement be used in FLEP's?
(Answer) FLEP questions
(Answer) I want to delete fields from a file in my DD, but those fields contain data, should i delete the data first?
(Answer) I added a new value to a validation table and it’s not listed at run-time, why?

[New Answer in "Data Dictionary"]
2007-Jul-13 3:57pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
How many fields can be defined for a file in the Data Dictionary?
The maximum size of a record in APPX is 32767 bytes. There is no limit on the number of fields as long as the cumulative length doesn't exceed this 32K maximum APPX record length.

Maximum record length is regardless of file type (AppxIO, Oracle, Sybase, SQL Server, PostgreSQL, etc.).

[Append to This Answer]
2003-Nov-26 12:19pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
I changed the alignment of the field from left to right but the sorting remains the same, why?
When you change the justification in the data dictionary the structure file is rebuild but not the data file. The result of this is the sequencing of the data is unaffected by the change of the justification. This is a documented bug and will be corrected in a future release of APPX (Bug #768). In order to get the change in justification to effect the file (data), you have to force it to restructure the entire file (add a field or change the length of a field) or write an update to read each record and simply set the field into itself and rewrite the record. This will put the data in the correct order.
[Append to This Answer]
2003-Dec-26 1:35pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
Can I invoke another process in a FLEP?
No, although you can have a COPY or a GOSUB. Furthermore, only the record buffer is shared between FLEP's and the controlling process. This is by design. When ASI designed this feature, we felt that the FLEP's should only be used for "generic" ILF code. That is, ILF code that should always be run unconditionally in conjunction with file I/O. For example, we felt like it would be inappropriate for a FLEP to execute ILF code conditionally depending on the name of the controlling process. Code that is specific to a particular process should be in an event point of the actual process, not in a FLEP.

However, with experience comes wisdom. We now agree that there are situations where it is desirable and even necessary to share some additional information between the controlling process and the FLEP's. We will be reviewing the functionality of this feature in the near future.

[Append to This Answer]
2004-Feb-13 8:38am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
FLEP’s may not execute when the cache priority it set to 1.
This is a documented bug in APPX 4.2.2 and below. If the initial cache priority is 1, FLEP’s may not execute as they should. Try setting the cache priority to 2 instead (for now).
[Append to This Answer]
2004-Feb-13 8:39am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
What is the scope of a FLEP?
Currently, only the record buffer is shared between the FLEP and the controlling process (work fields are not shared either). This is by design. When ASI designed this feature, we felt that the FLEP's should only be used for "generic" ILF code. That is, ILF code that should always be run unconditionally in conjunction with file I/O. For example, we felt like it would be inappropriate for a FLEP to execute ILF code conditionally depending on the name of the controlling process. Code that is specific to a particular process should be in an event point of the actual process, not in a FLEP.

However, with experience comes wisdom. We now agree that there are situations where it is desirable and even necessary to share some additional information between the controlling process and the FLEP's. We will be reviewing the functionality of this feature in the near future.

[Append to This Answer]
2004-Feb-13 8:40am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
Can I pass information into a FLEP?
Yes and No. The way you pass more information into a File Level Event Point (FLEP) is by adding more fields to the record buffer for that file.

For instance, if you need to pass in a POST TO HISTORY flag so that the FLEP knows if it should update the HISTORY file from this record. You would add this flag to the data dictionary for the file. It doesn't hurt to have it there and stored with the record. Doing so lets you know at a later date which records have been posted to history. Being part of the record makes it visible and obvious that the data element is there and needs to have a value for the FLEP code to execute properly. This is visible and passed regardless of when, how, and why the FLEP fires. By an APPX Process, an ILF Write, an AppxODBC Rewrite, etc. it doesn't matter.

The FLEPs that are associated with a file only share the file record buffer with the processes that trigger them. Additionally, the standard PASS and RECEIVE statements will not work to pass data in and out of FLEPs.

This is by design. There are a number of reason for this restriction.

1)Work field and file fields other than those in the FLEP record buffer used in a process are protected from being stepped on by any FLEP code that might fire during the running of that process.

2) FLEPs run as a separate process and don't always fire in a procedural fashion as a design might expect. They are event driven and fire anytime Appx reads, writes, rewrites, or deletes a record. There are times when Appx does this automatically for the designer. And also times when FLEPs are fired when there is no designer created process running. One example of this is when a AppxODBC connection manipulates data that is stored in an Appx database.

3)FLEPs were designed to provide a place to code data specific rules, not process specific rules. If there is code that is specific to a process, code it in that process, not in the FLEP.

Some customers have come up with creative ways to bypass this restriction such as creating a permanent disk file with OS process ID as the key to write data into that they can later read in the FLEP. This is not recommended as a general programming technique for the reasons listed above.

[Append to This Answer]
2004-Mar-16 1:47pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
How many times does Post-PCF Read FLEP fire?
I have an update/query combination in a job. While stepping thru the code, I noticed that APPX ran thru the Post PCF Read FLEP 4 times for the first record (it may do it for every record, but my test only had one record in it). Is there some reason for this?

Yes.
A query process returns every detail record once. If a PCF record triggers a range-start, it's returned twice. If a PCF record triggers two range-starts, it's returned three times (and so on). The same is true if a record triggers a range end.
So, detail records are processed once and range-start/range-end records are processed more than once.

A range start happens when you've sorted the PCF and Appx finds a new value in one of the sort keys. Just because you don't have a frame that executes at that range boundary doesn't mean that the range doesn't exist.
In other words, we detect the range start and range end boundaries regardless of whether your have range start and range end frames. Remember, you can use the same query invocation with multiple outputs.
If you remove all of the sorts, you'll still see two extra Post PCF Reads (for the unbounded range).
Appx isn't physically reading the record for each range boundary - it's just reporting the state change (by invoking the Post PCF Read).
[Append to This Answer]
2006-Mar-13 2:41pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
Do many duplicate keys decrease the performance?
When you define a key (in the Appx data dictionary), you can choose from four key types:
    Primary
    Alternate/Unique
    Alternate
    Alternate/Forced
The last two types allow duplicate key values. When you create an Alternate/Forced key, Appx appends the primary key (for each record) to the end of the Alternate/Forced key.

There are two advantages to an Alternate/Forced key (and at least two disadvantages).

The first advantage is that you don't suffer the performance penalty usually associated with a long chain of duplicate key values (because you have no duplicate key values). The second (and typically more important) advantage is that, when you read along the Alternate/Forced key path, you get duplicate records in primary key order. Many applications assume that duplicate key values appear in primary key order.

The first problem with an Alternate/Forced key is that it takes more disk space to store the index and, therefore, more disk I/O to read and write the index - Appx must store the complete primary key for every record in the alternate index (along with the key segments that define the Alternate/Forced key). The second problem with an Alternate/Forced key comes from the fact that Appx limits keys to 16 segments - if you have a four-segment primary key, you can't define more than 12 segments in an Alternate/Forced key. That's not often a problem, but it can be difficult to work around when you run into it. Appx will coalesce adjacent string segments into a single segment to reduce the segment count so you run into the 16 segment limit less often than you might think.

Note that the on-line help text for Key Type states that an "Alternate/Forced key is identical to an Alternate key fields, except that duplicate alternate keys are retrieved in primary key order" - there's no guarantee there that you'll gain better performance by choosing an Alternate/Forced, we just promise to return records with duplicate key values in a specific order. The mechanisms that we use may (and in fact do) vary by file type (AppxIO vs. Oracle vs. DB2, etc.
It just so happens that an Alternate/Forced key performs better than an Alternate key (at least for AppxIO files). In fact, AppxIO treats every Alternate key the same way it treats Alternate/Forced keys. Appx may choose a different method to improve the performance of duplicate indexes in the future - so, if your application requires that duplicate key values appear in primary key order, be sure to choose Alternate/Forced: you'll get record in the order that you expect and you'll get better performance (in most cases).

[Append to This Answer]
2005-Jun-01 9:22am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
Can ERROR statement be used in FLEP's?
ERROR statements can be useful in some FLEP's, but you have to remember that Appx may execute the FLEP's in contexts where a user can't see the message.
If you execute an ERROR in the PrePCF Update event point, you cancel the WRITE, REWRITE, or DELETE that caused the event point to fire.
WARNING and MESSAGE statements in an FLEP seem fishy to me - I'd rethink any of those that I ran across.
[Append to This Answer]
2005-Jun-28 3:33pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
FLEP questions
If I have a FLEP for file "A", and in that FLEP I read file "X", will the record buffer for the calling process for file "X" be changed (if it uses file "X"), or does the calling process have it's own record buffer for ""X"? I realize that if I change file "A", the calling process will see the change, I'm just wondering if that applies to all files I use in the FLEP.

Each "stream" has it's own set of variables (not just the record buffer, but PDF's, readnext positions, ....).

[Append to This Answer]
2005-Aug-24 9:21am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
I want to delete fields from a file in my DD, but those fields contain data, should i delete the data first?
No, you don't need to delete your data first. When you delete the fields and run Restructure, the data in the deleted fields will be deleted as well.
[Append to This Answer]
2006-Feb-24 4:15pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Data Dictionary :
I added a new value to a validation table and it’s not listed at run-time, why?
This is a bug. Validation table values are cached at the workstation and the Java client is not recognizing that a change has occurred. As such, the cache is not updated. The temporary workaround for this it to delete the folder .appx\cache\x where x it the server name on the users workstation. The .appx directory is normally found in Documents and Settings for the users. Exit and restart the Appx session and the update validation table should contain the new value(s).
[Append to This Answer]
2010-Mar-23 3:54pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Other Application Design Questions
FAQ's relating to APPX Application Design that don't fit into an existing category.
Subcategories:

Answers in this category:
(Answer) Commonly used APPX Abbreviations
(Answer) What should the field "CDF Path & File" on the Comma Delimited Update screen contain?
(Answer) Are there reserved words in APPX?
(Answer) What is an event point?
(Answer) ILF Statements missing on the cross reference selection screen!
(Answer) Why don’t icons print in tech doc?
(Answer) Can I change the key of a file while in a BEG / END READ loop?
(Answer) How does the pivot year logic work?
(Answer) File-Level Event Point Modes
(Answer) Can a button with a picture be resized using APPX software alone?
(Answer) Where do digital image files reside?
(Answer) Where do we get digital images from?
(Answer) What is "Point Size"?
(Answer) What is the 0LC application?
(Answer) Can we create widgets at run time dynamically?
(Answer) Has APPX ever considered to introducing field level event points?
(Answer) Can I tell which event point I am in for appropriate processing my a generalized subroutine?
(Answer) Is possible to read the design files 0AD PROCESS, 0AD CHILD, 0AD WIDGET etc. of the current application?
(Answer) Report writer.
(Answer) How to convert an array to scalar data.
(Answer) Direct process doesn’t work, causes system internal error. The process works okay when I option 99 in design mode.
(Answer) What image file formats are supported in PDF documents created within APPX?
(Answer) Debugging PDF Output Problems
(Answer) How do I change widget properties on a hooked 0LC DISPOSITION screen.
(Answer) Is there an existing utility to list Named Resources?
(Answer) Will a automatic child process run if auto update is set to "Y", even if include children = No
(Answer) I am trying to do a BEG READ/END READ, which nests a BEG READ/END READ on the same file
(Answer) Recording Macros on Unix
(Answer) I am trying to start appx from a DOS command line and getting BI.C error
(Answer) I have a subroutine in an application and I am trying to hook it to a different one and it does not work
(Answer) Does APPX has something equivalent to WHERE LIKE "%123&"?
(Answer) I am trying to change my named resource for wallpaper, but all i am getting is a small image in the corner instead
(Answer) What does the new GUI attribute "Shrink To Fit Content" do?
(Answer) Print Setup on the Java Client
(Answer) What is the difference between --- MODE and --- INTERACTIVE PHASE?

[New Answer in "Other Application Design Questions"]
2007-Mar-13 11:23am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Commonly used APPX Abbreviations
APPX      Application Excellence

AA        Additional Attributes
AC        Automatic Child Process
APPXPATH  Default directory location for APPX applications and data
CC        Child Constraint
CDF       Comma Delimited File
DD        Data Dictionary
DLU       Data Look Up
EM        Executable Module
EP        Event Point
FLEP      File Level Event Point
FMS       File Management System
GUI       Graphical User Interface
ILF       Integrated Language Facility 
LFN       Logical File Name (If you use symbolic links or the "Use DB" feature,
          many logical file names can map to the same physical file.  
          A logical file name is (roughly) an application ID + database ID + filename) 
OC        Optional Child Process
PCF       Process Control File
PDF       Pre-Defined Field
[Append to This Answer]
2005-Jan-19 11:25am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
What should the field "CDF Path & File" on the Comma Delimited Update screen contain?
When entering specifications for Comma Delimited Update in the toolbox, what should the field "CDF Path & File" contain?
CDF PATH & FILE NAME is the name of a disk file that the update process will create. The generated update process will use the internal STREAM functions to create this file. So, for example, you can use /tmp/output.csv as the file name. This file name path must be on the server and be accessible to APPX. You cannot specify a location on the client machine. Use the subroutine --- SEND FILE TO CLIENT to transfer the CDF to the client machine if necessary.
[Append to This Answer]
2004-Jan-07 2:46pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Are there reserved words in APPX?
While you are allowed to define fields is an application ABC like "OI" and "CURSOR ROW" you can never use them within the ILF editor as they are changed to "--- OI" and "--- CURSOR ROW", respectively. Are these reserved words in APPX?
No, there are no reserved words in Appx.
The ILF editor uses the following logic (merely as a convenience for the designer) when you enter a fieldname and application ID:
1) If the given field is defined within the specified application, the statement remains unchanged by the editor.
2) If the given field is not defined within the specified application, but a field of the same name is defined in application 0LA (PDF’s), the editor changes the application ID to ---.
3) If the given field is not defined in the specified application and is not found in application ---, the ILF editor throws a warning (or an error in earlier releases).
There is a bug in 4.1.a that changes the application ID to --- for any field that is also defined in 0LA. This bug has been fixed in release 4.2.
 
Here is the text on this from the APPX Application Design Manual (01/13/03), chapter 4-4: The ILF Editor:
 
The editor may display some default field values that you are likely to use, such as the application ID. You can override these defaults by entering the desired values or by entering spaces. When you enter a field name, APPX automatically searches for that name in the specified application's data dictionary. If it finds the specified field, it leaves the application ID as is. If it does not find the field, it next searches for the field in the runtime application's data dictionary (where all predefined fields are defined). If it finds the specified field, APPX automatically changes the application ID to "---" to signify the runtime application. If it does not find the field in either place, the editor provides an error message.
[Append to This Answer]
2003-Nov-20 11:27am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
What is an event point?
An event point is a place in the execution of an Appx process where a designer can insert code to enhance the standard Appx behavior. These insertion points loosely relate to points where the Appx engine interfaces with external functions, such as screen display, keyboard input, or disk access. At these points an Appx designer can place code to add business rules to tailor the application to a specific industry or company policy.

These interactions can take place at different stages of a process. Some points of interaction would be when a process starts or ends, when a frame is executed or completes, when an image is displayed, when a user makes an entry through the keyboard or mouse, or when a record is read or written.

[Append to This Answer]
2003-Nov-25 5:48pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
ILF Statements missing on the cross reference selection screen!
Prior to release 4.2, the ILF Statement cross reference screen did not show all the statements available (or that accounted for the 0-97 counter displayed). There are 9 ILF statements missing from the list, GETPREC, PUTPREC, DELPREC, REFRESH, ENABLE, DISABLE, COMMIT, ROLLBACK and SAVEPOINT. These 9 ILF statements, plus the ones listed, minus the * and ** on the Cross Reference (Processes) screen comprise the 97 statements stated on the bottom of the screen (0 of 97).
[Append to This Answer]
2003-Dec-08 1:50pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Why don’t icons print in tech doc?
There are some specific requirements that a graphic file must meet in order to be printable within a PDF document. It is possible that you will see an icon/graphic displayed by the image editor but that it will not print when you print the tech doc. If this happens, you will need to edit the characteristics of your graphics file to meet the requirements of PDF output.
[Append to This Answer]
2003-Dec-26 2:10pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Can I change the key of a file while in a BEG / END READ loop?
No. Don’t change the key of the associated file and then update the record during a read loop.
[Append to This Answer]
2003-Dec-31 9:07am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
How does the pivot year logic work?
By defining a pivot year, you direct APPX to determine what century a particular year belongs to. For example, if the pivot year is set to 35, then any date field with a year greater than 35 will be assumed by APPX to have a century value of 19. Any date field with a year less than or equal to the pivot year will be assumed by APPX to have a century value of 20 (APPX System Admin Manual, Chapter 1).

In the following example:

SET ABC WORK CCYYMMDD 20------------ SET ABC WORK CCYYMMDD --98----------

ABC WORK CCYYMMDD would contain "19980101--------" after the second set statement was executed. Here's why:

Assuming the pivot year is 35 and the current year is 2004, after the first SET, ABC WORK CCYYMMDD contains "20040101--------". After the second, it contains "19980101--------". The pivot rule is applied. The month and day of 01 was set because the MMDD was null in the work field.

APPX date-synthesis rules will cause APPX to synthesize a century if a pivot date is specified and if a field containing only a YY is set into or compared with a field containing CCYY. As in the case above, "--98----------" is a date containing only a YY. APPX thus figures out a century for it, and when doing the SET into the CCYYMMDD field, the CCYY is set to 1998.

[Append to This Answer]
2003-Dec-31 9:21am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
File-Level Event Point Modes
In file-level Event Points, does APPX report reliably on the 'real' mode of 
the I/O?

For example, if we're adding a record in an INPUT process, and a file-level 
event point fires incrementing a value in a parent table, how does the  file-
level Event Point for the event report set flags indicating what's going on?

When the event triggering the firing of the File EP's is an ILF statement, 
then INTERACTIVE PHASE and MODE both are inferred from the ILF statement 
itself:

   WRITE - Add
   REWRITE - Change
   DELETE - Delete

This is true even if the ILF statement is itself part of a File EP.

Another interesting point:  In a File's POST READ event point, if it fired off
because of an ILF statement, then ...

 - INQUIRE is inferred if the read operation was without a hold on the record
 - CHANGE  is inferred if the read operation was with a hold on the record.

This then results in both INTERACTIVE PHASE and MODE being set accordingly.

1) The MODE and INTERACTIVE PHASE are not what they are in the Input process.
   You will not see DATA SCROLL for instance.

2) Multilevel process families.  For example, if you add an order in Order
   Entry:

You add some header info, then lineitem info, then to the header and down to 
charge/allowance items, then back to the header and down to order comments, 
then back to the header to complete the order.

      You will get several file level event points fired.  When you go from
      the header down to the lineitems while adding the order, APPX will write
      the order header PCF and fire the event points with a MODE=ADD, but the 
      order is not done yet.

      It will then re-trigger the file event points several more times in 
      MODE=CHANGE as it resaves the PCF during the remaining entry of the 
      order including the exit from the final frame of the order header to 
      complete the order.

      So, if you want to do something when the order is completed, you need   
      some way to detect a completed order other than MODE=ADD in the file 
      level event point.

      Also, File Event Points are fairly isolated from the trigger process 
      that fires them.  You can't set a workfield in your input process and 
      check it in the file event point.  Only the PCF record is shared.
[Append to This Answer]
2004-Jan-02 10:43am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Can a button with a picture be resized using APPX software alone?
Icons attached to a label or a button have a position selection of Expand to Fill and Expand Proportional, that will scale an image. Wallpaper images can also be set to expand, although expanding a very small image really looks weird.
[Append to This Answer]
2004-Jan-02 10:58am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Where do digital image files reside?
Images used in GUI design may reside in a number of places. When you define a resource there is a selection for the storage type. That selection determines where APPX will look for the files.

DESIGN FILE is the most convenient. In this case you place the images in a $APPXPATH/vv/aaa/Resource directory. When the application is moved, the images move with it. If the images appx.gif were placed in the .../Resource directory, the path in the 'Named Resource' would simply be appx.gif.

SERVER FILE means that the images are stored somewhere on the server. The path to that location will be entered into the resource. When the process is run, the image is retrieved from that location and sent down to the client.

CLIENT FILE is the client side of that. You must insure that the images are loaded to each individual client machine. If the images are on a shared drive, the client must be able to access that path to the images.

The Named Resource path may be something like /home/images/appx.gif for a SERVER FILE on a Unix server, or x:\images\appx.gif for a shared drive on a Windows client.

SERVER URL and CLIENT URL can be used to access images across the internet. SERVER URL will currently work on a Windows/NT server. The path would be an address that can be resolved by the client.

DIRECT is not currently used.

[Append to This Answer]
2004-Jan-02 11:00am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Where do we get digital images from?
Do we load software, such as Photo Shop or a similar product, and simply transfer the digital data file(s) to our Unix server and then from there incorporate them into the icons/buttons or other graphics (paint a picture or logo on a screen)?
The images themselves can come from anywhere. You can use a tool like Photo Shop to create your own, or there are lots of sites on the internet that have images you can buy or download for free. With a little modification, web page backgrounds and layouts lend themselves very well to APPX wallpaper and buttons.

You do not need a product like Photo Shop to maintain or store images. As long as the image is the size you want, you need only the image.

If you want to modify the image you will need an editor of some kind. APPX will help you alter an image, although in some cases, such as defining a picture widget, APPX will allow you to scale the image size to fit (in 4.1.4 and after).

[Append to This Answer]
2004-Jan-02 11:08am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
What is "Point Size"?
In general terms, point size is a relative measure of the size of a font. It used to have a more concrete meaning in the "Old days" of typography.
[Append to This Answer]
2004-Jan-06 4:23pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
What is the 0LC application?
APPX 4.2

The 0LC application is new in release 4.2. This application contains some of the processes in 0LA to provide designers the ability to customize the look and feel of their application(s). Use design transfer to copy the desired process from 0LC as a starting point for your own process. The original process in 0LA could then be overridden by a HOOK record.

The 0LC application is read-only. Processes may be transferred out but may not be modified within the 0LC application.

[Append to This Answer]
2004-Jan-16 2:05pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Can we create widgets at run time dynamically?
It is possible to create WIDGET records with a WRITE statement in 4.2. It is not necessary to define the widget on the image. However, you may find that it is "easier" to modify an existing WIDGET record than to create a new WIDGET record.
[Append to This Answer]
2004-Feb-13 8:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Has APPX ever considered to introducing field level event points?
Yes, ASI has considered and is still considering adding field level event points. We have discussed adding event points that would be associated with a field in the DD. These event points would be triggered by field references. We have also discussed adding event points that would be associated with individual items on an image. For example, we are considering adding event points that would be triggered when a field on an image gets the focus (tab in), loses the focus (tab out), has a change of value, etc.
[Append to This Answer]
2004-Feb-13 8:43am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Can I tell which event point I am in for appropriate processing my a generalized subroutine?
You can set a flag in the calling process and interrogate that flag in the subroutine to determine this information. Currently, there isn’t anything in APPX that passes this information automatically.
[Append to This Answer]
2004-Feb-13 8:43am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Is possible to read the design files 0AD PROCESS, 0AD CHILD, 0AD WIDGET etc. of the current application?
Yes. You must explicitly open and close each design file that you want to read. You must set the NEXT APPLICATION and NEXT VERSION fields before each open.

For Example:

SET --- NEXT APPLICATION = XXX
SET --- NEXT VERSION = YY
OPEN 0AD PROCESS
READ 0AD PROCESS
...
CLOSE 0AD PROCESS

[Append to This Answer]
2004-Feb-25 10:10am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Report writer.
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=654

[Append to This Answer]
2004-Mar-02 9:16am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
How to convert an array to scalar data.
Please refer to;

http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=157

[Append to This Answer]
2004-Mar-02 9:43am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Direct process doesn’t work, causes system internal error. The process works okay when I option 99 in design mode.
Are you reading or accessing the files in application design? In design mode, the application files are open and available to your processes. Hence, the option 99 works. The application files are not automatically available at run time. When you try the same process as a direct process during run time, you’ll have to open/read the application files.
[Append to This Answer]
2004-Mar-19 5:02pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
What image file formats are supported in PDF documents created within APPX?
Here are the image file types supported on PDF output;

PNG: PNG images which make use of interlacing,contain an alpha channel (which

      will be lost anyway - we don't support alpha channels in PNG files),or 
      have 16 bit color depth will have to be uncompressed.

JPEG: APPX supports baseline JPEG compression which accounts for the vast

      majority of JPEG images.  We also support progressive JPEG compression.
       
JPEG images can be packaged in several different file formats. We support all common JPEG file formats, and will read resolution information from the following types:
- JFIF,which is generated by a wide variety of imaging applications. - JPEG files written by Adobe Photoshop and other Adobe applications.

GIF: Due to restrictions in the compression schemes supported by the PDF file

      format, the entry in the GIF file called "LZW minimum code size" must 
      have a value of 8 bits.

      Unfortunately,there is no easy way to determine this value for a certain 
      GIF file. An image which contains more than 128 distinct color values 
      will always qualify (e.g.,a full 8-bit color palette with 256 entries). 
      Images with a smaller number of distinct colors may also work,but it is 
      difficult to tell in advance because graphics programs may use 8 bits or 
      less as LZW minimum code size in this case,and we may therefore reject 
      the image.

      The following trick which works in Adobe Photoshop and similar image 
      processing software is known to result in GIF images which are 
      accepted:

         load the GIF image,and change the image color mode from "indexed" 
         to "RGB". Now change the image color mode back to "indexed",and 
         choose a color palette with more than 128 entries (for example the 
         Mac or Windows system palette,or the Web palette).

      The image must not be interlaced.

TIFF: We support the following TIFF images:

      compression schemes: 
       - uncompressed 
         CCITT (group 3,group 4,and RLE) 
         ZIP (=Flate) 
         LZW (with restrictions) 
         PackBits (=RunLength) 
         other compression schemes are handled by uncompressing. 
      color: 
         black and white 
         grayscale 
         RGB 
         CMYK 
            any alpha channel or mask which may be present in the file will be 
            ignored.

      TIFF files containing more than one image 

      Color depth must be 1,2,4,or 8 bits per color sample (this is a 
      requirement of PDF).

      Multi-strip TIFF images are converted to multiple images in the PDF 
      file which will visually exactly represent the original image,but can 
      be individually selected with Acrobat s TouchUp object tool. Multi-
      strip TIFF images can be converted to single-strip images with the 
      tiffcp command line tool which is part of the TIFFlib package. The 
      Image-Magick tool always writes single-strip TIFF images. Some TIFF 
      features (e.g.,CIEL*a*b*color space,JPEG compression)and certain 
      combinations of features (e.g.,LZW compression and alpha channel or 
      mask, LZW compression and tiling)are not supported. 





[Append to This Answer]
2004-Apr-28 5:07pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Debugging PDF Output Problems

Define a PDF form and set "Print Grid" to "Y", then, define an environment variable named APPX_GRID_STYLE to control the grid settings. The default value for APPX_GRID_STYLE is 15 (decimal). To change the grid style, just add up any of the following numbers:
  1 - draw horizontal grid lines at grid boundaries
  2 - draw vertical grid lines at grid boundaries
  4 - label horizontal grid lines
  8 - label vertical grid lines
 16 - subdivide grid height into 1/10 intervals
 32 - subdivide grid width into 1/10 intervals
 64 - draw outlines around all widgets
So, the default APPX_GRID_STYLE gives you labeled horizontal and vertical grid lines (1 + 2 + 4 + 8 ) on every page.
APPX_GRID_STYLE=64 is very useful

[Append to This Answer]
2004-May-26 4:17pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
How do I change widget properties on a hooked 0LC DISPOSITION screen.
I decided to try to create my own disposition screen so that it would have the same GUI attributes found throughout the rest of my system.

I design-transferred the 0LC input DISPOSITION and started to work with it when I noticed something strange. The GUI attributes which are already there by default do not show up. It behaves as if the client has its GUI Interface option turned off. Yet when I change the Window Properties for the image (to change the background color), those changes are applied.

In Pre-Display of the images of the DISPOSITION input process you will see a GOSUB to --- APPLY RUNTIME GUI THEME. This is using ILF code to modify the widgets on the screen. If you remove this, it will stop messing with your widget changes on this screen.
[Append to This Answer]
2004-Jul-09 4:54pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Is there an existing utility to list Named Resources?
Yes, Application Design > Documentation tab > Print Technical Documentation group > Named Resources
[Append to This Answer]
2004-Jul-09 4:55pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Will a automatic child process run if auto update is set to "Y", even if include children = No
Yes, for each child, when a parent record is changed or deleted, it will run the Pre and Post PCF update EPs in each child, plus any FLEPs.
[Append to This Answer]
2004-Jul-09 5:33pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
I am trying to do a BEG READ/END READ, which nests a BEG READ/END READ on the same file
The way i have it setup is as follows:
BEG AT
END AT
BEG READ
STORE
BEG AT
END AT
BEG READ
END READ
RESTORE
END READ

It will not work because BEG AT/END AT and BEG READ/END READ share the same stream buffer. What will work however, is the following scheme:
BEG AT
AND AT

LABEL: DO SOMETHING
READNEXT
BEG AT
END AT
BEG READ
.
.
END READ
GOTO DO SOMETHING

 
This way, you will have 2 streams open because READNEXT opens up a second stream buffer and you can BEG AT/END AT and BEG/READ/END READ on the same file.
[Append to This Answer]
2004-Sep-15 9:05am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Recording Macros on Unix
This is APPX 4.2.6 on AIX, connecting via telnet. They normally use Control-R to start recording, perform the keystrokes and then use Control-R to stop recording. APPX used to save the macro in a file called .appx_mac in the users home directory.
It doesn't do that anymore. They seem to be unable to record a macro at all, ie, they go thru the procedure to record it and immediately try to play it back, and it won't play back.
I have the following environmental variable set:
                                           
APPX_UI_LOG /tmp/uilog

You'll need to change two things: unset APPX_UI_LOG and write-protect $HOME/.appx_last.
.appx_last is an automatic APPX_SCRIPT_OUT. If you don't have APPX_SCRIPT_OUT defined, Appx logs keystrokes to $HOME/.appx_last (if that file is writable). It's there for debugging purposes.

   

[Append to This Answer]
2005-Apr-06 9:45am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
I am trying to start appx from a DOS command line and getting BI.C error
The error reads: "BI.C - Appx Startup Failure. Unable to Open System Administration Files, check file protection and APPXPATH".
Before starting appx from the command line, make sure you have APPXPATH set.
[Append to This Answer]
2005-Apr-13 1:53pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
I have a subroutine in an application and I am trying to hook it to a different one and it does not work
The hook is restricted by database and user. Any ideas?

You can't hook a subroutine that you invoke from a GOSUB or COPY. The hook mechanism only works when you invoke a process - that means that you can hook a subroutine that you invoke with a SUBR statement, or a subroutine that you invoke as an optional or automatic child.

[Append to This Answer]
2005-May-05 10:35am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Does APPX has something equivalent to WHERE LIKE "%123&"?
Actually, the RI and RS operators are (almost exactly) like the LIKE operator.
When you code an IF, AND, or OR statement (or you fill in a query record
constraint), you can compare a field against a regular expression. RI matches
against a regular expression, ignoring differences in case. RS matches against
regular expression, sensitive to differences in case.
When you execute an IF/AND/OR statement that uses an RS or RI operator, Appx
sets TEXT AT POSITION to point at the beginning of the match (assuming that the
IF statement returns 'T').
So you could:
        IF   XYZ  FOO      RS  .*123.
Since we don't allow RS or RI in BEG/END AT statements, you still have to read
through the whole file (unless you can come up with some other constraint).
[Append to This Answer]
2005-Dec-06 1:24pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
I am trying to change my named resource for wallpaper, but all i am getting is a small image in the corner instead
Make sure that the named resource you are changing to has a State of "Wallpaper".
[Append to This Answer]
2006-Jan-05 3:06pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
What does the new GUI attribute "Shrink To Fit Content" do?
Please see the following page: http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=896
[Append to This Answer]
2006-Mar-14 10:43am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
Print Setup on the Java Client
The Print Setup action is a client side action. Kind of like TAB. When something fires the option the client processes that directly. It does not set it back to the server for processing. For TAB the trigger is the keyboard. For Print Setup the trigger is a widget that has it's option set to fire PRINT SETUP. You can add a button widget to a screen that fires PRINT SETUP as the option and the client will process it when it is clicked.

Setting option to PRINT SETUP in ILF code has no effect because the client does not see the ILF code run. Just like setting option to TAB has no effect.

Print Setup is client platform specific. On windows it works for a number of reasons:

  
1) Windows has a common print setup dialog at the OS level we can easily call;
2) We interface our client side printing to the print driver that the print setup dialog controls using winprint, so the options you change will be used when you go to print.

It does not work on Linux because:

1) There is no one common dialog we can call;
2) If we did call one of the dialogs on linux the values you set would not get picked up by the appx_print script we run to queue files. This last reason is also why we do not call a print setup on OSX. The values you set would not get used anyway by appx_print.

[Append to This Answer]
2006-Jul-31 1:41pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Other Application Design Questions :
What is the difference between --- MODE and --- INTERACTIVE PHASE?
--- INTERACTIVE PHASE is set during input processes and indicates which data
entry phase is currently in force. It works with  --- MODE and, although they
work together, each has a specific use.

MODE is determined when the user selects an input process from a menu and
selects a mode option (ADD, CHG, DEL, or INQ). INTERACTIVE PHASE determines
what the user may do while in that mode. For example, if you are in ADD mode
entering data into a scrolling frame, you can move the cursor to a previously
added record and select the change item option. At this time you will still be
in add mode, but the interactive phase will change from data addition to data
modification. 
[Append to This Answer]
2007-Mar-13 11:25am
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
APPXIO File Access Method
FAQ's relating to the APPXIO File Access Method
Subcategories:

Answers in this category:
(Answer) What is standard APPX data record wrapper?

[New Answer in "APPXIO File Access Method"]
2004-Mar-29 10:45am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) APPXIO File Access Method :
What is standard APPX data record wrapper?
Each data record in an APPXIO data file contains 16 bytes of "wrapper" - 12 bytes on the front end of the data and 4 bytes on the tail end.
[Append to This Answer]
2004-Mar-29 10:44am
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Image Editor

Subcategories:

Answers in this category:
(Answer) What does the * after the Chg on the status line mean?

[New Answer in "Image Editor"]
2004-May-18 4:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Image Editor :
What does the * after the Chg on the status line mean?
In Appx 4.2 you may notice the asterisk (*) after the Chg mode indicator on the status line in the Imade Editor. This was added to indicate that a change has been made to the image, but has not been saved. This indicator was not present in earlier releases of Appx.
[Append to This Answer]
2004-May-18 4:52pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
Compile Time Error Messages

Subcategories:

Answers in this category:
(Answer) Message "pc_item - Unexpected case switch"

[New Answer in "Compile Time Error Messages"]
2004-Nov-01 10:58am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment : (Category) Compile Time Error Messages :
Message "pc_item - Unexpected case switch"
That particular error means that the 'modifiable' field in one of your items has an invalid value. 'Modifiable' is a logic field but apparently holds something besides '0', '1', or ' '. You may be able to find the erroneous item by simply looking through the items by hand. If not, design transfer the entire process to a temporary process, then start deleting the items one by one. This is a compile-time error so you can Opt 97 after each deletion.
[Append to This Answer]
2004-Nov-01 10:59am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Development Environment :
New Item
[Append to This Answer]
2007-Mar-08 1:43pm
Next: (Category) APPX Runtime Environment
This document is: http://board.appx.com/cgi-bin/fom.cgi?file=5
[Search] [Appearance] [Show Top Category Only]
This is a Faq-O-Matic 2.719.
Copyright 2003 by APPX Software, Inc. All rights reserved.