APPX is the Premier Development and Runtime Environment for Business Application Software
(Category) FAQ's - APPX Software, Inc.
This FAQ is for the various products that are developed, marketed, and supported by APPX Software, Inc.
Products:
(Category) APPX Utility
(Category) APPX Financial Applications
(Category) APPX Reportwriter

Can't Find An Answer?
(Category) Submit A Question
(Answer) New Item

Please direct all questions or comments regarding this FAQ to:

APPX Software, Inc.
11363 San Jose Blvd., Suite 301
Jacksonville, FL 32223

Phone: 1-904-880-5560 or 1-800-TRY-APPX
Web: http://www.tryappx.com
e-mail: info@appx.com
FAX: 1-904-880-6635

[New Answer in "FAQ's - APPX Software, Inc."]
2017-Aug-23 4:14pm
(Category) (Category) FAQ's - APPX Software, Inc. :
APPX Utility
APPX is a state-of-the-art, platform-independent, database-independent Rapid Application Development (RAD) and runtime environment that is unsurpassed for the design and deployment of business application software.
Subcategories:
(Category) APPX Development Environment
(Category) APPX Runtime Environment
(Category) APPX System Administration
(Category) APPX Installation & Configuration
(Category) New APPX Releases
[New Answer in "APPX Utility"]
2005-Jun-02 11:04am
(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
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility :
APPX Runtime Environment
FAQ for questions relating to the use of the APPX Runtime environment.
Subcategories:
(Category) Runtime Messages
(Category) Other Runtime Questions

Answers in this category:

[New Answer in "APPX Runtime Environment"]
2011-Feb-04 9:38am
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment :
Runtime Messages

Subcategories:

Answers in this category:
(Answer) Message; "op_prt_buf, print new page fa".
(Answer) Message; “free_pool() - attempting to free unallocated memory ()”
(Answer) Message; “Internal Error has Occurred, Proceed with Caution”
(Answer) Message; "Cannot write any more qdaemon"
(Answer) Message "memcpy - trash the heap"
(Answer) Message; "unknown AppxIO status"
(Answer) Message; "Can't connect to host"
(Answer) Message; “PDF_begin_page: Function must not be called in ‘page’ scope”
(Answer) Message; “Connection Refused by Host”
(Answer) Message; “Application Lock verification failed. Access Denied”.
(Answer) Message; “can't write cwdgt - Error - Already on File”
(Answer) Message; “Cannot read cfi_rec”
(Answer) Message: “mm_free() 'freeing watched address' or 'attempting to free freed memory'"
(Answer) Message; "pl rloc - too few cchld records(1)"
(Answer) Message; “ID not defined as valid Login”
(Answer) Message; “File Organization Specification Mismatch”
(Answer) Message; “License Server not Detected”
(Answer) Message; "file does not exist"
(Answer) Message; "Can't connect to Host" or "Connection refused by host" (Troubleshooting WinAppxD)
(Answer) Message; "Allocation of TOKEN_USER failed"
(Answer) Message; "LookupAccountSid() failed"
(Answer) Message; "can't open stream socket"
(Answer) Message; "can't bind local address"
(Answer) Message; "op_prt_buf, print new page failed"
(Answer) Message; “There was an error opening this document. No such file or directory”
(Answer) NET_LOG 'error's 122 & 10054
(Answer) PDF Output: "Windows cannot find $display"
(Answer) Message: "required data was not placed into memory because of an I/O error"
(Answer) Message – “Error - Invalid Request Using Main ARB”
(Answer) Message "Found active record on freelist"
(Answer) Message. "ERROR - CANNOT ACCESS REQUIRED FILE"
(Answer) What does error "Can't read LFN File - Error - Already on File" mean?
(Answer) Message, "can't empty sarb list"
(Answer) Message, "bad reg no."
(Answer) Message "An unexpected error occurred, please enable logging and retry"
(Answer) Message "Cannot write to Cache - Invalid Prototype Record Length"
(Answer) Message; "No Record Currently Held"
(Answer) Message, Error - Request Not Allowed
(Answer) Message, "BI.C - APPX Startup Failure: Unable to Initialize Window Manager"
(Answer) Message: "key field conversion failure - Error - Invalid Logical Value"
(Answer) Message; "too much data"
(Answer) Message, "Network IO Error"
(Answer) Message, "ORA-01000: maximum open cursors exceeded"

[New Answer in "Runtime Messages"]
2011-Feb-09 2:51pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "op_prt_buf, print new page fa".
There are several common causes for this error.
Have you changed the code for these jobs in the past week? If not, check for ERROR/WARNING/MESSAGE statements that might be executing when the ALTERNATE IMAGE NUMBER is zero. (This could cause this error to appear despite the jobs running fine for months – it might be the first time a particular error/warning/message occurred on a particular record). Also, check for ERROR/WARNING/MESSAGE statements that might be in End of Process or an unbounded range end frame.
Another likely scenario is that more ERROR/WARNING/MESSAGE statements are being triggered for a record than there is room for on the page -- to check for this, comment out your ERROR/WARNING/MESSAGE statements and run the job, and see if the error occurs.
If you check for all of the above and none of those seem to be the cause, and you are using standard page headers in those output processes, try turning off the standard page headers, and run one of the jobs, and see if that fixes it.
[Append to This Answer]
2004-Apr-01 9:05am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “free_pool() - attempting to free unallocated memory ()”
This error has been documented when a CNV TEXT command with an occurrence number of zero is encountered. Check to see if you have a CNV TEXT in your ILF and if it could possibly be set to occurrence zero.
[Append to This Answer]
2004-Apr-01 10:58am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “Internal Error has Occurred, Proceed with Caution”
Internal Error has Occurred, Proceed with Caution" means something unexpected has happened within APPX, sometimes the result of something happening before your current operation. Instead of proceeding with caution, tell your users to write down the last three things they did, then exit Appx, then to contact you.

If you can reproduce the error, we'd love to get a copy of the replication, so we can fix it. Frequently the error is not easily reproducible, so any scenario we can get that reproduces it would be helpful.

[Append to This Answer]
2004-Apr-01 11:00am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "Cannot write any more qdaemon"
When trying to print large print files, get:

       "Enq: (FATAL ERROR): 0781-024 Cannot write anymore to
       /var/spool/qdaemon/to4mZM"

The /var file system is full. Delete some unneeded files out of the file system.

[Append to This Answer]
2004-Apr-01 11:02am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message "memcpy - trash the heap"
This message in the past has indicated corrupted Area Numbers (and internal Appx construct). The recovery procedure in www.appx.com/assets/asp/dynamic_generator.asp?pageid=584 gets rid of these ANO errors.
[Append to This Answer]
2004-Apr-01 11:05am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "unknown AppxIO status"
Could be that backup has a *.key file locked.
[Append to This Answer]
2004-Apr-01 11:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "Can't connect to host"
The DNS server may not be resolving hostnames properly.
[Append to This Answer]
2004-Apr-01 11:43am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “PDF_begin_page: Function must not be called in ‘page’ scope”
Rel 4.2

This error occurs when a page break triggers another page break. For example, setting "new page before" on a page heading frame. Refer to bugtracker bug #517 and #617

[Append to This Answer]
2004-Apr-01 11:44am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “Connection Refused by Host”
This message normally indicates that;

1. winappxd/appxdsvc (listener) is not running on the server (host)
2. the port you entered is not valid for the listener(s) you have running
3. the workstation is not connected to the server where the listener is running

Referring to item 3 above. If you are entering a server name and you are sure the listener is running and the port is correct, try entering the ip address of the server instead. If you connect, most likely your DNS name is not mapped to the right ip address. You will have to resolve your DNS server mapping to eliminate this error.

 

Also see;
http://board.appx.com/cgi-bin/fom.cgi?_highlightWords=connection%20refused&file=439
[Append to This Answer]
2010-Nov-17 4:26pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “Application Lock verification failed. Access Denied”.
An attempt has been made to open a locked application (already opened by the registered number of users).
[Append to This Answer]
2004-Apr-01 11:46am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “can't write cwdgt - Error - Already on File”
Prior to the Pre-Display event point(s), Appx copies designed widgets (that is, widgets that you painted in the image editor, as opposed to widgets that you create at runtime through ILF code) out of the EM and into the --- WIDGET file. After the Pre-Display event point(s), Appx takes a snapshot of the items in the --- WIDGET file and pushes them out to the screen (or to the report if you're running an output process).

This error occurs when Appx takes the snapshot (after you've had a chance to change the widgets with ILF code).

The primary key to the internal widget file is position row+position col. There's an alternate unique key that on name + appearance number. Check for duplicate name+appearance number.

[Append to This Answer]
2004-Apr-01 11:47am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “Cannot read cfi_rec”
When running an INPUT process, I get:

PL.C.2842 - "Cannot read cfi rec - Error - Record Not in File",

followed by "Internal Error Has Been Detected, proceed with caution!".

You may be attempting to PASS a FILE. You can pass a RECORD, but you can't PASS a FILE (even though the ILF editor and compiler don't complain about it.
[Append to This Answer]
2004-Apr-01 11:48am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message: “mm_free() 'freeing watched address' or 'attempting to free freed memory'"
These errors suggest that memory is getting stepped on, usually by some application action occurring before the most recent action. (The most recent action often being exiting from some Appx process.)

To diagnose these, set the two environment variables:

        APPX_TRAILER_COUNT=40
and
        APPX_LABEL_MEMORY=1
... either as conventional OS environment variables, or else in the ./data/appx.env file.

When then running into the above error messages, send a copy of the error message itself (a screen snapshot if possible) to Appx technical support.

On Windows platforms, also send a copy of the 'appx.stk' file found in the same directory as the Appx engine. (It may then be safely deleted.)

Consider also performing the cleanup steps described in: http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=584

[Append to This Answer]
2004-Apr-01 3:24pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "pl rloc - too few cchld records(1)"
This is caused by an Optional Process defined in an INPUT process. The Optional Process had an Additional Attributes, Default PCF Key, defined on a field that was not a key in the target file.
[Append to This Answer]
2004-Apr-01 11:55am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “ID not defined as valid Login”
A VAR installed Appx onto an XP laptop that was a member of a domain "RND". During the initial Appx loading, it asked him for his OS Login. He tried entering his OS user id ("abc"), but Appx told him that "This ID is not currently defined as a valid Login on your system".

It did let him enter an OS login of "RND/abc". But when he then logged into his OS as RND/abc, then into Appx, it told him - "Bad User Id - The User Id you are currently using was not found in the APPX user file."

VAR deleted .\data\0SA\Data\USER.* in order to be able to enter Appx. In Security > Users he tried entering "abc", but it gave him the "not currently defined" message. It did let him enter an OS Login ID of "RND/abc", but again wouldn't let "abc" log in.

VAR didn't notice that there was the word "Warning" in front of the first message. Because of confusion of local IDs and domain ID, Appx validates against the domain id, but allows entry of only the user portion of the Domain/User ID.

I.E., "abc" works for logging in, but generates a Warning during OS Login ID Entry. "RND/abc" doesn't work for logging in, but generates no warning during OS Login ID entry.

If you're in a Domain environment, enter only the user part of the user's OS Login ID. Also, ignore the "Warning - This ID is not currently defined..." message.

Note, this message was changed from 'Error' to 'Warning' in 4.1.8. If your Appx version is prior to 4.1.8, it's probably necessary to upgrade to 4.1.8 or higher in order to be able to enter OS Login ID’s.

[Append to This Answer]
2004-Apr-01 11:57am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “File Organization Specification Mismatch”
This error can be caused by a damaged EM. Delete all your EM’s for this application, in APPXPATH/data/db/app/EM directory, and try running the application again. APPX will automatically rebuild EM’s when needed or you can force them all to be rebuild by going to Utilities>Toolbox>Create Executable Modules.

You can also get this error if a file is damaged. If a {file}.dat is damaged and you rebuild the {file}.key from it, you may or may not get an error message indicating that there's a problem in the .dat. If you get no message, you could be left with the impression that your .dat/.key pair are good. Running verify may or may not tell you if there's a problem. (This is a low probability, but possible scenario.)

Your safest course of action is to run through the "What to do with a file That Fails Verification" procedure in

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

You can do a bit more investigation using the techniques in "Verifying and Analyzing a File" on that webpage. Using the utility program Recover.exe is the recommended course of action. Exporting and re-importing the file will work however may result in more lost data. The Export program will only read to the "bad spot" on the file and stop whereas Recover.exe will continue to the end of file reading and writing records beyond the error. Information on this utility can be found at the above address.

[Append to This Answer]
2006-Feb-28 1:38pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “License Server not Detected”
Try to manually start the license server by means of;

 appx -l=logfile

Consider deleting the data\0SA\Data\USAGE.*, .\REGISTER.dat, and .\LOCK.* files, then re-import the registration.

[Append to This Answer]
2004-Apr-01 11:59am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "file does not exist"
We are suddenly having a problem with a disk-related file that manifests itself as "file does not exist". I changed these files to Memory-Related and that seemed to solve the problem but why? The files were not moved and previously had been working for the past 12 years.
Look at the Tmpdata directory - you may need to clean it out occasionally. If you see a lot of old temporary files, you may be running out of file names.
[Append to This Answer]
2004-Apr-01 12:00pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "Can't connect to Host" or "Connection refused by host" (Troubleshooting WinAppxD)
If, when attempting to connect from the Windows or Java clients, you get either of the above two messages, the Presentation Server is probably not running.

For an NT based Presentation Server (WinAppxD), see the FAQ “Service is not running” for debugging approaches. Also for NT Presentation Server:

1) Bring up the Task Manager and look for a WinAppxD process, which should tell us whether WinAppxD is running.

2) Running "netstat -a" and looking for "*.8060" (for example) in the "Local Address" list will tell you if anything is listening on the port. For example:

C:\WINDOWS> netstat -a Active Connections Proto Local Address Foreign Address State TCP oz:1079 P66:0 LISTENING TCP oz:1650 P66:0 LISTENING TCP oz:1656 P66:0 LISTENING TCP oz:1533 P66:0 LISTENING Services for WinAppxD has a radio button giving alternatives for 'System' or 'This Account:'. The latter should be on, with UserID equal to the APPX user set up for this Presentation Server. Try reentering the password for this User Account. Then Re-IPL.

For a Unix based Presentation Server:

To see what Presentation Servers are running, execute: ps -ef | grep appxd To see what ports (prefixed with '806') are being listened to: netstat -a | grep 806 Proto Recv-Q Send-Q Local Address Foreign Address (state) tcp 0 0 *.8064 *.* LISTEN tcp 0 0 *.8068 *.* LISTEN tcp 0 0 *.8067 *.* LISTEN.

On Linix;
The iptables and ip6tables are probably getting in the way. Those restrict access to incoming ports. Try turning them off...
cd /etc/rc.d/init.d/ ./iptables stop ./ip6tables stop
[Append to This Answer]
2010-Nov-17 4:28pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "Allocation of TOKEN_USER failed"
This is a system error which should never occur. It is indicative of the system having trouble allocating memory to hold a data structure. - Resolution: Reboot and try again. If it still fails, call APPX Software Technical Support.
[Append to This Answer]
2004-Apr-01 12:02pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "LookupAccountSid() failed"
This is a system error which should never occur. It says that NT could not retrieve security information for the account used to run WinAppxD.

Reboot and try again. If it still fails, call APPX Software Technical Support.

[Append to This Answer]
2004-Apr-01 12:03pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "can't open stream socket"
This is a system error which should never occur.

Resolution: Reboot and try again. If it still fails, call APPX Software Technical Support.

[Append to This Answer]
2004-Apr-01 12:41pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "can't bind local address"
Something on your server already has the port you specified in the "-s=" argument, open. Causes:

1. A lingering copy of WinAppxD. Check to make sure no copies of WinAppxD are listed in Task Manager. This may occur if you Start and Stop the WinAppxD service using Control Panel, or if you run WinAppxD from the command line during troubleshooting. If you see any rogue WinAppxD's, kill them and try again.

2. Some other (non-APPX) application wants to use the port you specified in the "-s=" argument for WinAppxD during installation. There is no completely reliable way to detect this. If you are getting the "can't bind" error and are sure it's not due to an extra WinAppxD process running, this is probably what has happened. Since WinAppxD can't use a port claimed by another application, go back and edit the registry, choosing a different port number for the WinAppxD service. For example, try 8061 instead of 8060. Reboot, and try again.

[Append to This Answer]
2004-Apr-01 1:13pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "op_prt_buf, print new page failed"
This message is displayed from an output process if there are MESSAGE statements in End of Process or too many ERROR, WARNING, or MESSAGES are produced while processing a single PCF record.
[Append to This Answer]
2004-Apr-01 1:13pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; “There was an error opening this document. No such file or directory”
This error was displayed while appx was sending a report to Adobe Acrobat PDF viewer. Check to see if the path to the pdf document contains two or more consecutive blank spaces. Change the path to have only one blank space and the pdf will print.
[Append to This Answer]
2004-Apr-01 1:16pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
NET_LOG 'error's 122 & 10054
In the course of Appx/Clients attaching to a WinAppxD Appx/Server, with 
APPX NET_LOG enabled, the following NET LOG entries can come up.  Here are 
explanations:

        SetProcessWindowStation() returned 1, (err=122)
        CreateDesktop() returned 168 (err=122)

 These aren't errors.  They would be errors if they had returned 0.

        recv() failed, exiting, errno = 10054

 "An existing connection was forcibly closed by the remote host."
                                        (From the MS Win32 API Error Codes)

This can be caused by something in the network (aka an 'assassin') sending a 
RESET packet.  This kills WinAppxD, and therefore all links between 
Appx/Clients and the Appx/Server.  The Appx/Server may or may not be able to 
manually restart, depending on whether something in the network is holding the 
old port open or not.  If the port is being held open, the Appx/Server can't 
grab it again.

That "something in the network" could be routers, modems, or other equipment 
in the network.
[Append to This Answer]
2004-Apr-01 3:32pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
PDF Output: "Windows cannot find $display"
In running a PDF OUTPUT, user gets popup error box:
                 $display:         (can look like "Sdisplay")
Windows cannot find '$display:'. Make sure you typed the name correctly, and then try again. To search for a file, click the Start button, and then click Search.
OK
The problem was resolved by associating Adobe 6.0 with all PDFs, and installing the newest java client.

[Append to This Answer]
2004-Apr-27 1:06pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message: "required data was not placed into memory because of an I/O error"

Users running "appx -c" got error popup boxes:
     Appx - 41440:  appx.exe - application error
The instruction at 0x004992b0 referenced memory at 0x004992b0. The required data was not placed into memory because of an I/O error status of 0xc000020c.

==> Users got I/O errors trying to page blocks of appx.exe executable into local process space.

There were most likely occasional, brief network problems when trying to load a block of appx.exe executable into his client PC. This can happen after initial appx.exe -c program loading, because the OS grabs 2k blocks of the disk form of the executable, as needed. (The problem can also be a disk fark, or a controller error.)

The solution is to bring the appx.exe previously stored on the network server down to the local PC hard drive, to eliminate this potential network problem.

[Append to This Answer]
2004-May-25 2:53pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message – “Error - Invalid Request Using Main ARB”
That typically means that you've rewritten (or deleted) the PCF record in ILF code. If you've rewritten the PCF record, be sure to re-read it with hold or Appx will get confused.
An 'arb' is an access request block - it's the internal representation of a file stream. When you OPEN a file, you get a new arb. Appx creates arbs for you when you BEG/END READ, or when you invoke a new process.
[Append to This Answer]
2005-Aug-29 11:37am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message "Found active record on freelist"
Every APPXIO file maintains a list of deleted record (the freelist). The freelist is added to whenever a record is deleted. Freelist pointers are used to 'recycle' deleted record space in the *.dat file. Each record in *.dat file also has a "deleted?" flag. If a freelist pointer points to a record that doesn't have this flatg set, you get this error. Get all users out of the file. Run "Verify Inegrity" on the file. If Verify Integrity reports that the file is OK, export and re-import the file. This gets rid of the corrupted list of deleted records.
If Verify reports that the file is damaged, follow the recovery procedure as outlined in the following link: http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=624


[Append to This Answer]
2005-Feb-09 2:57pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message. "ERROR - CANNOT ACCESS REQUIRED FILE"
This runtime error normally happens when you incorrectly specify the name of a Query in the Output processes Use Query parameter.

This error can also happen when a temporary file is created in a process and that temporary file is not deleted completely. Under normal conditions, APPX will delete temporary files (Disk Related for example), when the process ends. Look for the presents a .key components without a corresponding .dat for the file in your database directory for the offending application. Delete the .key file manually if necessary.

[Append to This Answer]
2005-Feb-17 2:23pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
What does error "Can't read LFN File - Error - Already on File" mean?
LFN stands for 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. You can usually get rid of the error by exiting Appx and going back in. It wouldn't hurt to verify files as well.
[Append to This Answer]
2005-May-18 9:13am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message, "can't empty sarb list"
The Appx engine keeps a list of all files open at each scope, when a scope ends, the engine closes all files opened at that scope. This error occurs when the engine has just finished closing all files a scope list - when it's finished, the engine double checks to make sure that the list is empty. "Can't empty sarb list" means that the list is not empty after closing all files. There's nothing that a user or designer should be able to do to make that happen. It's an engine bug.

'sarb' is an abbreviation for 'slave arb'. A sarb is a slave to a 'marb' (a master arb). An 'arb' is an access request block - it's the internal representation of a file stream. When you OPEN a file, you get a new arb. Appx creates arbs for you when you BEG/END READ, or when you invoke a new process.

Recommended course of action, determine what process was running then look at the file(s) that were open. Check the number of alternate keys. Appx allows for 1 primary and 15 alternate keys. If you exceed this you could get this error. You should also delete the em(s) and run the process again.

[Append to This Answer]
2005-Aug-30 8:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message, "bad reg no."
This message is normally occur when Appx can't find the window that holds the cursor. When testing this situation, notice where the cursor is prior to the error and where it is after.

You may see this message from Subroutine CSE. CSE is the Call Statement Editor.

[Append to This Answer]
2005-Sep-16 3:02pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message "An unexpected error occurred, please enable logging and retry"
This is an error thrown in Pre-Display of the registration process if the field REGERR CHK LOG is set by the engine.
This REGERR CHK LOG flag is set in 8 different places in the Appx License Manager engine code as reg_err_chk_log:

* It tries in 4 different places to open the USAGE file and if it fails it sets this flag.
* Tries to lock some kind of sentinal record, a failure sets this flag.
* If it fails to read a USAGE record in 2 cases it sets this flag.
* If it fails to writed to the USAGE file it sets this flag.

The basic problem might be a corrupt USAGE file.
That message means exactly what it says - enable logging and retry (then, of course, check the log).
The license server always produces a minimal log file (the file name displays when the license server starts or you can appx -l=filename). To turn up the logging level, set APPX_LS_DBG=0xFFFFFFFF
The easiest fix would be to delete the USAGE file. If that doesn't work, we need the log.

[Append to This Answer]
2005-Oct-11 4:00pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message "Cannot write to Cache - Invalid Prototype Record Length"
Most likely, the Em needs to be re-build for that particular process
[Append to This Answer]
2006-Mar-29 3:36pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "No Record Currently Held"
For a single input process APPX uses a common area to store file information. A key element is the Held Record pointer. There is only one Held Record Pointer per file.

APPX can maintain three threads to the same file; one for the PCF, one for READ/READNEXT and one for BEG READ/END READ loops. When you READ the PCF in ILF (sub-process level), it resets the hold pointer depending on the READ specifications. That’s why the STORE, READ with hold, and RESTORE in Pre-PCF Update works. It re-established the hold on the record APPX automatically read from the PCF. Of course the interactive phase is import too. Appx won’t hold the record in Inquire mode for example. Also keep in mind that the data record is also stored in the common area and subsequent READ statements may replace the record read (and perhaps displayed) from the PCF. It can be a slippery-slop when you start messing around with the PCF in your application. There are certainly situations where it’s necessary but it could be done accidentally as well.

A record will be released by the REWRITE, DELETE, or CLOSE statements. Why, Appx assumes when you execute any of these commands you are done with the record.

As mentioned above, a READ or READNEXT creates a second thread into the file but uses the same common area as the parent. So if you access the PCF in ILF with hold, the hold pointer and record buffer are changed in the common area. When you return to your input screen after the events points, or sub-process child have executed APPX expects the PCF record to be held (in change mode). Since you re-established the hold in ILF, the hold at the PCF level has been lost. This might be what is happening in your case. That’s what the message is in the status line (in red) is telling you. If you tried to REWRITE or DELETE a record in ILF and didn’t have the hold, Appx would display the ILF code that was causing the problem.

You can also release the hold by invoking a sub-process child that uses the same PCF as the parent. Sub-process children share the common area with the parent. Basically the same thing happens as a READ, but APPX has read the file and may have reset the hold. This would happen on an input process invoked as a sub-process that has the same PCF as the parent.

You should analyze your system to determine where the hold is being released. We can’t tell you specifically where to look because, as described above, the hold can be release in any number of ways depending how your system is coded. If this just started happening, I would find out what has recently changed and investigate what the programmer may have done that resulted in this situation.

[Append to This Answer]
2006-Jun-14 11:39am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message, Error - Request Not Allowed
This error is displayed when the user doesn't have the rights for something they are trying, switch to change mode for example. Rights are assigned in System Administration, Security, Security Profiles.
[Append to This Answer]
2008-Sep-18 5:19pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message, "BI.C - APPX Startup Failure: Unable to Initialize Window Manager"
This error can occur when starting the Appx engine (appx.exe) and can be caused by a missing file in the 0 app or and entire directory missing.
[Append to This Answer]
2008-Dec-05 2:18pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message: "key field conversion failure - Error - Invalid Logical Value"
The engine code at this location is trying to write to a MODLOG by comparing the old and new values of the PCF record. This error is thrown when it tries to grab the old value and convert it to a text value to put in the log. The data conversion failed with "Invalid logic value" so it seems it might have tried to convert a logic field that had an unexpected and invalid value somehow. Maybe set via a group header that didn't match up right?
[Append to This Answer]
2010-Feb-12 1:44pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message; "too much data"
This is caused by Appx restoring a saved record or field buffer and detecting that the size is different between the saved copy of the buffer and the current copy of the buffer. This happens with STORE/RESTORE PASS/RECEIVE ILF commands as well as certain places in like when running processes that are scoped not to share buffers (RELATED and DETACHED), file level event points, etc.

Perhaps something is being changed in the data dictionary that alters the length of the current buffer and Appx maybe has a copy of the data stuck is a save buffer that it is trying to restore.

[Append to This Answer]
2011-Jan-06 4:20pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message, "Network IO Error"
Possible causes of the Network IO Error:

Most of the time this error is the result of lack of permissions on the Appx directory. Appx users must have full control within the Appx directory and all sub-folders within it. They also need to be able to run the Appx executable on the server with logon local rights.

We have seen this error caused by a spam filter. If any new spam/virus filters been added to your server in the past few months, could you turn them off briefly to test connectivity?

You might get this error if you're running a newer version of the client than the engine. Example, running Appx 4.2.a with the 5.0.1 client.

[Append to This Answer]
2011-Feb-04 9:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Runtime Messages :
Message, "ORA-01000: maximum open cursors exceeded"
This is an error detected by Oracle.

It has been found that exiting a BEG READ/END READ loop that is accessing an Oracle table will not close cursors properly. In this case you should write your Appx ILF process to always execute the END READ statement for each READ.

Tuning OPEN_CURSORS

The best advice for tuning OPEN_CURSORS is not to tune it. Set it high enough that you won't have to worry about it. If your sessions are running close to the limit you've set for OPEN_CURSORS, raise it. Your goal in tuning this parameter is to set it high enough that you never get an error during normal operations.

If you set OPEN_CURSORS to a high value, this doesn't mean that every session will have that number of cursors open. Cursors are opened on an as-needed basis. And if one of your applications has a cursor leak, it will eventually show up even with OPEN_CURSORS set high. Your DBA should be able to monitor the number of open cursors.

After you've increased the value of OPEN_CURSORS, continue monitoring to see if opened cursors keeps increasing for any of your sessions. If you have an application session whose opened cursors always increases, then you've likely got a cursor leak in your application code: your application is opening cursors and not closing them when it's done.

There is nothing you (DBA), can do to fix a cursor leak. The application developers need to go through the code, find the cursors that are being left open, and close them. As a stopgap, the most you can do is raise OPEN_CURSORS very high and schedule times when all the application sessions will be closed and reopened.

How not to tell if you're closing all your cursors

Frustratingly for developers, the session statistic 'currently open cursors' can include some cursors that the application has closed. When application code calls for a cursor to be closed, Oracle actually marks the cursor as "closeable". The cursor may not actually be closed until Oracle needs the space for another cursor.

So it's not possible to test to see if a complex application is closing all its cursors by starting a session, running a test, and then checking to see if currently open cursors has gone down to 1. Even if the application is closing all its cursors properly, currently open cursors may report that some "closeable" cursors are still open.

One way for application developers to tell if an application is closing all its cursors is to do a single test run, on a dedicated development box, while monitoring opened cursors for the session that's running the test. Then set OPEN_CURSORS to a value a little bit higher than the peak cursors open during your test run, start a new session, and run through multiple iterations of the same test run. If your application still has a cursor leak, you will see the value of OPEN_CURSORS going up, and you may hit an ORA-1000 after a reasonable number of iterations. (Don't set OPEN_CURSORS too low or it may be used up by recursive SQL; if your single test run opens very few cursors, consider making your test run longer rather than setting OPEN_CURSORS unreasonably low.)

