CHCS FileMan includes a number of enhancements in output functionality. The existence of these enhancements impacts on portability in two ways:
1) Specifications exist in CHCS Print and Sort Templates that have no meaning to DHCP FileMan.
2) Even without a difference in the stored Templates, the behavior of the two systems will be different in certain ways.
The first of these two problems is the more serious type of impact. Let us look at nine CHCS enhancements, keeping in mind both types of portability issues, the "structure" issue and the "behavior" issue.
CHCS FileMan offers the developer three ways to answer the
query that are not available to the user of DHCP FileMan Version 20:
1) Sort by: FIELD;1
tells CHCS FileMan to ask for "1" Sort value for the Field named "FIELD".
2) Sort by: FIELD;2
tells CHCS FileMan to ask for a list of values for the Field named "FIELD".
3) Sort by: ^GLOBAL(
tells CHCS FileMan to take the list of Entry numbers found (at run time) in the global array descendant from the root "^GLOBAL(" to use for sorting. Within this kind of Sort specification, the developer can optionally include a second-level sort, a third-level sort, etc., so that, for example, a list of 25 Internal Entry Numbers can appear sorted alphabetically by name, or whatever.
Portability Effect: SERIOUS. Applications developed with CHCS FileMan will possibly include such "Sort By" logic in their Sort Templates. The ";1" and ";2" type of logic would be ignored if ported to a DHCP environment, and the "^GLOBAL(" type of logic would cause DHCP FileMan to abort output. Therefore, all CHCS Sort Templates need to be vetted for these three types of "list sorting". A programmer workaround would have to be applied to every instance found; usually, such a workaround would require substitution of a hard-code routine for the Sort Template.
When a CHCS developer stores sort logic in a Sort Template, he is allowed to enter Computed Expressions from which FileMan will calculate, at run time, the "FROM" and "TO" values on which to sort. Thus, for example, the expressions "TODAY-30" and "TODAY" could be specified as a date range for sorting, and their values would be calculated on the day of the output. DHCP FileMan stores no such information within its Sort Templates.
Portability Effect: SERIOUS. Applications developed with CHCS FileMan will possibly include such logic in their Sort Templates. They would sort incorrectly if ported to DHCP FileMan. Such Sort Templates can be quickly spotted, because they have a characteristic node number 22. If, then, there exists a Global node at
in DHCP, then the Sort Template with Internal Entry Number 'N' will not be portable to CHCS, and re-programming will be needed.
In CHCS FileMan's output module, the Sort Specifier ";X" can be used to tell FileMan which Cross-reference of a Sort Field to use. For example,
Sort By: SSN;X2
says "use Cross-reference #2 of the SSN Field". DHCP FileMan (Version 20) has no equivalent capability, although a similar functionality (using different syntax) is now under development for Version 21.
Portability Effect: SERIOUS. Applications developed with CHCS FileMan will possibly include such ";X" Specifiers in their Sort Templates. Such Specifiers would be ignored if ported directly to a DHCP environment, resulting in undoubtedly significant changes in the output of the applications. Therefore, all CHCS Sort Templates need to be vetted for ";X" before being sent to DHCP. If a ";X" were found, a programmer would have to decide on a workaround; in the worst case, such a workaround might require substitution of a hard-coded routine for the Sort Template.
A CHCS Print Template can include in the "DHD" Header Field the value "?" (a single question-mark character). This tells CHCS FileMan to ask the user, at run-time, for a report heading. No default answer to the "HEADING:" query is prompted in this case. DHCP FileMan Print Templates do not support a similar functionality, although, under programmer control, the Output module of DHCP FileMan can be called in such a way that the user will be asked at run time for the output Header.
Portability Effect: Requires conversion. At the least, any CHCS Print Template being ported to a DHCP environment needs to have its "?" Headers removed. The result of this step would be that an Output which in CHCS asked the user for an idiosyncratic, run-time Header, would, in DHCP, run with a generic Header. If this 'cosmetic' difference in functionality were not acceptible, re-programming would be required.
CHCS FileMan includes a developer tool called the Print Formatter. This is essentially an alternate method for creating a Print Template, via use of the full-screen editor in ScreenMan, rather than sequential answering of the scrolling "THEN PRINT FIELD:" queries. Print Templates created using this Formatter can, in general be ported to CHCS.
Portability Effect: Requires conversion. A trivially-easy modification needs to be made to CHCS Print Templates that were created with the Print Formatter, should they be ported to DHCP. Such Templates characteristically store information in Global subscripts
These nodes need to be KILLed before the Templates are moved to CHCS FileMan, because of an incompatibility in Global structure. That is, DHCP FileMan stores a different kind of information in
namely, information about "FileGram" and "Extract Files" that use the Template.
Whereas VA FileMan prints "SUBTOTAL" on a report, e.g.,
CHCS FileMan prefixes the word "SUBTOTAL" with the name of the Field being subtotalled, e.g.,
MONTH SUBTOTAL 456.66
Portability Effect: Minor. This is a "behavior" issue only. A DHCP application package could easily include one or more Print Templates that include subtotalling.
Such Print Templates would generate cosmetically different (more verbose) output under CHCS. Vice versa, CHCS applications "count on" the extra output, and if it were missing in the porting to DHCP, a design intent might be subtly subverted.
When a user is running the CHCS FileMan Search Option on a File containing more than fifty Entries, he is allowed to specify that the search shall terminate after a specified number of "MATCHES". This addition to the "Search" logic is useful when a user has no idea how many Boolean matches he will find, and wants the search to stop if it finds "a lot" -- without the user needing to be present and hitting an "abort" (Control-C) key. DHCP FileMan has no equivalent feature.
Portability Effect: Minor. This discrepant behavior would be a user-training issue only, assuming that the same user were to "cross over" from DHCP to CHCS, or vice versa.
One last small CHCS enhancement to FileMan is that Specifiers containing lower-case alphabetic characters (e.g., ";c2", or ";s1") are allowed to be entered in the creation of Print, and Sort Templates.
Portability Effect: Nil. CHCS FileMan internally converts such Specifiers to upper-case, so that any Template sent from CHCS to a DHCP environmnent would contain upper-case-only Specifiers, which DHCP FileMan can parse.
1. Sort Templates containing ";1", ";2", and ";X", Specifiers, as well as "^GLOBAL(" sort logic and Computed "FROM-TO" values, need to be examined by a programmer to devise workarounds. Note that DHCP FileMan Version 21, when it becomes available, should offer a straightforward functional equivalent for
Sort By: ^GLOBAL( and
Sort By: FIELD;X
2. Print Templates containing a "DHD" value equal to the character "?" need to be examined by a programmer to devise a workaround. At the very least, the "?" must be removed.
3. Nodes "1" and "2" of Print Templates need to be KILLed.