Скрытие внешних ключей в XML-файле
При вложении дочерних таблиц в выходные данные XML можно скрыть значения внешнего ключа в дочерних записях. Если приложение-получатель может точно интерпретировать вложенную структуру XML-данных, ему не нужно видеть значение внешнего ключа, повторяющееся в каждой дочерней записи. В таких случаях скрытие значений внешнего ключа уменьшает размер XML-документа и может обеспечить повышение производительности.
Приложения OpenEdge могут правильно интерпретировать вложенную структуру XML-документа, созданного методом WRITE-XML. Однако, если приложение отправляет XML-документ в приложение, не являющееся OpenEdge, необходимо убедиться, что приложение-получатель может правильно интерпретировать вложенные таблицы и скрытые внешние ключи, прежде чем использовать эту опцию в производственной среде.
Элементы XML-файла называются узлами. Чтобы запретить запись поля внешнего ключа в дочернюю временную таблицу, необходимо определить поле внешнего ключа с атрибутом XML-NODE-TYPE, установленным в значение “HIDDEN “. Когда узел скрыт, он не записывается в целевой XML-документ.
Следующий код показывает пример скрытия узла внешнего ключа OrderNum во временной таблице ttOrderLine:
DEFINE TEMP-TABLE ttOrderLine NO-UNDO BEFORE-TABLE ttOrderLineBefore FIELD OrderNum AS INTEGER XML-NODE-TYPE "HIDDEN" FIELD LineNum AS INTEGER FIELD ItemNUm AS INTEGER …
Следующий пример документа XML генерируется при определении временной таблицы ttOrderLine с атрибутом XML-NODE-TYPE “HIDDEN”. Обратите внимание, что данные не содержат поля OrderNum.
<ttOrder> <OrderNum>21</OrderNum> <OrderDate>1998-02-08</OrderDate> <SchipDate>1998-02-13</SchipDate> <PromiseDate>1998-02-13</PromiseDate> <OrderTotal>688.37</OrderTotal> <ttOrderLine> <LineNum>1</LineNum> <ItemNum>43</ItemNum> <Price>13.97</Price> <Qty>38</Qty> <Discount>10</Discount> <ExtendedPrice>477.77</ExtendedPrice> </ttOrderLine> <ttOrderLine> <LineNum>2</LineNum> <ItemNum>9</ItemNum> <Price>18.0</Price> <Qty>13</Qty> <Discount>10</Discount> <ExtendedPrice>210.6</ExtendedPrice> </ttOrderLine> </ttOrder>