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

понедельник, августа 06, 2012

SPFExplorer 2010 с клиентской моделью

Модифицировал старую свою утилиту для работы с объектами Sharepoint 2010 на предмет работы не только в консоли сервера, но и на удалённом компьютере. Собственно, по работе понадобилось сравнить структуру и свойства разных ферм, что удобнее (привык как-то уже…) делать в соседних окошках в “деревянном” виде.
Для обеспечения удалённой работы с Шарепойнтом использовал клиентскую объектную модель (сборки Microsoft.SharePoint.Client и Microsoft.SharePoint.Client.Runtime), функциональность утилиты относительно “удалённых” объектов ограничил только просмотром структуры и свойств, т.к. выполнение каких-либо модификаций требует дополнительных исследований, затраты на которые вряд ли когда окупятся (лично мне хватает быстрого перехода к странице, где можно сделать модификацию стандартным образом). При большой нужде можно написать и соответствующие плагины, интерфейс открыт.
Описание и полный набор файлов утилиты (включая “опасные” плагины удаления и копирования) выложил на гугле-странице (сайт на officelive.com погибПлачущая рожица, потому как благодетелю стало жалко ранее обещанных пожизненно бесплатных ресурсов, которые оказались даже лучше, чем новейший Office365).
Теперь подождём до переоснащения оборудования новыми Осями (Windows 8 и Windows Server 2012) и Студией и можно начинать адаптацию утилиты к использованию с новым Шарепойнтом, несмотря на многочисленные восторженные всхлипы по его поводу. Всё равно же когда-то он станет использоваться…
Technorati Теги:

вторник, марта 27, 2012

Сюрприз от DocumentSet - 3

Вполне возможно, что этот сюрприз и не только к набору документов относится, но нашёл я его именно здесь. Проявляется сюрприз в виде разных наборов “заметок” в веб-части “Доска заметок”, установленной на странице набора документов, в зависимости от активности на сайте фичи “Инфраструктура публикации SharePoint Server”.

Если посмотреть на “своём сайте” список заметок, то там они имеются все, при рассматривании ссылок на объекты комментирования видно, что в УРЛ при неактивной фиче вставлен лишний слеш после имени сервера. Вот и вся причина сюрприза…

Если эксперименты продолжить и формировать заметки не через веб-часть, а через кнопку вверху справа, то сюрприз не наблюдается… Получается, это веб-часть так шутит… Ура индийским братьям!

Technorati Теги:

воскресенье, марта 18, 2012

Не всё так просто…

Потребовалось сделать переустановку Sharepoint Server 2010 – требовалось заменить дистрибутив на Server 2010 for Internet Sites и поменять язык с английского на русский. Казалось бы, пустяковая операция – один дистрибутив снести, другой поставить. Ага, так бы, может, и было два года назад, когда система только вышла, но сейчас навыпущено много изменений и согласовать их между собой – та ещё задача.

На заменяемой системе был установлен sp1 и декабрьский (2011 г.) CU, к моменту переустановки уже был выпущен февральский (2012 г.) CU, и было бы глупым возвращаться к декабрьскому пакету. После установки дистрибутива “Server 2010 for Internet Sites”, сервиспака (вместе с английским языковым пакетом), февральского пакета обновлений и подключения к существующей Sharepoint-ферме оказалось, что “Центр администрирования” формируется с английским интерфейсом, а базы данных не обновляются “Мастером настройки”. С обновлением баз с данными (WSS_Content…) справиться удалось при помощи PowerShell, а вот базы разных служб (особенно упорствовали базы службы поиска) поддались не все. И оставить их в состоянии “как есть” было нельзя – из-за них не выполняется бекап фермы. Вопрос с этими базами “решился” просто – пересозданием служб вместе с базами. А у кого там какие-то данные есть, им как быть?