[Append to This Answer]
2011-Feb-09 3:01pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment :
Other Runtime Questions

Subcategories:

Answers in this category:
(Answer) What is the difference between END and CANCEL?
(Answer) Is there a way to pass login nformation to APPX?
(Answer) Is there anyway to force the appx client to open in a specific size window?
(Answer) Graphic resource(s) not being displays (red X)?
(Answer) What does the check mark on the Java client do?
(Answer) Checking the APPX registration number.
(Answer) Is the date/time a user signs in and out of APPX kept?
(Answer) Pasting data into a text field in APPX.
(Answer) How do you set up keystroke playback (keyboard scripting)?
(Answer) How do you turn off dynamic indexing in APPX?
(Answer) What is dynamic indexing?
(Answer) What are the maximum file size(s) in APPX?
(Answer) How to determining who has a file open (Unix OS).
(Answer) No Beep on Errors and Warnings
(Answer) What are the command line options?
(Answer) Diagnose SUBR --- SEND FILE TO CLIENT problems
(Answer) More information about why the --- SEND FILE TO CLIENT subroutine failed?
(Answer) Scan hangs!
(Answer) Am I running Java Client?
(Answer) What's "appx.exe -f=" mean?
(Answer) How to recover from record "locked".
(Answer) How to determine what are my environment variable are?
(Answer) APPX/Client startup problems
(Answer) Slow APPX Login Time
(Answer) Auto-update Java Client version
(Answer) How are usage locks allocated?
(Answer) Appx/Client timeout duration
(Answer) Action Logs don't generate
(Answer) General AppxODBC recovery
(Answer) Appx-Client scrambled display on Startup Login
(Answer) How to turn off full selection (highlighted) of text fields in change mode.
(Answer) What kind of code does APPX generate?
(Answer) Is there any "standard" screen size as it relates to the GUI interface?
(Answer) Is there any way to increase the screen response time using the APPX client.
(Answer) Several commands which I can RUN successfully on our HP-UX 11.0 system, do not work when invoked on a Redhat Linux 9 system.
(Answer) Diagnosing Appx/Client problems
(Answer) home
(Answer) Performance Issues
(Answer) Memory corruption after calling an external subroutine.
(Answer) How do we use the routine --- READ FROM CLIENT CLIPBOARD?
(Answer) Asql Errors
(Answer) Would adding "-session" to a command line cause APPX to respond to any input screens with an END?
(Answer) What does error "Appx startup failed because of the following startup error: 34" mean?
(Answer) How can i tell from the ILF code what screen size user has?
(Answer) I can get the PID number from the usage file, but where can I get the port number?
(Answer) What does -session flag do when added to a command line?
(Answer) Previous Activity key
(Answer) Does APPX run on Mac OS X Server?
(Answer) Performance issues when using a RDBMS
(Answer) Appx and new Daylight Savings time
(Answer) What does "Corrupt lfb list" C-Assert mean?
(Answer) How to uninstall AppxODBC.

[New Answer in "Other Runtime Questions"]
2007-Jul-02 3:30pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What is the difference between END and CANCEL?
END and CANCEL are both commands that terminate the current APPX process and return to the previous level, or, in APPX terminology, parent process. The main difference between END and CANCEL is what APPX does when control is returned to the parent.

END returns to the previous RELATED process level and continues operation. CANCEL returns to the DETACHED process level and continues operation. This may sound very similar but are actually quite different. A simplified answer is that END terminates the current process and goes back one level, while CANCEL terminates the current process and may go back more than one level.

For example, when a report is selected from a menu it may start a job that has several steps. It may contain an input that asks for a date range, a query that will select and sort records based on that date range, a disposition to direct the report to the desired device, and an output that actually creates the report. In this case the menu is the parent of the job, which is considered DETACHED since creating the report is not dependent on any information received from the menu. The input, query, disposition, and output steps of the job are RELATED, since the task depends on successful completion of each step.

If you are on the disposition screen and you decide that you want to terminate the report you must decide whether to press END or CANCEL. If END is pressed, then the disposition is terminated and control is returned to the RELATED level, or the job, and processing continues. In this case the output would then run, creating the report that you thought you were exiting. On the other hand, if CANCEL is selected the disposition is terminated and control is returned to the DETACHED level, or the menu. This skips any remaining RELATED steps of the job, giving the desired results.

[Append to This Answer]
2004-Apr-01 3:06pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Is there a way to pass login nformation to APPX?
Yes, you can do this with the following startup options:
AppxDesktopClient -user=xxx -password=xxx -host=xxx -port=xxx
Where xxx is user/site specific information.
[Append to This Answer]
2004-Apr-01 3:06pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Is there anyway to force the appx client to open in a specific size window?
Yes, you do this differently depending on what you are trying to do.

A) If you want to run with more Appx screen rows and columns, start the client with the following options:

AppxDesktopClient -rows=28 -cols=110

This will launch the client that has been sized to allow this number of application Rows and Columns. Similar to running a non-24x80 xterm window and running Appx.

B) If you want to launch the client with a different screen font size, that controls the overall size and magnification of the Appx Client screen. You can do that with a different startup option:

AppxDesktopClient -initialFontSize=14 &

This will launch the client using that base font size instead of the default it is currently using. The base font size is used by the client to set the overall Appx client window size and also how to scale all the screens it presents. The screens will be 'zoomed' to fill the Appx screen. Similar to starting to client today and dragging out the border to a different size.

[Append to This Answer]
2004-Apr-01 3:07pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Graphic resource(s) not being displays (red X)?
After upgrading a Windows 2000 workstation (anit-virus, Novell client , Groupwise ), the graphics in the APPX java client would not display. Even on the very first APPX screen where it normally has the Run, Design and APPX software there were only red Xs in place of the graphics. In the one application that is fully GUI, anyplace there was a reference to a resource (menu backgrounds, input backgrounds etc) the resources did not show.
Clear the cache on the client workstation. Locate and remove the .appx directory on the client machine. This is where all image files are stored and retrieved from during processing. The client software will refresh the cache area as resources are needed.
[Append to This Answer]
2004-Apr-01 3:08pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What does the check mark on the Java client do?
In the Java client on the upper right corner of the screen there is a question mark, a check mark and an x. What does the check mark do?
The check box between the ? Mark and the X is the Enter command. APPX automatically "clicks" the check box when the Enter/Return key is pressed. Clicking it will do the same thing as pressing Enter
[Append to This Answer]
2004-Apr-01 3:08pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Checking the APPX registration number.
In Systems Administration / System Setup / System Registration the CPU Serial Number field near the bottom of the screen should be the same as the Serial Number displayed in the CPU Information box. If not, your system may not be properly registered resulting in a registration error when APPX is run.
[Append to This Answer]
2004-Apr-01 3:09pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Is the date/time a user signs in and out of APPX kept?
In Appx 4.2 there will be a logging system to allow you record when a user signs in and out. Prior to release 4.2 this information is not saved, however you could easily write a startup process to capture this information.
[Append to This Answer]
2004-Apr-01 3:10pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Pasting data into a text field in APPX.
In the Java client, for text field entry, the client does not allow the user to continue typing beyond the max length of the text field; all keystrokes are rejected. However, if text is copied from an external source (Notepad, Word, etc.), and pasted into the text field, it appears to allow lengths greater than the length of the defined field. Upon saving, the pasted text is truncated appropriately to the field length; however, it could give the user the mistaken impression that the entire text string was saved, when in fact it wasn't. Starting in APPX release 4.2, the text from the clipboard will be truncated and a beep will indicate that the incoming data does not fit in the field.
[Append to This Answer]
2004-Apr-01 3:11pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How do you set up keystroke playback (keyboard scripting)?
You can use keyboard scripting from the Appx Telnet and Windows client, but it is unable to handle unexpected or error conditions. It allows you to record, edit, and then play back (blindly) specified keystrokes. <www.appx.com/assets/asp/dynamic_generator.asp?pageid=648> describes APPX Keystroke & Process Recording & Playback. When run from a Windows client, the file that is generated and read from for scripting is on the client PC.
[Append to This Answer]
2004-Apr-01 3:11pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How do you turn off dynamic indexing in APPX?
The environment variable to set to turn off dynamic indexing in Appx is:
 
                 APPX_DISABLE_DYNAKEYS=1

[Append to This Answer]
2004-Apr-01 3:12pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What is dynamic indexing?
Dynamic indexing allows you to alternately sort the data (PDF) displayed on an input screen. Normally, the data sequence is by a predefined key in the PDF. Use dynamic indexing to temporarily change the data sequence. The new sort is active for the current APPX session only and is not saved. Place the cursor in the field that you wish to sort on and press F3. A confirmation message will appear on the status line, press Enter and the data is now “indexed” by the field chosen. There are several environment variables that can be set to control dynamic indexing (_DYNAKEYS).
Bruce Johnston 15, '04:
You can also create a dynamic index via ILF (at least from 4.1 through 4.2.2).
Given two fields, DGA FDRFEPR FED WASTE PRE and DGA FDRFEPR FED WASTE SUF, if I want to sort by the PRE and then by the SUF, both in ascending order, I use the following...
      PASS     DGA FDRFEPR FED WASTE PRE      FIELD            SHARE? N         
      PASS     DGA FDRFEPR FED WASTE SUF      FIELD            SHARE? N         
      CALL         ,PI_DYNA_BLD               RESIDENT? N  END? N  FAIL 0       
If I wanted to change the default order of any to reverse it I'd simply double up its PASS command as in...
      PASS     DGA FDRFEPR FED WASTE PRE      FIELD            SHARE? N         
      PASS     DGA FDRFEPR FED WASTE SUF      FIELD            SHARE? N         
      PASS     DGA FDRFEPR FED WASTE SUF      FIELD            SHARE? N         
      CALL         ,PI_DYNA_BLD               RESIDENT? N  END? N  FAIL 0       
which gives the records sorted by the PRE in ascending order followed by the SUF
in descending order.

I believe that it was Korry who first told me this.
[Append to This Answer]
2004-Apr-01 3:13pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What are the maximum file size(s) in APPX?
The maximum file size is dependent on the release of APPX and the operating
system.  The following chart shows the maximum file sizes allowed for each
operating system based on the release level of APPX.

              Maximum file sizes by release

Release   Windows    AIX       Solaris   HP/UX     Linux
=======   ========   =======   =======   =======   =======  
4.2       2 GB       4 GB      4 GB      4 GB      4 GB
4.1.a     2 GB       4 GB      4 GB      4 GB      2 GB
4.1       2 GB       4 GB      4 GB      2 GB      2 GB
prior     1 GB       2 GB      2 GB      2 GB      2 GB
On AIX and some other Unix platforms, the OS can limit the maximum filesize a user can use, say to something like 1 gig. (1 gig = 1073741824 bytes, a number which came up when diagnosing this problem for one customer.) Typing "ulimit -a" will tell you (in AIX) your user's current maximum filesize (in blocks).
The maximum Appx record length is 32767 bytes, regardless of file type (AppxIO, Oracle, Sybase, ...).

A user's export of an Appx file stopped with: Mu.c.6842: "Main[] - cannot write port file - error - unknown appxio status". The source file verified OK. Only 41% of a 2+ gig filesystem was used. The Portdata file size was 1,073,740,936 bytes at the time of the error.

==> The problem was that the AIX operating system wouldn't allow files larger than 1 gig to be written to the file system. An OS parameter needed to be changed: the /etc/security/limits file, fsize parameter was set at 2097151. They changed it to -1 and the problem went away.

Prior to this change, executing the 'ulimit -a' command returned:

 time(seconds) unlimited file(blocks) 2097151 data(kbytes) 131072 stack(kbytes) 32768 memory(kbytes)32768 coredump(blocks) 2048 nofiles(descriptors) unlimited
After the change, 'ulimit -a' command returned:
 time(seconds) unlimited file(blocks) unlimited data(kbytes) 131072 stack(kbytes) 32768 memory(kbytes) 32768 coredump(blocks) 2048 nofiles(descriptors) unlimited

The value for file(blocks) is the limit on the file size in 512k blocks that can be written. After the change the value is unlimited and the size of file that can be written is limited only by the available disk space.

The user changed their fsize limit, except that it was for the operating user, not for the appx User. They changed the fsize limit to -1 for all appx users, and the problem went away.
[Append to This Answer]
2005-Dec-27 9:03am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How to determining who has a file open (Unix OS).
The Unix ‘fuser’ command will, when properly qualified, let you know what processor id and user’s login id. For example:
                  Fuser –u /user/appx/data/VV/AAA/Data/Bugvar.dat
Yields…
                  /user/appx/Data/VV/AAA/Bugvar.dat: 15846(tom)    18211(appx)
The –u parameter tells Unix to supply the users login id. The names have been changed to protect the innocent.
[Append to This Answer]
2004-Apr-01 3:14pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
No Beep on Errors and Warnings
If your Appx/Client loses its BEEP sound, when ERRORs and WARNINGs are encountered, look at the following:

1) Check that the Windows Sound Control's "Mute" isn't on, and that mixer volumes (Wave, Synth, Line, CD, etc.) are all set on high.

2) Try deleting Appx/Client cache files (Win2k: C:\Documents and Settings\{yourWindowsID}\.appx\cache\).

3) The "Toolkit.getDefaultToolkit().beep()"code may or may not be what your desktop expects as the default beep. It may be associated with another control. Go to Control Panel > Sounds and Multimedia > Sound Events. Is there a Sound Event named "Default Beep"?

If not, go to Microsoft Knowledge Base Article 300406 http://support.microsoft.com/default.aspx?scid=kb;en-us;300406 titled: "Default Sound Is Unavailable in the Sounds Tool in Control Panel", and follow its instructions.

If there is a "Default Beep" Sound Event, check to see if it has a .wav file associated with it and that the .wav file really exists. If there is not a .wav there, set one and see if that works. If one does exist, try setting a .wav association with the Windows program events that do not have a sound attached until you find the one that works.

4) Try re-installing the Appx/Client.
.

Background: When an Error or Warning occurs in the Appx application, we ask the Appx Java/Client to issue a ...
              Toolkit.getDefaultToolkit().beep()

... to the Java VM (rather than fire off a .wav file). The Java VM forwards that request on via the Windows OS to the external speaker, but it's possible it's going thru the Client PC's BIOS => internal speaker to produce a beep. (We can't really tell, as this is internal to the Java VM.)

It's possible something you installed or uninstalled may have changed the sound associated with the event the Toolkit.getDefaultToolkit().beep() is sending.

[Append to This Answer]
2004-Apr-01 3:15pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What are the command line options?
The APPX Client has a number of options that can be set at the command line. These options will only effect the associated session being started. You can prevent the client login box from displaying by supplying the options to attach and login to the proper system. If enough information is available for the client to make a good connection, the login box will not be displayed. If any part is missing or invalid, the login box will pop up. The following command line options can be appended to the COMMAND LINE= line of the runnappx.ini file located in the Primary Destination Directory. (Default location= C:\appx\java\runappx.ini).

Command Line Options

-application=(APPX server Application ID) Instructs the server to startup in a particular application ID. (not implemented)

-bg=(color) Background color (See -fg for color list).

-bmode=(tile|expand) default=tile Defaults how background tiles are painted in the Java window. The “tile” setting uses the tile image over and over again to fill the window. The “expand” setting resizes the image to just fill the space inside the window. Used with the –splash= setting.

-boldFg=(color) Set the default text foreground text color for bold text (See –fg for color list).

-cols=(window size in columns) default=80 Defaults the initial screen size in columns.

-database=(APPX server Database ID) Instructs the server to start in a particular database. (not implemented)

