Используйте Web Money - это очень удобно

вторник, 27 мая 2008 г.

Фильтр данных ListViewWebPart.

Ранее я написал об изменении перчня столбцов.
Изменение перечня столбцов в ListViewWebPart "на лету".
Сегодня хочу добавить об изменении схемы SPQuery на лету.
Это нужно для того, что бы отображать на одной странице релевантную информацию в зависимости от заданных параметров, или просто сделать расшириный фильтр с полной функциональностью SPQuery.
Для более стабильной работы необходимо:
Создать свойство с Guid View вебчасти.
Получив веб часть как указано в ссылке
Проверяем совпадение guid и меняем схему query.
if (lv.ViewGuid == _viewGuid)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.InnerXml = lv.ListViewXml;
XmlNode node;
node = xmlDoc.DocumentElement;
node["Query"].InnerXml = "<Where>" + "<Eq><FieldRef Name='ParentId'/><Value Type='Text'>" + _DocumentID.ToString() + "</Value></Eq>" + "</Where>";
lv.ListViewXml = xmlDoc.InnerXml;
}


PS. Таким же образом можно поменять и другие части схемы отображения.

понедельник, 26 мая 2008 г.

Управление свойствами полей.

Написал код для быстрого редактирования свойств полей списков и их удаления.
Если будет время и необходимость допишу функциональность.
Проект выполнен в виде веб приложения.
Запускать на сервере.
Можно прямо в дебаге.
Ссылка но солюшн

четверг, 15 мая 2008 г.

Ограничение на количество элементов.

Тестировал список:
>1 000 0000 элементов разбиты по 12 папкам. >84 000 элементов на папку
Результат:
Из кода доступ есть
К списку доступа нет. Только к свойствам.
Вывод данных только ограниченными объемами через ListViewWebPart.
Быстродействие заметно снизилось.
В списке 5 текстовых полей.
Объем списка примерно 300 MB.
Создать его шаблон с содержимым не удалось.

понедельник, 12 мая 2008 г.

Custom action. Праметры в строке.

Источник
MSDN основной
MSDN дополнительный

Параметры это ид элемента и guid списка.
<urlaction url="">?ID={ItemId}&List={ListId}"/></urlaction>

Кроме того можно использовать javascript:
<UrlAction Url="javascript:window.location= '{SiteUrl}/_layouts/mypage.aspx?List={ListId}&Source=' + window.location"/>

и коллекцию узлов:
<UrlAction Url="_Layouts/RedirectPage.aspx?Target={SiteCollectionUrl}_catalogs/masterpage" />

кроме того есть стандартные сокращения:
~site/_layouts/sampleurl.aspx
или ~sitecollection/_layouts/sampleurl.aspx.

четверг, 8 мая 2008 г.

Проблема одновременного доступа к элементу списка из кода.

Проблема заключается в том, что в отличии библиотеки документов в списке не реализован checkOut. И если вы напишете обработчик событий которы пишет в какой-то элемент списка есть вероятность(я на убедился на своем опыте что она велика) попытки записи в элемент одновременно двумя инстансами обработчика.
Решение простое:

static int count;
static int queue;
int myQueueNumber;
lock(count)
{
count++;
myQueueNumber= count;
}
if (queue==myQueueNumber)
{
//code
queue++;
}

И соответственно простая организация очереди для инстансов этого обработчика.
Если обработчиков много и они разного типа все выносится в отдельный класс объект которого присутствует во всех обработчиках. Или используете наследование.

Оптимизация кода 2

Источник...
Смысл в том, чтобы уничтожать объекты SPweb, SPSite и т.п. методом Dispose() принудительно. Думаю, что в некоторых случаях это должно сильно освобождать ресурсы - например при переборах узлов.

среда, 7 мая 2008 г.

Библиотека документов и документы word - скрытые от пользователей поля.

Обнаружил при неприятнейшую возможность приложения Word:
Создал библиотеку документов.
Создал несколько полей.
Часть из них заполняются автоматически,а потому для пользователя должны быть не доступны. Выставил соответствующие свойства (привожу все, которые нашел):

field.ShowInEditForm = true;
field.Hidden = true;
field.ReadOnlyField = true;
field.Update();

Теперь, думаю, пользователь мои поля испортить не сможет.
Открываю документ ворд в приложении смотрю свойства на сервере - нет скрытых.
Открываю дополнительные свойства, закладку прочие - и спокойно редактирую скрытые мной в sharepoint свойства.
Вот такой баг.
Конечно не все пользователи настолько продвинуты, но проблема налицо.
В голову пришло только решение с обработчиком события на изменение элемента.
Если у кого-то есть другие идеи - буду рад услышать.