APPX 4.2.8 Release Notes

The APPX 4.2.8 Patch Release addresses the following items:

  • Bug #1079: Overriding LOGIC field as BIT field doesn't work
  • Bug #1144: Temp filenames not guaranteed unique under Windows®
  • Bug #1286: Fields modifiable in Inquire Mode
  • Bug #1484: Can't enter Euro symbol
  • Bug #1494: Input items with Modifiable=? behave strangely
  • Bug #1554: ILF Editor TOO Smart when APPENDING
  • Bug #1666: --- CLEAR PASS LIST steps on --- TEMP 80
  • Bug #1667: 4.2.7 Java Client hangs when Incorrect Password entered
  • Bug #1673: APPX error when converting an SQL Server® datetime field
  • Bug #1676: Justification in Java client
  • Bug #1689: pos() - invalid curs_reg message reported
  • Bug #1701: Application-only optional children can cause crash
  • Bug #1702: RECEIVE of a group header can cause crash
  • Bug #1703: NULL DATETIME field can confuse ODBC interface
  • Bug #1705: Bad RECEIVE and LOCAL statements compile without error
  • Bug #1751: PRINTER file does not allow duplicate System ID's
  • Bug #1758: Title bar does not display at runtime if rows > 21
  • Bug #1760: Memory leak in BEG/END READ loop
  • Bug #1761: Memory leak in RDBMS READ operations
  • Bug #1763: ERROR statements don't appear on Action Logs
  • Bug #1765: Cannot selectitemswhen>21 rows
  • Bug #1769: Reportwriter doesn't honor runtime record selection changes
  • Bug #1770: Reportwriter crashes when editing WHERE clause
  • Bug #1781: Reportwriter 'Paste' doesn't work
  • Bug #1782: Reportwriter 'Insert Char' doesn't work
  • Bug #1783: Reportwriter buttons not right
  • Bug #1786: ReportWriter problem choosing table for New Query
  • Bug #1787: ReportWriter tutorial for Where is incorrect
  • Bug #1846: CASSERT Message - 'Wrong Calling Convention'
  • ECR #1790, 2342, 2549, et al: Output processes generate extra line feed
  • ECR #4144, 4330, 4534, 4609, et al: Orphan sessions remain on server
IMPORTANT: If you are upgrading from a release prior to 4.2.5, please refer also to the 4.2.5 Release Notes, as a large quantity of changes, corrections, and enhancements were included in that release. Also, read the 4.2.6 Release Notes and 4.2.7 Release Notes. As always, it is highly recommended that you review the Release Notes for all intermediate releases if you are not upgrading incrementally.
SPECIAL NOTE: APPX 4.2.8 includes the new 0AI (Application Installer) application. It is designed to support automated installation of the Open Source Business Applications. Existing customers currently have no need for application 0AI and can safely ignore it.
Bug #1079: Overriding LOGIC field as BIT field doesn't work
  • When overriding the LOGIC fields to BIT data type a problem is detected with the inputs. The Checkboxes always appeared UNCHECKED (if seen from the Java Client) and when checked the values don't seem to work properly in SQL Server. Leaving the fields as varchar(1) is the best method to handle this error.
  • Initially reported fixed in 4.2.4, it appears that the fix for this bug broke LOGIC fields in existing SQL Server tables. You should have been able to override the data type for a LOGIC field from its (new) default of BIT to CHAR(1). But, the rsod.c conversion routines didn't seem to handle CHAR(1) fields.
  • Fixed for 4.2.8 - you should be able to store a LOGIC field in a BIT column, a CHAR column or a VARCHAR column (maybe even a numeric or integer column).