-editBg=(color) Set the default text foreground text color for edit fields (See –fg for color list).

-fg=(color) Valid colors are black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red, white, yellow, or any valid #rrggbb number. Set the default text foreground color. Defaults to black.

-font=fixed Turns off the proportional font normally used by the Java client. If you are having problems with the text on your application screens not lining up the way you want, try this setting.

-hideMenu (not implemented)

-hideToolbar (not implemented)

-host=(server hostname) Defaults the remote host field on the remote login pane of the login dialog box. It is also used when the login dialog box is skipped.

-look=(java|windows|motif) default=windows Defaults the look and feel setting on the “options” pane of the login dialog box. It is also used when skipping the login box.

-mode=(local|remote|both) default=both Controls which login panels are shown and also determines which type of login to do if the login in dialog box is skipped.

-optkey=(character) Resets the key used as the option key. The default is the single back quote character (`, left of the 1 on the QWERTY keyboard. To set the option key to the ~ character, use –optkey=~

-password="(server OS password)" Defaults the password on the remote login pane of the dialog box. It is also used when skipping the login box.

-pathname=(path & filename of the local appx.exe file) Defaults the location and name of the APPX server when running APPX locally. This is also used when skipping the login dialog box and the –mode=local is set.

-port=(server port number) default=8060 Defaults the remote server port number on the login dialog and also used when doing a remote login with the login dialog box skipped.

-process=(APPX server process name) Set startup process name.

-ptype=(menu|job|input|output|...etc...) Sets the startup process type.

-rows=(window size in rows) default=21 Defaults the initial screen size in rows.

-shell=(command line to start a document) Overrides the default command line used to ‘start’ a document. Starting a document is telling Windows to open a document and having Windows use the association for that document type to decide which program to use. This defaults to start (document), which might not work on NT. NT may require this to be set to start the command shell like “cmd.exe /c start”.

-smode=(tile|expand) default=expand Defines how the splash image is painted on the Java window. The “tile” setting uses the tile image over and over again to fill the window. The “expand” setting resizes the image to just fill the space inside the window. Used with the –splash= setting.

-splash=(url to an image) Used as a background image in the main client window during the login process. How it is painted is determined by the –bmode= setting.

-tile#=(url to an image) Defines an array of images that the client will use to fill window backgrounds. –tile1= defines the base wallpaper image. –tile2= defines the wallpaper for all one up from the base window. –tile3= sets the pattern for all windows two up from the base window, etc. You can define as many or as few as you like. The client will cycle back to the first image if you have more windows layered on the screen for which it has tile images. Used with the –bmode= setting.

-title="(text/information to display)" Replaces the default text in the title bar of the client with the text and optional data specified in this parameter. Supports the following options; $(host) displays the host id, either name or IP as entered in login $(user) displays the user login id $(pathname) displays the engine path $(pid) displays the server task id $(port) displays the port the connection is attached through Example: -title=”Host is $(host), PID is $(pid), on server port $(port)”

-user=(server OS userID) Defaults the userid on the remote login pane of the dialog box. It is also used when skipping the login box.

[Append to This Answer]
2004-Apr-01 3:16pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Diagnose SUBR --- SEND FILE TO CLIENT problems
"I'm trying to send a file to a specific location on the user's PC, but it keeps failing. The target folder exists, and this used to work, now it doesn't. The user can use notepad and save a file in in that location, but APPX won't upload to it. How do I diagnose/debug the problem?"
_
==> Start a session, try the SUBR --- SEND FILE TO CLIENT, then look at the tail end of the (Xref) home\appxlog.txt file, where there should be information about why it failed.

This should also provide useful information if you're having problems with:

        SUBR --- LOAD URL ON CLIENT.

See also: (Xref) How do I send a file to a client PC and open the file with a client side App? (i.e. Excel)
_

[Append to This Answer]
2004-Apr-02 4:38pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
More information about why the --- SEND FILE TO CLIENT subroutine failed?
I'm trying to send a file to a specific location on the user's PC, but it keeps failing. The target folder exists, and this used to work. Now it doesn't. The user can use notepad and save a file in in that location, but APPX won't upload to it. Win2K client, APPX 4.1.a.

Start a session, try the failing 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 Runtime Environment : (Category) Other Runtime Questions :
Scan hangs!
When I run an certain input process and try to scan a particular file, I get an hourglass and it never comes back. If I turn GUI off, I can scan OK. I have trapped through the process and have determined that there is no ILF code causing this.
In older versions of APPX, the display sequence (dsp seq) field in the data dictionary was defaulted to 1. In recent version of APPX the default display sequence is not set, leaving the dsp seq field blank. The undefined dsp seq can confused the new scan processor and cause it to hang in GUI mode. To fix this problem, check the display sequence (dsp seq) setting of the fields in the scan file. If they are all blank, set an appropriate field’s dsp seq to 1.
[Append to This Answer]
2004-Apr-01 3:19pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Am I running Java Client?
Is there a way to determine if APPX Java Client (rather than Windows Client, or character based APPX running) is connected, to determine what type of menu should be displayed (for example)?

In APPX 4.1 and higher, you can use the following code:

        SUBR --- CHECK GUI CLIENT     SUBPROCESS  END? N
        IF   --- RETURN CODE             EQ    1
  T     it's the java client
  F     it's not

[Append to This Answer]
2004-Apr-01 3:25pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What's "appx.exe -f=" mean?
winappxd waits for connection requests (from an appx -c session). When it gets a request, it validates the user id & password from the client. Then it spawns a copy of APPX (which becomes the server).

When the server is spawned, it inherits a bunch of file descriptors from winappxd. One of these file descriptors is the TCP/IP connection from the client. The "-f=" flag tells the server which file descriptor is connected to the client.

After completing the spawn, winappxd closes it's copy of the client file descriptor and the server starts talking to the client on the indicated descriptor.

[Append to This Answer]
2004-Apr-01 3:26pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How to recover from record "locked".
We have a record in a file that is reporting "locked" if you try to change it. No one is on this record that we are aware. What do we do?
A user was in the middle of updating this record when the session "crashed".

The APPX session is probably still running on the server, and that's what's holding the record.

You need to do one of the following:

- Have a look at the registration usage to see if there is an orphaned session for that user. If you can find it, KILL it from the console.

- Use NTHandle on the server and find the PID that has the file. Then kill it. At the heart of it, NTHandle digs out the PIDs and the open files. You still have to parse through NTHandle, once you have it from www.sysinternals.com

- Ask everyone to log off, stop the WinAppxD and License servers, and kill any remaining APPX sessions on the server. If there are background jobs running, it might be tricky to identify the background jobs from the ghost task.

- Identify the process id's of all currently connected clients (look in the title bar if P/M client, or under the 'About' menu if Java) and kill everything but those. Again, watch out for background jobs, if you use them at your site. Also, you might want to stop the WinAppxD service while you do this to prevent new users from logging on while you try to find the ghost process.

- Download and install the BJutils package. This is Bruce Johnston's APPX utility package, and one of the utilities allows you to see who has what files open and also allows you to kill APPX sessions. This would help you identify which APPX session is holding the record. You can get this from www.cansyswest.com, under Free Stuff. You also need the NT Resource Kit to make these work.

- Reboot the server (simple, but drastic)

In addition, key file corruption can cause locking problems. It is not unlikely that externally killing an APPX process may cause key file corruption.

So you should run a 13)Verify 1)Integrity on any files that may be open when you have a record locking problem, for which you end up either killing processes, or re-IPL'ing with APPX processes still running.

If you're having record locking problems, it might also be prudent to run 13)Verify 1)Integrity on a regular schedule, perhaps monthly.

[Append to This Answer]
2004-Apr-01 3:27pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How to determine what are my environment variable are?
To determine your environment variables under Unix, perform:

       RUN          set > /tmp/env.txt

To determine your environment variables under APPX for Windows:

       RUN          cmd /c set >C:\tmp.txt
       RUN          wordpad.exe C:\tmp.txt

 (Under Windows 9x, use command.com rather than cmd.exe.)

If you're running APPX/Client, have the first RUN redirect standard out to a  
file in a client-accessible directory, then run an editor on that file.

To get the environment variable using ILF, try;

      SET      --- TEMP 80          =      cd /tmp;
      APPEND   --- TEMP 80          1      set > env.tmp;
      APPEND   --- TEMP 80          1      grep APPX env.tmp >
      APPEND   --- TEMP 80          1                env.txt   ;
      APPEND   --- TEMP 80          1      rm env.tmp
      RUN      --- TEMP 80
[Append to This Answer]
2004-Apr-01 3:28pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
APPX/Client startup problems
If your APPX/Client ('appxjava.exe') fails to startup for various reasons ("Memory could not be read.", or terminates without error message), try rebooting your Client PC.

Set the environment variables APPX_NET_LOG and APPX_NET_MASK to have APPX create a log file of why the client is not being started.

If that doesn't work, perform:

   1) Download a fresh copy of the APPX Java Client ('javacli.exe').
2) Create a new directory (renaming or deleting the old one if necessary). Run this 'javacli.exe', installing it into this new directory.
3) Reboot the client PC.
4) Try to run 'appxjava.exe' from the new directory.
5) If it fails, from a DOS window, do a "set" command. Email the value of IBMHPJ_OPTS to us at techsupp@appx.com, along with the location of the directory into which you installed the Client.

[Append to This Answer]
2004-Apr-01 3:29pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Slow APPX Login Time
Over the past 6 months, our APPX login times have steadily lengthened. 


Normally this symptom is due to a growing USAGE file.  Other likely events;


- network traffic in general has increased on your network

- more users in APPX

- more PC’s on your network

- do you have the APPX client stored on a local disk on each client PC, or
  are  you retrieving it from the network any time someone logs in?  (See the
  WinAppxD FAQ, ftp.appx.com/pub/documents/winappxd-faq.txt, section 2.12: 
              "Automatically update Presentation Client".)

- It's also possible that you have a DNS or WINS issue 
[Append to This Answer]
2004-Apr-01 3:30pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Auto-update Java Client version
Example of a batch file that can start APPX and automatically update the 
APPX/Client to the most recent version prior to logon:

rem  AppxJAVA.bat
rem  Batch file to launch Appx Java Client and keep it updated.
xcopy x:\Appx\StartUp\Images\splash.jpg c:\"Program Files"\AppxClient\
                        themes\default\ /d
xcopy x:\Appx\StartUp\login.ini c:\"Program Files"\AppxClient\ /d
xcopy x:\Appx\StartUp\JavaClientUpdate\AppxClient.exe c:\"Program Files"\
                        AppxClient\ /d
xcopy x:\Appx\StartUp\JavaClientUpdate\Appx.jar c:\"Program Files"\
                        AppxClient\ /d

"C:\Program Files\AppxClient\AppxClient.exe" -cols=80 -rows=25
                 -title="Appx -$(user) on $(host):$(port), PID $(pid)
exit

The following batch file does the same for the Appx Windows Client.

rem AppxWin3.bat
rem 09/03/99 PAK
rem
rem Batch file ran on each client at startup of Appx
rem i.e., the Appx Desktop shortcut should point to this file
rem
rem XCOPY switches:
rem /d - Copies only those files whose source time is newer than
rem      the destination file.
rem /i - If destination does not exist and copying more than one file,
rem      assumes that the destination must be a directory.
rem /u - Copies only files that already exist in destination
rem
rem Copies the Latest Version of Appx to your computer!
rem
xcopy x:\appx\appx.exe c:\Appx\Win32\ /d

md c:\Appx\Win32\data
xcopy x:\appx\startup\winprint.exe c:\Appx\Win32\data\ /d

rem for WinNT, HOSTS file is in: Winnt\system32\drivers\etc\
xcopy x:\Appx\Startup\Hosts.* c:\Winnt\system32\drivers\etc\ /d /i
xcopy x:\Appx\Startup\Hosts   c:\Winnt\system32\drivers\etc\ /d
start c:\Appx\Win32\Appx.exe -c
[Append to This Answer]
2004-Apr-01 3:31pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How are usage locks allocated?
Each process belongs to an application. Every Appx session has a list of application locks that are in use by that session. When you start a process in a locked application, Appx checks to see if the lock is already in use by this session. If so, the usage count in incremented - if not, the lock is added (if possible) and the usage count is set to 1.

When you run the first process in a locked application, Appx acquires a USAGE (this means that you are using 1 user right from that product registration). When you run the second, third, fourth, etc. processes in that application, you don't count as 2, 3, 4, etc. users - just a single user.

When you end ALL processes in the locked application, it decrements the usage count for the appropriate lock. If the usage count for a lock goes to zero, the lock is forfeited, and therefore the overall user count for that lock is decremented. (You are no longer counting against the user rights for that product registration)

[Append to This Answer]
2004-Apr-01 3:32pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Appx/Client timeout duration
What controls the timeout duration, before the Appx/Client gives up on trying to talk to the Appx/Server? The Client itself? The network?
It depends on the message that you see. We don't specify a timeout. We simply request a connection to the host identified by the user.

If the user gives us a host name (as opposed to a numeric IP address), we have to convert that to an IP address, using the TCP/IP stack on the client machine. If the server's name is in the hosts file (/etc/hosts or %WINDIR%\System32\drivers\etc\hosts), the conversion should be nearly instantaneous.

If the server's name is not in the hosts file (or if file-based lookup Has been disabled), the conversion requires a network conversation with a DNS name server - that can take quite a while.

If the name cannot be resolved, you'll get an "Invalid Host Name" error after a while.

If the host is not reachable, the IP protocol specifies some number of retries (and some waiting period in between retries) before the TCP/IP stack gives up and tells Appx that the host is unreachable.

[Append to This Answer]
2004-Apr-01 3:33pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Action Logs don't generate
We run a job for a post and the action log normally behaves correctly, 
but on occasion no log is produced.  But in a subsequent job for 
another group, the action log contains items (usually Warnings) for 
this post, as well Warnings from the first post.
One possibility - check the Start-of-Process and the End-of-Process event points. If these event points have ERROR, WARNING, MESSAGE, or DISPLAY statements, they can cause a problem if executed. They are not valid statements for those event points.

Action logs are created automatically when an APPX update process encounters an error or executes an ERROR, WARNING, or MESSAGE statement. Normally, an action log is closed and queued to print at the end of the process that created it. We are not aware of any specific problems relating to the creating and queuing of action logs. Having said that, there must be something that is preventing APPX from closing and queuing the action log. Perhaps the update process is crashing or otherwise ending prematurely and APPX never has an opportunity to close and queue the action log.

You might consider a workaround that also gives you more control over Logs produced, by converting your post's Updates to Output processes. The ILF normally in UPDATE's "Start of Frame" is put into the OUTPUT's "Select Image" ILF series. Explicitly set --- ALTERNATE IMAGE NUMBER = 0 at start of "Select Image". Then set ALTERNATE IMAGE NUMBER = 1 if you run into any CANCEL, ERROR, WARNING, or MESSAGEs. Paint the primary key to the file on the RECORD level OUTPUT image, and the Sort/Control fields onto any RANGE-START/END frames.

You'll have more control over the format of your Logfile, and you can use DISPOSITION functions to direct them. You could also use ILF to update an ancillary error tracking file, if you want a more permanent record of errors encountered, by whom, and when.

[Append to This Answer]
2004-Apr-01 3:34pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
General AppxODBC recovery
Recommended recovery procedure for difficult-to-debug AppxODBC errors:
Uninstall/Re-install AppxODBC.
 1) In Control Panel > Administrative Tools > Data Sources(ODBC) > 
          System DSN tab => Remove the AppxODBC record. 1) Uninstall AppxODBC.
 2) If 'C:\appx.env' exists, delete or rename it.
 3) Delete appxodbc directory tree (which contains the 'appx.dbs' tree).
 4) Search for and delete appxodbc.dll and appxsetp.dll.
 5) Reboot.
 6) Reinstall AppxODBC from a downloaded AppxODBC installation package.
Test AppxODBC with WinSQL, see FAQ at
         http://board.appx.com/faq/cache/232.html 
for information on the WinSql tool.
(Xref) WinSQL: APPX ODBC debug utility.
(Xref) (missing or broken file)
 

[Append to This Answer]
2007-Jul-02 3:23pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Appx-Client scrambled display on Startup Login

Occasionally when the new client is started, the login screen appears, but is scrambled, perhaps shifted up and left a bit, leaving a part of the first placement and hiding some of the login fields. Minimizing or Maximizing the Client Login screen, then Restoring it will set it right.

Try turning down the video acceleration setting on your computer.

Right Click on your Windows Client Desktop > Properties > Settings Tab > Advanced... > Troubleshooting Tab > Hardware Acceleration slider. Click it to the left, perhaps all the way to "None". That should straighten out the display. If it doesn't, call Appx Support.

[Append to This Answer]
2004-Apr-27 12:50pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How to turn off full selection (highlighted) of text fields in change mode.
I have an input screen that contains just a text field. When the user goes into the input in change mode is there anyway to prevent the client from highlighting all the text automatically?
Pull down the Options menu at the top of your window. There is an option called Auto Select. Set that to No and fields will no longer be automatically selected when the cursor moves into the field. The 4.1 client does not remember this setting between settings. The 4.2 client does.
[Append to This Answer]
2004-Apr-01 3:36pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What kind of code does APPX generate?
Appx compiles process specifications into a form that minimizes runtime processing. It's a bit difficult to describe the format. The Appx engine is similar to a Java VM (virtual machine) or the .NET environment. When we designed Appx, we defined an ideal execution environment that doesn't actually exist in any hardware - we implemented the execution environment in software. There are a number of different execution components. ILF code is executed in an optimized register-based software CPU (there are about 500 op-codes in the instruction set - the opcodes do things like "convert from binary form to packed-decimal", "jump to label", "invoke a subroutine"). Process specifications are interpreted by the process interpreter - when we build an EM, we resolve as many details as possible - the basic theory being "do it once, at compile time" rather than "do it every time you run this process". That's one reason that it would be difficult to add indirection as some people have asked for - indirection means that you defer as many decision as possible until runtime.

So we don't really generate code in the way that some tools do. We don't generate C code that then gets compiled into a program. Appx is a compiler, interpreter, and VM all rolled into a single package.

[Append to This Answer]
2004-Apr-01 3:37pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Is there any "standard" screen size as it relates to the GUI interface?
No, the screen size is more a person preference. Here are some tips from other users;

I use 28x100 because it creates a nice sized and readable screen on a 17” monitor when using a resolution of 1024x768. It fills the screen nicely, but has a font that is large enough to easily read.

My personal preference is 28x110. This size fits nicely on 17" monitors with a resolution of 1024x768.

We chose to set the standard at 21 X 97. This will fill a screen when the resolution is set at 800 X 600. It gives us some extra screen real estate, particularly in the width where its most useful, but doesn't strain the eyes of our older employees.

[Append to This Answer]
2004-Apr-01 3:38pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Is there any way to increase the screen response time using the APPX client.
You can try the repaintLevel setting in the Advanced client options list. This controls screen repaint frequency.

0 = Paint every screen 1 = Skip some intermediate screen repaints 2 = Skip all intermediate screen repaints

Screen painting is the most intensive thing the client can do.

[Append to This Answer]
2004-Apr-01 3:39pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Several commands which I can RUN successfully on our HP-UX 11.0 system, do not work when invoked on a Redhat Linux 9 system.
For example,

--- TEMP 132 is loaded with:

ln -s -f /ft/mv90/test.PRN/home/appx/data/TST/UBS/Data/MV9IRPRN.dat

RUN --- TEMP 132

Either the RUN statement can't find the "ln" program, or you don't have the same privileges when running Appx that you do at the command line.

You can rule out the first problem by including the complete path to the /bin/ln program.

To check on the second problem. RUN the command "id > /tmp/myid", then look at /tmp/myid. You'll probably see that you are running as user appx rather than yourself s you might expect.

Make sure that the destination directory is modifiable by $(cat /tmp/myid)

[Append to This Answer]
2004-Apr-01 3:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Diagnosing Appx/Client problems
`
To diagnose general Appx/Client problems, send tech support will (Xref) home\appxlog.txt and "appx.stk" (in the server directory containing the Appx engine). These files frequently provide us with the information needed to identify and fix issues that can cause a session to hang.

Note: appxlog.txt is initialized when a user starts a new session, so you must capture it before the user starts a new session.

See also (Xref) Diagnose SUBR --- SEND FILE TO CLIENT problems and (Xref) Where is Java/Client cache?.
`

[Append to This Answer]
2004-Apr-02 4:49pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
home
`
For the purposes of the Appx Java/Client, {home} is in one of the following locations:

Unix & Linux:

   $HOME/.appx/
Windows 2K:
   C:\Documents and Settings\{yourWindowsID}\.appx\
NT:
   C:\WINNT\.appx\
`
[Append to This Answer]
2004-Apr-02 4:41pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Performance Issues
-Tmpdata data directory

Files are created in Tmpdata for large sorts and for temporary disk files created by application(s). Under ideal circumstances, APPX removes all temporary files at the end of the job that created them. However, if a job is interrupted, the temporary files are not automatically removed and, over time, they can accumulate. So, the system administrator should routinely remove them when performing system maintenance to keep them from accumulating.

APPX has to choose a unique file name when creating a temporary file. Determining a unique file name can take some time if there are a lot of files in the Tmpdata directory.

If users are actively in Appx, you should not blindly remove the contents of the tempdata directory. But if all users are out, then it is perfectly fine to remove the contents.

-Reorganize active files

"Active" data files should periodically be "reorganized" whether or not they are APPXIO, C-ISAM, Oracle, or whatever.

Files and disk drives should be defragmented periodically.

-Orphan APPX sessions

Check for "orphaned" APPX sessions on the server that might be consuming system resources.

-Network errors

Check for "high" error counts on your network that might be causing slow response or "orphaned" APPX sessions on the server.

-Logging

Check your enviromental variables to see if you are creating any dianostic log files that are not needed.

[Append to This Answer]
2004-Jul-09 4:39pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Memory corruption after calling an external subroutine.
Historically, APPX administrators have had memory corruption problems when external subroutines are executed from within APPX. For example, when you call a C subroutine from within APPX, the C subroutine is responsible for making sure that allocated memory is properly released before returning back to the calling APPX process. If this is not done properly, then memory corruption can result.
[Append to This Answer]
2004-Jul-09 4:41pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How do we use the routine --- READ FROM CLIENT CLIPBOARD?
      PASS     Rq: Buffer                     FIELD            SHARE? Y
PASS Op: Total Chars in Clipbrd FIELD SHARE? Y
PASS Op: Max Num Chars to Read FIELD SHARE? N
GOSUB --- READ FROM CLIENT CLIPBOARD

The first field is a field to receive the clipboard data.
The second field will be filled in by the routine telling you how many bytes were in the clipboard.
The third field is optional and if used you set it to the max number of bytes you want to read. It will default to 32767 if not set.

[Append to This Answer]
2005-May-03 1:37pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Asql Errors
(Download) asql_login_over_tcpip_without_struct_file_present (1.1 M) (SYSDIR Struct file)
(Download) Asql_login_over_tcpip_without_struct_file_and_bogus_password (1.4 M) (SYSDIR Struct file)
(Download) Asql_login_over_tcpip_to_bad_port_number_or_down_appxdsvc_port (1.4 M)
(Download) Asql_login_local_mode_without_APPXPATH_set (1.5 M)
(Download) Asql_login_local_mode_with_0SA_Struct_file_missing (1.5 M)
(Download) ASQL_login_with_remote_tab_on_Windows_2003_Server_with_DEP_turned-on (1.9 M)
[Append to This Answer]
2008-Mar-12 3:36pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Would adding "-session" to a command line cause APPX to respond to any input screens with an END?
And if so, then why does APPX still display the 'Restructure Required' or 'Missing or Invalid Process Definition Record' screen?

It depends on the platform. If you're running a Linux or Unix server, the operating system, background jobs will pretend like the user pressed the END key whenever a process gets to a point where it would normally wait for user input.

On Windows servers, the OS doesn't really provide anything that differentiates between a foreground and background process - there isn't a notion of a "background process" on Windows (except for a Windows service, which is something else entirely). Instead, when you spawn an Appx background job on a Windows server, we just start another copy of Appx (minimized). Try running Appx on a Windows server without running in client/server mode - run a background job that needs to wait for user input. When you spawn the job, you should see another copy of Appx show up in your task bar. Open that window and you'll see the background job running. You can interact with it using the keyboard and mouse. It's just a second Appx session that starts in the right place, has a copy of all of the parent session's important data, and starts minimized. Just like the specification says: separate task allowed? Very handy for debugging background jobs.

However, that's an old feature that was written before we had a client/server configuration. If you connect to appxdsvc or winappxd, the broker creates an invisible desktop for the engine sessions - that means that you can't get to any background sessions. We should probably modify the Windows engine so that it notices that you're running in client/server mode and behaves more like Unix/Linux of you are.

[Append to This Answer]
2004-Nov-04 2:55pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What does error "Appx startup failed because of the following startup error: 34" mean?
This error appears when user doesn't have sufficiant Security Profile rights to run Startup Job.
[Append to This Answer]
2005-Feb-01 3:13pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How can i tell from the ILF code what screen size user has?
      PASS     --- RI                         FIELD            SHARE? Y
      PASS     --- CI                         FIELD            SHARE? Y
      GOSUB    --- GET SCREEN SIZE 

[Append to This Answer]
2005-Mar-29 4:03pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
I can get the PID number from the usage file, but where can I get the port number?
If you're looking for the port that the client connected to, you could define an environment variable (say APPX_BROKER_PORT) and set it to a value unique to each listener. Then you could examine APPX_BROKER_PORT in each engine.
[Append to This Answer]
2005-May-03 9:50am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What does -session flag do when added to a command line?
The -session flag suppresses terminal interaction as a side-effect. It's real purpose is to start a background job. When you submit a job to background, Appx re-invokes itself with "-session=<filename>", where <filename> is the name of a session file.
[Append to This Answer]
2005-Jul-29 4:28pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Previous Activity key
I have job like this:

QUERY <some query name> JOB DISPOSITION - consists of one INPUT process OUTPUT <some output name>

When the user is at the INPUT process of the nested job, and they press F4 to go back, it continues to the OUTPUT. Why does it do this? Can I get it to return to the previous job step?

Yes, you can get it to return to the previous job step. Make sure that your JOB DISPOSITION step is invoked as a Subprocess, not as "related", and make sure that "Separate task" box is not checked. That should do the trick.

There are 3 things that controls if you can or can not return to the previous activity:
1. NEXT CHILD ID - it controls job steps and is shared at the subprocess level. Normally it's set to "+", which means "move forward"
2. Separate task set to "Y"
3. There is a hidden filed on a CHILD file called "Prev Img Ok" - not 100% sure what exactly sets in ON or OFF, but i think it's ON by default now.

[Append to This Answer]
2005-Aug-09 11:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Does APPX run on Mac OS X Server?
Appx will not run on MAC OS X server. The Appx client will, but the server will not.
[Append to This Answer]
2005-Dec-20 11:02am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Performance issues when using a RDBMS
The following factors will significantly impact performance when using a database:

1) commit frequency
2) Length of data read/written
3) Read with hold
4) # of database I/O's
5) communication protocol and settings

I'll briefly discuss each.

1) commit frequency (Commit Mode, Process Additional Attributes).

We have determined that a commit is very "expensive" in terms of performance. If you can reduce the number of commits, then performance will almost always increase, sometimes significantly. Deferring commits to the End of Process probably maximizes performance for this factor but may increase the size of the rollback logs and will certainly increase the number of rows in the database which are "locked" to other users while updates are pending.

2) Length of data read/written

This may be the most significant factor which impacts performance. As the length of the data being read or written increases, the run time increases, sometimes dramatically. This is why we added the Partial Record I/O feature. If possible, you should avoid reading the entire record if the record is large. How large? I seem to remember that each increment of about 800 bytes caused a significant incremental loss of performance. Even if you must read the entire record, then try to avoid a rewrite of the entire record. If you are only updating a single field, then do a rewrite of just that field. If you are rewriting several fields, wrap them in a group and rewrite the group. If necessary, you can add a "group" of synonyms to the end of the record to accomplish this.

3) Read with hold

Don't read with hold unless you need to. If you are only going to actually update a small percentage of the records read, read each record first without a hold and then, after you determine that an update is needed, read it with hold. A read with hold is very "expense" in terms of performance. Keep in mind that an output or update process will automatically read the PCF with hold if a REWRITE or DELETE statement is detected. If only a small percentage of records will actually be updated, it might be much more efficient to write a Subroutine process as an alternative to an update process.

4) # of database I/O's

Use the new file cache capability to load read-only "code" files into memory where they can be very efficiently read. Accessing of code files in a database is much slower than accessing the same code files from memory.

5) communication protocol and settings

If possible, install the Oracle database and APPX on the same machine so that you can avoid database I/O across a network. If they are both on the same machine, configure Oracle to use "pipes" for communication instead of TCP/IP. Define the ORACLE_SID environment variable instead of specifying the database name in the FMS group. APPX will then use the local communications protocol which will probably be pipes. Pipes are much more efficient than TCP/IP.

If you are using TCP/IP make sure that the packet size is large. I'm not sure how large you can define the packet size to be, but 10K or more might be desirable if you are reading/writing large rows.

[Append to This Answer]
2011-Jun-15 2:45pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
Appx and new Daylight Savings time
Is Appx going to be affected by the new Daylight Savings Time?

APPX does not keep time – it simply reads what the operating system provides. 
As long as you have patched your OS properly, there will be no issues as far as 
APPX is concerned.
[Append to This Answer]
2007-Feb-27 4:01pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
What does "Corrupt lfb list" C-Assert mean?
It means that Appx found an unexpected entry in a "scope list".  
When you open a file, Appx creates a "logical file block" (LFB) to keep track
of that file.  Every file is opened at some particular scope - when that scope
ends, the file is closed and the LFB is discarded (a scope is something like
"the most recently invoked related process", "the current event point", or
something like that).  The LFB is linked into a list of all LFB's belong to a
given scope.  This message means that Appx was processing a scope list and
found an LFB that should have been linked into a different list (because it
has the wrong scope).

It could be related to FLEP bug.
[Append to This Answer]
2007-Mar-16 12:33pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX Runtime Environment : (Category) Other Runtime Questions :
How to uninstall AppxODBC.
please refer to FAQ;
http://board.appx.com/cgi-bin/fom.cgi?auth=ck41f1191a3c8a254b2a9c32ee5e2ee117&file=344
[Append to This Answer]
2007-Jul-02 3:31pm
(Category) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility :
APPX System Administration
FAQ's relating to the use of the APPX System Administration application.
Subcategories:

Answers in this category:
(Answer) What rule does APPX / Oracle interface use to decide when a field will be "char" vs "varchar".
(Answer) Oracle import performance issues.
(Answer) How to import dates from APPX to Oracle.
(Answer) Why is my RDBMS import so slow?
(Answer) What is a security profile?
(Answer) Cannot see the Oracle database?
(Answer) --- COMMIT MODE PDF hierarchy!
(Answer) How to incorporate COMMIT & ROLLBACK into APPX code!
(Answer) What are the APPX invocation switches?
(Answer) Commit parameter doesn’t seem to work?
(Answer) How to connect Appx to Oracle.
(Answer) Can I run different releases of APPX on the same server?
(Answer) Why is APPX building the EM’s every time?
(Answer) WinSQL: APPX ODBC debug utility.
(Answer) How to track “Record Held by Another User"
(Answer) How APPX License counts WS's
(Answer) How to reprint a print file?
(Answer) Message: "Building Dynamic Index"
(Answer) Oracle-Store blanks, not NULL !
(Answer) Where is Java/Client cache?
(Answer) Importing big Oracle tables!
(Answer) What is my AppxODBC version?
(Answer) How to use recover.exe!
(Answer) Message, “Can't access named resources”!
(Answer) AppxODBC & Appx Security
(Answer) Can I reserve an application lock?
(Answer) Which Windows version are we?
(Answer) Message; “Invalid Native File Management System”
(Answer) File fragmentation.
(Answer) Printing to a printer produces blank pages.
(Answer) APPX.EXE process is consuming 95%
(Answer) The command-line "kill" too time-consuming and error-prone. Is there a better alternative?
(Answer) How can I determine which APPX.EXE processes on my server are orphans?
(Answer) All of my users except for one have gone home for the night, and I am sure they have turned off their PC's. I still see three (or four, or ten) APPX.EXE processes in the server's task list. Why are they there?
(Answer) A user just called me to say that her APPX Client window just disappeared, or there was a power outage or system malfunction, that caused their APPX Client session to end unexpectedly. Do I need to do anything?
(Answer) How do I manually kill an APPX server process?
(Answer) The user process is hung, and I haven't been able to resolve the problem, so I need to kill that client/server session. How do I do that?
(Answer) What should I do when a users APPX session is hung?
(Answer) What can I do if WinAppxD gets stuck regularly?
(Answer) When might I want to stop and restart WinAppxD (either with, or without, a reboot)?
(Answer) Is it safe to stop WinAppxD, if I'm going to need to restart it again without rebooting my server?
(Answer) How do I stop WinAppxD?
(Answer) How do I start WinAppxD?
(Answer) How can I verify that WinAppxD is running?
(Answer) What is WinAppxD, and what is it used for?
(Answer) Getting 'ps -ef' original UserID in Linux
(Answer) Information on Winprint 2.4
(Answer) How to Purge the USAGE File
(Answer) Does Winprint -width and -length work?
(Answer) Is there any special consideration that we should take in order to use Winprint?
(Answer) What is the relationship between winprint.exe and winprintdll.dll?
(Answer) Storing zero numeric values in SQL Server
(Answer) What are the zero apps?
(Answer) How do I start the license server?
(Answer) How to debug the license server
(Answer) How do I determine my server’s serial number required for registration with APPX?
(Answer) How to associate PDF output to enable printing in a windows environment.
(Answer) What different configurations of APPX/ODBC are supported?
(Answer) What software do I need on the data server in addition to APPX?
(Answer) APPX and ODBC information
(Answer) What kind of machines and network do I need for server and clients?
(Answer) Can I get a log of file activity using APPXIO?
(Answer) How do I verify all files in a database?
(Answer) How do I verify the file 'ORDER' in application 'AAA', database 'DDD'?
(Answer) How can APPX data file indexes become corrupt?
(Answer) When might I want to use APPXUTIL to check my file system?
(Answer) Where do I get APPXUTIL?
(Answer) Why does a user of APPX for Windows need APPXUTIL?
(Answer) What is APPXUTIL?
(Answer) What does it mean to 'verify' a data file?
(Answer) How do I script imports for windows using APPXUTIL?
(Answer) How do you diagnose strange or generic errors (such as bus errors, seg faults, attempting to free freed memory errors, or "an internal error has been detected" errors)?
(Answer) How do I see the APPX Process Stack?
(Answer) What is the APPX Process Stack?
(Answer) How to define the keyboard layout, (appx –k)
(Answer) New Item
(Answer) WinAppxD service is not running (Troubleshooting WinAppxD)
(Answer) Client login issues - Incorrect login (Troubleshooting WinAppxD)
(Answer) HASP not seen by APPX (Troubleshooting WinAppxD)
(Answer) Winprint won't print to my printer (Troubleshooting WinAppxD)
(Answer) Winprint won't print to printers that are not defined on my NT server (Troubleshooting WinAppxD)
(Answer) Getting an APPX Stack Trace / Disabling Dr. Watson (Troubleshooting WinAppxD)
(Answer) File analysis and recovery.
(Answer) How to move Appx files between platforms.
(Answer) How Appx spawns background tasks.
(Answer) How does executable module (EM) caching work?
(Answer) With APPX ODBC, files stored on the RS/6000 in APPXIO format, accessing the files from a PC using ODBC on the PC with a client like Access, what security is available? Can I use APPX internal security to control what databases/files/records/fields can be "seen" by the ODBC client?
(Answer) Where can I find the BugTracker system?
(Answer) How do you turn on/off AppxDSvc logging?
(Answer) What's the address of the site where we can download the email support archive?
(Answer) Are there any issues with HPUX 11.11 that we need to be concerned about?
(Answer) Excessive CPU utilization when client reboot’s PC.
(Answer) Is there a PDF for the record number in a consecutive file?
(Answer) "Recover"ing data into a consecutive file.
(Answer) I can't connect to a second instance of the database (Sybase, Oracle, etc.)
(Answer) Is it possible to create Indexes in the Dharma tables to improve speed? If yes then how?
(Answer) Is it possible to use specific names for the FIELDS in the Dharma Tables?
(Answer) Are there any tweaks to improve performance when retrieving data using the Dharma ODBC link?
(Answer) Is there a way to synchronize databases in APPXIO with databases kept in SQL Server?
(Answer) Can we update records in APPXIO files using SQL Statements from SQL Server?
(Answer) Is it possible to change the field names that are used by APPX/ODBC?
(Answer) French Characters in Oracle
(Answer) "mm free()-corrupted trailer"
(Answer) Is it safe to remove USAGE.dat and USAGE.key files?
(Answer) When do entries in USAGE.dat file gets removed?
(Answer) Can I export a registration key?
(Answer) In NT 4.0 I have a user named joe@my-company and when I upgrade the os to Win 2K Joe can’t logon. Why?
(Answer) I want to use Appx with SQL Server. Are there any known issues/performance issues?
(Answer) How do I print a query log?
(Answer) How can I move APPX data stored in an FMS group to SQLServer?
(Answer) Is the proxy database id "LOK:" still required when using SQLServer?
(Answer) How can i build up the FMS path for APPXIO data files?
(Answer) List of Environmental Variables
(Answer) Our developers wants to know if Appx has Dharma JDBC Driver?
(Answer) Is there an environment variable that records a log of the user interface?
(Answer) What is APPX_OLD_MODES variable for?
(Answer) Do record locks display when files are in RDBMS?
(Answer) Oracle 9i Performance issues
(Answer) I have an existent RDBMS table and i want to use Field Override feature in the FMS group settings, can i do that?
(Answer) Accessing 2 different schema's defined for 1 instance of Oracle
(Answer) What is the default field mapping for RDBMS?
(Answer) Known issue with SQL Server SP4
(Answer) Storing NULL/blank values in SQL files
(Answer) A Handy list of RDBMS commands for various RDBMS's
(Answer) How to get a list of the files in which your Appx session holds record locks?
(Answer) How can I produce an Appx Event Log?
(Answer) TCP Keep-alive registry entries
(Answer) Why is my sqlcmd log is truncated? In prior versions, I've seen logs with create table lines in excess of 3000 char?
(Answer) Oracle Instant Client and Appx
(Answer) Is Appx a multi-threaded Application? WIll it take advantage of multiple CPUs?
(Answer) How to set the APPX_SQL_CMD to obtain a log of RDBMS activity.
(Answer) How to read the APPX_SQL_CMD Log
(Answer) How to set the APPX_DBG_CODE to log specific RDBMS activity
(Answer) Which external DB still require the proxy database id "LOK" to be set?
(Answer) Orphan Session Detection and possible causes
(Answer) Where can i find information on your Language Translation?
(Answer) New Item
(Answer) Merge and Replace application data files with the Database Management Import utility.

[New Answer in "APPX System Administration"]
2009-Sep-04 5:34pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What rule does APPX / Oracle interface use to decide when a field will be "char" vs "varchar".
The basic rule: if the field is less than six characters long or is a key segment, we use a 'CHAR', otherwise we use a 'VARCHAR'.
You can override that with field-level overrides or by setting "Use VARCHAR for all alpha fields?" to Y (in the FMS group).
[Append to This Answer]
2003-Nov-24 9:17am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Oracle import performance issues.
When APPX imports records into an Oracle database, APPX reads a record from the source file and then executes a SQL INSERT ROW statement to insert the row (record) into the Oracle database. With every insert, APPX executes a commit statement. The environment variable APPX_IMPORT_COMMIT can be set to change the commit frequency if necessary. Example:
                     export APPX_IMPORT_COMMIT=5000
An INSERT ROW statement also updates the indexes that are defined for the Oracle table. Inserting individual rows of data and updating the indexes is probably the slowest operation that you can perform with a database.
Performance of the import operation can be improved dramatically by removing the indexes from the Oracle table. After the data is imported, the indexes can be added back.

Another factor that can have a significant impact on performance is if your Oracle database resides on a different system than APPX. If APPX and Oracle are on different systems, each INSERT ROW statement is going to generate one or more TCP/IP transactions. Moving data thru a network can be painfully slow. APPX always recommends that you install APPX on the same system as your database if at all possible.

The only other suggestion is to have your DBA monitor the Oracle database and verify that all configuration settings that might affect performance are set appropriately.

[Append to This Answer]
2003-Nov-24 9:53am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to import dates from APPX to Oracle.
Internally APPX stores all dates in CCYYMMDDHHMMSSTh format and the routine that creates the comma delimited file uses the CNV TEXT which converts the date to a MM/DD/CCYY character format. This converted format is designed for general exporting and uses the MM/DD/CCYY format because that format is relatively standard for text files. If you are exporting APPX data that is to be imported into Oracle or another database that has the date field(s) defined as CCYYMMDD, you can instruct APPX to format the date in the CCYYMMDD format by setting the date mask for the application you wish to export. There are two ways this can be specified.

You can manually modify the generated CDF update and put the data into the desired format, or;

If you're sufficiently segregated from your other Appx users, you can for the duration of your CDF generation temporarily set the 'Date Mask' on the second screen of your 'Application' record to something like "08070605 04:03.02(01)". Alternately, at the Appx system-wide level, in System Administration, Databases/Applications, Applications, locate the application which contains the update you are trying to run. Highlight that application and press Enter. You should get a pop up for the application and on this window is a Date Mask Field. Set the date mask to 0807060504030201and press Enter. Now when the update runs (for this application only) it will format the date(s) as an internal APPX date which will then match the format expected by your data definitions in the Oracle table.

Don’t forget to change the date mask back after the import.

[Append to This Answer]
2004-Jan-02 4:48pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Why is my RDBMS import so slow?
"I am importing files residing on our AIX platform to an Oracle database on our Solaris platform. The APPX program is running on the AIX platform. "The import runs very slowly, even when processing files with less than 50,000 records. I have taken out all the constraints and alternate keys from the APPX file descriptions in an attempt to speed up the process. Why does it run so slowly, and how might I speed it up?"
==> When APPX imports records into an Oracle database, APPX reads a record from the source file and then executes a SQL INSERT ROW statement to insert the row (record) into the Oracle database. With every insert, APPX executes a commit statement. The environment variable APPX_IMPORT_COMMIT can be set to change the commit frequency which may improve importing performance, for example:
                     export APPX_IMPORT_COMMIT=5000      
An INSERT ROW statement updates the indexes that are defined for the Oracle table. Inserting individual rows of data and updating the indexes is probably the slowest operation that you can perform with a database.

Performance of the import operation can be improved dramatically by removing the indexes from the Oracle table. Check to make sure that the indexes have really been removed from the Oracle table. I know that you removed them from the APPX data dictionary. But, have they actually been removed from the Oracle database? After the data is imported, add the indexes back via Appx restructure.

Having your database reside on a different system than APPX significantly impacts performance. Each INSERT ROW statement will generate one or more TCP/IP transactions. Moving data thru a network can be painfully slow. We recommend installing APPX on the same system as your database if at all possible.

You may want to ask your DBA to monitor the Oracle database and verify that all configuration settings that might affect performance are set appropriately.

ecr #7007


[Append to This Answer]
2003-Nov-24 10:10am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What is a security profile?
Appx has an array of 10,000 yes/no settings ranging from 0000 to 9999. Access to protected processes, files, fields, etc. within Appx is can be secured by setting a value in the security field, usually accessed from the Toolbox/Security selection, of the item you wish to protect. When a user accesses a protected object Appx looks at the corresponding element in the yes/no settings. If the table contains a Y the user can access the process/data/function. If it is set to N then access is denied. A security profile is the definition assigned to a particular group of 10,000 value settings.

Any user not an Appx administrator must be assigned a security profile. Multiple users may use the same profile, such as a PAYROLL profile for the Human Resources department, or a AP profile for all payables clerks.

[Append to This Answer]
2003-Nov-25 5:36pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Cannot see the Oracle database?
We are experiencing a problem with the GUI when accessing the Oracle files. Basically, we cannot see the Oracle database. It seems that when we login via the GUI screen, it does not execute the Unix .profile associated with the users id. This profile contains the information necessary for the user to access the Oracle database (Oracle SID). Is there a place to set the necessary Oracle parameters other than the .profile?
APPX will read two files on startup regardless of whether APPX started from a GUI client or a local command line. The two files are:
                      $APPXPATH/appx.env
                      $HOME/appx.env
You can use the appx.env in $APPXPATH for environment variables that you want shared by all users and the $HOME/appx.env for each user. You should be able to set the Oracle environment variables in one of those files, example:
                      ORACLE SID=APPX
                      APPX DBG CODE=OxFFFFFFFF
                      Etc.

[Append to This Answer]
2003-Dec-01 4:28pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
--- COMMIT MODE PDF hierarchy!
Currently, changes to the --- COMMIT MODE pdf are only recognized when a transaction completes.
This means that if you are in COMMIT MODE=END and you change to COMMIT MODE=PCF CYCLE, the change won't be recognized until your process ends (or until you execute a COMMIT or ROLLBACK statement).
Also, we need to establish a hierarchy (similar to the hierarchy that we use for DEFAULT MODE) that determines the precedence for the COMMIT PDF when you invoke a child process.
[Append to This Answer]
2003-Dec-08 9:40am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to incorporate COMMIT & ROLLBACK into APPX code!
The --- COMMIT MODE pdf has four valid values.  (You may see AUTOCOMMIT as 
well, but it's not implemented yet):

 MANUAL     -  Appx will not automatically COMMIT your changes.  You must use
               the COMMIT statement.

 END        -  Appx COMMITs your changes when the process ends.

 PCF CYCLE  -  Appx COMMITs your changes as you progress from PCF record to 
               PCF record.

 COMPATIBLE -  Appx COMMITs your changes as soon as -all- record locks are 
               released.

Appx never automatically issues a ROLLBACK.  Based on the structure of your 
application, there may be other places where you want to COMMIT a transaction.  
That's what the COMMIT statement is for.  One thing to keep in mind is that the
frequency of COMMITs will affect performance.  The more COMMITs you do, the 
slower your application will be.  For interactive processes, you can probably 
ignore the performance issue, but for batch-mode operations, COMMITing too 
often can really slow things down.

Another issue to be aware of is that AppxIO files do not support transaction 
processing.  If you ROLLBACK a change to an RDBMS-hosted file, any changes made 
to AppxIO will not be rolled back.  Related to this is the issue of visibility.  
Changes made to an RDBMS-hosted file are invisible to other users until they 
are committed.  Changes made to an AppxIO-hosted file are visible immediately.

Appx also supports save-points.  A save-point is a partial transaction.  You 
mark the beginning of a save-point with the SAVEPNT statement - the only 
argument is a name of your choosing. Executing a SAVEPNT tells the RDBMS that 
it should write a marker into the current transaction.  If you find that you 
want to ROLLBACK part of a transaction, you can specify a save-point name in 
the ROLLBACK statement.  The transaction is still open and you can commit other 
changes, but changes made since the save-point was created are lost.
[Append to This Answer]
2003-Dec-08 9:49am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What are the APPX invocation switches?
Example: moz /users/pat> appx –u

Usage: -u                          list these options
       -k                          define a new keymap
       -m=[user_id:]keymap_name  override keymap ID
       -d=<database_id>            override startup database
       -a=<application_id>         override startup application
       -t=<process_type>           override startup process type
       -p=<process_name>           override startup process name
       -i=<flat_file_name>         convert a flat file into UNIXIO format
       -e=<data_file_name>         convert a UNIXIO file into a flat format
       -v=<data_file_name>         verify the integrity of a UNIXIO file
       -an=<data_file_name>        analyze a UNIXIO file
       -l=<log file name>          start a license server

Restrictions:

An application_id and process_type must always be included when specifying 
a process_name.  If an application_id is included without specifying a 
process_type/name, the startup menu for the application will be used.

If no application_id is specified, the startup application and menu for the 
database will be used.  If no database_id is specified, the startup database 
defined for the user within System Administration is used.  If the startup 
database is also unspecified, the Appx main menu is used.

The valid process_types are Menu, Job, Input, Output, Update, Action, Inquiry, 
Query, Status, and Subroutine.  Use underscores (_) in place of any embedded 
spaces within parameters.
[Append to This Answer]
2003-Dec-08 10:01am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Commit parameter doesn’t seem to work?
APPX_IMPORT_COMMIT was added in August of 2000. If your engine build date is later than 9/13/2000, it should include support for APPX_IMPORT_COMMIT.
[Append to This Answer]
2003-Dec-18 2:59pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to connect Appx to Oracle.
Let's assume we have two different hosts, the Appx server host we'll call appxhost, the Oracle server host we'll call oraclehost. They may or may not be the same machine. (But they perform much better if on the same machine.)

You must install a package called "Oracle Client Software" on appxhost. As of Appx 4.1.a, you must install Oracle Client version 8, the version we built our 4.1.a engine against. (ecr #6417, 7008)

Appx connects to Oracle using the Oracle Client software (called the OCI). The OCI must be able to find a few configuration (and localization) files using the $ORACLE_HOME environment variable. (If you don't have $ORACLE_HOME properly defined, Appx displays the error message: "*Oracle initialization failed".) The typical way to define $ORACLE_HOME is to use the oraenv shell script. Just run: ".oraenv"

When Appx connects to Oracle, there are three different ways that the OCI can locate the Oracle server:

 1) Enter a server name in the Appx/Oracle FMS group (either an Oracle
    SID, or the name of a remote server as described below).

 2) If you leave the server name blank, the OCI uses the environment
    variable $TWO_TASK to locate a remote server.

 3) If you leave the server name blank and $TWO_TASK is not defined, the
    OCI uses the $ORACLE_SID environment variable to locate a local
    server.

You use $ORACLE_SID when appxhost and oraclehost are the same machine.
You use $TWO_TASK when appxhost and oraclehost are different machines.

The $ORACLE_SID environment variable refers to an entry in the /etc/oratab file (created by Oracle).

Here's a sample /etc/oratab file:

This file is used by ORACLE utilities. It is created by root.sh and updated by the Database Configuration Assistant when creating a database. A colon, ':', is used as the field terminator. A new line terminates the entry. Lines beginning with a pound sign, '#', are comments. Entries are of the form:

       $ORACLE_SID:$ORACLE_HOME:<N|Y>:
The first and second fields are the system identifier and home directory of the database respectively. The third filed indicates to the dbstart utility that the database should , "Y", or should not, "N", be brought up at system boot time. Multiple entries with the same $ORACLE_SID are not allowed.

     oracle:/opt/oracle/product/9.2.0:N

The $ORACLE_SID here is 'oracle' and the $ORACLE_HOME is '/opt/oracle/product/9.2.0'.

The oraenv script examines the /etc/oratab file. oraenv uses a command named dbhome to find the $ORACLE_HOME location given an $ORACLE_SID

The $TWO_TASK environment variable refers to an entry in the tnsnames.ora file (located somewhere in the $ORACLE_HOME directory tree). Here's a sample tnsnames.ora file:

      ORACLE.INTERNAL.APPX.COM =
      (DESCRIPTION =
      (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = badger.appx.com)(PORT = 1521)))
      (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = oracle)))

This entry defines a server named ORACLE. It also defines a server named ORACLE.APPX.COM). The body of this entry tells the OCI to find the DBMS server using the TCP protocol to connect to the listener running on port 1521 at badger.appx.com. You can refer to this server as 'oracle' or 'oracle.appx.com'.

The OCI supports many different protocols. TCP is probably the most common. On Windows machines, you'll find named-pipe servers. The fastest transport mechanism (which can only be used for local servers) is the bequeath adapter which uses shared memory to communicate between the client (appx) and the server (oracle).

Here's our recommendation for finding all of the magic values you need:

 1) If you know your Oracle server is installed on the same machine as
    your Appx server,
a) Examine the /etc/oratab file to find your Oracle SID
b) Examine the /etc/oratab file to find your $ORACLE_HOME
c) Make sure $ORACLE_HOME is defined in your start-appxd.sh script
d) Create an Oracle FMS group (type 5) and enter the Oracle SID in the server name field
2) If you know your Oracle server is installed on a remote host,
a) Examine the /etc/oratab file to find your $ORACLE_HOME. (In this case, $ORACLE_HOME will tell the OCI where to find config files.)
b) Examine the 'tnsnames.ora' file to find your remote server name. c) Make sure $ORACLE_HOME is defined in your start-appxd.sh script.
d) Create an Oracle FMS group (type 5) and enter the remote server name in the server name field.

Using the APPX/Oracle Connection, providing APPX/Oracle connection setup and operation instructions:

         www.appx.com/assets/asp/dynamic_generator.asp?pageid=605
How to Debug an APPX/Oracle Connection:
         www.appx.com/assets/asp/dynamic_generator.asp?pageid=682

[Append to This Answer]
2004-Feb-13 6:03am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Can I run different releases of APPX on the same server?
Yes however they must be installed in separate directories and not share any information (data files) with each other.
[Append to This Answer]
2003-Dec-31 9:18am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Why is APPX building the EM’s every time?
Permissions can cause this. If Appx can't write out a new EM (because it doesn’t have rights to the directory) it will continue to create EM’s every time a it needs it.
You can also set the environment variable APPX_DBG_VFY to create a log of why APPX is rebuilding the EM(s) each time.
[Append to This Answer]
2003-Dec-31 9:22am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
WinSQL: APPX ODBC debug utility.
Steve Rickley found a great way for customers to debug their ASQL import errors during our Web Interface class. There is a free tool called WinSQL (www.imranweb.com/freesoft.htm).

The main use of this tool is to attach to any ODBC data source and let you browse and run SQL commands. Steve found that it had an option to OPEN a text file containing SQL commands. So, when he got an ASQL syntax error, he started WinSQL and had it open a file that ASQL automatically created. The file contained the SQL that ASQL generated. When the SQL from this file was loaded into WinSQL, it syntax highlighted the exact syntax error and I think have a message about what was wrong with the offending syntax.

The really cool part was that Steve was able to fix the syntax in WinSQL and have WinSQL execute the create table as modified. Then the table worked with APPX in it's modified fashion without having the change the offending field name in the APPX database.

This was a great debugging tool. And also a great tool to correct errors in field names without having to change the APPX data file and field names. AppxODBC does not match up by field name, so this worked.

WinSQL is also useful for debugging our SQL Server (via ODBC) connection (www.appx.com/pub/documents/odbc.ConnectionInstructions.txt).

There are many protocols SQL Server can use. (TCP/IP, named pipes, LocalServer, ...) The client (the ODBC data source) and the server must be speaking the same protocol.

WinSQL is good at passing through error messages that our APPX/ODBC connection might filter out. Thus, it's a good debugging tool if you're unable to get APPX for Windows to talk successfully to an ODBC / SQL Server backend to APPX.

Sometimes, you can get APPX/ODBC connection working over 'LocalServer' DSN, where it might not work properly with a manually created DSN. This could be because Local Server uses a simple protocol. Client & server know automatically which to use.

(Under ODBC , you have to have a listener set up for each protocol. The client has to know which protocol, plus addressing and identification info. For example, you may have to have a TCP/IP listener (with IP address & port#).)

[Append to This Answer]
2003-Dec-31 12:56pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to track “Record Held by Another User"
You can instruct AppxIO to track lock holders on a file-by-file or FMS Group basis:

Include the text "track_locks" (without the quotes) in an FMS control string. APPX will record extra information in the file whenever a record is locked. There is a performance penalty of two extra I/O operations per READ with HOLD when you use this flag, so you may want to apply this flag selectively, through 'Edit File Specifications'.

'track_locks;' is defined for individual files in Appl Design > Tools Tab > Database Management > File Specification > File Attributes. 'track_locks;' is defined for whole databases using SysAdmin > Config > File System Groups > 'FMS Group Attributes', and SysAdmin > DB/Appl > DB/Appl > 'FMS Group'. (It is not defined as an environment variable.)

Appx displays the user's three-character UserID on an ILF 'READ with Hold', whenever it waits more than 10 seconds for a lock.

APPX will *not* wait for or display User-holding information for records attempting to be held by INPUT processes, in either Change or Delete mode. Instead it goes into 'Chg/Inq' or 'Del/Inq' mode and displays a generic 'This record held by another user'. If however you execute a Read with Hold from ILF within such an INPUT process, APPX will display the holding user's UserID.

On Unix systems, you will see a process ID even if you don't use 'track locks'. There is no performance penalty for this.

On Unix systems' INPUT processes, you can also run 'fuser -u {filename}' to determine who has a given file open.


If you get the "Record Held by Another User" message on application design files (such as in the OUTPUT editor), you can use the following code in a SUBR within that application:
      BEG READ 0AD PROCESS                HOLD 1 KEY IS  PROCESS KEY
      END READ 0AD PROCESS
You can hold (but not write, rewrite or delete) 0-app file records. The above code attempts to lock every PROCESS file record. If it gets hung on a Process for more that 10 seconds, it generates the message:
 Waiting for lock held by APX in /usr/appx/data/00/SUR/Data/PROCESS.dat
or
 Waiting for lock held by session 9999 in /appx/data/00/SUR/Data/PROCESS.dat
You get the former if "track_locks;" is defined in an FMS group referenced by the application's Application record in System Administration.

You get the latter if there is no "track_locks;". This could be more useful, as it tells you *which* APX user session holds the lock.


You can also use the lsof (or fuser) commands to find information about open files. lsof shows you all files currently opened by a given process, or it can show you all processes that have opened a given file.

lsof and fuser are available on Linux and Unix systems. Windows systems use 'Process Explorer':

 Windows - use SysInternals.com's Process Explorer utility:
           http://www.sysinternals.com ... look for "Process Explorer"
AIX - http://aixpdslib.seas.ucla.edu/packages/lsof.html

 HP/UX   - http://hpux.cs.utah.edu/hppd/hpux/Sysadmin/lsof-4.70

 Red Hat Linux - part of the lsof RPM package

 Solaris - use the fuser command instead of lsof

[Append to This Answer]
2006-Nov-21 5:04pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How APPX License counts WS's
If you are logging in with an APPX Client (i.e. from Windows using the APPX Client), we count IP addresses (and allow up to 4 duplicates).

If you log in from a dumb terminal, we count the tty name. If you can somehow arrange for the tty names to be the same between to tty sessions, we will only count you as one user (again, allowing up to 4 duplicates).

That's a little hard to understand, so here's the test: Log into APPX, then press Option-99 from the main menu, then Option-1. Look at the Workstation name. Then do the same in another session.

If the Workstation names are identical you are only consuming one user-right. If they are different, you are consuming two user-rights.

[Append to This Answer]
2004-Jan-02 10:39am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to reprint a print file?
How can I easily reprint a file that's has been requeued (saved in the print
directory) without using the winprint from the dos prompt?  The file in
question is checks.  Once you print them you can't rerun the process.  
I cannot use the winprint command from dos because I need to grab the form 
file so it spaces everything correctly.

When you requeue an APPX report, it leaves the print file and a configuration 
file in the user's print directory after they've been submitted to the print 
spooler.

For example, when printing a System Administration list, the print file might  
be SYSADMI0 and the configuration file SYSADMI0.cfg

If you wanted to reprint this report, you might submit commands like the  
following:

If you are on Windows:

     cd  C:\appx\data\PRINT\USR
     C:\appx\data\winprint.exe  -config=SYSADMI0.cfg  SYSADMI0
or
     C:\appx\data\winprint.exe  -config SYSADMI0.cfg  SYSADMI0

The general form is:

     winprint.exe  -config=<config.file>  <print file>
or
     winprint.exe  -config <config.file>  <print file>

For those on Unix/Linux:

/usr/local/appx/data/appx_print -config=/usr/local/appx/data/PRINT/USR/SYSADMI0.cfg
/usr/local/appx/data/PRINT/USR/SYSADMI0

You can construct and issue shell (DOS) commands by means of the RUN command. 
You'll find documentation for it in the Designer Reference Manual, and at 
www.appx.com/pub/documents/HowTo/run.Windows.Functions.html 

The print file name can be found in --- PRINT FILE PATHNAME.  You'd be well
advised not to operate on the file pointed to by --- PRINT FILE PATHNAME, 
until after you've exited the OUTPUT process that generated the print file.  
This means passing the contents of --- PRINT FILE PATHNAME to a subsequent 
job step, possibly by means of a related or detached work field.
[Append to This Answer]
2007-Feb-27 10:57am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Message: "Building Dynamic Index"
A user receives when running a process, the message:

       Building Dynamic Index

       You are building a dynamic index for
       a possibly large number of records.

       This process may take a long time.
       Please CANCEL to stop building index.
       Press RETURN to continue.

What exactly makes this message occur? How big does a file have to be before this occurs?

This message is displayed while APPX is building a requested dynamic index after indexing 1000 records. The administrator can adjust the record count by setting the environment variable APPX_DYNAKEY_PROMPT. For example:

        APPX_DYNAKEY_PROMPT=5000

Dynamic indexing (not just the prompt, but all of the capability) can be disabled altogether by setting the variable:

        APPX_DISABLE_DYNAKEYS=yes

[Append to This Answer]
2004-Jan-07 11:06am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Oracle-Store blanks, not NULL !
How can one force blanks into null fields, when converting Appx to the Oracle Database?
If an Appx alpha field contains all blanks and the database field allows NULL values, then Appx stores a NULL value in the corresponding database field. If the database field does not allow NULL values, then Appx stores spaces in the database field. If you don't want Appx to store null values in he field, make sure that the database field has the NOT NULL attribute set.

You can use the field override option in the File Specifications to specify that null values are not allowed. Do this before running Create Files to create the table.

[Append to This Answer]
2004-Jan-05 4:26pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Where is Java/Client cache?
Following are locations for the Appx/Client cache directory (which stores GUI information downloaded from the Appx/Server, so it doesn't have to download the same GUI information more than once.)
Under Windows 2K:
  C:\Documents and Settings\{yourWindowsID}\.appx\cache\
Under NT:
  C:\WINNT\.appx\cache\
Under Unix & Linux:
  $HOME/.appx/cache/
To find where the .appx\cache directory should be on a client, run the Appx/Client, then find (Xref) home\appxlog.txt, which shows the cache directory location, after you log into a server.
[Append to This Answer]
2004-Apr-02 4:44pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Importing big Oracle tables!
If your tables are large &/or have numerous indexes, the following can speed up the import significantly:

After using APPX to create the table in Oracle (and presumably other RDBMS's), use SQL PLUS or any other DBA tool to drop all the table's indexes. Then import the data -- it will import much faster.

Important: Your Appx import should use the "merge" option. Otherwise, APPX scratches/creates before importing, recreating the indexes that you just dropped, and eliminating the performance boost you want during the import.

After importing, tell APPX to 3)Create the table again. APPX won't create the table since it already exists, but will create the missing indexes much more quickly than if you had built the indices one row at a time.

[Append to This Answer]
2004-Jan-05 4:25pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What is my AppxODBC version?
Method #1:  Start > Settings > Control Panel > Administrative Tools >
                    Data Sources (ODBC) > Drivers Tab > Version


Method #2:  Windows Explorer > {your Windows Directory} > System32 >
                    AppxODBC.dll > Properties > Version Tab > "File
[Append to This Answer]
2004-Jan-05 4:27pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to use recover.exe!
A quick recommendation:

` 1) Move FILE.dat and FILE.key to FILE.bad.dat and FILE.bad.key

