Ссылается на COM-компонент, который вы используете для переписи внутренней функциональности функций CURSORTOXML( ), XMLTOCURSOR( ) и XMLUPDATEGRAM( ).

Вы можете создать COM-компонент в Visual FoxPro, Visual C/C++, Visual Basic или любом другом инструменте, позволяющем создать COM-компоненты с возможностью реализации интерфейсов.

_VFP.VFPXMLProgID [=cValue]

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

cValue

Указывает ProgID класса COM-компонента, чьи функции переписывают функциональность перечисленных XML функций Visual FoxPro. Установка cValue в его дефолтное значение - пустая строка (""), возвращает систему к использованию внутренних реализаций этих функций.

Expand imageПримечания

Класс должен использовать реализацию IVFPXML интерфейса из библиотеки типов Visual FoxPro. Для получения методов для переписи, откройте Object Browser из меню Tools. Из Microsoft Visual FoxPro Type Library, перетащите интерфейс IVFPXML в программный (.prg) файл.

Expand imageПример

Приведенынй ниже пример создает классы, которые замещают функции CURSORTOXML( ), XMLTOCURSOR( ) и XMLUPDATEGRAM( ). Создайте проект для этих классов и введите код дескриптора пользовательских XML функций в эти три метода. VesrNum представляет номер версии Visual FoxPro.

  CopyCode imageСкопировать код
DEFINE CLASS MyXMLClass AS session OLEPUBLIC
   IMPLEMENTS IVFPXMLVerNum IN "VisualFoxPro.Application.VerNum"

   * замещает CURSORTOXML( ). 
   PROCEDURE IVFPXMLVerNum_CursorToXML(bstrAlias AS STRING, ; 
      nOutputFormat AS Number, nFlags AS Number, ; 
      nRecords AS Number, bstrOutputFile AS STRING, ; 
      bstrSchema AS STRING, bstrSchemaLocation AS STRING, ; 
      bstrNameSpace AS STRING, pVFP AS VARIANT) AS VARIANT ; 
      HELPSTRING "Converts from a Cursor to XML"
      * введите здесь ваш код.
   ENDPROC

   * замещает XMLTOCURSOR( ).
   PROCEDURE IVFPXMLVerNum_XMLToCursor(pvarXMLSource AS VARIANT, ; 
      bstrCursorName AS STRING, nFlags AS Number, pVFP AS VARIANT) ; 
      AS Number HELPSTRING "Converts from XML to a Cursor"
      * введите здесь ваш код. 
   ENDPROC

   * замещает XMLUPDATEGRAM( ).
   PROCEDURE IVFPXMLVerNum_XMLUpdateGramVerNum( nFlags AS Number, ; 
      bstrCursorList AS STRING, pVFP AS VARIANT , ; 
      bstrSchemaLocation AS STRING ) AS VARIANT; 
      HELPSTRING "Generates an XML UpdateGram"
      * введите здесь ваш код. 
   ENDPROC

   * Включено для совместимости назад с предыдущими версиями этого интерфейса.
   PROCEDURE IVFPXMLVerNum_XMLUpdateGram(nFlags AS Number, ; 
      bstrCursorList AS STRING, pVFP AS VARIANT) AS VARIANT; 
      HELPSTRING "Generates an XML UpdateGram"
      * введите здесь ваш код.
   ENDPROC

ENDDEFINE

Когда вы закончите, постройте из вашего проекта dynamic-link library (.dll) или исполнимый (.exe) файл. Установите свойство VFPXMLProgID в корректное значение ProgID для вашего класса. Например, если имя вашего проекта - MyXMLProj, вы должны установить VFPXMLProgID используя приведенную ниже строку кода:

  CopyCode imageСкопировать код
_VFP.VFPXMLProgID = "MyXMLProj.MyXMLClass"

С _VFP VFPXMLProgID, установленным в конкретный ProgID, вызовы CURSORTOXML( ), XMLTOCURSOR( ) или XMLUPDATEGRAM( ) будут перенаправлены к соответствующему методу класса, указанного этим ProgID. Кроме того, методу направляется ссылка на _VFP, обеспечивая путь для доступа и управления данными в курсорах и переменных памяти. Для получения более подробной информации, смотрите Свойства, методы и события системной переменной _VFP.

До версии Visual FoxPro 8.0, XMLUPDATEGRAM( ) не имело параметра cSchemaLocation; поэтому и интерфейс различается. Visual Foxpro поддерживает оба интерфейса и сначала ищет текущий. Если это не удалось, то Visual FoxPro ищет более ранний интерфейс.

Приведенное ниже представляет собой образец определения класса для более раннего интерфейса, без параметра cSchemaLocation:

  CopyCode imageСкопировать код
DEFINE CLASS MyXMLClass AS session OLEPUBLIC
   IMPLEMENTS IVFPXML IN "VisualFoxPro.Application.8"

   * замещает CURSORTOXML( ). 
   PROCEDURE IVFPXML_CursorToXML(bstrAlias AS STRING, ; 
      nOutputFormat AS Number, nFlags AS Number, ; 
      nRecords AS Number, bstrOutputFile AS STRING, ; 
      bstrSchema AS STRING, bstrSchemaLocation AS STRING, ; 
      bstrNameSpace AS STRING, pVFP AS VARIANT) AS VARIANT ; 
      HELPSTRING "Converts from a Cursor to XML"
      * Введите здась свой код. 
   ENDPROC

   * замещает XMLTOCURSOR( ).
   PROCEDURE IVFPXML_XMLToCursor(pvarXMLSource AS VARIANT, ; 
      bstrCursorName AS STRING, nFlags AS Number, pVFP AS VARIANT) ; 
      AS Number HELPSTRING "Converts from XML to a Cursor"
      * Введите здась свой код. 
   ENDPROC

   * замещает XMLUPDATEGRAM( ).
   PROCEDURE IVFPXML_XMLUpdateGram(nFlags AS Number, ; 
      bstrCursorList AS STRING, pVFP AS VARIANT) AS VARIANT;
      HELPSTRING "Generates an XML UpdateGram"
      * Введите здась свой код. 
   ENDPROC

ENDDEFINE

Expand image Смотрите также