Kbase 18555: SmartDataObject (SDO) Column & Row Validation Procedures and DB-REQUIRED
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  10/16/2008 |
|
Status: Unverified
GOAL:
How and why SmartDataObject column and row-validation procedures may not run if they are DB-REQUIRED and the SmartDataObject (SDO) is being run remotely on an AppServer.
FACT(s) (Environment):
Progress 9.x
SYMPTOM(s):
ADM2
Appserver
FIX:
SmartDataObject validation procedures can be written to validate individual columns (columnnameValidate), entire rows (RowObjectValidate) and entire transactions (TransactionValidate).
These validation procedures are optional and need to be written by creating new internal procedures in the SmartDataObject and need to follow specific naming and error handling conventions.
The column and row validation procedures cannot be DB-REQUIRED if the SmartDataObject will run on an AppServer and the client will not have a database connection. The ADM2 code that runs columnnameValidate and RowObjectValidate within submitRow in data.p runs the procedures with NO-ERROR in case they do not
exist; this is necessary since these procedures are optional. If the procedures are DB-REQUIRED and there is no database connection on the client these procedures will not be included in the proxy code running on the client. The result is that these procedures will not run and an error will not be given.
The fact that an error is not given when the procedure is not found on the client is not a bug, an error cannot be given in this situation because there is no way to determine if the procedure isn't being found because it does not exist at all or if it is DB-REQUIRED and being excluded from the SmartDataObject proxy. The default for new internal procedures created with the AppBuilder is DB-REQUIRED so this setting will need to be explicitly turned off by 4GL programmers for these two types of validation procedures.
The TransactionValidate procedure is run on the AppServer by serverCommit in data.i. The setting of DB-REQURIED for this procedure does not matter since the full SmartDataObject will be running on the AppServer and if the procedure has been written for the SmartDataObject it will be found and run.