` 2) Execute:

     IF  you are on 4.1:
     recover  FILE.bad.dat  FILE.dat > FILE.corrupted
If you are on 4.2: appx -recover FILE.bad.dat FILE.dat > FILE.corrupted

` 3) Display FILE.corrupted

` 4) Rebuild your keyfiles (run 'Create Files').

This allows the original corrupt files to be maintained as ".bad." files,
in case additional data recovery is desired later.

For full instructions see: http://www.appx.com > Support >
> Special Topics > System Administration > File Analysis and Recovery
(http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=624)
and (Xref) "Recover"ing data into a consecutive file..
`

Bruce Johnston Jan 14, '04:
FOR THOSE OF YOU ON WINDOWS, here're a few .bat files in a .zip to help you do this.

They assume that they and the recover.exe reside in D:\APPX\Tools and that D:\APPX\Data is the starting path for your .dat and .key files so you might have to edit them accordlingly.

One is standalone, rebuild.bat, and it is for doing the cmd line work on a single file.  It's syntax is
rebuild ver_or_db app datfilenamewithoutextension
No wildcards allowed for this one!

The other four are invoked in sequence rebuild1 ... rebuild4 with rebuild1 being invoked from the command line as
rebuild1 ver_or_db app datfilenamewithoutextension
but, in this case, all three parameters may contain dos wildcards
e.g.
rebuild1 01 T?? *
should run recover against all of the design files in the T-Apps, assuming no file locking issues.
and,
rebuild1 TST * C* would run recover againt the TST database for all files starting with "C" across all applications.

