Kbase P120179: Dataset. Relations are lost when writing dataset with MIN-SCHEMA.
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  11/30/2006 |
|
Status: Unverified
FACT(s) (Environment):
OpenEdge 10.x
SYMPTOM(s):
Dataset DATA-RELATION is lost after writing and reading
Relations are lost when writing dataset with MIN-SCHEMA.
Lost DATA-RELATION when writing dataset with MIN-SCHEMA.
Using WRITE-XMLSCHEMA and READ-XMLSCHEMA
CAUSE:
This is a known issue being investigated by Development
FIX:
In order to get the data-relation definition in the standard XML Schema <keyref> construct, the parent fields in the relation must form a UNIQUE index. So if for example you have:
DEFINE TEMP-TABLE ttChild
FIELD ParentId AS INTEGER
FIELD ChildId AS INTEGER
FIELD ChildRefId AS INTEGER
FIELD OtherId AS INTEGER
INDEX ParentChild IS UNIQUE PRIMARY parentId ChildId
INDEX ChildRefId ChildRefId.
this needs to be changed to :
DEFINE TEMP-TABLE ttChild
FIELD ParentId AS INTEGER
FIELD ChildId AS INTEGER
FIELD ChildRefId AS INTEGER
FIELD OtherId AS INTEGER
INDEX ParentChild IS UNIQUE PRIMARY parentId ChildId
INDEX ChildRefId IS UNIQUE ChildRefId.
Please note that this workaround won't be effective if you cannot have a unique index on parent fields of the data-relation like for example in the case of multiple ttOrderline with the same item-num:
DEFINE TEMP-TABLE ttOrder LIKE Order
INDEX idxOrder IS UNIQUE PRIMARY order-num.
DEFINE TEMP-TABLE ttOrderLine LIKE Order-line
INDEX idxOrderline IS UNIQUE PRIMARY order-num line-num.
DEFINE TEMP-TABLE ttItem LIKE item
INDEX idxItem IS UNIQUE PRIMARY item-num.
DEFINE DATASET dsOrderOrderline FOR ttOrder,ttOrderline,ttItem
DATA-RELATION drOrderOrderline FOR ttOrder,ttOrderline
RELATION-FIELDS(order-num,order-num) NESTED
DATA-RELATION drOrderlineItem FOR ttOrderline,ttItem
RELATION-FIELDS(item-num,item-num).
/* Write with full schema */
DATASET dsOrderOrderline:WRITE-XMLSCHEMA('FILE','test/dsOrderOrderline1.xsd',yes,?,no).
/* Write with min schema */
DATASET dsOrderOrderline:WRITE-XMLSCHEMA('FILE','test/dsOrderOrderline2.xsd',yes,?,yes).