В итоге в системном логе остались два сообщения об ошибках (одно из них даже Critical):

  1. Исключение при обновлении адресов для подключенного приложения {e65aeea2-865c-49d8-a394-2ecdeb613811_4c8b4429-9205-4f6f-b3fb-0b4cd99de394}.
  2. Сбой при попытке синхронизировать веб-приложение 55e17656-0ee7-45ba-87ab-e971ab00ed24; база данных содержимого 23812d7b-3a7c-476c-bf6a-07c1bfec026f

Сообщения представлялись совершенно загадочными и никаких сбоев в работе фермы при этом не наблюдалось, а английский интерфейс не менялся при пересоздании “Центра управления” при помощи “Мастера”. Осталось последнее средство – пересоздание фермы. В новой ферме добавил веб-приложение, к которому присоединил базу данных контента – всё стало с нужным интерфейсом, все узлы/подузлы/списки/библиотеки оказались на месте.

Нда… Тошнит

Technorati Теги:

среда, февраля 22, 2012

Сюрпризик от локализации.

Делал программку генерации списков на узле Sharepoint 2010. В предыдущем проекте такие же действия (создание списка, добавление нужных полей, присвоение русских значений title’ов и т.п.) делал при активации features на узле. Теперь же удобнее было выполнять подобные действия в консольной утилите. Собственно, всё и выполняется без всяких изменений в коде, однако результат получается совсем неожиданным: при просмотре перечня списков в браузере (“весь контент сайта”) видны английские названия, с которыми они создавались методом web.Lists.Add(<EngName>,…), а при просмотре через объектную модель, напр., при помощи PowerShell, видны русские названия, которые присваивались через свойство newList.Title = <RuTitle>; Такая же ситуация с полями списков.
Загадка разрешилась просто – ОС, в которой запускалась утилита – английская, а локализация сайта, на котором генерились списки – русская. Для согласования локалей достаточно в начале программки выполнить присваивание Thread.CurrentThread.CurrentUICulture = web.UICulture;
Собственно, к вопросу о пользе чтения документации.
Technorati Теги:

четверг, августа 04, 2011

XSLT-сюрприз

 

Описание – здесь.

В связи с участившимися покушениями на ГДН перенесу текст сюда:

Непонятное наблюдается при отображении дат через настроенную XsltListViewWebPart
Дата 01.02.2010 16:26, т.е. 1-е февраля 2010г., отображается почему-то как 2 января 2010 г.
при этом дата 24.11.2009 10:24 - отображается правильно 24 ноября 2009 г.

вот код:
<xsl:value-of select="ddwrt:FormatDate(string($created) ,1049 ,1)" /> |
<xsl:value-of select="$created" /> |
<xsl:value-of select="ddwrt:FormatDate(string($created) ,1049 , 3)" />
вот, что на выходе:
02.01.2010 | 01.02.2010 16:26 | 2 января 2010 г.
24.11.2009 | 24.11.2009 10:24 | 24 ноября 2009 г.

Портал русский, поле - системное Created, в БД хранится в поле tp_Created:
2010-02-01 13:26:24.000
2009-11-24 07:24:12.000

ошибка связана с реализацией XSLT DateFormat функции в Sharepoint 2010. Чтобы исправить данный bug придется написать свой xsl template, см. ниже:

Bug With SharePoint 2010 XSLT DateFormat Function

XsltListViewWebPart Date Format using DDWRT

четверг, июня 23, 2011

Веб-часть XmListViewer 2010

На базе версии XmListViewer 2007 сделал веб-часть XmListViewer 2010 для работы на фермах Sharepoint 2010. Собственно, практически только рефакторинг кода да использование некоторых фич SPF 2010 и понравившихся функциональных приёмчиков. Расширил функциональность light-версии – теперь можно получать данные одновременно из двух списков.

Функциональное нововведение одно - консолидация данных списков на узлах Шарепойнт на манер стандартной веб-части “Запрос контента” с некоторыми расширениями (или уходами в сторону?).

В процессе реализации преисполнился благодарностей (надеюсь, от икоты никто не умер…) разработчикам Sharepoint, исключившим из него возможность параллельного исполнения кода (в WSS 2007 такая возможность была с использованием ParallelExtensions-CTP, теперь она включена в .NET 4.0, с которым разработчики Sharepoint подружиться не сумели Печальная рожица) – при консолидации списков набирается много, а запрос данных дорог и прямо напрашивается на параллельное исполнение…

