Создание папок в библиотеке при отправке формы списка в SharePoint 2010 - PullRequest
0 голосов
/ 19 августа 2011

Я хотел бы знать, возможно ли создавать папки при отправке формы в SharePoint. Я создал настраиваемую форму списка SharePoint в Infopath и хочу добавить действие к кнопке отправки, чтобы создать четыре папки, по одной для каждой из четырех библиотек документов, которые содержат заголовок отправленного элемента.

Однако я вижу, что кнопка пользовательского кода не включена для списка SharePoint в Infopath, поэтому я не могу добавить какой-либо код в фоновом режиме. Рабочие процессы, которые выходят из коробки, также не позволяют мне сделать это, если я что-то упустил ... Как еще можно это сделать?

Заранее спасибо за любую помощь !!

1 Ответ

0 голосов
/ 19 августа 2011

Да, вы можете сделать это, однако, это довольно сложно.

Теоретически вы можете вызвать метод "UpdateListItems" веб-службы Lists.asmx и передать пакетный оператор, но из-за реализации веб-службы Lists вы не можете использовать его в InfoPath. Вот почему вам нужно написать свой собственный веб-сервис, который обертывает метод UpdateListItems, чтобы вы могли использовать его с IP.

Если вы не знаете, как написать веб-службу (и разместить ее в SharePoint), воспользуйтесь функцией поиска StackOverflow или воспользуйтесь Google - множество отличных учебных пособий; -)

После запуска веб-службы необходимо добавить ссылку на службу в веб-службу http://myserver/_vti_bin/Lists.asmx, а затем создать следующий метод:

[WebMethod]
public void UpdateListItems(string listGuid, string xmlBatch)
{
    var batch = new XmlDocument();
    batch.LoadXml(xmlBatch);

    //create an instance of the lists proxy client
    var listSvc = listService = new ListsWebService.Lists();

    //set the url of the client 
    listService.Url = "http://myserver/_vti_bin/Lists.asmx";

    listSvc.UpdateListItems(listGuid, batch);
}

Обратите внимание, что если вы настраиваете URL-адрес listSvc, жестко закодированный (как в этом примере), вам необходимо убедиться, что список, в который вы хотите добавить папки, находится на том же сайте, что и URL-адрес. Если вы хотите сделать этот метод более универсальным (что я рекомендую вам сделать), вы можете просто передать URL-адрес SiteCollection в качестве параметра и установить listSvc.Url в SiteCollectionUrl + "_vti_bin / Lists.asmx".

После настройки вы можете создать подключение для передачи данных к только что созданному вами веб-сервису в InfoPath и настроить его следующим образом: Configuration of the Lists wrapper data connection

Поле «listName» на самом деле является GUID Списка - вы можете получить его через пользовательский интерфейс, нажав «Настройки библиотеки» - «Настройки политики управления информацией», а затем скопировать его из адресной строки в браузере. Пример:

{39d01277-4ba1-4589-90f8-c957b4b2dd09}

Поле «XML» содержит пакетный скрипт для создания папки. Вы можете объявить это статически, или, в вашем случае, вы можете построить его динамически, используя функцию concat (). В этом примере создается папка с именем «MyFolder» в корне библиотеки.

<Batch>
    <Method ID='1' Cmd='New'>
        <Field Name='ID'>New</Field>
        <Field Name='FSObjType'>1</Field>
        <Field Name='BaseName'>MyFolder</Field>
    </Method>
</Batch>

Если вам нужны подпапки, это тоже возможно. В следующем примере будет создана папка с именем «MySubFolder» в папке «MyFolder».

<Batch>
    <Method ID='1' Cmd='New'>
        <Field Name='ID'>New</Field>
        <Field Name='FSObjType'>1</Field>
        <Field Name='BaseName'>MyFolder/MySubFolder</Field>
    </Method>
</Batch>

Затем вы просто добавляете действие кнопки отправки, и все готово: -)

Также обратите внимание, что приведенный выше код является лишь примером (хотя и работает). Если вы используете его в рабочей среде, обязательно добавьте соответствующую регистрацию исключений, потому что она вам понадобится: -)

надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...