суббота, 20 февраля 2010 г.

InfoPath-формы с кодом

Если Вам известна процедура публикации формы с кодом на SharePoint Server 2007, то будете рады узнать, что теперь эта процедура упростилась многократно за счет введения т.н. SandBox Solutions. Теперь при развертывании формы в библиотеку создается wsp-решение, в которую кладется сборка, содержащая код. Это решение развертывается не на ферму целиком, как это делается в SharePoint 2007, а только на семейство узлов. Естественно, при этом не требуется дополнительная процедура «утверждения».

Рассмотрим пример.

1. Создал шаблон формы из пустого шаблона (простите за тафтологию, но такова терминология J. Т.е. не надо путать шаблон шаблона и шаблон формы J)

2. Добавил в нее текстовое поле

3. В обработчик события загрузки формы добавил такие строчки:
string xpath = "/my:моиПоля/my:поле1";

XPathNavigator field = MainDataSource.CreateNavigator().SelectSingleNode(xpath, NamespaceManager);

            field.SetValue("HelloWorld");

4. Опубликовал в новой библиотеке. При публикации потребовалось сохранить шаблон формы локально на диске. Я назвал его «пустышка с кодом». Библиотеку назвал «Формы InfoPath».

5. Проверил, вот что видится при открытии шаблона в вебе:
clip_image001

Теперь давайте покопаемся поглубже.

Открываем коллекцию решений семейства узлов, содержащее библиотеку, в которой опубликован шаблон. Видим следующее:
clip_image002

В названии решения фигурирует название библиотеки

Нажимаем по подчеркнутой ссылке правой кнопкой, сохраняем содержимое на диске (wsp-файл).

Меняем расширение файла на cab.

Открываем архив, видим два файла:

clip_image003

Открываем манифест:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>

- <Solution SolutionId="0f26055d-8ad7-4b37-b760-b2137b91d869" xmlns="http://schemas.microsoft.com/sharepoint/">

- <Assemblies>

<Assembly Location="________ _ _____.dll" DeploymentTarget="GlobalAssemblyCache" />

</Assemblies>

</Solution>

Тут я думаю все становится понятно:

Решение копирует dll в GAC и все. Форма публикуется в библиотеку и при вызывает dll из GAC.

Комментариев нет:

Отправить комментарий