Kbase P80929: Dyn: Error 3135 3140 with HAS-RECORDS in AS log file when query of SDO is closed
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  5/18/2004 |
|
Status: Unverified
FACT(s) (Environment):
Dynamics 2.1A
SYMPTOM(s):
Invalid widget-handle. Not initialized or points to a deleted widget. (3135)
Cannot access the HAS-RECORDS attribute because the widget does not exist. (3140)
Thin client session. The above errors show in the appServer log file
CAUSE:
Known problem that occurs when manually calling an entry of on the server side of an SDO and when the query of the SDO is not opened. The entry executes fine but the errors mentioned above are left in the AppServer log file by adm2/data.p/ObtainContextForClient .
This procedure should either check if the hRowObjUpdTable handle is valid or if the query of the SDO is opened before querying hRowObjUpdTable:HAS-RECORD.
FIX:
In adm2/data.p/obtainContextForClient
/* Is this before or after a data request */
{get QueryOpen lData}.
IF NOT lData THEN
DO:
/* If not a query, existence of rowObjUpd indicates a commit, which is
a data request*/
{get RowObjUpdTable hRowObjUpdTable}.
lData = hRowObjUpdTable:HAS-RECORDS.
END.
You can see that lData is used for both checks. However, there is no
checking on the validity of the handle returned by getRowObjUpdTable. It
should be:
/* Is this before or after a data request */
{get QueryOpen lData}.
IF NOT lData THEN
DO:
/* If not a query, existence of rowObjUpd indicates a commit, which is
a data request*/
{get RowObjUpdTable hRowObjUpdTable}.
IF VALID-HANDLE(hRowObjUpdTable) THEN
lData = hRowObjUpdTable:HAS-RECORDS.
END.
That way, if the query isn't open, and there's no RowObjUpd temp-table in
existence yet, lData remains FALSE and the next bit doesn't run:
IF NOT lFirstCall OR lData THEN
RUN genContextList IN TARGET-PROCEDURE (OUTPUT cDataContext).