Ко всем прочим удовольствиям добавилась новелла с нерабочим редактором страниц на officelive.com (может, и починят, может, и навсегда…). Поэтому отдельную страничку сделать пока не удаётся, ссылки на закачку здесь – Light-версия веб-части, инструкция по установке и настройке.

Добавил:
Фокус с отдельной страничкой удался - http://dyakov.design.officelive.com/xmliv2010.aspx. Там кроме прочего все необходимые ссылки.

Technorati Tags:

вторник, февраля 08, 2011

Споткнуться на ровном месте - 4

Очередной капкан обнаружился опять при работе с новым типом (ContentType) “набор документов” (DocumentSet). Потребовалось в качестве свойств элемента этого типа использовать Lookup-поля, ссылающиеся на списки в узлах, отличных от того, на котором лежит библиотека с нашими элементами…

Всё шло хорошо до того момента, когда значения Lookup-свойств потребовалось вывести на странице набора. Значения не выводились! WTF… Схожу с ума от злости

Раскопки с помощью Reflector’а показали, что веб-часть DocumentSetPropertiesWebPart (используется для вывода свойств набора) использует для рендеринга метод SPField.GetFieldValueAsHtml(), который для Lookup-полей, работающих со списками с других узлов, выводит пустую строку Удар. Собственно, разработчик этого метода, похоже, не подозревал о способностях поля работать с “посторонними” списками, поэтому и не использовал параметр LookupWebId Даже не знаю, а по-простому обращался к списку со “своего” узла. Нормальненько так… Черный баран

Для обхода капкана можно, конечно, написать свою веб-часть вместо DocumentSetPropertiesWebPart, однако выяснилось, что так же ведёт себя и DocumentSetContentsWebPart, отображающая список документов внутри набора. А писать собственные гриды – удовольствие тО ещё…

В общем, спасибо индийским коллегам…

Technorati Tags:


четверг, января 20, 2011

Сюрприз от DocumentSet - 2

Второй сюрприз от неплохого типа – неверный перенос средствами экспорта/импорта настроек представления для содержимого набора документов. После импорта используется представление по умолчанию для библиотеки, а вовсе не то представление, которое было настроено до экспорта.

Исправляются последствия сюрприза использованием вот такого метода:

   1: /// <summary>
2: /// Востановление представления стартовой страницы набора документов
3: /// </summary>
4: /// <param name="list">список/библиотека</param>
5: /// <param name="contentTypeName">Название типа содержимого</param>
6: /// <param name="viewName">имя представления</param>
7: private void ResetDocSetView(SPList list, string contentTypeName, string viewName) {
8: SPContentType contentType = null;
9: try { contentType = list.ContentTypes[contentTypeName]; } catch { }
10: if (contentType != null) {
11: DocumentSetTemplate docSetTemplate = DocumentSetTemplate.GetDocumentSetTemplate(contentType);
  12:         if ((docSetTemplate.WelcomePageView == null)  (docSetTemplate.WelcomePageView.Title != viewName)) {
  13:             SPView view = list.Views.TryGetView(viewName);    
  14:             if (view != null) {
  15:              docSetTemplate.WelcomePageView = view;  
  16:                 docSetTemplate.Update(true);    
  17:             } else {    
  18:                 msgError +=     
  19:                     string.Format("В списке [{1}] отсутствует представление [{0}]", viewName, list.Title);    
  20:             }    
  21:         }    
  22:     } else {    
  23:         msgError +=    
  24:             string.Format("В списке [{1}] отсутствует тип [{0}]", contentTypeName, list.Title);    
  25:     }    
  26: }
Technorati Tags: ,


четверг, декабря 30, 2010

Оказывается - 7

Для поля типа SPFieldUrl практически нельзя задать значение по умолчанию. Собственно, задать можно, но только в формате “<url>” – в этом случае поле в новом элементе получает формально правильное значение “<url>, <url>”, что эстетически как-то не очень…

