About constraint exception messages
When a SQL constraint exception is thrown from the application database, the IDO Request layer catches the exception and can build a translatable message from the SQL constraint name and type, if a message for that constraint name exists in the ObjectMainMessages table. Different constraints can use the same basic message, which varies only by the different object names that are referenced in the message text.
The &1 entered already exists.
In this example, the &1 substitution expression could refer to any one of hundreds of different objects.
However, the text to be substituted (or the object name that references the text) cannot be passed when the constraint exception occurs. The IDO Request layer can only pick up the constraint name and type from the caught exception. The ObjectBuildMessages table contains child records that reference either a message number defined on the Maintain Application Messages form or another object name, as defined on the Maintain Application Message Objects form.
Thus, the same base message from the ApplicationMessage table can be used by many different constraints, each of which defines a different set of references for the substitution text placeholders in the message.