Задача: обеспечить создание узла для пользователя в зависимости от его роли.
Решение: Прочитать документ “Руководства по установке шаблона личного сайта на основе ролей”. И соответственно следовать инструкциям
Задача: обеспечить создание узла для пользователя в зависимости от его роли.
Решение: Прочитать документ “Руководства по установке шаблона личного сайта на основе ролей”. И соответственно следовать инструкциям
Задача: быстро очистить список от большого количества элементов.
Решение: Будем использовать пакетное удаление элементов из списка.
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);
}
Разница между этим методом и последовательным удалением элементов огромная и скорость при увеличении количества элементов падает по линейному закону. Так что крайне рекомендую для очистки списка использовать именно этот код.
Для шарепоинта существуют целые наборы типовых решений предоставляемых самой компанией Microsoft
http://technet.microsoft.com/ru-ru/windowsserver/sharepoint/bb407286.aspx
Только нужно обратить особенное внимание на язык решения :)
Очень уважаемый мною человек бился в течении 2 дней над этой проблемой, просто скачал не то.
Так вот обращайте внимание на детали. Первая ссылка на этой странице указывает на 40 шаблонов на АНГЛИЙСКОМ языке.
А вот ссылка на 20 шаблонов содержит именно локализованные версии.
Разобрались с этим только после всего цикла троблешутинга, были перевернуты и логи системы и шарепоинта и разные версии WSS. Веселья было много. В конце концов я просто посмотрел солюшены и НЕ обнаружил там ветки 1049, которая собственно и указывает на наличие русского языка.
Так что внимательно читайте странички.
Возникла проблема: при добавлении Custom Field в библиотеку документов появилось предупреждение:
В большинстве клиентских программ данный тип поля не допускает изменения и может препятствовать сохранению документов в этой библиотеке.
Поиск по русскому интернету ничего не дал, тогда пришлось найти откуда WSS берет это значение, оказалось из файла
12\Config\Resources\wss.ru-ru.resx
и ключа fldedit_FieldTypeWarningForDocLibSupport
соответственно предупреждение на английском выглядит так
This field type cannot be edited from most client programs and might block the programs from saving documents to this library.
И решение сразу нашлось вот здесь
Задача: после добавления нового элемента перейти на форму редактирования
Решение: Создаеться EventReciver и добавляется следующий код. На что особенно следует обратить внимание. Ни каким кастомайзингом вы этого не добьетесь, в момент щелчка по кнопке OK просто нет идентификатора записи поэтому и переходить некуда.
Это решение позволяет избежать этой ситуации.
Отдельные комментарии присутствуют в коде.
public override void ItemAdding(SPItemEventProperties properties)
{
// Get a "reference" to the list
SPSite siteColl = new SPSite(properties.SiteId);
SPWeb site = siteColl.OpenWeb(properties.RelativeWebUrl);
SPList list = site.Lists[properties.ListId];
// Вызываем базовый метод и ничего не делаем, если это не наш список
if (!list.DefaultViewUrl.Contains("Lists/Orders"))
{
base.ItemAdding(properties);
return;
}
// А вот тут идет обработка перехода с конкретной страницы, ну не нужен мне этот обработчик везде :)
if (_currentContext.Request.CurrentExecutionFilePath.Contains("CopyListItem.aspx"))
{
base.ItemAdding(properties);
return;
}
// Add the item and fill it with the values from properties
DisableEventFiring();
SPListItem itemToAdd = list.Items.Add();
foreach (SPField field in itemToAdd.Fields)
{
if (!field.Hidden &&
!field.ReadOnlyField &&
field != null &&
field.InternalName != "Attachments")
{
itemToAdd[field.InternalName] = properties.AfterProperties[field.InternalName];
}
}
itemToAdd.Update();
EnableEventFiring();
// Cleanup
site.Dispose();
siteColl.Dispose();
string targetUrlOfNewItem = "DispForm.aspx?ID=" + itemToAdd.ID;
// ВАУ а вот тут Особая уличная магия :)
// Redirect
SPUtility.Redirect(targetUrlOfNewItem,SPRedirectFlags.Default, _currentContext);
}
Задача: Определить имя текущего пользователя и выбрать его в выпадающем списке.
Решение: С помощью SharePoint Designer’a вставляем код JavaScript в файл newform.aspx.
<!-- Определяем пользователя -->
<script type="text/javascript">
var username = getCurrentUser()
selectSender(username);
function selectSender(displayname)
{
var d = document.all.tags("SELECT");
for(i=0; i<d.length; i++)
{
// !NOTE change to you environment. Field display name = 'Sender'
if(d[i].title == 'Sender')
{
for(j=0; j < d[i].options.length; j++)
{
var s = d[i].options[j];
if(s.text == displayname)
{
s.selected = true;
}
}
}
}
}
function getCurrentUser()
{
// выбираем все элементы со сылками и фильтруем по строке приветствия
var tags = document.getElementsByTagName('a');
for (var i=0; i < tags.length; i++)
{
if(tags[i].innerText.substr(0,7) == 'Welcome')
{
return tags[i].innerText.substr(8,tags[i].innerText.length);
}
if(tags[i].innerText.substr(0,12) == 'Пользователь')
{
return tags[i].innerText.substr(14,tags[i].innerText.length);
}
}
}
</script>
Описание флагов для вывода отладочной информации.
Внимание НИКОГДА не используйте эти настройки на “Боевом” сервере. Скорость работы падает примерно в 10 – 15 раз.
Однако для режима отладки и выявления проблем это именно тот режим, который вам нужен.
<configuration>
<SharePoint>
<!—- отображение дерева вызовов функций -->
<SafeMode CallStack="true" />
</SharePoint>
<system.web>
<!-- Чистый вывод ошибок -->
<customErrors mode="Off" />
<!-- Включение отладочной информации -->
<compilation debug="true" />
</system.web>
</configuration>
В предыдущем посте я писал про то как создать колонку SharePoint с уникальным значение. Время затраченное на написание этого проекта составит максимум 1 час.
На сайте http://www.kwizcom.com/ProductPage.asp?ProductID=811&ProductSubNodeID=817
Предлагается похожее по функционалу решение всего за $499 на сервер.
Оригинал тут:
http://jpy-tech.com/blog/post/Sharepoint-Unique-Column-%28PK%29-Using-event-handler.aspx
Задача: Обеспечить уникальное значение поля.
Решение: Написать EventHandler и внести логику для проверки введенного значения.
Исходный код немного кривоват так что используйте поправленный мною вариант.
Пояснения, после установки этого обработчика, достаточно будет добавить в описание поля метку [$UNIQUE$] и это поле будет проверяться на уникальность.
const string _QUERY = @"<Where><Eq><FieldRef Name=""{0}"" /><Value Type=""Text"">{1}</Value></Eq></Where>"; public override void ItemAdding(SPItemEventProperties properties) { using (SPWeb web = properties.OpenWeb()) { /*get the current list*/ SPList list = web.Lists[properties.ListId]; string columnName = ""; foreach (SPField fld in list.Fields) { if (fld.Description.Contains("[$UNIQUE$]")) { columnName = fld.InternalName; break; } }
if (properties.AfterProperties[columnName] != null) { string currentValue = properties.AfterProperties[columnName].ToString(); SPQuery _query = new SPQuery(); _query.Query = string.Format(_QUERY, columnName, currentValue); SPListItemCollection itemsWithSameValue = list.GetItems(_query); if (itemsWithSameValue.Count > 0) { properties.Cancel = true; properties.ErrorMessage = "There is already an item with the same value(" + currentValue + ") for the column / Field(" + columnName + ") in this list."; } } } }
Столкнулся с очень неприятной штуковиной в MSBuild нельзя собрать пакет wsp для проекта типа VSeWSS, поэтому пришлось вот так вот извращаться:
devenv UserImage.csproj /projectconfig Release /Deploy
Это официальная страница проекта IMField http://imfield.codeplex.com/.
Описание
IMField это колонка для Windows SharePoint Services 3.0/ Microsoft Office SharePoint Server 2007. Предназначена для отображения онлайн статуса пользователя в системах мгновенных сообщений (IM).
На данный момент поддерживаются следующие протоколы:
Установка
Скачайте программу http://imfield.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30308#DownloadId=75603 распакуйте содержимое архива. Запустите программу setup.exe и следуйте инструкциям.
Настройка
После установки IMField добавьте это поле в ваш список.
Выберите нужный тип поля (1) и нажмите кнопку ОК (2).
Пример редактирования данных.
Пример отображения данных.
Удаление
http://imfield.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30308#DownloadId=75603
распакуйте содержимое архива. Запустите программу setup.exe и следуйте инструкциям.
История изменений
Добавлена локализация для русского языка.
Маленькие изменения в системе помощи.
Добавлена русскоязычная справка.
Лицензия
Copyright (c) 2009, Korotenko Vladimir
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* Neither the name of yappi.biz nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Техническая поддержка
Техническая поддержка данного решения осуществляется на договорной основе. Обращайтесь по адресу электронной почты koroten AT ya.ru. В общем случае доработки будут производиться по мере появления у меня (Коротенко Владимира) свободного времени. В случае заключения договора ваши заявки будут удовлетворены в первую очередь.
Сайт программы
private void WriteToLog(string log)
{
using (SPSite site = new SPSite(projectOfficeUrl))
{
using (SPWeb web = site.OpenWeb())
{
web.AllowUnsafeUpdates = true; SPList list = web.Lists[Config.LogList.ListName];
SPListItem li = list.Items.Add();
li[Config.LogList.DateStart] = DateTime.Now;
li[Config.LogList.Info] = log;
li[Config.LogList.Initiator] = CurrentUser;
li.Update();
web.AllowUnsafeUpdates = false; }
}
}
Боремся добавлением выделенного жирным кода.
Вчера встала проблема при установке WSS 3.0 на Windows 2008 Server 32 Bit.
Все это происходило на моей домашней машине, точнее на нотебуке Acer Aspire 1640. Характеристики железки несколько слабые 1.7 Ггц Intel Pentium Mobile (Centrino) 1.5 Гб Ram.
Система виртуализации Microsoft Virtual Server 2005 R2 SP1 Host OS Microsoft Windows Vista Ultimate.
Для виртуализации выла создана виртуальная машина со следующими характеристиками:
На нее был установлен Microsoft Windows 2008 Server Enterprise 32 Bit, собственно из за "тормозов" была выбрана роль Standalone server, в принципе мне не особенно важна функциональность домена. После этого я решил установить WSS 3.0, и из этого ничего не получилось, получил стандартное предупреждение о несовместимости.
Поэтому сегодня пришлось залезть на сайт МС и посмотреть решения, они как всегда оказались. Привожу ссылки:
http://technet.microsoft.com/en-us/library/cc287813.aspx Установка одиночного сервера
http://technet.microsoft.com/en-us/library/cc287748.aspx Установка в ферме
Решение проблемы собственно в том чтобы использовать WSS 3.0 с интегрированным пакетом обновлений SP1, скачать можно здесь
Скачайте установщик шаблона Windows SharePoint Services 3.0 Tools: Visual Studio 2008 Extensions, Version 1.2 http://www.microsoft.com/downloads/details.aspx?FamilyID=7bf65b28-06e2-4e87-9bad-086e32185e68&displaylang=en
создайте файл sp.reg и внесите в него следующий текст
REGEDIT4
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\12.0] "Sharepoint"="Installed"
Запустите установщик пройдите все этапы.
Скопируйте в GAC основные библиотеки Sharepoint Из папки C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI на сервере с установленным WSS
скопируйте на вашу машину разработки папку C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\
Пользуйтесь.
Источник тут, моя версия соответственно на русском + несколько добавлений
http://fernandof.wordpress.com/2008/02/11/how-to-install-the-sharepoint-2007-vs-2005-extensions-on-a-workstation/
http://blogs.msdn.com/martinv/archive/2007/08/23/remote-webpart-development-for-moss-2007.aspx
Собственно это заметки по теме кастомизации панели информации для документов оффиса опубликованных на сервере MOSS. Более подробное описание я выложу позднее, а эти ссылки пока только для себя.
Составил: Коротенко Владимир
Для успешного переноса необходимо провести инвентаризацию установленных расширений на сервере источнике (WebParts, Solutions, WorkFlows) и установить идентичный набор на сервере приемнике. В случае если на сервере приемнике еще не установлено по MOSS, необходимо произвести установку программного обеспечения в соответствии с руководством по установке компании Microsoft.
В ходе установки программного обеспечения необходимо создать паспорт сервера приемника, который включает в себя описание в свободной форме следующих компонентов:Для переноса данных воспользуйтесь утилитой stsadm расположенной в папке c:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN. Порядок действий при переносе данных следующий:
После операции переноса данных произведите импорт пользователей из Active Directory, создайте необходимые группы безопасности в MOSS и назначьте необходимые права на библиотеки и документы. В случае использования сторонних WebParts, Solutions or Features вы также должны настроить параметры данных решений в соответствии с руководством по установке данного программного обеспечения. Все действия по конфигурированию данных частей вы должны зафиксировать в паспорте сервера.
После проведения операции переноса данных и настройки параметров сервера приемника. Необходимо произвести следующие действия: