Поделиться через


Практическое руководство. Использование элементов Microsoft.Office.Interop.InfoPath.SemiTrust, несовместимых с InfoPath 2003

При добавлении кода в шаблон формы, созданный с помощью набора инструментов Microsoft Office InfoPath 2003, или при создании нового шаблона формы, работающего с объектной моделью, совместимой с InfoPath 2003 (как описано в статье Практическое руководство. Создание шаблона формы с управляемым кодом с помощью объектной модели InfoPath 2003), приложение Microsoft Office InfoPath 2007 по умолчанию будет использовать подмножество объектов и элементов, предоставляемых пространством имен Microsoft.Office.Interop.InfoPath.SemiTrust, которые идентичны используемым в InfoPath 2003. Такая схема применяется для обеспечения совместимости с InfoPath 2003. Однако объектная модель, предоставляемая пространством имен Microsoft.Office.Interop.InfoPath.SemiTrust, включает дополнительные объекты и элементы, которые предоставляют новые возможности, добавленные в InfoPath 2007.

Например, интерфейсы PermissionObject и Permission предоставляют абсолютно новые возможности по управлению правами на доступ к данным, которые недоступны в InfoPath 2003. Эти и другие полностью новые объекты, добавленные в пространство имен Microsoft.Office.Interop.InfoPath.SemiTrust, по умолчанию недоступны при открытии или создании шаблона формы с управляемым кодом с помощью объектной модели, совместимой с InfoPath 2003.

Аналогичным образом, хотя интерфейс _XDocument2 предоставляет те же возможности, что и InfoPath 2003, но интерфейс _XDocument3 обновлен для включения дополнительных свойств и методов, добавленных в InfoPath 2007.

Если требуется использовать объекты и элементы, добавленные в InfoPath 2007, в проекте шаблона формы, созданном с помощью объектной модели, предоставляемой пространством имен Microsoft.Office.Interop.InfoPath.SemiTrust, то это возможно, однако код, использующий эти элементы, будет несовместим с InfoPath 2003.

ЗаметкаЗаметка

Все шаблоны форм с бизнес-логикой, созданной с помощью объектной модели, предоставляемой пространством имен Microsoft.Office.Interop.InfoPath.SemiTrust, независимо от того, используют ли они объекты и элементы, совместимые с InfoPath 2007, не поддерживаются для шаблонов форм с поддержкой веб-обозревателя, развернутых в Office Forms Server 2007 или Microsoft Office SharePoint Server 2007 с Служба InfoPath Forms Services. Бизнес-логика для шаблонов форм с поддержкой веб-обозревателя должна использовать новую объектную модель InfoPath с управляемым кодом, предоставляемую пространством имен Microsoft.Office.InfoPath.

Пример

Создание объектной переменной приложения или XDocument для доступа к элементам новой объектной модели

Чтобы получить доступ к новым объектам и элементам, доступным в пространстве имен Microsoft.Office.Interop.InfoPath.SemiTrust, необходимо объявить и привести объектные переменные к корректной версии интерфейса, реализующей эти элементы. По умолчанию переменные thisXDocument и thisApplication получают доступ к версиям, совместимым с InfoPath 2003, интерфейсов _XDocument2 и _Application2 соответственно. Для доступа к интерфейсам _XDocument3 и _Application3, предоставляющим доступ к новым возможностям, необходимо объявить объектную переменную типа _XDocument3 или _Application3, а затем привести объект, возвращенный переменной thisXDocument или thisApplication, к типу, указанному в следующих примерах.

// Declare an object variable of type _XDocument3 and
// cast the object returned by the thisXDocument variable to
// the same type.
_XDocument3 thisXDocument3 = (_XDocument3)thisXDocument;
' Declare an object variable of type _XDocument3 and
' cast the object returned by the thisXDocument variable to
' the same type.
Dim thisXDocument3 As _XDocument3 = _
   DirectCast(thisXDocument, _XDocument3)
// Declare an object variable of type _Application3 and
// cast the object returned by the thisApplication variable to
// the same type.
_Application3 thisApplication3 = (_Application3)thisXDocument;
' Declare an object variable of type _Application3 and
' cast the object returned by the thisXApplication variable to
' the same type.
Dim thisDocument As _XDocument3 = _
   DirectCast(thisXDocument, _XDocument3)

Доступ к новому объекту из объектной переменной приложения или XDocument с помощью метода доступа

После создания переменной последней версии типа _XDocument3 или _Application3 можно воспользоваться ею для доступа к объектам и элементам, предоставляемым новыми возможностями InfoPath 2007.

В следующем примере демонстрируется использование объектной переменной типа _XDocument3 с методом доступа Permission для доступа к новому интерфейсу Permission и его свойству Enabled с целью определить, включены ли параметры разрешений для формы.

// Declare an object variable of type _XDocument3 and
// cast the object returned by the thisXDocument variable to
// the same type.
_XDocument3 thisXDocument3 = (_XDocument3)thisXDocument;

// Use the object variable to access the later version object and
// property.
thisXDocument.UI.Alert(thisDocument3.Permission.Enabled.ToString());
' Declare an object variable of type _XDocument3 and
' cast the object returned by the thisXDocument variable to
' the same type.
Dim thisXDocument3 As _XDocument3 = _
   DirectCast(thisXDocument, _XDocument3)

' Use the object variable to access the later version object and
' property.
thisXDocument.UI.Alert(thisDocument3.Permission.Enabled.ToString())

Доступ к объекту с версией и приведение к типу версий

Если объект, существовавший в объектной модели InfoPath 2003, получает новые добавленные свойства или методы, то объект, реализующий эти новые элементы, получит имя с версией.

Например, объект ViewInfo не предоставляет доступа к двум новым свойствам, которые доступны только при использовании объекта ViewInfo2 с версией: свойствам Caption и HideName.

Чтобы получить доступ к этим свойствам, необходимо объявить объектную переменную с типом ViewInfo2 и привести объект, возвращенный свойством ViewInfos объектной переменной _XDocument3, к типу ViewInfo2, как показано в следующем примере.

// Declare an object variable of type _XDocument3 and
// cast the object returned by the thisXDocument variable to
// the same type.
_XDocument3 thisXDocument3 = (_XDocument3)thisXDocument;

// Declare an object variable of type ViewInfo2 and cast the object 
// returned by the ViewInfos property to that type.
ViewInfo2 thisView = (ViewInfo2)thisXDocument3.ViewInfos["View2"];

// Display the value of the new HideName property.
thisXDocument3.UI.Alert(thisView.HideName.ToString());
' Declare an object variable of type _XDocument3 and
' cast the object returned by the thisXDocument variable to
' the same type.
Dim thisXDocument3 As _XDocument3 = _
   DirectCast(thisXDocument, _XDocument3)

' Declare an object variable of type ViewInfo2 and cast the object 
' returned by the ViewInfos property to that type.
Dim thisView As ViewInfo2 = _
   DirectCast(thisXDocument3.ViewInfos("View2"), ViewInfo2)

' Display the value of the new HideName property.
thisXDocument3.UI.Alert(thisView.HideName.ToString())