|User Global Relation|
User Mode comes as a revelation to those just beginning to use Helix RADE to construct an application. The ease with which Helix RADE can create customized user menus and the levels of security afforded is further surpassed by the ease of movement between the Design Mode of Helix RADE and the network implementation of a Helix application using the Client/Server toolkit.
Experience Helix professionals know that users who reach this point in their knowledge of Helix have only uncovered one half of the key to successful client/server implementation. The other half is the User Global Relation.
Global Relations are created to set up queries on multiple reports, and to serve as a temporary storage place for information. In many cases, an Abacus with the value "True" serves as the link between the Global Relation and every other Relation.
However, when used in a Helix Client/Server environment, any user can change the query criteria in the Global Relation. If a report with a Query attached from the Global Relation were printing and another user changed the Query, the information on the report could be wrong.* This occurs because lookups for a True=True link always return the first record in the Global Relation, and Posts for a True=True link modify the first record in that Relation.
To avoid this accident from happening, create a "UserName" Relation, which will have one record for each user. Each user's record then becomes a place to store and from which to retrieve global variables pertaining only to that user. Name one of the Fields in this Relation "UserName" and create an Index on it.
In the Relation where the data is needed, create an Abacus which contains a UserName tile.
Create a "Lookup" Abacus for each of the Fields that you need from this "User Global" Relation.
Use the "Lookup" Abacus calculations as part of the queries.
When posting to the Global Relation, place the "UserName" Field from the Global Relation in the target hole and place the "UserName" Abacus in the source hole. Remember to post the "UserName" Abacus to the "UserName" Field using the "insert in a created record" operator, along with your other Fields.
*This problem can also be avoided by making the report a "cold" form.