Отражает изменения, сделанные в буфферированной таблице или курсоре, в XML UpdateGram и возвращает символьную строку, содержащую UpdateGram.

XML UpdateGram представляет условия "before" и "after" в изменной части таблицы или курсора Visual FoxPro. Через дополнительные процессы вы можете использовать UpdateGram для передачи данных, представленных документом XML UpdateGram.

Замечание:
Для использования функции XMLUPDATEGRAM( ), вы должны использовать команду SET MULTILOCKS ON и разрешить буфферирование таблицы.

Совет:
Перед вызовом функции XMLUPDATEGRAM( ), вы должны указать список ключевых полей с помощью функции CURSORSETPROP( ) в свойстве KeyFieldList для существующих курсоров и таблиц. Если выне укажите ключевые поля, Если вы не укажите ключевых полей, оба представления - "before" и "after" будут содержать все поля таблицы. Если вы укажете одно или более ключевых полей, то только эти поля появятся в секции - before.

XMLUPDATEGRAM( [ cAliasList [, nFlags [, cSchemaLocation]]])

Параметры

cAliasList

Указывает разделенный запятыми список открытых таблиц или курсоров, перечисленных либо по имени, либо по номерам рабочих областей указанных в любой комбинации, для включения в XML UpdateGram. Если вы не определите значения для параметра или укажете  в качества параметра cAliasList пустую строку ("") , Visual FoxPro будет использовать все открытые таблицы и курсоры в текущей сессии данных, которые содержат буфферированные изменения.
nFlags

Определяет - будет ли возвращен форматированный файл или нет. В приведенной ниже таблицы перечислены кумулятивные флажки для nFlags.

nFlag Bit Описание вывода

0

0000

(По умолчанию) Использовать XML в кодировке UTF-8.

1

0001

Использовать неформатированный, например, длинную строку, содержащую XML.

2

0010

Включить пустые элементы с обоими - открывающими и закрывающими тэгами, например, <cc04><cc04/>.

4

0100

Сохранять пустые пространства в полях.

8

1000

Упаковывать мемо-поля в секциях CDATA.

16

10000

Кодировка вывода (Output encoding).

32

100000

Кодировка вывода (Output encoding).

32768

none

Указывает, что должна быть использована кодовая страница.

Замечание:
При использовани кодировки  UTF-8 (по умолчанию), декларация XML не содержит пары  Encoding= attribute (то есть, в случае, если мы не указали аттрибута, то это означает что используется кодировка UTF-8).

Когда кодировка вывода установлена в используемую по умолчанию кодовую страницу курсора или таблицы, то аттрибут кодировки будет записан в соответствии с приведенной ниже таблицей.
Замечание:
Флажки кодировок устанавливаются комбинацией битов 4 и 5 (0010000).

Флажок кодировки (Encoding flag) Биты 4 и 5 Описание

+0

00

(По умолчанию) Windows 1252

+16

01

Установить аттрибут кодировки в кодовую страницу курсора.

+32

10

Установить аттрибут кодировки в UTF-8 (без трансляции символов).

+48

11

Установить аттрибут кодировки в UTF-8 и транслировать двух-байтные символы в UTF-8.

cSchemaLocation

Указывает имя и местоположение схемы разметки, если она существует.
Замечание:
Вы должны представить схему разметки.

Например, предположим что вы послали схему, называемую mySchema.xsd параметру cSchemaLocation, в таком случае созданный UpdateGram содержит аттрибут схемы разметки в том виде, в каком он показан в XML документе, приведенном ниже:
  Скопировать код
<ROOT xmlns:updg="urn:schemas-microsoft-com:xml-updategram">
<updg:sync mapping-schema="mySchema.xsd" >
<updg:before>

Возвращаемое значение

Символьный тип данных. XMLUPDATEGRAM( ) возвращает символьную строку, содержащую XML UpdateGram.

Примечания

Вы можете использовать XMLUPDATEGRAM( ) с OLE DB Provider для Visual FoxPro. Однако, свойство _VFP VFPXMLProgID не поддерживается, так как системная переменная  _VFP не поддерживается в OLE DB Provider.

Замечание:
Для использования Visual FoxPro OLE DB Provider совместно с XMLUPDATEGRAM( ), вы должны проинсталлировать MSXML 3.0 на компьютер, на котором имеется OLE DB Provider.

SQL Server и Visual Studio поддерживают формат DiffGram для обновления XML. Однако, SQL XML требует схемы разметки для поддержки этого формата. Поэтому, XMLUPDATEGRAM( ) не поддерживает такой формат.

Во избежание возможных ошибок, генерируемых XMLUPDATEGRAM( ) на таблицах, содержащих поля Memo или General, используйте функцию CURSORSETPROP( ). Приведенный ниже пример показывает, как включить мемо поля в XML UpdateGram путем установки свойстав KeyFieldList с помощью CURSORSETPROP( ):

  Скопировать код
