Показаны сообщения с ярлыком MOSS 2007. Показать все сообщения
Показаны сообщения с ярлыком MOSS 2007. Показать все сообщения

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

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);

}

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

суббота, 10 октября 2009 г.

Application Templates for Windows SharePoint Services 3.0 and language mistake

Для шарепоинта существуют целые наборы типовых решений предоставляемых самой компанией Microsoft

http://technet.microsoft.com/ru-ru/windowsserver/sharepoint/bb407286.aspx

Только нужно обратить особенное внимание на язык решения :)

Очень уважаемый мною человек бился в течении 2 дней над этой проблемой, просто скачал не то.

Так вот обращайте внимание на детали. Первая ссылка на этой странице указывает на 40 шаблонов на АНГЛИЙСКОМ языке.

А вот ссылка на 20 шаблонов содержит именно локализованные версии.

Разобрались с этим только после всего цикла троблешутинга, были перевернуты и логи системы и шарепоинта и разные версии WSS. Веселья было много. В конце концов я просто посмотрел солюшены и НЕ обнаружил там ветки 1049, которая собственно и указывает на наличие русского языка.

Так что внимательно читайте странички.

вторник, 25 августа 2009 г.

Бесплатные книги Sharepoint

http://technet.microsoft.com/ru-ru/library/cc262788.aspx

среда, 22 июля 2009 г.

WSS Accounting

На данный момент разрабатывается система бухгалтерского учета. Это обзор предстоящих возможностей. Кратко возможности:

  1. Экспорт данных из внешних программ (ADO, Excel, ODBC, XML)
  2. Удобная работа с заказами в привычном интерфейсе WSS
  3. Малые затраты на внедрение решения
  4. Возможности составления отчетов и отправки их по электронной почте.
  5. Локализация решения (В данный момент 3 языка)
  6. Работа с заказами в представлении таблицы.

В общем лучше один раз увидеть.

http://yappi.biz/capture-1.avi

Сейчас продукт находиться в состоянии внутренней разработки (PRE Beta), поэтому ваше мнение будет очень важно.

Если вы заинтересовались этим решением свяжитесь со мной.

ICQ: 77391439

SKYPE: fire-dragon77 

E-mail: koroten@ya.ru

Ниже приведено руководство пользователя, с описанием текущих возможностей.

Оглавление

Введение. 1

Использование. 1

Списки на сайте. 2

Списки. 2

Словари для подстановки. 2

Страницы на сайте. 2

Руководство по типичным операциям.. 3

Как просмотреть созданный заказ. 3

Как создать заказ. 3

Как добавить нового пользователя. 3

Как добавить нового пользователя при создании заказа. 4

Введение

Система «WSS Бухгалтерский учет» предназначена для составления коммерческих предложений и отправки их заказчикам. В основе этой системы лежит платформа Microsoft Windows SharePoint Services или Microsoft SharePoint Office Server. Для пользователя системы есть следующие возможности:

· Создание заказа

· Добавления товаров в карточку заказа

· Поиск по словарю импортированных товаров (с выбором поля поиска)

· Копирование существующего заказа

· Создание и управление записями в адресной книге

· Возможность просмотра группы заказа в общем представлении

· Разграничение доступа к карточкам заказа на уровне групп на сайте

· Табличное представление для быстрого редактирования элементов заказа

· Предварительный просмотр составленного заказа в виде отчета

· Отправка коммерческого предложения по почте

Все это позволяет оптимизировать временные издержки на составление коммерческого предложения для пользователя. Учитывая гибкую инфраструктуру импорта данных из внешних программ, возможно, интегрировать эту систему с большим количеством информационных систем существующих на данный момент.

Использование

Для начала работы вы должны зайти на основную страницу системы «WSS Бухгалтерский учет», если вы не знаете адреса, где установлена система, уточните этот адрес у вашего системного администратора. В дальнейшем в этом руководстве будет приводиться адрес http://wss:90/buh как адрес системы. При открытии этой страницы вы увидите приветственное окно системы.

clip_image002

На этом снимке экрана отмечены следующие ключевые элементы:

1. Адрес сайта системы

2. Имя пользователя системы

3. Выпадающее меню для создания нового заказа

4. Краткая справка пользователю

Списки на сайте

Списки

· Contacts - адресная книга

· Links - ссылки на сайте

· Orders - список заказов

· ItemsInOrder - список товаров в заказах

Словари для подстановки

· ItemsCategory - категории товаров

· Items – товары импортированные из внешней системы

Страницы на сайте

Руководство по типичным операциям

Как просмотреть созданный заказ