Bug #1144: Temp filenames not guaranteed unique under Windows
  • The APPX file manager was not generating guaranteed-unique file names (for temporary files) on Windows hosts. Namespace collision is unlikely in most cases because the file manager will create a new temporary file whenever a CREATE statement executes - it keeps trying until it finds a temporary file name that is not already in use. But, that makes it impossible to close and re-open a temporary file (which one would you re-open?).
  • On Linux/Unix hosts, the file manager includes the file scope and process ID in the temporary file name. We should use the same naming method on Windows hosts.
  • (Historical note - old Windows systems had an 8 character filename limit; the file manager is stripping off the unique identifier to force temporary file names to be no more than 8 characters long. Since we don't support 8.3 file systems, we can remove this limitation and use longer file names).
  • Fixed in 4.2.8.
Bug #1286: Fields modifiable in Inquire Mode
  • If you're in Initial Setup or Recovery Processing, any field with Modifiable = ? can be modified in Inquire mode.
  • If you're in LIVE OPERATIONS in DELETE MODE, an item that has 'Modifiable?' set to blank is modifiable (it should not be), just like in INQUIRE mode.
  • If you're in LIVE OPERATIONS in KEY ENTRY an item that has 'Modifiable?' set to blank is non-modifiable (it should be modifiable if part of the current key path).
  • Fixed for 4.2.8
Bug #1484: Can't enter Euro symbol
  • Can't enter the Euro symbol using the Java Client. It looks ok when you enter it, but after saving the data & recalling the record, it's replaced by a box character.

  • Fixed for 4.2.8
Bug #1494: Input items with Modifiable=? behave strangely
  • Items with Modifiable set to '?' are outlined inappropriately on the Key Entry screen. In Live Operations they appear with the normal screen background color but in Initial Setup or Recovery Processing they appear as though they were part of the key, although they are not open for input and you cannot tab to them.
  • In Add or Change mode in IS/RP, they are open for input as they should be but a date field does not behave properly. You have to enter the slashes for the date to be formatted right. Also, as reported in Bug #1286, they are erroneously open for input in Inquire mode.
  • All of the above behavior applies if the items have GUI attributes (control RAW TEXT or CALENDAR/CLOCK for the date field). However, if the items are defined without GUI attributes, the Key Entry screen appears fine in LO and the items are not open for input in IS/RP in Inquire mode. Other than that, the rest of the problems remain.
  • Fixed for 4.2.8
Bug #1554: ILF Editor TOO Smart when APPENDING
  • User wanted to APPEND to --- WIDGET a product number. When scanning, the desired field did not appear: SIC CUSTPNR1 PRODUCT NO is a domain X(18).
    The field points to domain SIC SSY SAMEAS PRODUCT NO. SIC Domain is a SAME AS pointing to SSY SAMEAS PRODUCT NO. SSY Domain SAMEAS PRODUCT NO is an Alpha 18. Apparently, the link to the alpha field is too long and tenuous for the ILF editor to trace back.
  • Fixed for 4.2.8
Bug #1666: --- CLEAR PASS LIST

steps on --- TEMP 80

  • Apparently also --- STREAM BUFFER, --- TEMP 32K.
  • Context was where --- CLEAR PASS LIST in a Post-PCF Read FLEP was stepping on the values set in the parent process.
  • Fixed in the 0-apps for release 4.2.8
Bug #1667: 4.2.7 Java Client hangs when Incorrect Password entered
  • If a bad password is entered, the Java client sucks up 50% CPU and does not return an error
  • Fixed in the Java Client code for release 4.2.8
Bug #1673: Appx error when converting an SQL Server datetime field
  • Appx throws an error (which causes a stack dump and causes the current process to abort) when it tries to convert a SQL Server date/time field into Appx format
  • Fixed for 4.2.8.p4 (preview 4)
Bug #1676: Justification in Java client
  • The Java Client seems to justify fields differently than it did before, in situations where an alpha field contains more text than can be shown in the area on the image.
  • It used to always left justify the fields, so you always saw the beginning of the field. Now it seems to right justify the field, so you always see the end of the field, until you move to that particular record in change mode. Then it switches the justification to left.
  • Fixed for release 4.2.8 in the client JAR file.
Bug #1689: pos() - invalid curs_reg message reported
  • If you move the cursor off of all logical regions and press ENTER, a subsequent POSITION statement will get confused (because there is no active region) and you'll get the message mentioned in the title of this bug report.
  • Fixed for 4.2.8
Bug #1701: Application-only optional children can cause crash
  • When you invoke an optional child that specifies only a process type (MENU) and an application ID, Appx invokes the startup menu for the (current operational phase) for the given application.
  • That confuses the menu/widget processor and can cause memory corruption (because the engine finds more optional children than widgets).
  • Fixed for 4.2.8
Bug #1702: RECEIVE of a group header can cause crash
  • When you execute a RECEIVE command and the source and destination operands are not of identical type, the engine creates a compiles a dynamic event point (at run time). If either operand is a GROUP HEADER field, the compiler can gag because it doesn't know the proper application version.
  • Fixed for 4.2.8
Bug #1703: NULL DATETIME field can confuse ODBC interface
  • A NULL DATE, TIME, or DATETIME value can confuse the Appx/ODBC interface causing a stack dump on Windows hosts. This is only an issue with release 4.2.6 and 4.2.7
  • Fixed for 4.2.8
Bug #1705: Bad RECEIVE and LOCAL statements compile without error
  • If you enter a RECEIVE or LOCAL statement that refers to a non-existent field (or you delete a field referenced by a RECEIVE or LOCAL statement), the process compiler will silently ignore the error but will throw an error at run-time.
  • Fixed for 4.2.8
Bug #1751: PRINTER file does not allow duplicate System ID's
  • The PRINTER file in System Administration does not allow two printers to have the same value for the 'system ID'.
  • Changed the key from Unique Alternate to Alternate with Duplicates Allowed
Bug #1758: Title bar does not display at runtime if rows > 21
  • In a simple scrolling input, with the size of the detail frame as '-2', use Window Properties to put a title in the header frame. Run in a standard 21 x 80 window, and all is good. Change row size of the client to 28 or 30 rows, and window title does not show at runtime.
  • Fixed for 4.2.8
Bug #1760: Memory leak in BEG/END READ loop
  • Each execution of a BEG/END READ loop (not each iteration, but each complete execution) leaks a small amount of memory.
  • Fixed for 4.2.8
Bug #1761: Memory leak in RDBMS READ operations
  • When you execute a READ statement (or a keyed PCF read) against a file stored in an RDBMS, the engine leaks a small amount of memory (the query chain should be discarded at the end of the read).
  • Fixed for SQL-Server in 4.2.8.
Bug #1763: ERROR statements don't appear on Action Logs
  • If you run a job with a query that selects records within only one range, and you have ERROR statements executed in a RANGE END frame of an UPDATE, then those ERRORs will not show on the action log. If the data is such that the RANGE-END frame would execute twice, then the first execution will show on the log, but the second will not. It seems as if ERRORs that are executed during the last execution of the RANGE-END frame do not appear on the Action log.
  • Fixed for 4.2.8
Bug #1769: Reportwriter doesn't honor runtime record selection changes
  • If you edit the record selection criteria of a query at runtime, the changes are ignored. The query is run using the record selection criteria as designed.

  • Fixed for 4.2.8
Bug #1770: Reportwriter crashes when editing WHERE clause
  • Reportwriter crashed when trying to edit a WHERE constraint. This happens when you are on the constraint screen for the second time.

  • Fixed for 4.2.8
Bug #1781: Reportwriter 'Paste' doesn't work
  • The paste option always reports that nothing has been cut even though a field has been cut.

  • Fixed for 4.2.8
Bug #1782: Reportwriter 'Insert Char' doesn't work
  • The insert character button does not shift fields correctly. It always seems to insert the space at the beginning of the row.

  • Fixed for 4.2.8
Bug #1783: Reportwriter buttons not right
  • The Ins/Del Char and the Ins/Del Row buttons do not look right. They are auto-GUI buttons and they do not fully cover the underlying text.

  • Fixed for 4.2.8
Bug #1786: ReportWriter problem choosing table for New Query
  • The sequence of events is this.

    • 1. After choosing an application for a new query, I got the tutorial for choosing a new table.
    • 2. After pressing return to get past the tutorial, I got the list of tables but the arrow keys wouldn't work so I clicked on Customers.
    • 3. However, the next tutorial described the A/P Receipts table.
    • 4. When I cancelled, I got the screen asking for the report title for the A/P Receipts table.
    • 5. When I cancelled that, I returned to the menu and selected New Query. Then I got the tutorial for designing a new query on the selected table.
    • 6. After selecting Select, I got the message 'Unable to Locate Process'.
    • 7. After cancelling, I got an 'Error - Record Not in File' message.
  • FYI, this whole unhappy sequence of events can be circumvented at step 2 by pressing NEXT or PREV to wake up the table selection process. However, it does seem like there should be a graceful way to back up if you inadvertently select the wrong table.
  • Fixed for 4.2.8
Bug #1787: ReportWriter tutorial for Where is incorrect
  • The tutorial states that only columns that have been selected using the Select operation are displayed. However, all columns in the table are actually displayed and seem to work OK in Where clauses.

  • Fixed for 4.2.8
Bug #1846: CASSERT Message: 'Wrong Calling Convention'
  • Using the CALL statement to invoke a function in a Windows environment sometimes results in a CASSERT: 'You've CALL'ed C:\WINDOWS\SYSTEM32\kernel32.dll,xxxxx with the wrong calling convention' where 'xxxxx' is the function being called.
  • This is related to ECR 5376, and perhaps to ECR 4762 and others. The CASSERT message, which was added in 4.2.8, indicates that Appx has called a subroutine with an incorrect calling convention.
  • 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 in advance which convention to use. If the designer guesses the wrong one, the CALL statement could result in memory corruption. Thus, the CASSERT is now generated, to advise the designer of the problem. At the same time, APPX attempts to fix the problem itself.
  • 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 APPX is 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).
  • This issue is also addressed in the APPX FAQ system: http://faq.appx.com/cgi-bin/fom.cgi?file=592
