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.