Задание значения по умолчанию "в “эстетичном” формате “<url>, <title>” приводит к значению поля вида “<url>,, <title>, <url>, <title>”, что неверно не только эстетически, но и по сути – ссылка получается кривая.

Вот такой вот сюрприз…

Technorati Tags:

суббота, октября 30, 2010

Октябрьский CU

Установил неслабого такого размера (ок. 150 Мб) набор апдейтов для OSS 2010 422859_intl_x64_zip.exe и выяснил, что почитали MSDN!!! Пламенный приветСолнце

Споткнуться на ровном месте - 3

Очередной капкан обнаружился при попытке установить веб-часть на страницу просмотра для списка, который имеет поля типа FilteredLookup. Независимо от выбранной веб-части получаем исключение HRESULT: 0x80030102 (STG_E_REVERTED)) (использование уничтоженных ранее объектов). Такое же исключение получается и при попытке удалить с такой страницы ранее установленные веб-части.Раздраженный

Проведённое расследование показало, что поле не сильно и виновато: отладчик не фиксирует исключения в коде поля, а “страница сопровождения веб-частей” [_layouts/spcontnt.aspx]) удаление делает без проблем. Получается, редактор страниц как-то хитро взаимодействует с полем, при этом хитрость выходит боком. Что удивительно, для пользователей, а не для разработчиков.

Винт для этой хитрой зад примочки нашёлся довольно быстро – утилитой SPFExplorer (модификация под Шарепойнт-2010 старой моей утилиты) скопировал нужную веб-часть с другой страницы. И без использования уничтоженных объектов…

Придётся теперь плагин для утилиты сочинять… Кружка пива

пятница, октября 29, 2010

Оказывается - 4

Если объявить документ библиотеки или элемент списка “записью”, то это навсегда. Рецепт: активируйте “возможность” семейства сайтов “Управление записями по месту”, настройте по вкусу “Параметры объявления записей” и объявите документ в библиотеке записью при помощи появившейся кнопки на ленте.

Библиотека становится неудаляемой, а снять свойство “записи” с документа не удаётся - кнопка не имеет обещанного пункта подменю для снятия отметки

image

а нажатие на кнопку лишь повторяет “объявление”
image

Теперь избавиться от этой радости можно только вместе с узлом…

Оказывается - 3

В Шарепойнте-2010 существуют неудаляемые списки. Вот как получить парочку таких: активируйте на узле “возможность” с дивным именем “Организатор контента”. На узле появляются два списка – “Библиотека-распределитель” и “Правила организатора контента”, удалить которые не удаётся (вне зависимости от активности “фичи”): в свойствах списков отсутствует пункт для удаления

image

использование утилиты тоже неудачно:


image

Только вместе с узлом… Где-то уже на грани диверсии Тошнит

суббота, октября 23, 2010

Споткнуться на ровном месте - 2

Нет в жызни щастя… Подумал немножко над решениями проблемы общедоступных примечаний в формах, содержащих ссылки на другие формы, и пришёл к выводу, что выкрутиться можно, лишив юзера возможности наткнуться на глюк с “Доской заметок” – из формы просмотра master убрать ссылки на формы редактирования detail, а в форме редактирования master такие ссылки оставить, но убрать оттуда “Доску”. Всё это решается при помощи настройки вьюшек вполне стандартными способами, и сообщение об ошибке больше не вываливается.

Но скучно было бы жить, если бы всё было бы так просто – нашёлся капкан. Выяснилось, что при сохранении настроенного таким образом узла в качестве wsp-шаблона (что, собственно, является одной из целей мероприятия) получить полноценной копии путём создания нового узла по этому шаблону не удаётся – эти самые “Доски” не импортируются и на месте веб-части для написания заметок видим милое сообщение:

image

Но не всё так плохо – использование операций экспорта/импорта (stsadm –o export/import) приводит к желаемому результату – копия узла со всеми настройками в нужном месте. Осталось научиться использовать импорт в своих рабочих процессах…