понедельник, 30 ноября 2009 г.

SharepointImport tool

 

Описание

Данная программа предназначена для переноса данных из файлов XML, которые попадают в папку в файловой системе, в список SharePoint. Обеспечивается наблюдение за появлением файлов в указанной папке и перенос данных в 2 режимах:

  • Добавление нового элемента
  • Обновление существующего элемента

Домашняя страница

http://sharepointimport.codeplex.com/

Состав пакета

  • app.config – исходный файл конфигурации приложения
  • bin – папка с исполнимыми файлами
  • ClassDiagram.cd – диаграмма классов решения
  • example.stp – шаблон списка SharePoint
  • example.xml – Пример файла с данными для импорта
  • MoveData.cs - исходный файл с основным кодом приложения
  • MoveToSPList.csproj – проект приложения MSVC 2008
  • Program.cs - исходный файл
  • Properties – служебная папка проекта
  • Руководство пользователя.docx – этот файл

Системные требования

.NET Framework 3

WSS 3.0 или MOSS 2007

Установка

Просто запустите приложение, находящееся в папке bin\Debug, предварительно вам необходимо настроить файл MoveToSPList.exe.config в соответствии с рекомендациями в секции настройка.

Внимание запуск утилиты должен производиться на машине на которой установлен сервер SharePoint.

Настройка

Настройка приложения производиться с помощью файла конфигурации приложения MoveToSPList.exe.config.

Ниже будет приведен полный текст этого файла, в нем так же присутствуют комментарии описывающие каждый настраиваемый параметр.

Внимание при указании полей списка SharePoint, указывайте внутреннее имя поля (InternalName), на снимке экрана ниже показано как его узнать.

clip_image002

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

<configuration>

<configSections>

<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >

<section name="MoveToSPList.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

</sectionGroup>

</configSections>

<applicationSettings>

<MoveToSPList.Properties.Settings>

<!-- Папка за которой следим -->

<setting name="WatchedFolder" serializeAs="String">

<value>c:\temp</value>

</setting>

<!--Сопоставления полей, сначала идет внутреннее имя Sharepoint, после идет название поля в XML файле -->

<setting name="MappingDictionary" serializeAs="Xml">

<value>

<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<string>Title=Name</string>

<string>ID0=ID</string>

</ArrayOfString>

</value>

</setting>

<!-- Адрес узла на котором расположен список -->

<setting name="SharepointUrl" serializeAs="String">

<value>http://localhost</value>

</setting>

<!-- Имя списка в который вставляются данные -->

<setting name="SharepointListName" serializeAs="String">

<value>Example</value>

</setting>

<!-- Ключевое поле в списке шарепоинт, используется внутреннее имя -->

<setting name="SharepointKeyField" serializeAs="String">

<value>ID0</value>

</setting>

<!-- Имя ключевого аттрибута в импортируемом файле -->

<setting name="XmlKeyField" serializeAs="String">

<value>ID</value>

</setting>

</MoveToSPList.Properties.Settings>

</applicationSettings>

</configuration>

Fast clean SPItems

Задача: быстро очистить список от большого количества элементов.

Решение: Будем использовать пакетное удаление элементов из списка.

private static void ClearList(SPList list)

{

string xmlCaml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Batch>";

string itemNode = @"<Method><SetList Scope=""Request"">" + list.ID +

"</SetList><SetVar Name=\"ID\">{0}</SetVar><SetVar Name=\"Cmd\">Delete</SetVar></Method>";

foreach (SPListItem item in list.Items)

xmlCaml +=

string.Format(itemNode, item.ID.ToString());

xmlCaml +=

"</Batch>";

list.ParentWeb.ProcessBatchData(xmlCaml);

}

Разница между этим методом и последовательным удалением элементов огромная и скорость при увеличении количества элементов падает по линейному закону. Так что крайне рекомендую для очистки списка использовать именно этот код.