Hopefully, I'll be able to upload rebuildx.zip after completely this...
That didn't work so here're the .bat files:

rebuild.bat
>>>
d:
cd\appx\data
cd %1
cd %2
cd data
del %3.ke0
ren %3.key %3.ke0
del %3.bad
del %3.del
del %3.da0
ren %3.dat %3.da0
d:\appx\tools\recover %3.da0 %3.dat %3.del > %3.bad
cd..
cd..
cd..
<<<


rebuild1.bat
>>>
REM     Receives %1 = 1st level below APPXPATH (Company or Version)
REM              %2 = 2nd level below APPXPATH (Application)
REM              %3 = .DAT file spec WITHOUT the extension
REM     Wildcards permitted at all three levels.

REM     Note that the "/d" usage in the FOR commands implies
REM     that the command line extensions in NT server be supported.

REM     Make sure that "d:\appx\tools" is changed to match the path to
REM     you own .BAT files. AND RECOVER.exe

d:
cd\appx\data
for /d %%d IN (%1) DO CALL d:\appx\tools\REBUILD2.bat d:\appx\tools %%d %2 %3
<<<


rebuild2.bat
>>>
REM     REBUILD2.bat
REM     CALLed from REBUILD1.bat 
REM     Receives %1 = path to REBUILD3.bat and RECOVER.exe
REM              %2 = 1st level below APPXPATH (Company or Version)
REM              %3 = 2nd level below APPXPATH (Application)
REM              %4 = .DAT file spec WITHOUT the extension

cd .\%2
for /d %%d in (%3) do CALL %%1\REBUILD3.bat %1 %%d %4
REM     In case dir structure or wildcards were wacky
REM     Force a return to where REBUILD1.bat started us.
cd\appx\data
<<<


rebuild3.bat
>>>
REM     REBUILD3.bat
REM     CALLed from REBUILD2.bat 
REM     Receives %1 = path to REBUILD4.bat and RECOVER.exe
REM              %2 = 2nd level below APPXPATH (Application)
REM              %3 = .DAT file spec WITHOUT the extension
if not exist .\%2\data goto ENDBATCH

cd .\%2
cd .\data
for %%f in (%3.dat) do CALL %1\REBUILD4.bat %1 %%f
cd..
cd..

:ENDBATCH
<<<


