Consultor Eletrônico



Kbase P4503: Records that have been updated in another session don't show the update
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   15/10/2008
Status: Verified

FACT(s) (Environment):

Progress 9.x

SYMPTOM(s):

Records that have been updated in another session don't show the update

CAUSE:

In a multi-user environment, if you do not use the appropriate method and functions to retrieve records the updates to those records, when read, don't display.

The main problem could be the approach taken by the developer.

THE FOLLOWING CODE WILL ILLUSTRATE THE PROBLEM


/* proc1.p  -  IN THE FIRST SESSION */

REPEAT:
FIND FIRST CUSTOMER NO-ERROR.
    DISPLAY CUSTOMER.NAME.
    UPDATE NAME.
   RELEASE CUSTOMER.
    PAUSE.
END.

/* proc2.p  - IN THE SECOND SESSION */

FIND FIRST CUSTOMER NO-LOCK NO-ERROR.
RUN proc3.p.

/* proc3.p */

REPEAT:
FIND FIRST CUSTOMER NO-LOCK NO-ERROR.
 DISPLAY CUSTOMER.NAME.
  PAUSE.
END.


FIX:

You should use the FIND CURRENT and CURRENT-CHANGED functions to have the expected behavior:

In the First Session


/* LOOP.P */

REPEAT:
FIND FIRST CUSTOMER WHERE CUSTNUM = 4 EXCLUSIVE-LOCK NO-ERROR.
  DISPLAY BALANCE.
  UPDATE BALANCE.
END.

In Second Session


/* PROCB.P */

DEF VAR A AS RECID NO-UNDO.
FIND CUSTOMER WHERE CUSTNUM = 4 NO-LOCK NO-ERROR.
A = RECID(CUSTOMER).
RUN PROCB.P (A).

/* PROCB.P */

DEF INPUT PARAMETER B AS RECID NO-UNDO.
FIND CUSTOMER WHERE RECID(CUSTOMER) = B NO-LOCK NO-ERROR.
IF AVAILABLE CUSTOMER THEN
REPEAT:
    DISPLAY BALANCE.
      MESSAGE CURRENT-CHANGED CUSTOMER VIEW-AS ALERT-BOX.
      FIND CURRENT CUSTOMER NO-LOCK NO-ERROR.
  END.