SET MULTILOCKS ON
CREATE CURSOR Test (mField M, cField I AUTOINC)
INSERT INTO Test (mField) VALUES ("123456789")
INSERT INTO Test (mField) VALUES ("23456789")
INSERT INTO Test (mField) VALUES ("3456789")
INSERT INTO Test (mField) VALUES ("456789")
CURSORSETPROP("Buffering",5)
CURSORSETPROP("keyfieldlist",'cField')
UPDATE Test SET mField = "XXXXXXX" WHERE cField < 3
STRTOFILE(XMLUPDATEGRAM(),'xmlupdate.txt')
MODIFY FILE xmlupdate.txt
RETURN

Для записи данных мемо-поля, включенных в XML UpdateGram на SQL Server, вы должны использовать детальную схему на SQL Server и ссылку на схему в XML UpdateGram.

В противоложность функции CURSORTOXML( ), XMLUPDATEGRAM( ) не принимает во внимание установки SET FIELDS и читает непосредственно из подложенного курсора. Для изменения структуры таблицы перед вызовом функции XMLUPDATEGRAM( ), вы должны скопировать данные в новый курсор. Например, для изменения поля типа Numeric в поле типа Currency, приведенный ниже пример использует предложение SQL SELECT для создания нового курсора и использует этот курсор с XMLUPDATEGRAM( ). Пример берет поле Total_Price field как поле currency, разрешает буфферирование с помощью  CURSORSETPROP( ), добавляет налог с продаж с помощью команды REPLACE и создает XML UpdateGram, используя функцию XMLUPDATEGRAM( ).

  Скопировать код
SELECT OrderID, CustID, NTOM(Total_Price) as Total_Price;
FROM Orders INTO CURSOR New_Orders READWRITE
CURSORSETPROP("Buffering", 5, "New_Orders")
REPLACE Total_Price WITH (Total_Price * 1.083)
cXMLUpdg = XMLUPDATEGRAM("New_Orders")

При использовании флажка 32768, флажки 16 и 32 установок могут определять - какая кодовая страница будет применена в зависимости от типа данных, записанных вами в  XML. Приведенная ниже таблица показывает возможные комбинации установок и какая кодовая страница будет применена в зависимости от примененной комбинации.

Для XML документов, записанных с установленным флажком  32768, применяются приведенные ниже кодовые страницы.

Flag 16

Flag 32

Флажок 32768 установлен

Не установлен

Не установлен

XML документы: Window-1252.

Unicode данные: code page 1252.

Символьные данные: кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS. (binary)

True (.T)

Не установлен

XML документы: Плюс свойство CodePage курсора. Если свойство CodePage  объекта XMLField отличается (больше) от нуля (0) и значение не соответствует кодовой странице курсора, то генерируется ошибка.

Unicode данные: свойство Code page объекта курсор.

Символьные данные: нет. Вместо этого используются текущие данные из таблиц Visual FoxPro (.dbf).

Не установлен

Установлен

XML документы: UTF-8 code page.

Unicode данные: UTF-8 code page.

Символьные данные: кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS, в этом случае не производится дополнительной трансляции символов в UTF-8.

Установлен

Установлен

XML документы: UTF-8 code page.

Unicode данные: UTF-8 code page.

Символьные данные: кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS, в этом случае, они транслируются в UTF-8 используя кодовую страницу, определяемую текущей установкой SYS(3005).

Для  XML документов, записанных без установки флажка 32768, применяются приведенные ниже кодовые страницы.

Flag 16

Flag 32

Флажок 32768 не используется

Не установлен

Не установлен

XML документы: Window-1252.

Unicode данные: code page 1252.

Символьные данные: кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS.

True (.T)

Не установлен

XML документы: свойство CodePage курсора

Символьные данные: нет. Вместо этого используются текущие данные из таблиц Visual FoxPro (.dbf).

Unicode данные: свойство кодовой страницы объекта курсора.

Не установлен

Установлен

XML документы: UTF-8 code page.

Unicode данные: UTF-8 code page.

Символьные данные: кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS, в этом случае не производится дополнительной трансляции символов в UTF-8.

Установлен

Установлен

XML документы: UTF-8 code page.

Unicode данные: UTF-8 code page.

Символьные данные: кодовая страница по умолчанию, если поле не маркировано как NOCPTRANS, в этом случае, они транслируются в UTF-8 используя кодовую страницу, определяемую текущей установкой SYS(3005).

Для получения подробной информации о преобразовании XML в Visual FoxPro данные, смотри статью  Преобразования между XML и данными Visual FoxPro.

Смотри также