rebuild4.bat
>>>
REM     REBUILD4.bat
REM     CALLed from REBUILD3.bat 
REM     Receives %1 = path to RECOVER.exe
REM              %2 = .DAT file spec
REM
REM     Thanks to Paul Peterson, (ppeterson@utahsbr.edu)
REM     I know that %~n2 returns the file name
REM     WITHOUT the extension which he learned from
REM     (the?) Windows NT Scripting Administrators Guide
REm             by William R. Stanek

del %~n2.ke0
ren %~n2.key %~n2.ke0
del %~n2.bad
del %~n2.del
del %~n2.da0
ren %~n2.dat %~n2.da0
%1\recover %~n2.da0 %~n2.dat %~n2.del > %~n2.bad
<<<
[Append to This Answer]
2006-Jan-17 8:49am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Message, “Can't access named resources”!
The following assumes a unix or linux server:
 a) Verify that the files are indeed OK.
b) cd $APPXPATH/vv/aaa/ where "vv" is the version and "aaa" is the application id
c) chmod 777 Resource
d) chmod 777 Resource/*
e) rm -f Em/*
f) rm -f Dbg/*
g) On your local client system, remove the ".appx" cache directory tree. It should be in your home directory. If you look at (Xref) home\appxlog.txt file in your client directory, it will have a log line with the path to your local .appx cache directory.
h) Check that the case of the filenames in the resource file exactly match the case of the filenames on disk.
i) Try to load the screen again in the image editor
j) If it still fails, email (Xref) home\appxlog.txt as it exists right after killing the client from a lockup, to techsupp@appx.com.
`
[Append to This Answer]
2004-Apr-02 4:48pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
AppxODBC & Appx Security
With APPX ODBC, files stored on the RS/6000 in APPXIO format, accessing the files from a PC using ODBC on the PC with a client like Access, what security is available? Can I use APPX internal security to control what databases/files/records/fields can be "seen" by the ODBC client?

Yes. When AppxODBC logs into your RS/6000, it provides a user name and password to AIX. We use that user name to control security within Appx.

[Append to This Answer]
2004-Jan-05 4:32pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Can I reserve an application lock?
We don't have a subroutine that can be called from within an application to reserve a lock.
[Append to This Answer]
2004-Jan-05 4:58pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Which Windows version are we?
A client needs to intercept the Operating System type in Appx. The subroutine "GET OS TYPE" returns the type of OS (Unix, Windows) but is there another subroutine to get the type of Windows OS (WIN 95, 98, 2000, NT, XP) ?

Here's one way:

NT, 2000, and XP all set the OS environment variable OS=Windows_NT

  If OS is set, then your operating system is NT, 2000, or XP
If OS is not set then your operating system is 95/98/ME
If OS=Windows_NT, and the variable "ProgramFiles" is set then you have an operating system that is 2000 or XP, else your operating system is NT.

Here's another way:

Define a DOMAIN called DWORD, numeric, 10.0 digits, signed, storage-type = binary. (This is important, it must be exactly that format).

Define a one-record working storage file (I called mine 1EX VERSION) with the following structure (note - each DOMAIN field is defined by the DWORD domain):

     Seq No  Field Name          Field Type Format
     ======= =================== ========== ======================
     100     VERSION SIZE        DOMAIN     S9(10)
     200     VERSION MAJOR       DOMAIN     S9(10)
     300     VERSION MINOR       DOMAIN     S9(10)
     400     VERSION BUILD       DOMAIN     S9(10)
     500     VERSION PLATFORM    DOMAIN     S9(10)
     600     VERSION CSD         ALPHA      X(128)

The following ILF should populate the VERSION record for you:

      SET      --- TEMP 80                    =      kernel32.dll,
      APPEND   --- TEMP 80                    0      GetVersionExA
      *
      SET      1EX VERSION SIZE               =      148
      PASS     1EX VERSION                    RECORD           SHARE? Y
      CALL     --- TEMP 80                    RESIDENT? N  END? N  FAIL 0

If --- RETURN CODE is not equal to 0, the VERSION record should be filled in.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/sysinfo_49iw.asp (all one URL) has more information about the GetVersionEx function and the contents of the OSVERSIONINFO structure.

[Append to This Answer]
2004-Jan-05 5:19pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Message; “Invalid Native File Management System”
I am trying to create an Oracle (9i) file through APPX file management and I’m getting the error message, “Invalid Native File Management System” on the Create Files screen. What does that mean?
You are probably not running the appx.oracle engine. You are probably running the standard appx engine.
[Append to This Answer]
2004-Jan-07 11:05am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
File fragmentation.
Extensive file activity can lead to thousands of fragment per file, over time. This cannot help performance and could lead to problems. In lieu of a script to periodically verify and (if no errors found) export and re-import all of the files for all version and application or database and application combinations or the pain of full backup and restore, some use Executive Software's DiskKeeper product to do this task, say, after every full nightly backup.

ASI has not tested and in no way warrants this software.

Bruce Johnston Jan 14, '04: Related to the file system under Windows NT, you may want to consider preventing the O/S from updating one of the file/folder attributes that, by default, is updated EACH AND EVERY TIME THAN IT IS ACCESSED FOR WHATVER REASON. APPX installations have easily have tens of thousands of files and folders lurking beneath \APPX\Data and asking the O/S to update the file system with the information doesn't really seem worth it IMHO.
Reg Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem Procedure: Add Value name NtfsDisableLastAccessUpdate of type REG_DWORD. Set it to 1 to prevent the LastAccess time stamp from being updated.
Under Windows 2000 (and ???) you might also want to consider disabling the NTFS disk file indexing at at least the \APPX\Data level and include the subdirectories. How often are you really going to search the drive/data for "foobar" from the server console?
You might want to refrain from doing this if you actually use APIs to dig out this information or if your APPX server is doing other things as well. I've had this set for years now with not observed ill effects.

[Append to This Answer]
2004-Feb-05 6:43pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Printing to a printer produces blank pages.
Printing to certain printers through winprint.exe can cause the printer to eject lots of blank pages, rather than the desired APPX OUTPUT file. This can be caused by the printer driver not knowing from NT's Forms database the page size of the current form, and returning a form length of zero to winprint.exe. This can be diagnosed by setting the environment variable WINPRINT_DEBUG=C:\winprint.txt from the DOS command prompt, then manually running winprint against an APPX generated printfile.

To override the NT form length, enter into your APPX FORM table's FORM CONTROL attribute: -form_id=Letter

A complete list of valid form_ids can be seen by clicking on winprint.exe from Windows Explorer.

[Append to This Answer]
2004-Jan-09 10:11am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
APPX.EXE process is consuming 95%
I look in my NT task manager and see that an APPX.EXE process is consuming 95% (or more) of the CPU. Why do I get these runaway processes?
A process using large amounts of CPU is not likely to be a "runaway" in the sense that it is malfunctioning, and is out of control, taking over your computer. What IS likely, though, is that it is an OUTPUT, or UPDATE, or some other process which takes a while to run, and does lots of I/O and/or data processing. (Designers, Cross Reference has been known to do this when run across multiple large apps). Until the process finishes, it will likely keep using a large percentage of CPU time, simply because that is how NT chooses to allocate CPU time. (The strategy seems to be, "Oh, you don't need any keyboard input? Good, I'll let you keep busy, since you seem to be making lots of progress." This is NT doing what it thinks is the right thing -- APPX has done nothing to raise the priority of these processes, or lower the priority of others.) The best thing to do is just be patient.

Some users have reported that it really helps to run on a multi-processor system, so that even if you have one or two of these CPU-hogging processes running, there is still likely to be a CPU which is not as busy.

Bruce Johnston, Jan 14, '04: One cause of an input hogging a cpu may be inappropriate use of --- ALTERNATE IMAGE NUMBER. It's been a while but a few processes that I had might set this to zero when the series was hit subsequent to pressing F4. Look at this carefully and always set it to a valid value at the beginning of the ILF series before any logic which might change it.
[Append to This Answer]
2004-Jan-14 7:29pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
The command-line "kill" too time-consuming and error-prone. Is there a better alternative?
APPX user, Bruce Johnston, has put together a suite of utility processes he uses in the day-to-day administration of his APPX server. One of these utility processes is a "kill" utility reminiscent of similar functionality found on Wang systems.

While ASI has not tested and in no way warrants this software, it has been available for some time now, and we have heard no negative feedback regarding it. You might want to check it out at www.cansyswest.com/nt_utilities.htm and see if serves your needs. Please be aware that if you install this package, ASI cannot provide support for its functions, since we did not write it. (Caveat emptor, and all the other precautions that normally go along with free and/or user-supported software).

Bruce Johnston, Jan 14, '04:
Be advised that I've recently discovered a problem with the kill-related portion of the utilities.
NT Admins are still allowed to kill any APPX process that they see in the APPX input and non-Admins are supposed to be able to kill sessions under their own APPX id.
I've found that this second bit was only working because, during the process of getting to work several years ago, I'd given the Advanced NT User Right "Act as part of the operating system" to the APPX user group. I discovered this after removing that right from the group and then learning that users could no longer kill their own orphaned sessions.
There are a number of security concerns about this as documented by Microsoft at http://www.microsoft.com/msj/0899/security/security0899.aspx
At some point I hope to change the utility so that the kill requests is not actually attempted by the APPX code but is instead forwarded via a file to an APPX process running as a service under an Administrator group account and have that service periodically check for processes to kill.
In the meantime, if your users have never been able to kill there own sessions, this is probably why not. If they have and you're worried about the potential exposure if code were ever run on the server by a user with this right which contains routines which may exploit the hole, you would want to consider reoving this priviledge.


[Append to This Answer]
2004-Jan-15 8:45am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How can I determine which APPX.EXE processes on my server are orphans?
"View Registration usage" within the System Administration Registration editor, in APPX versions 4.0.a and higher, will let you view PID (Process ID) by User. Once you have identified which processes on the server are orphans, you can kill the using the standard mechanisms described earlier.
Bruce Johnston Jan 14, '04: For those of you that run WinAPPXD or the new APPXDSVC under multiple ports there's a nice (free AFAIK) utility that I've come across called prcview.exe at http://www.teamcti.com/pview/prcview.htm
With it you can learn a number of things about what's going on on your server and one of the nice ones is a view that shows you a process tree. This means that you can see which appx PIDs are running under which instance of WinAPPXD/APPXDSVC especially if you're running under the copies of the exe whose names reflect the port being serviced.
I'd often see a number of APPX sessions in the task manager but nothing under the USAGE log. It turns out that they were all running under another port which only serviced the appx-in-a-browser connection and tha the users were exiting the browser window without shutting down appx.
[Append to This Answer]
2004-Jan-15 8:47am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
All of my users except for one have gone home for the night, and I am sure they have turned off their PC's. I still see three (or four, or ten) APPX.EXE processes in the server's task list. Why are they there?
ONE will be there, because it is the APPX License Server. Some installation maintain a separate copy of appx.exe called AppxLicS.exe (for example) and invoke this copy to start the License Server. This keeps the task separate from (but close to) the group of APPX tasks in the NT Task Manager's list."

At least one other server side process will be there to service your remaining user's connection. (If the user has more than one APPX Client session running, there will be one server side process for each Client session.)

Generally, the others are there because users did not properly exit the APPX client (END'ing until the APPX Client window disappears). For example, they may have just hit the power switch or executed shutdown on their PC without properly exiting APPX. In the APPX world, we refer to these leftover server APPX.EXE's as "orphans". It is probably a good idea to look for and kill orphan processes from time to time, particularly if your system goes days or weeks without a reboot (which would remove the orphans).

If you're running APPX 4.0.a or higher, you should set environment variable APPX_LS_GHOSTS=True. This will cause the APPX License Server to perform periodic cleanup of the APPX usage register, and may help keep the number of orphaned sessions down.

Bruce Johnston Jan 15, '04: Observation: while I've seen APPX do a fair job at toasting server sessions when the client side dies unexpectedly there is one instance in which it will fail to do so, 100% of the time AFAIK.
Up to appx-in-a-browser 4.18, if the user simply uses the "X" to close the browser window then the server session will never get blown away.
Someday I should update BJUtils and put out something which would blow away (such) sessions that have been active for, say, 24 hours or more.
[Append to This Answer]
2004-Jan-15 8:43am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
A user just called me to say that her APPX Client window just disappeared, or there was a power outage or system malfunction, that caused their APPX Client session to end unexpectedly. Do I need to do anything?
It would be a good idea to verify that the server-side process attached to that client session has terminated, and if not, kill it manually.
[Append to This Answer]
2004-Jan-09 10:25am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I manually kill an APPX server process?
In many instances, an APPX server process may be killed by doing the following:

Go to the server on which WinAppxD and the APPX server processes run, and log in as Administrator. Bring up the NT task list, and look for an APPX.EXE listed with the process ID you want to kill (usually, this will be one given to you by the user, from their client's Windows title bar). Highlight it and click "End Task".

If another box pops up, saying that the application is not responding, click "End Task" there as well.

Hopefully, this will result in that process disappearing from the task list. If a process refuses to be killed in this way, it is time to take more drastic measures.

If you can't kill the process via the Task Manger, try using the NT Resource Kit's "kill" command. (You probably have this installed, since some utilities from it are required to install and run WinAppxD. Do a Find for "kill.exe" if you can't locate it.) The Resource Kit "kill" command is very effective, and using it is expected to kill the process even if the Task Manager method did not. (You must be logged in as Administrator to do this.)

[Append to This Answer]
2004-Jan-09 10:26am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
The user process is hung, and I haven't been able to resolve the problem, so I need to kill that client/server session. How do I do that?
First, have the user try again to END and CANCEL out of their process, to make sure that it is not possible to resolve this any other way.

Have the user tell you the number which appears in their APPX Client title bar (they've presumably done this already, but in case they haven't, now's the time to ask). That is the NT PID (process ID) of the SERVER process to which this client is connected. Once you have the PID, but not before, instruct the user to bring up their Windows Task List, and select the APPX process, then click on "End Task". It may pop another box up, saying that the process is not responding. Instruct the user to click "End Task" on that box as well.

Wait a minute or two for an orderly shutdown of the server-side process connected to the client. APPX should detect that the client has disappeared, and end the server process.

If after waiting several minutes, you still see the server-side process ID in your NT server's task list, you will need to manually kill the server-side process.

[Append to This Answer]
2004-Jan-09 10:27am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What should I do when a users APPX session is hung?
First, have the user tell you the number that appears in their APPX Client title bar. This is the NT PID (process ID) of the SERVER process to which they are connected. Go to your server, and verify that there is an APPX.EXE process with that PID on your system in the task list.

If there is no process listed in your server's task list with that number, double-check with the user that you're looking for the right one. Once you are sure that it isn't there, you have a situation in which the client process exists and the server process doesn't. Instruct the user to "End Task" on his APPX Client session via the Windows Task Manager. It may pop another box up, saying that the process is not responding. Instruct them user to click "End Task" on that box as well.

If the server-side process does appear in your server's task list, then you have more sleuthing to do.

Find out what the user was doing. Do they see any error messages on their screen? What process are they in? How long have they been waiting for a response from the system? Try to find out if they are doing anything that requires locking a record (they probably are). (The user himself may not know the answer to this. Refer to your application for the final word.) If so, try to find out if that record is likely to be held by another interactive user, or perhaps a JOB that is batch updating a series of records. In many instances, even if the user does not receive a message to the screen, the culprit of these hangs is that their process is trying to access a record held by someone else. (If, for example, the INPUT calls an UPDATE as an automatic process, and that UPDATE runs into a locked record, it will silently wait for that record to become available, without advising the user.)

If it is possible that they are waiting for a lock, check with other uses and see if you can discover (and then eliminate) the source of the lock conflict.

APPX user, Bruce Johnston, has put together a suite of utility processes he uses in the day-to-day administration of his APPX server. There are a couple of methods for determining who has which files open. While it cannot tell you who has which records locked in which files due to NT O/S design limitations, it can point you in the right direction. Remember also that the system might just be slow. Check to see what system performance is like, before assuming that their process is actually paused, as opposed to just running slowly.

ASI has not tested and in no way warrants the utility software from Bruce Johnston, it has been available for some time now, and we have heard no negative feedback regarding it. You might want to check it out at www.cansyswest.com/nt_utilities.htm and see if serves your needs.

If you were unable to narrow the situation down to lock contention, and solve it, and are also certain that the process is not just running slowly, it is time to look at killing the process.

[Append to This Answer]
2004-Jan-14 2:24pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What can I do if WinAppxD gets stuck regularly?
Many customers have increased the availability of WinAppxD by installing multiple WinAppxD services (WinAppxD as originally installed, plus nearly exact copies of it as WinAppxD2, WinAppxD3, etc.). These differ only in the port used by each one. For example, WinAppxD may listen on port 8060. WinAppxD2 may listen on port 8061. WinAppxD3 on port 8062. Once you have set up multiple WinAppxD services, you can instruct your users to change their "Server Port" (in the login dialog) to one of the alternate port numbers, if they experience difficulty connecting to the default port number.

You may wish to copy WinAppxD.exe to names like Appx8060.exe, Appx8061.exe, etc., in order to keep them grouped together under NT Server's Task Manager. In any case, we recommend that you run multiple APPX/Servers, due to the increased level of fault tolerance it provides. Instructions on setting up WinAppxD services are in the APPX Presentation Client/Server Installation Guide.

Multiple WinAppxD services on different ports invoked from batch files is also a way of changing the main environment variables for, for example, running two versions and data sets in parallel, or using a different APPX_KEYMAP when attaching from another device type such as handheld RF scanners through a telnet session via a LINUX box.

[Append to This Answer]
2004-Jan-09 10:28am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
When might I want to stop and restart WinAppxD (either with, or without, a reboot)?
If you experience the following scenario on your network, you probably need to stop and restart WinAppxD (Note that existing users can continue to work in APPX.):

Client(s) are trying to login to APPX and hang after entering their login information. (APPX may eventually come back and say, Cannot connect to host.)

Having the user logout, and try to log back in again, to make sure that the situation is not due to exceeding your licensed user count, results in that user not being able to log in. Also, if you bring up an NT task list, and do not see WinAppxD.exe in the list, that is an indication that it has already stopped (either you stopped it, or it ran into an error condition and ended itself), and needs to be restarted.

Once again, restarting WinAppxD without a reboot is not guaranteed to work, due to NT TCP/IP implementation. The existence of "Stop" and "Start" buttons in the Services Control panel applet does not mean that these functions work 100% of the time.

[Append to This Answer]
2004-Jan-09 10:29am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is it safe to stop WinAppxD, if I'm going to need to restart it again without rebooting my server?
MAYBE. Sometimes you can stop WinAppxD, then manually start it again, and everything will work fine. However, sometimes the manual restart process is not successful. This appears to be due to NT not properly releasing the port (usually 8060) when WinAppxD is stopped. If the port is not released, when WinAppxD restarts and attempts to recapture it, it can't, so client logins won't be accepted.

See "My WinAppxD gets stuck regularly ...” for a workaround to this. It may be a very good idea to set up Multiple WinAppxD servers as a fallback position, in case you unexpectedly get a hung port condition.) If the restart fails, you can try stopping WinAppxD again (if one started during the restart process) and restarting it again. If a WinAppxD.exe does not reappear in the task list, or if it appears but client logins are not accepted, at this point, your only option is to reboot.

We don't have any figures as to what percentage of the time this is and is not successful. In general, if you stop a WORKING WinAppxD, and expect to be able to restart it without a reboot, YOU ARE TAKING A CHANCE. It may or may not work, due to NT. If you stop a malfunctioning WinAppxD in the hope that restarting it will resolve the error condition without a reboot, you have nothing to lose. In that case, it is definitely worth a try. (You must be logged in as Administrator to do this.)

[Append to This Answer]
2004-Jan-09 10:30am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I stop WinAppxD?
WinAppxD automatically stops when the system is shut down or on its way to a reboot. If you want to manually stop WinAppxD before that point, you MAY be able to stop it through the NT "Services" Control Panel applet, by selecting WinAppxD, and clicking "Stop". Wait a moment or two, then bring up the task list and verify that it is no longer listed.

If after several minutes, you still see WinAppxD in the task list, you can try a more "drastic" measure and try to "End Process" the WinAppxD.exe entry in the task list. It's several minutes after that, and it's still there? The most drastic way of stopping WinAppxD, if you have the NT Resource Kit installed, is to use the kill.exe command provided by the Resource Kit. (Hint: You probably have this installed, since some utilities from it are required to install and run WinAppxD. Do a Find for "kill.exe" if you can't locate it.) (You must be logged in as Administrator to do this.)

[Append to This Answer]
2004-Jan-09 10:31am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I start WinAppxD?
WinAppxD is normally started automatically by the system when it boots. See this document for detailed Installation and Configuration instructions.

If you don't want WinAppxD to start automatically (for example, if you wish for the system to boot without allowing APPX logins), you can set the Startup Type for the WinAppxD service to "Manual" in the NT "Services" Control Panel applet. Then, you can reboot the system. If you check the NT task list at this point, you should not see WinAppxD in it. To manually start WinAppxD, go to the NT "Services" Control Panel applet again, select WinAppxD, and click "Start". Wait a moment or two, then bring up the task list and verify that it is there. (You must be logged in as Administrator to do this.)

[Append to This Answer]
2004-Jan-09 10:32am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How can I verify that WinAppxD is running?
Bring up the NT Task Manager. Look for a process named WinAppxD.exe. If you see it, WinAppxD is running. (Note: this does not necessarily mean that WinAppxD is running properly, as a WinAppxD with a hung port will still appear in the task manager. This is mainly useful to do, to verify that WinAppxD is at least starting successfully.) If this process is not present in your task list, client logins cannot be accepted on your APPX server.
[Append to This Answer]
2004-Jan-09 10:33am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What is WinAppxD, and what is it used for?
WinAppxD is the NT implementation of <APPX name for this functionality>. Its purpose is to monitor a user-defined port number for connection requests from clients, such as the APPX Client or AppxNET (used for APPXODBC across the network as well), then validate the client's login and password, and start an APPX Server session connected to that client.

After the user authenticates and is connected to a server-side APPX session, WinAppxD has nothing further to do with that client/server session. If WinAppxD is killed, ends with an error, or experiences a hung port, this will not affect users who have already established APPX client/server connections. (A problem with WinAppxD is the most common cause of the error situation in which no new users can login, but users who are already logged in, can continue to work.)

[Append to This Answer]
2004-Jan-09 10:34am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Getting 'ps -ef' original UserID in Linux
Customer's "ps -ef" on their AIX box gave the User's actual user ID, whereas "ps -ef" under Linux always gives the 'Appx' UserID. The customer uses the ps -ef for Appx user management. Is there a way to get the process user's original ID, so they can do this in Linux?
.
Place the following shell script in /usr/local/bin or /bin. Then pipe the output from appxps into "grep appx" to get a list of all Appx processes:
.
> # which appxps
/bin/appxps

> # cat /bin/appxps
#!/bin/sh
ps -axwo ruser,pid,ppid,c,stime,tty,time,args

> # appxps|grep appx
root     1573     1 0 Jan11 ?     00:00:00 /appx/tools/appxd -s=8066
root     1576     1 0 Jan11 ?     00:00:00 /appx/tools/appxd -s=8090
appx     1589     1 0 Jan11 ?     00:00:00 /appx/appx -l=/appx/license.log
nobody   1660  1573 0 Jan11 ?     00:00:00 /appx/data/../appx -f=4 -fms_server
al      11565  1576 0 Jan12 ?     00:00:01 /appx/data/../appx -f=4 -d=   
brenda  22224  1576 0 Jan13 ?     00:00:01 /appx/data/../appx -f=4 -d=   
al      24736  1576 0 Jan13 ?     00:00:10 /appx/data/../appx -f=4 -d=   
al       4786  1576 0 10:22 ?     00:00:04 /appx/data/../appx -f=4 -d=   
pat      6181  6180 0 12:42 pts/1 00:00:00 /bin/bash  /home/pat/.appx_profile
pat      6183  6181 0 12:42 pts/1 00:00:01 /appx/appx -d=CTS
root     6574  6522 0 13:17 pts/0 00:00:00 /bin/sh  /bin/appxps
root     6575  6522 0 13:17 pts/0 00:00:00 grep appx

> # 
[Append to This Answer]
2004-Jan-14 4:48pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Information on Winprint 2.4
Please refer to:

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

[Append to This Answer]
2004-Jan-16 1:42pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to Purge the USAGE File
Please refer to:

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

[Append to This Answer]
2004-Jan-16 1:43pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Does Winprint -width and -length work?
Please refer to:

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

[Append to This Answer]
2004-Jan-16 2:06pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is there any special consideration that we should take in order to use Winprint?
Please refer to:

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

[Append to This Answer]
2004-Jan-16 2:07pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What is the relationship between winprint.exe and winprintdll.dll?
APPX uses a DLL so that we can honor the "Print Setup" specifications that you’ve enter. All printer drivers support two different methods for altering the Print Setup specifications. One method is through the Print Setup dialog box (where the user adjusts the choices on the screen), the other method is through a callable API (where Appx, for example, would send your disposition choices directly to the printer driver).

Most printer drivers seem to ignore the information provided through the callable API. So, the only other choice is to allow you to use the Print Setup dialog box. In order to do that, we had to use a DLL so that the specifications entered in the Print Setup dialog can be shared with the program that actually does the printing.

So, when you choose client-side printing, the report file is sent (over the net) to the client, and then the client invokes functions inside the winprintdll.dll module to actually spool the report to the printer (using a combination of the disposition options and the print setup dialog specs).

[Append to This Answer]
2004-Jan-20 10:24am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Storing zero numeric values in SQL Server
I’m having trouble getting zero values into a SQL server table from APPX ... they keep getting added as nulls.
When storing values in a RDBMS, APPX normally stores a numeric value of zero as a "null" value. Conversely, when retrieving a "null" numeric value, APPX normally converts the null value to zero.

However, this default behavior can cause problems if you attempt to perform arithmetic operations on a database column using a program other than APPX unless the program anticipates the fact that a numeric column may contain null values. For example, if you add two values together and one of the values is null, the result will be null. Many SQL programs will fail if numeric null values are encountered when performing arithmetic.

The default behavior of APPX can be easily changed. If you want APPX to store numeric values of zero as zero instead of null for all database tables, you must toggle on the "Suppress Null Numerics?" option in the FMS Group definition. If this behavior only needs to be changed for selected tables, the option can be set for individual files on the "File Attributes" screen using the "File Specification" program in Database Management.

[Append to This Answer]
2004-Apr-19 9:32am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What are the zero apps?
The zero apps are the interface modules used to develop APPX applications. These applications are not modifiable, although the 0LC apps can be copied and hooked to provide a customized system.

The zero app modules are;

0LC Hook processes templates. New with rel 4.2 0AD Application Design 0LA Runtime environment 0DB Database 0SA Systems administration

[Append to This Answer]
2004-Feb-09 1:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I start the license server?
To manually start the license server, enter;

          appx -l=logfile

[Append to This Answer]
2004-Feb-13 8:31am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to debug the license server
Set environment variables:

               APPX_LS_DBG=0xFFFFFFFF
               APPX_LS_LOG={some.file.location.and.name}

Debug information for the "appx -l=" license server process appears in the file named after the "-l=".

Debug information for clients attempting to obtain session licenses will appear in $APPX_LS_LOG, if it is set.

In order for this variable setting to affect the license server, you must kill and restart the License Server.

Warning: Watch the size of your log file when you have APPX_LS_DBG set. License server logging tends to be verbose, and you can fill up your disk more quickly than you think.

[Append to This Answer]
2004-Feb-13 8:34am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I determine my server’s serial number required for registration with APPX?
Go to the APPX FTP site and download/uncompress/install then run the appropriate utility.

 ftp://customerftp.appx.com/hostinfo/

[Append to This Answer]
2004-Feb-13 8:37am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to associate PDF output to enable printing in a windows environment.
In APPX 4.2.2, the APPX session tells the O/S to "Print" the PDF print file. For this to work, Acrobat Reader must be installed on the server and there must be an action defined for the "Print" action for "pdf" files. Open Windows Explorer and navigate to Tools-->Folder Options-->File Types. Scroll down and select the extension for "pdf". If there isn't one, the easiest way to get one is to uninstall Acrobat Viewer and reinstall a fresh copy of Acrobat Viewer. If you find an entry for "pdf", click on the Advanced button. In the Actions box, there should be an entry for "Print". This entry defines the command that should be run when an application issues a request to Print a pdf document. If there is no Print entry, then you should reinstall Acrobat Viewer to correct the problem.

The printed output will always go to the server's current default printer regardless of what printer you may have specified within APPX. This is a limitation of the current release of APPX and will be addressed in a future release. Make sure that your server has a default printer defined.

[Append to This Answer]
2004-Feb-19 4:21pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What different configurations of APPX/ODBC are supported?
Two configurations of APPX/ODBC are supported: standalone and client/server. Most commonly, we expect sites to use APPX/ODBC in the client/server network configuration, where the APPX/ODBC driver is installed on a client PC where programs like MS Access and Excel are run, and the APPX data sits on another machine, typically a server.

It is also possible to use APPX/ODBC on a machine which can access APPX data directly, either because that data is on a local drive, or because it is on a "mapped drive" accessible across the network.

If you have a choice, you will probably achieve better performance running APPX/ODBC in a client/server fashion, than by running it standalone against a network "mapped drive".

[Append to This Answer]
2004-Feb-19 4:22pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What software do I need on the data server in addition to APPX?
a. APPX Presentation Server. This is 'appxd' on UNIX systems, and WinAppxD or ‘appxdsvc’ (preferred, Rel 4.1.a and above) on windows systems.

b. The TCP/IP network protocol. APPX Presentation Server requires TCP/IP to communicate with clients.

[Append to This Answer]
2004-Feb-19 4:25pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
APPX and ODBC information
Please refer to;

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

[Append to This Answer]
2004-Feb-19 4:26pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What kind of machines and network do I need for server and clients?
For the server, any machine capable of running APPX Presentation Server (appxd or WinAppxD/appdsvc) and APPX version 3.5 or later will work.

Please note that this excludes Novell Netware servers. If you wish to make data stored on a Novell Netware drive accessible to ODBC clients, you should install APPX/ODBC in the 'standalone' configuration, going against the mapped Netware drive, instead of using the client/ server configuration.

For the client, a machine running Windows 9x, NT or above is required. Windows 3.x is specifically not supported by APPX/ODBC.

Because file I/O will be taking place across the network, the faster your network is, the faster your client programs will be able to access APPX data. This might be the ideal time to think about justifying a 100mbit/sec "Fast Ethernet" upgrade.

[Append to This Answer]
2004-Feb-19 4:27pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Can I get a log of file activity using APPXIO?
Yes, set the environment 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 write the log in an easier to read format.

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-25 10:18am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I verify all files in a database?
The "appxutil -v" command verifies one file at a time. To verify an entire database, you could individually enter the commands at the DOS command prompt, but it is more efficient to create a batch file which does it. Use your favorite text editor to create a text file (NOT a .doc file!) which looks like:

c: cd \APPX\DATA\DDD\AAA\DATA appxutil -v=CUST.dat appxutil -v=CUST2.dat appxutil -v=DEPT.dat ...(include a line for each data file)

It's necessary to add a line to the script for each data file. You may want to do a "dir > temp", then bring that up in an editor window, and cut and paste filenames into the verify script. Save this file as "verfyAAA.bat", in the directory containing appxutil. It is a good idea to create a batch file to verify each of your databases, in advance, so that when you want to verify all files in a database, you can just run the applicable script without having to spend time creating it. Analyzing data files with APPXUTIL Analyzing a data file will interactively provide more information about the file's internal structure. In general, this isn't important unless the file has failed verification.

[Append to This Answer]
2004-Feb-27 4:12pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I verify the file 'ORDER' in application 'AAA', database 'DDD'?
Obtain APPXUTIL.EXE from our FTP site, and put it in the same directory containing APPX.EXE

Open a DOS box on the NT or Windows 95 machine containing the data files. While it is possible to verify data files across the network, it is most time-efficient to run the verification on the actual machine (server) on which the data files are located.

"cd" to the directory containing the files - for example, if my APPX data files were stored in C:\APPX\DATA, and I wanted to verify the file named above, I would:

c: cd \APPX\DATA\DDD\AAA\Data Run "appxutil -v=filename.dat" - for example, for the scenario described in this section, type: appxutil -v=ORDER.dat

[Append to This Answer]
2004-Feb-27 4:14pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How can APPX data file indexes become corrupt?
The 'APPXIO' file system has proven itself to be very stable over the years. However, no database system is immune to the effects of system or application crashes, in which unpredictable things happen to database files. For example, APPX might be in the middle of adding a record, and has completed updating 2 of 3 keys, at the time of a crash. This leaves the index for that file in an inconsistent state. The data itself is correct and intact, but the key file must be rebuilt in order for the indexes to be correct. Typically, a system administrator is not going to know in detail what was happening on the system, when a power failure or equipment problem occurred, and will not know whether any APPX data files on the system became corrupted as a result. Verifying the data file would tell you whether or not it is necessary to run "Rebuild keys" for that file.
[Append to This Answer]
2004-Feb-27 4:15pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
When might I want to use APPXUTIL to check my file system?
If your file system (disk) fills up. Adding records to a file on a full disk is likely to corrupt the file.

After a system crash during which there were active users on a system. You should verify all files in the database before allowing users back into APPX. When certain records you "know" are in a data file, do not show up as expected on a report or input display, you might want to verify that file.

When a constrained child process fails to correctly retrieve data, you might want to verify the PCF of the child process.

For routine file maintenance. Once a month on your data files and on application design files that are being edited is recommended.

[Append to This Answer]
2004-Feb-27 4:16pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Where do I get APPXUTIL?
APPXUTIL.EXE is found in the .\Tools directory, underneath the appx.exe engine.
[Append to This Answer]
2004-Feb-27 4:17pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Why does a user of APPX for Windows need APPXUTIL?
Traditionally, APPX data file verification and analysis are done from the command line, using the normal 'appx' engine itself. Since APPX for Windows is a GUI program, and the data file verification and analysis functions are text-based utilities, it is necessary to have a separate, alternate copy of the 'appx' engine which runs in text rather than GUI mode, in order to use those functions. This alternate version of APPX is called APPXUTIL.EXE.

Starting with APPX 3.3 and above, the data file verification (-v) function can be invoked from the database management menu, so it is not necessary to use APPXUTIL.EXE to access that capability. However, APPXUTIL.EXE is still needed by users of APPX 3.3 and above, to perform one of the two steps required for cross-platform data file import/export, and for detailed data file/key integrity analysis.

[Append to This Answer]
2004-Feb-27 4:18pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What is APPXUTIL?
APPXUTIL.EXE is used to invoke the command line functions of APPX, on a Windows PC. These functions include:

-v Data file/key integrity verification (to detect file corruption)

-an Data file/key integrity analysis (to analyze possible file corruption)

-e Second step of data file export (after Exporting from the menu)

-i First step of data file import (before Importing from the menu)

[Append to This Answer]
2004-Feb-27 4:20pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What does it mean to 'verify' a data file?
Verification checks to make sure there are no duplicate keys, that each key points to only one record, that all keys point to active (rather than deleted) records, and that all indexes for that file have the same number of keys.
[Append to This Answer]
2004-Feb-27 4:21pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I script imports for windows using APPXUTIL?
The following example will import (appxutil -i=) the design files for application TAP version 00 from portable ASCII format into the BRF format needed before you can actually import the files into APPX:

          cd c:\appx\data\00\TAP\Portdata
          FOR %%f IN (*.) DO c:\appx\tools\appxutil -i=%%f 

[Append to This Answer]
2004-Feb-27 4:22pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do you diagnose strange or generic errors (such as bus errors, seg faults, attempting to free freed memory errors, or "an internal error has been detected" errors)?
Run through the following checklist:

Delete all of your Applications' EMs.

Rerun your problem scenario to see if the problem still occurs.

Set environment variable APPX_TRAILER_COUNT=40, then re-run the condition that generates the error.

This catches most APPX "stepping on memory" errors, by generating an "mm free() - corrupted trailer" message earlier in your problem scenario. This can be set in the appx.env found in the data directory under the directory containing your APPX engine. (If you're running APPX/Server, any new APPX Application server session fired off from an APPX/Client after appx.env editing will have newly edited appx.env environment variables activated.)

  
Search for Design Discrepancies: From the Utilities menu;

Run: ‘Run Each of the Above’ from the ‘Orphan Detection’ process

Run: ‘Check for Duplicate ANO and EMs’ (‘Verify ANO’s and EM’s’).

"No Lines Were Output" means the Application passes this test. If any Applications don't pass, perform:

1. Run: Reset Process Date Add Fields.

   The name of an executable module is derived from the date that the PROCESS                                                                             
   record was added for that process.  If you happen to get two processes with 
   the same "date added", they'll have the same EM name and nasty things will 
   happen.  "Reset Process Date Add"  assigns a unique "date added" to every 
   process record.


2. Run: Reset DD for full process.

   This resets the Date Compiled fields for all data Field and Domain  
   definitions in an application to NULL and also resets the internal Appx Area 
   Number for each field to zero.
Resetting the compile date to null forces all fields and domains to recompile.
The Appx Area Number is how Appx locates data in memory. We have had bugs in the past that caused two or more fields to have the same area number meaning they shared the same memory space, which is a very bad thing. Setting the area number to zero for all fields forces appx to assign all new area numbers and thus fix the memory corruption problem.


3. Initialize the 4 compiled DD files (BITMAP, ELEMENT, FILE, INITIAL) and reprocess the Data Dictionary. These can be initialized in System Administration, Design File Management, File Selection (select these four files), then Initialize Files.

   It deletes and then re-creates the given files.  
   When the data dictionary compiler compiles a dictionary, it writes records 
   into those four files.  When the process compiler compiles a process, it 
   reads from those files, not the FIELD and RECORD file.  So, initializing 
   those files is basically the same thing as deleting your data dictionary and 
   typing it all back in again - you end up with an uncompiled dictionary.

4. Reprocess your Data Dictionary.

  
   Analyzes the source form of the data dictionary for errors and 
   inconsistencies and produces a more directly executable form (the compiled 
   form is stored in BITMAP, ELEMENT, FILE, and INITIAL).
5. Restructure your enduser data. (This should go quickly - only the /Struct file date/time stamps will need to be reset, to match the newly compiled DD.
   Restructure changes existing data records into a new form after you've 
   changed (and compiled) a data dictionary.


6. Delete all of your Applications' EMs again.

7. Then rerun the scenario that causes the problem.

  
If your problem scenario still fails, and you're running on a Windows platform, send us your appx.stk 'appx.stk' is a stack dump, telling us something of what goes on inside APPX when cassert error messages occur. You'll find it in the same directory that your 'appx' or 'appx.exe' engine is located. If it is overly large, you may want to delete or rename it, then run your problem scenario one more time to get a clean dump.

Send to techsupp:

     The appx.stk dump, 
     The version# of APPX under which you are running, 
     The release level of your Operating System, 
     A brief description of what the error looks like from the operator's
     perspective, and a brief description of the Application Design elementes 
     in which the error occurred. 


See also FAQ: (Xref) "mm free()-corrupted trailer"

[Append to This Answer]
2005-Oct-07 9:10am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I see the APPX Process Stack?
If you have TRAPed into the ILF debugger, you can see the process stack by invoking Direct Menu 1 (GO 1).
A typical Process Stack might look like:

ECR ENTRY (HISTORY) (COMMENTS) 0000200.001.0000000 Inp Option Intercept ------- ------------------------------------------------------------- | Stack Trace | | | | Lvl# Ap/Ver Proc Type Process Name Invoked As | | 1 CTS 00 INPUT ECR ENTRY (HISTORY) (COMMENTS) SUBPROCESS | | 2 CTS 00 INPUT ECR ENTRY (HISTORY) SUBPROCESS | | 3 CTS 00 INPUT ECR ENTRY DETACHED | | 4 CTS 00 MENU MAIN MENU DETACHED | | 5 0LA 00 JOB SELECT DATABASE SUBPROCESS | | 6 0AD 00 INPUT APPLICATION DESIGN DETACHED | | 7 0LA 00 MENU APPX MENU DETACHED | | | | | --------------------------------------------------------------------

The current process (being debugged thru the ILF editor) is at the top the stack (Level #1). The first process in the stack is at the bottom (APPX MENU).

Note that this stack also shows you the "Invocation Type", or scoping (Detached/Related/Subprocess).
See the APPX Designer Reference Manual chapter 1-5 on Interprocess Communications for further discussion of the scoping rules around for process invocations and field types.

You can only view the Process Stack when running 4)Run Test Database from with the Application Design editor, or when you have launched a Process from one of the Process editors using hidden Option 99. If you have no TRAP to get you into the ILF editor in your current process, don't despair! Press your interrupt key (generally Control-C), then ENTER. The ILF editor will stop at the next available ILF statement. From there, you can GO 1, to see your current Process Stack!

[Append to This Answer]
2004-Feb-27 4:26pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What is the APPX Process Stack?
Running an APPX application consists of a series of processes calling each other. For example, the Main Menu might call a submenu, which might call a JOB process, which might call an INPUT, which might call a child INPUT process, etc.

The list of current processes that have called each other is called a "Process Stack". This is a particular 'drill down' within a Process Family, or Process Tree.

[Append to This Answer]
2004-Feb-27 4:27pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to define the keyboard layout, (appx –k)
Please refer to:

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

[Append to This Answer]
2004-Feb-27 4:28pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
New Item
[Append to This Answer]
2004-Feb-27 4:28pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
WinAppxD service is not running (Troubleshooting WinAppxD)
First, login as Administrator and check Event Viewer, to see if there are any errors regarding SRVANY.EXE startup. These could occur if the WinAppxD service registry entry points to the wrong pathname for the winappxd.exe executable. If you see errors, edit the appropriate registry key to fix the path name or command syntax. (See WinAppxD installation instructions for registry locations to check.)

If there are no SRVANY.EXE errors saying that the service failed to start, then WinAppxD started executing, but some type of error caused it to exit.

Instruct WinAppxD to create a log file by defining the following environment variables:

APPX_NET_LOG=c:\appxdlog.txt APPX_NET_LOG_MASK=0xFFFFFFFF
Set these using Control Panel, in the same global System area you set the other APPX variables.)

Reboot.

Wait a few minutes to make sure WinAppxD has had a chance to start.

Check the c:\appxdlog.txt file for error messages.

IF NO LOG FILE EXISTS, check to make sure that the logging variables APPX_NET_LOG and APPX_NET_LOG_MASK are still defined, and that they were defined in the global System environment area, not the user-specific area. (A common error.) If they appear to be defined correctly, then it is extremely likely that the environment variable "APPX_SERVER" is not set, because some versions of WinAppxD will exit silently, with no error indication, if APPX_SERVER is not set. Another possibility is that the Windows "winsock" library could not be correctly initialized, but this is unlikely if you have TCP/IP installed.

- Resolution: If you've tried the above and it still isn't working, call APPX Software Technical Support. "accept error - {n}" - This is a system error which should never occur. - Resolution: record what {n} is, and call APPX Software Technical Support for assistance.

[Append to This Answer]
2004-Mar-02 9:28am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Client login issues - Incorrect login (Troubleshooting WinAppxD)
If you are receiving the error "Incorrect login" when trying to login to APPX from a client PC, there are several common reasons for it. The best diagnostic information is available in server-side logs, not client-side, since generally these failures occur as a result of a Windows function call failing inside winappxd. Here's how to collect a server-side log to find out more about a WinAppxD error.

Procedure for current WinAppxD, through 3.2.x:

Set the following vaariables in the same place you set APPX_SERVER: APPX_NET_LOG=c:\appxserv.log APPX_NET_LOG_MASK=0xFFFFFFFF Reboot.

If you are attempting to login from the console of the APPX server, you must use a command prompt to reset APPX_NET_LOG then run "appx -c". It is necessary to do this, because if you don't reset APPX_NET_LOG, the (probably uninteresting) client log will overwrite the (probably very interesting) server-side log. Start up a DOS command shell, then type: set APPX_NET_LOG=c:\appxcli.log now cd to your directory containing appx.exe appx –c

Otherwise, if you are attempting to login from a different PC, you can either set APPX_NET_LOG and APPX_NET_LOG_MASK in your global System variables via Control Panel / System / User Environment (or for Win95, set them in AUTOEXEC.BAT) then reboot and run the APPX client, OR (probably quicker) do the following from a DOS command shell on the client:

set APPX_NET_LOG=c:\appxcli.log set APPX_NET_LOG_MASK=0xFFFFFFFF now cd to your directory containing appx.exe appx -c Now check the contents of c:\appxserv.log on the server. A ways down in the file, you should find a line that looks like:

     LogonUser() failed with 9999

In place of the 9999, you will see a number which is the reason Windows NT denied the login request. Common ones we've seen, and what to do to solve the problem they indicate, are:

1314. This indicates that the account used to run WinAppxD is missing one or more of the 4 user user rights it needs. See sections 1.6 and 1.7 (or the WinAppxD installation instructions) for details on setting these rights. Generally "Replace a process level token" or "Act as part of the operating system" is the right that is missing (others may be as well).

1326. This is Windows error "ERROR LOGON FAILURE" which might mean that the user ID is unknown to NT, or that the password specified during APPX client login is incorrect. However, it is MUCH more likely to mean that the account used to run WinAppxD does not have the 4 rights set, that it needs to have set (or that you set them on the PDC instead of the local server). See sections 1.6 and 1.7 (or the WinAppxD installation instructions) for details on setting these rights.

Generally "Log on as a service" is the right that is missing (others may be as well). You can verify it's not a user/password error by logging in to the user from the server's console. It MAY also mean that you have started WinAppxD from the Local SYSTEM account. Check your Services control panel applet entry for WinAppxD to make sure you have specified a user ID and password, rather than trying to run it under the SYTEM account. If your LogonUser(….) line in your NET LOG (see above instructions about how to create one) lists "NTAUTHORITY", this is almost certainly the problem, as that is the pseudo-domain membership of the Local SYSTEM account.

1385. The user you're trying to login with from the client, does not have the right to logon locally to the server machine. Set this right from User Manager on your APPX Server (make sure to choose the machine name rather than the domain name when you start User Manager). Rather than setting this for each user individually, you probably want to set it for "Domain Users" or "Everyone", or better, a group called something like "APPX Users" which contains only those users allowed to run APPX. See section 1.18 for more information.

If you have a different return code than the above, if you don't have a "LogonUser() failed" line in your log file at all, or if you have one of the codes above but the recommended solution is not working for you, please call APPX Software Technical Support.

When calling APPX Software Technical Support, there are several pieces of information you can have ready that are likely to speed up the problem-solving process for an "Incorrect login" error:

a. What the "LogonUser() failed" return code is. B. Whether you were trying to connect to the server from the server itself, or from a separate client PC. C. Whether "appx -c" logins from OTHER machines work. D. Whether the user you're trying to login with is in the Administrators group on the server. E. Whether "appx -c" logins using OTHER user ID's (Administrator and other non-privileged users) work. Once you have successfully connected to APPX with your clients, remember to remove the APPX_NET_LOG and APPX_NET_LOG_MASK variables from Control Panel / System / User Environment (or your AUTOEXEC.BAT for Win95 clients).

[Append to This Answer]
2004-Mar-02 9:33am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
HASP not seen by APPX (Troubleshooting WinAppxD)
If the APPX Registration screen shows your serial number as "00-…", then it is not seeing the HASP. As of APPX 3.3 and beyond, APPX should produce a CASSERT describing the problem. You may be able to figure out what to do to fix it, from the message. If not, call APPX Software Technical Support. This message will not necessarily appear if you are running the "appx -c" client, therefore we recommend that while troubleshooting HASP issues, you run APPX directly on the server.

If you are running a version prior to 3.3, you will need to collect a debug log on the server. You may also need to do this when running a later version, if APPX Software Technical Support requests it. Here's how to do it.

Set the following variables in the same place you set APPX_SERVER:

APPX_SS_LOG=c:\hasplog.txt APPX_SS_CODE=0xFFFFFFFF

Reboot again, then run APPX directly on the server once more. You will probably be presented with the Registration screen and some sort of license error again. Exit APPX. Now go look at c:\hasplog.txt. If the problem and its resolution are not obvious, call APPX Software Technical Support for assistance. We will need to see (email is best) or hear (over the phone) the contents of the debug log. Remember to remove the APPX_SS_LOG and APX_SS_CODE variables once the HASP is successfully recognized!

[Append to This Answer]
2004-Mar-02 9:34am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Winprint won't print to my printer (Troubleshooting WinAppxD)
Using Control Panel / System / User Environment, set a global system environment variable WINPRINT_DEBUG on the machine running WinAppxD to the name of a file in a directory which is writable by everyone. Reboot the machine.

Try to print again. Then, look in the log file to see what it says. There might be an obvious failure, like it truncated your printer name (if it was a really long printer name), or it substituted an underscore for a space, or some such. If the failure is not obvious, contact APPX Software Technical Support. We will probably want to see (via email) or hear (over the phone) the contents of the log file.

Remember to remove the WINPRINT_DEBUG variable once you have solved the printing error.

[Append to This Answer]
2004-Mar-02 9:35am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Winprint won't print to printers that are not defined on my NT server (Troubleshooting WinAppxD)
As of version 3.5 and earlier, APPX can only print to printers which the server knows about, because the printing task occurs on the server. This means that if a user wants their report to come out on their local printer, there are two options that we currently know of:

A. Define the printer on the server, and map it to that user's printer. This is the preferred method, in terms of being easy for the user. However, it may be difficult or impossible for a particular site to keep these definitions up to date.

B. Have the user email (using OPT-7) the report to themselves, and print it from email. See section 4.1 for how to do this. The caveat here is that if it's a big report, it's going to take up lots of space on your mail server.

We understand that many sites consider this an inconvenience and expect to implement client-side printing in a future release, to more easily allow this to be done.

[Append to This Answer]
2004-Mar-02 9:37am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Getting an APPX Stack Trace / Disabling Dr. Watson (Troubleshooting WinAppxD)
If APPX is ending with an error, then it is helpful to the APPX Tech Support staff if you can collect an APPX Stack Trace and email it to us along with the rest of the information we request.

You don't have to do anything to APPX itself to cause it to create the "appx.stk" text file containing the stack trace. However, you do have to disable Dr. Watson. If you do not disable Dr. Watson, then an APPX error will invoke Dr. Watson rather than the APPX Stack Trace recorder.

To disable Dr. Watson, go into your NT system32 directory, and look for the file named drwtsn32.exe, and rename that file to drwtsn32.disabled. You might have to reboot after doing this, in order to get APPX to generate the stack trace. After you've gotten the stack trace info, you might want to rename drwtsn32.disabled back to drwtsn32.exe so that your next non-APPX error will be handled by it.

[Append to This Answer]
2004-Mar-02 9:38am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
File analysis and recovery.
Please refer to;

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

[Append to This Answer]
2004-Mar-02 9:40am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How to move Appx files between platforms.
Please refer to;

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

[Append to This Answer]
2004-Mar-02 9:40am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How Appx spawns background tasks.
Please refer to;

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

[Append to This Answer]
2004-Mar-02 9:41am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How does executable module (EM) caching work?
Please refer to;

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

[Append to This Answer]
2004-Mar-02 9:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
With APPX ODBC, files stored on the RS/6000 in APPXIO format, accessing the files from a PC using ODBC on the PC with a client like Access, what security is available? Can I use APPX internal security to control what databases/files/records/fields can be "seen" by the ODBC client?
Yes. When AppxODBC logs into your RS/6000, it provides a user name and password to AIX. We use that user name to control security within appx.
[Append to This Answer]
2004-Mar-19 4:37pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Where can I find the BugTracker system?
Go to http://bugtracker.appx.com:81/
[Append to This Answer]
2004-Mar-19 4:39pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do you turn on/off AppxDSvc logging?
You can adjust the logging parameters by setting three registry values:

LogServiceDir - set to the name of a directory and AppxDSvc will write the log there (in a file named $(LogServiceDir)\serviceName.log

LogAllEvents - set to 'Y' to get a complete log or any other value to disable most log messages. The default is 'N' so Jean should be seeing very few message written to the log

LogCreate - set to 'Y' to create a log file or any other value to disable logging. The default is 'N' (starting with 4.2.3 - it defaulted to 'Y' before release 4.2.3)

[Append to This Answer]
2004-Mar-19 4:40pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
What's the address of the site where we can download the email support archive?
Go to http://mail.appx.com/mailman/listinfo/support
[Append to This Answer]
2004-Mar-19 4:42pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Are there any issues with HPUX 11.11 that we need to be concerned about?
Our supported HPUX release is 11. We are not aware of any issues with 11.11.
[Append to This Answer]
2004-Mar-19 4:43pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Excessive CPU utilization when client reboot’s PC.
We see when users reboot their PCs without properly exiting the application, the APPX process on the server side still continues its attempt to communicate via TCP with its non-existent client process. This communication effort seems to result in excessive CPU utilization.
Client’s need to be encouraged to exit all applications before rebooting or shutting down their PC. Short of user support, you’ll have to locate and kill hung session(s) periodically. See ‘APPX session is hung’ FAQ for further instructions on killing hung sessions.
[Append to This Answer]
2004-Mar-19 4:44pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is there a PDF for the record number in a consecutive file?
No, not at this time. (release 4.2.3)
[Append to This Answer]
2004-Mar-19 4:45pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
"Recover"ing data into a consecutive file.
`
The 'recover' utility has an option for directing its output to a consecutive file, rather than an AppxIO indexed-format .dat file. Example:
 /usr/local/appx/appx -recover -c INDEXED.dat CONSEC.dat INDEXED.deleted

The "-c" argument takes data records found in the INDEXED.dat indexed file and writes them as consecutive records in CONSEC.dat. Any deleted records are placed into INDEXED.deleted as usual, and any invalid records are streamed to standard out as usual (from which they can be redirected into a file).

This can be handy for recovering data records you can't get via a keypath. It's also be useful if you have records in your INDEXED.dat with duplicate primary key values, on which you'd be unable to rebuild a .key because the key rebuild logic in "Create" stops on duplicate unique primary index values.

See also: http://www.appx.com/assets/asp/dynamic_generator.asp?pageid=624
and (Xref) How to use recover.exe!
`

[Append to This Answer]
2004-Apr-01 4:07pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
I can't connect to a second instance of the database (Sybase, Oracle, etc.)
A single APPX session cannot connect to two instances of a database within the same APPX session. In other words, if an APPX session connects to one Oracle or Sybase database to access one or more tables, that same session will not be able to connect to a second Oracle database to access one or more additional tables. This is true for all supported databases.

See also (Xref) Connect to 2 Oracle instances simultaneously?

[Append to This Answer]
2004-Apr-06 4:01pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is it possible to create Indexes in the Dharma tables to improve speed? If yes then how?
Only indirectly - if you need more indexes in the SQL tables, add key definitions to your Appx data dictionary and re-import the schema (using ASQL).
[Append to This Answer]
2004-Apr-06 8:40am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is it possible to use specific names for the FIELDS in the Dharma Tables?
When we import tables into Dharma using ASQL we do not get the choice for naming of the tables. Even using ASQL_EXPERT_MODE=1 we don’t have the choice…How can we do this?
The easiest way to rename fields is to create a view in SQL server that maps to the underlying table that you want to use. I don't think that there's a way to do rename fields during the initial schema import.
[Append to This Answer]
2004-Apr-06 8:42am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Are there any tweaks to improve performance when retrieving data using the Dharma ODBC link?
Queries are extremely slow even if the fields are KEYS in the APPXIO files.
Make sure you turn off AppxODBC logging before you do any timing tests. If possible, keep the AppxIO data files on the same machine where the AppxODBC data source lives - otherwise, performance will suffer.
[Append to This Answer]
2004-Apr-06 8:43am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is there a way to synchronize databases in APPXIO with databases kept in SQL Server?
We would like to have a Replica of our APPX files in SQL Server tables and being updated every hour or more frequently if possible.
If SQL Server supports replication, you should be able to push data from SQL Server into the AppxODBC data source.
[Append to This Answer]
2004-Apr-06 8:53am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Can we update records in APPXIO files using SQL Statements from SQL Server?
We've never tried use an AppxODBC stream as a linked server in SQL Server, but can't think of any reason you should have problems.
[Append to This Answer]
2004-Apr-06 8:47am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is it possible to change the field names that are used by APPX/ODBC?
First, before you run asql.exe, set the expert mode environment variable as follows:
 
ASQL_EXPERT_MODE=1
 
1) Run asql and select the file that you wish to import the schema for.
2) Click on the "Show Script" button. The "create table" script should be displayed in the lower window.
3) Remove all of the comment lines from the script
4) Change field names to suit your purposes
5) Remove the last ";" from the very end of the script
6) Click on the "Try Again" button.
7) If "OK" is displayed, then everything probably worked as expected.
8) If there is an error, drop the table and try again.
9) WinSQL can be used to verify that the table, field names, and indexes were created as expected.
 
[Append to This Answer]
2007-May-16 11:59am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
French Characters in Oracle
When i put French charaters in to the Oracle table that is connected to APPX, i get question marks in return.

Accented characters require 8 bits. Setting the following environment variable will correct the problem:
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
This environment variable can be set in the "appx.env" file or it can be set outside of APPX if desired. But, it must be set for an APPX session to properly store and retrieve 8-bit characters in Oracle.
If the environment variable is not set for APPX sessions that are initiated by the appxd connection manager, you will need to set it in the start-appxd.sh script or in the "appx.env" file so that all APPX sessions will run with the environment variable set.

[Append to This Answer]
2004-Apr-12 3:11pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
"mm free()-corrupted trailer"

If environment variable APPX_TRAILER_COUNT has been set, you can get the message mm.c.876 - "mm free()-corrupted trailer". This message indicates that some unexpected condition is causing memory to be overwritten.

(Without APPX_TRAILER_COUNT, real data or executable code would have gotten overwritten, with an unpredictable results, probably a cassert message, that is otherwise unexplainable.)

As of 4.1.4 and later, also set the environment variable:

            APPX_LABEL_MEMORY=1
This tells APPX to attach a label to each chunk of allocated memory. This label will be included in the "corrupted trailer" message and should give us a clue as to what is being corrupted.

If this error occurs, the user should immediately write down the last few things he/she did, prior to the error occurring. User should then exit APPX.

If APPX_SCRIPT_OUT tracking is enabled, the script-log should be preserved, for analysis. APPX can then safely be reentered.


To diagnose, run:

   Application Design > Utilities > Toolbox > Conversion 
   Utilities > Check for Duplicate ANO and EMs.

If any Applications don't pass ("No Lines Were Output" means they pass), perform the following procedure:

 1) Run:  
      Conversion Utilities > Reset Process Date Add Fields
      Conversion Utilities > Reset DD for full process
3) Go into System Admin > Source File Management for your application, initialize the 4 DD object files (BITMAP, ELEMENT, FILE, INITIAL), and recompile the Data Dictionary.
4) Restructure your enduser datafiles. (This shouldn't take long.)
5) Delete your Application's EMs
If this doesn't help, go into a more manual debugging mode. You'll need to be able to make this condition occur, upon demand. Make a copy of the process family involved, make sure the error still exhibits itself, then start stripping design elements out of it, until you zero in on the design element that is causing the error. You may want to call Appx Support to get guidance on this.


APPX_TRAILER_COUNT tells APPX to append additional "trailer" bytes to every memory allocation. Example:
          export APPX_TRAILER_COUNT=40
These bytes are filled with known values and checked for corruption when the memory is given back to the system. This can find if APPX is writing beyond the end of an allocated chunk of memory or if, for some other reason, the memory is getting stepped on.

APPX presents a "mm.c.876: mm free()-corrupted" cassert immediately upon detecting memory corruption that steps on this trailer. The message comes at the end of the job, when Appx is cleaning up (returning to the OS) memory that it allocated and wrote to earlier in the job.)

It may be prudent to keep the APPX_TRAILER_COUNT environment variable permanently on, in order to avoid unexpected and harder to detect memory corruption. APPX_TRAILER_COUNT has very low overhead.


As an example, an error message of: "mm free() - corrupted trailer (AREA: 0LA:7.2)" indicates that there has been memory overwritten associated with the writing of ERROR statement error log. In this case, an ERROR statement may be trying to write more than 250 bytes to the Appx error log when an UPDATE has just run.

(This might happen by the execution of an ERROR --- TEMP 2K statement, where TEMP 2K was populated with more than 250 bytes of data. This can be diagnosed by looking at the ERROR log produced by the update. At least one line should be filled with 250 bytes of Error text, and probably truncated.)


See also FAQ: (Xref) How do you diagnose strange or generic errors (such as bus errors, seg faults, attempting to free freed memory errors, or "an internal error has been detected" errors)?
(from ecr #3353)

[Append to This Answer]
2004-May-07 3:02pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is it safe to remove USAGE.dat and USAGE.key files?
You can safely remove the USAGE.dat and USAGE.key file as long as you don't have anyone running Appx at the time.
[Append to This Answer]
2004-May-20 10:11am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
When do entries in USAGE.dat file gets removed?
By default, the license server removes phantom entries every two minutes. you can change the interval by setting APPX_LS_INTERVAL=<some_number_of_seconds> (where <some_number_of_seconds> is less than 600). The default is 120 (two minutes). Note that Appx won't let you go more than 10 minutes (600 seconds) between refreshes.
If you have an env. variable named APPX_LS_NO_GHOSTS, the license server won't remove phantom entries from the USAGE file.
Phantom entries are always ignored when Appx counts user rights, so, even if you have some phantom entries, they won't cause you any problems. Of course, if your USAGE file grows to some huge size, Appx will take longer to start and end, but you'd have to have a *really* big USAGE file before you noticed a problem.
The entries will not be removed from the USAGE file if you are running a single or promo license.
[Append to This Answer]
2005-Mar-22 11:16am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Can I export a registration key?
There is no utility to export a registration.

If you are performing a new installation, you can copy the files where the registration is stored:

$APPXPATH/0SA/Data/REGISTER.dat
$APPXPATH/0SA/Data/LOCK.dat
$APPXPATH/0SA/Data/LOCK.key

[Append to This Answer]
2004-Jul-09 4:46pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
In NT 4.0 I have a user named joe@my-company and when I upgrade the os to Win 2K Joe can’t logon. Why?
Logging in with the @ sign is still perfectly valid in windows 2003 server. The at sign when used in the login field is for identification of where the user account exists. Active Directory Domain Controllers do not have local accounts. Member servers can have local accounts. So it is important to know the role of the server that you are installing APPX on.

If joe@my-company doesn't login (producing "invalid login", then it is telling you that my-company does not have an account there.

[Append to This Answer]
2004-Jul-09 5:38pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
I want to use Appx with SQL Server. Are there any known issues/performance issues?
1) SQLServer 2000 (and newer) uses row-level locking. This is good. This means that only the row that is being updated is locked. You may recall that earlier versions locked the entire block that a record was stored in thereby increasing the likelyhood of locked record conflicts between users.

2) As you know, the default behavior of an APPX application using a RDBMS is to use a commit mode of "Compatible". The intent of this mode is to allow an application that was designed to use APPXIO to be run with a database without requiring any changes to the application. Basically, if your application writes, rewrites, or deletes a record, APPX will immediately issue a commit to the database unless there is another record in another file that has also been read with hold but that has not yet been updated. If another record is held, APPX will wait until that record is updated before issuing a commit to the database. APPX must wait because a commit after updating the first record would cause the lock on the second record to be lost. As you know, updates to a database are not "permanent" until the commit occurs. The default behavior of SQLServer is to block any attempt to read a record that has been updated but not yet committed. This behavior increases the likelyhood that users will be blocked when they try to read a record (even if they are reading without a hold) that has been updated but not yet committed. In other words, users running an APPX application that uses SQLServer are more likely to see the dreaded "Waiting for locked record" message. It is hard to predict the impact of this issue. It really depends on the design of the application and the number of users who are running the system. But, I would assume that it will be more of an issue than it is with APPXIO. APPX processes that encounter/cause this issue can be re-engineered to avoid this problem. However, you probably won't be able to identify them all in advance.

It is possible to change the default behavior of SQLServer to allow "changed but uncommited records" to be read. This may be the best solution. But, if an APPX session crashes with uncommitted changes, then the uncommitted changes will be rolled back. This is OK but there is slight risk that uncommitted data might be read by another APPX session and then get rolled back if the session that updated the data crashes without ever executing a commit.

3) There is the potential for date mapping issues. SQL Server supports two date types: CC-th and CC-mm (that's CC-minutes). The smalldatetime type can only handle dates between 1900 and 2079.

4) VARCHAR (and CHAR) fields have a maximum length of 8000 characters, TEXT fields are essentially BLOB's (and are not indexable).

5) The maximum index size is 900 bytes. This should not be a problem since the maximum length of an APPX index is 256.

6) The maximum row size is 8060 bytes. This might be a problem since APPX allows a maximum record size of 32K.

7) Maximum column count (per-table) is 1024. This might be a problem if you have more than 1024 fields in an APPX file. Remember that each occurrance of an APPX field counts as a column in a table. So, if you have an APPX field with 30 occurrances, that will result in 30 columns in the database table.

8) Here's the important limitations:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/architec/8_ar_ts_8dbn.asp 

[Append to This Answer]
2004-Jul-29 4:23pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How do I print a query log?
Set the environment variable APPX_QUERY_LOG to a valid path on your computer, i.e. c:/appx/query.log. After running a query, you can examine the log file for diagnostic information with a text editor.
[Append to This Answer]
2004-Oct-05 4:15pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How can I move APPX data stored in an FMS group to SQLServer?
My Appx data is stored in a different directory path than my Appx engine using an FMS group. I want to move the data to SQLServer. I exported the Appx data, added an FMS group call SLQServer with a type 6, and assigned the FMS group to the files I wanted to move. When I selected Import on the files Appx could not find the files. What can I do?
When an Appx file using an FMS group with a type of 1 is exported the Portdata file is created in the same location as the Data and Struct files, in the path of the FMS group.
When the FMS group is changed for the SQLServer path Appx no longer recognizes that the file was stored in a different path. The import process will look for the Portdata file in databas under $APPXPATH. There are two options to overcome this problem.
First, you could simply move the Portdata file from the location it was created in to $APPXPATH under the database and application id for your data. Of course, if disk space is tight this may not work.
The second option is to add another tyep 1 FMS group with the same name as the type 6 FMS set up for SQLServer, but with the path defined the same as the original type 1 FMS group. When Appx executes the import utility it will see the type 1 group with the same name and follow that path to find the Portdata directory.
This procedure applied to all FMS types and databases.
[Append to This Answer]
2004-Oct-12 9:48am
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
Is the proxy database id "LOK:" still required when using SQLServer?
The answer depends on the version of Appx and the version of SQL Server you are using. Releases of SQL Server prior to SWL Server 2000 did not support record locking, therefore Appx used the proxy_db setting of LOK: to duplicate the record locking in Appx in SQL Server.
In Appx release 4.1 the use of proxy_db became optional if you were also using SQL Server 2000 or above. Appx still supports the use of LOK:, but it is not required.
[Append to This Answer]
2004-Oct-12 12:11pm
(Answer) (Category) FAQ's - APPX Software, Inc. : (Category) APPX Utility : (Category) APPX System Administration :
How can i build up the FMS path for APPXIO data files?