На главной странице вы сайта щелкните по нужному элементу в списке, после этого на карточке заказа, перейдите по ссылке “Show Report”

clip_image004

Как создать заказ

На главной странице щелкните по ссылке «Создать элемент»clip_image006

Как добавить нового пользователя

Перейдите по ссылке Contacts, на главной странице системы.

clip_image008

Как добавить нового пользователя при создании заказа

При создании нового заказа вы можете, создать нового пользователя щелкнув на ссылку.

clip_image010

воскресенье, 19 июля 2009 г.

Move to display form after create element

Задача: после добавления нового элемента перейти на форму редактирования

Решение: Создаеться 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);
        }

How do I get a user name in sharepoint

Задача: Определить имя текущего пользователя и выбрать его в выпадающем списке.

Решение: С помощью 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>

суббота, 18 июля 2009 г.

Save you money. Simple way

В предыдущем посте я писал про то как создать колонку SharePoint с уникальным значение. Время затраченное на написание этого проекта составит максимум 1 час.

На сайте http://www.kwizcom.com/ProductPage.asp?ProductID=811&ProductSubNodeID=817

Предлагается похожее по функционалу решение всего за $499 на сервер.

пятница, 17 июля 2009 г.

Sharepoint Unique Column (PK) : Using event handler

Оригинал тут:

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."; } } } }

четверг, 16 июля 2009 г.

Sharepoint localization

Описана процедура использования ресурсов, для создания локализациии ваших проектов на платформе SharePoint

http://blogs.technet.com/tatianasv/archive/2009/03/25/3217498.aspx

пятница, 10 июля 2009 г.

Microsoft ISV catalog, IMField already in!!!

Маленькое приятное событие мой продукт добавили в каталог партнерских продуктов компании Microsoft. Ссылка https://solutionfinder.microsoft.com/Solutions/SolutionDetailsView.aspx?solutionid=ad2dfb45f0354cb693004b0a63a9ba09

понедельник, 22 июня 2009 г.

LookupField and SharePoint Solution Generator

При автоматическом создании шаблона определения списка (ListDefinition) для полей типа Lookup создаються определения, но они закомментированы. Решить эту проблему можно раскомментировав эту строку или строки и изменить значение гуида на относительный путь к списку.
Было: List="33333-3333-cccc-ccc-bbbb"
Стало:List="Lists/ListName"
Особенно обратите внимание на русские имена в полях, как я уже говорил русский язык зло.

вторник, 9 июня 2009 г.

devenv command line

Столкнулся с очень неприятной штуковиной в MSBuild нельзя собрать пакет wsp для проекта типа VSeWSS, поэтому пришлось вот так вот извращаться:

devenv UserImage.csproj /projectconfig Release /Deploy

пятница, 5 июня 2009 г.

IMField project

Это официальная страница проекта IMField http://imfield.codeplex.com/.

Описание

IMField это колонка для Windows SharePoint Services 3.0/ Microsoft Office SharePoint Server 2007. Предназначена для отображения онлайн статуса пользователя в системах мгновенных сообщений (IM).

На данный момент поддерживаются следующие протоколы:

  • ICQ
  • Skype
  • Yahoo
  • Windows Live Messenger (с ограничениями)

Установка

Скачайте программу http://imfield.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30308#DownloadId=75603 распакуйте содержимое архива. Запустите программу setup.exe и следуйте инструкциям.

Настройка

После установки IMField добавьте это поле в ваш список.

createList

setList

Выберите нужный тип поля (1) и нажмите кнопку ОК (2).

editValue

Пример редактирования данных.

sample

Пример отображения данных.

Удаление

http://imfield.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30308#DownloadId=75603

распакуйте содержимое архива. Запустите программу setup.exe и следуйте инструкциям.

История изменений

Добавлена локализация для русского языка.

Маленькие изменения в системе помощи.

Добавлена русскоязычная справка.

Лицензия

License: New BSD License (BSD)

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. В общем случае доработки будут производиться по мере появления у меня (Коротенко Владимира) свободного времени. В случае заключения договора ваши заявки будут удовлетворены в первую очередь.

Сайт программы

http://imfield.codeplex.com/

http://yappi.biz/product/imfield

понедельник, 30 марта 2009 г.

Folder view in WSS & MOSS

Как отобразить документы в виде дерева в среде MOSS. startexplorer folder_f folderEnd

вторник, 24 марта 2009 г.

Данные проверки безопасности этой страницы недопустимы. Нажмите кнопку ''Назад'' обозревателя, обновите страницу и повторите попытку.