ECR #1790, 2342, 2549, et al: Output processes generate extra line feed
  • There had long been an extraneous new line character (\n) at the beginning of each page of an output. This caused the first page of a report to have one line less than it should have had, and resulted in alignment problems.
  • The extraneous \n has now been removed. Additionally, all form feed characters will now be preceded by a carriage return (\r \f).
  • These changes may cause problems for installations that utilized work-arounds to deal with this long-standing issue. For those who would rather retain the old behavior, as opposed to reworking many output processes, a new environment variable has been created. By defining APPX_427_PRINT_FILES, the old behavior will be maintained.
ECR #4144, 4330, 4534, 4609, et al: Orphan sessions remain on server
  • Appxd and appxdsvc.exe have been "fixed" so that an APPX session can more reliably detect that the TCP connection to the client has been lost. This means that the session can then terminate itself instead of hanging around indefinitely as an orphan. There are four environment variables that can be set to override the default settings for appxd. The configuration parameters for the Windows based APPXDSVC service can be specified in the registry. After the service is installed, you would add an Expandable String Value to the Config Key. The Config Key for the APPXDSVC service would normally be found at: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\appxd-8060\Config
  • Configuration parameters for appxdsvce:
    • # TCPEnableKeepAlive = true #Enable TCP dead-connection detection
    • # TCPKeepCount = 8 #Maximum number of keep-alive pings
    • # TCPKeepIdle = 300 #Idle time before ping sent to client (in seconds)
    • # TCPKeepInterval = 60 #Interval between keep-alive pings
    • # TCPNoDelay = true #disable TCP packet filling delay?
  • Environment variables for appxd:
    • APPXD_DISABLE_KEEPALIVE
    • APPXD_KEEPIDLE
    • APPXD_KEEPINTERVAL
    • APPXD_KEEPCOUNT

 

Microsoft, Windows, Windows Server, Windows Server 2000, Windows Server 2003, Windows Vista, Windows XP, Windows 7, Microsoft SQL Server and Microsoft Access are registered trademarks of Microsoft Corporation. All other products may be trademarks or registered trademarks of their respective companies.