Consultor Eletrônico



Kbase P121462: REPOSITION on DEFINE DATASET does not work with query on child data-source
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   1/5/2007
Status: Unverified

FACT(s) (Environment):

OpenEdge 10.1x

SYMPTOM(s):

REPOSITION on DEFINE DATASET does not work with query on child data-source

child data-source query overrides REPOSITION and SELECTION with DEFINE DATASET

For example the following code only finds orders with an order number <=100, but since REPOSITION is specified it is expected that all orders are selected regardless of order number.

DEFINE TEMP-TABLE ttCustomer LIKE Customer.
DEFINE TEMP-TABLE ttOrder LIKE Order.

DEFINE DATASET dsCustOrd FOR ttCustomer, ttOrder
DATA-RELATION relCustOrd FOR ttCustomer, ttOrder REPOSITION
RELATION-FIELDS (ttCustomer.custnum, ttOrder.custnum).

DEFINE QUERY qCustomer FOR customer.
DEFINE QUERY qOrder FOR order.

DEFINE DATA-SOURCE srcCustomer FOR QUERY qCustomer.
DEFINE DATA-SOURCE srcOrder FOR QUERY qOrder.

BUFFER ttCustomer:ATTACH-DATA-SOURCE(DATA-SOURCE srcCustomer:HANDLE).
BUFFER ttOrder:ATTACH-DATA-SOURCE(DATA-SOURCE srcOrder:HANDLE).

QUERY qCustomer:QUERY-PREPARE("FOR EACH Customer NO-LOCK WHERE custnum <= 100").
QUERY qOrder:QUERY-PREPARE("FOR EACH Order NO-LOCK WHERE ordernum <= 100").

DATASET dsCustOrd:FILL().

FIX:

Normally, if REPOSITION is not specified (SELECTION), then you get only the children of the parent of a relation. But coding a query for the data-source of a child relation overrides whether or not there is SELECTION or REPOSITION. If you have a query, the records that satisfy the query are loaded. If you remove the query from the child relation datasource, then the DATASET will behave as SELECTION or REPOSITION.

A documentation bug has been logged to make this behavior clear.