Очень сильно меня достало это сообщение не поверите как. Данные проверки безопасности этой страницы недопустимы. Нажмите кнопку ''Назад'' обозревателя, обновите страницу и повторите попытку. Возникает обычно в таком коде 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; } } } Боремся добавлением выделенного жирным кода.

вторник, 3 марта 2009 г.

Ругать не ругать ?

Очень иногда злит политика MS по обьявлению некоторых свойств, методов и классов в различной мере скрытыми, неизменяемыми и внутренними. Самое смешное очень часто видишь что сами они с удовольствием пользуются всеми этими "Вкусностями". Сегодня таки узнал кто за это ответственен:Stefan Goßner http://blogs.technet.com/stefan_gossner/ Так что рекомендую, заходите на его блог смотрите читайте, очень интересно. P.S. Следующая статья будет про то как побороть эту "Заразу",

вторник, 17 февраля 2009 г.

Intellisense WSS Visual Studio 2008

Включение подсветки синтаксиса в Visual Studio 2008. Создайте файл sharepoint.xml в папке c:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas Добавьте следующий код <SchemaCatalog xmlns="http://schemas.microsoft.com/xsd/catalog"> <Schema href="%CommonProgramFiles%/Microsoft Shared/web server extensions/12/TEMPLATE/XML/wss.xsd" targetNamespace=”http://schemas.microsoft.com/sharepoint/" /> </SchemaCatalog> Добавьте элемент xmlns="http://schemas.microsoft.com/sharepoint/" в корневой элемент файла.

пятница, 5 декабря 2008 г.

JavaScript url parser

Сегодня пришлось создавать решение которое включало в себя приведенный ниже код, в принципе это все можно было сделать и на сервере, но надо.

В чем особенность смотрите в комментариях к функциям, мои замечания для блога выделены жирным.

<script type="text/javascript">
// внимание данный скрипт должен быть вставлен ПОСЛЕ !!! формы вывода
/* Сдвигаем дату на указанное количество дней

params:
date a Date object
shift a day count offset
*/
function GetTimeShift(date,shift )
{
var g = new Date(date.toDateString());
g.setHours(shift * 24);
return g.toLocaleDateString();
}
/*

Тут все просто в страничке динамически созданной сервером ищем поля ввода и устанавливаем нужные нам значения (кстати по id не ищу исменно по тому что страница может быть, и будет развернута не один раз)
Установка значений при инициализации текстовых боксов.
Параметры:
date дата и время начала отсчета в формате строки
plane - сдвиг для планируемой даты в днях
fact - сдвиг для фактической даты в днях
prom - сдвиг для промежуточной даты в днях
intPlan - сдвиг для Внутренней плановой даты в днях
*/
function setDate(date,plane,fact,prom,intPlan)
{
var mt = new Date(date);
t = document.body.getElementsByTagName('INPUT');
    for(i=0;i<t.length;i++)
    {
        var er = t[i];
        if(er.title == 'Дата')       
            er.value = GetTimeShift(mt,0);
        else if(er.title == 'Плановая')                   
            er.value = GetTimeShift(mt,plane);
        else if(er.title == 'Фактическая')
            er.value = GetTimeShift(mt,fact); 
        else if(er.title == 'Промежуточная')
            er.value = GetTimeShift(mt,prom); 
        else if(er.title == 'Внутренняя плановая')
            er.value = GetTimeShift(mt,intPlan); 
             
    }
}
/*

А вот тут мне особенно нравиться :)

Мы производим разбор параметров переданных в адресной строке и используем их для вызова функции заполнения ячеек, все таки удобная штука JS
Параметры которые анализируем
startDate=12/05/2008 Месяц/день/Год
planDate
factDate
promDate
internalDate
*/
function CompouseDateReq(uri)
{
var date,plane,fact,prom,intPlan;
var ar = uri.split('&');
var arg = new Array();
arg['startDate'] = arg['planDate'] = arg['factDate'] = arg['promDate'] = arg['internalDate']= 0;
for(i=0;i<ar.length;i++)
{
    arg[ar[i].split('=')[0]] = ar[i].split('=')[1];
}
// setDate(date,plane,fact,prom,intPlan)
setDate(arg['startDate'],arg['planDate'],arg['factDate'],arg['promDate'],arg['internalDate']);
}

/*

тут все очень просто извлекаем адрес документа и отделяем параметры запроса

*/
function parseUrlParam()
{
var st = new String();
st = document.URL;
try{
CompouseDateReq(st.split('?')[1]);
}
catch(ex)
{
return;
}
}
parseUrlParam();
</script>

вторник, 2 декабря 2008 г.

Установка шаблона проекта WSS без установки MOSS или WSS

Скачайте установщик шаблона 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