В процессе глубоко научных попыток использовать SilverLight в пользовательском интерфейсе собственных разработок получилась веб-часть общего назначения для запуска SilverLight-приложений на Шарепойнт-страницах. Собрал туда разные идеи из блогов и др. источников и выложил вместе с исходниками. Может, ещё кому пригодится…
суббота, ноября 14, 2009
пятница, ноября 13, 2009
Отображение иерархических данных
Пятница, 13-е или Live Writer
Не могла эта 13-я пятница просто так пройти… Выяснилось, что не запускается Writer, молча закрывается, и фсё… Один раз пообещал сказать, в чём дело, если решение разыщет, но пока молчит.
Пришлось самому. Восстановление/переустановка не помогли, помогла попытка запуска от имени другого пользователя – запустился и захотел настраиваться. Осталось порыться в собственном профиле, и в файле "C:\Users\DkmS\AppData\Local\Windows Live Writer\Windows Live Writer.log" обнаружить причину явно неадекватного поведения примочки – не смогла обнаружить папку для черновиков, заданную в настройках. Ну да, не было такой папки (машину модернизировал, диски менял, вот и пропала), но это вовсе не повод молча заваливаться…
Поотрывать бы “программерам” примочки всё, что отрывается…
среда, октября 14, 2009
Маленький такой сюрпризик
Казалось бы, два определения свойства эквивалентны:
1: public StyleOfViewList ListViewStyle {
2: get { return listviewstyle; }
3: set { listviewstyle = value; }
4: } 5: StyleOfViewList listviewstyle = StyleOfViewList.GridStyle;1: public StyleOfViewList ListViewStyle { get; set; }
Тип свойств – обыкновенное перечисление
1: public enum StyleOfViewList : byte { GridStyle = 1, PackedStyle = 2 }
Действительно, Рефлектор показывает для обеих конструкций практически одинаковый код, да и опыт с документацией подсказывают, что должно быть без разницы, какую из конструкций использовать… И так оно и есть, пока вторая конструкция не использована в определении свойства веб-части (с атрибутом [WebPartStorage]) – такая веб-часть становится неработоспособной.
Замена на первую конструкцию излечивает проблему. Нда…
вторник, октября 06, 2009
Очередная попытка, бесплодная…
В очередной раз пытаюсь найти решение возникшей на ровном месте задачи получения информации с удалённых узлов Шарепойнта.
Собственно, особого разнообразия вариантов и нет – к неработающему способу обращения по механизму WebServices добавляется способ с использованием WCF. Смотрим, что получится:
1: string endPointUrl = url.TrimEnd("/".ToCharArray()) + "/_vti_bin/Lists.asmx";
2: ListsSoapClient client = new ListsSoapClient("ListsSoap", endPointUrl);
3: client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;4: client.ClientCredentials.Windows.AllowNtlm = true;
5: client.ClientCredentials.Windows.ClientCredential = new NetworkCredential();
6: // from http://blogs.msdn.com/kaevans/archive/2009/03/10/calling-sharepoint-lists-web-service-using-wcf.aspx
7: client.Open();8: XmlNode tst = null;
9: try {
10: tst = client.GetListCollection();11: Console.WriteLine(string.Format("success: {0} bytes", tst.OuterXml.Length));
12: } catch (Exception err) {
13: Console.WriteLine(string.Format("error: {0}", err.Message));
14: }Результат, собственно, тот же, что в предыдущем опыте – локальные узлы (находящиеся на том же компьютере, откуда делается запрос, и на компьютерах, виртуальных или физических, в локальной сети) отдают данные как ожидается, при обращении к удалённым узлам (заведомо имеющим NTLM аутентификацию и разрешённый анонимный доступ) получаем исключение с сообщением “The HTTP request is unauthorized with client authentication scheme 'Ntlm'. The authentication header received from the server was 'NTLM'”. Весьма информативно, да…
Раскопки показывают, что народ с этим тоже пытается как-то бороться (безуспешно, впрочем), а корень зла описан в KB-статье. Оказывается, это борются так с “отражёнными атаками”, которые неизвестно, бывают ли, но средство борьбы надёжное – фиг прорвёшься. Что называется, лес рубят – щепки летят.
В общем, фантазия иссякает… Осталось попробовать водрузить на сервер свой сервис и пытаться через него как-то передавать нужное, но это никак не поправит ситуации, когда удалённый сервер – чужой.
суббота, сентября 19, 2009
Белый пушистый сюрприз
Выяснилось, что при обращении по адресу наподобие http://server/site/folder/file.aspx?id=N вне зависимости от содержания файла file.aspx происходит переход на N-й файл в папке folder. Особенно умиляет диагностика, когда N превышает количество файлов – в адресной строке браузера написано то, что и должно быть, а на странице ошибок Шарепойнт – что такой страницы нет или она изменена другим пользователем.
А я таким способом пытался в веб-часть на странице передать ID элемента списка… В общем, хотелось бы на умника посмотреть, который такую гадость придумал. Причём и в новом WSS 4 наблюдается такое же поведение.
понедельник, июля 20, 2009
Windows 7, установка “тяжёлого” софта
Цель - сделать рабочий компьютер для "жизни" и для разработки под Шарепойнт. И, конечно, для тестирования Office 2010 и WSS 4.
- Visual Studio 2008 + sp1
- SQL Server 2008 + sp1
- Office 2007 ultimate + sp2
- SharePointDesigner 2007 + sp2
Windows 7, переустановка.
Всякие-разные эксперименты на системой привели к достаточно печальным последствиям. В частности, расстроилась синхронизация данных с мобильником – с OneNote синхронизируется, с Outlook – ни в какую. Google, правда, рассказал, что я тут не одинок, много народу от подобного страдает. Никакие попытки реанимации типа сноса/переустановки/ковыряня_реестра не помогли.
В общем, пришёл к выводу, что систему пора переустанавливать. Вдобавок пришло приглашение поучаствовать в тестировании новых версий Офиса и Шарепойнта, для чего расхристанная система вряд ли годится.
Действие 1 - Установка поверх существующей установки в попытке сохранить софт и настройки.
Метод испытанный поколениями, не было оснований не надеяться на удачный результат. Поэтому из существующей установки запустил дистрибутив, он бодро взялся устанавливаться в режиме upgrade, предупредив, правда, что потом не будет работать русский LangPack, Daemon Tools и Sharepoint. Но дальнейшие события сильно отличались от ожидаемых (основываясь на опыте подобных операций с Windows 95/98/2000/XP/2003).
Примерно час выполнялась операция типа "Сбор данных для переноса", что это за фигня действие - неведомо, но статус показывал, что набралось около 200 тыс. единиц этого.
Установка самой системы прошла достаточно быстро (собственно, как обычно), после этого примерно 2 часа шло восстановление “даннных для переноса”. Таких “данных” было около 800 тыс. (!?) единиц. Откуда взялось, неведомо...
После установки выяснилось, что зачем-то изменились права на диски с данными (точнее, с них удалены права для Everyone) и доступа к ним ни у кого нет. Пришлось пытаться "овладевать" ими и настраивать нужные права. В процессе оказалось, что глубоко лежащие папки почему–то брыкаются на предмет отсутствия доступа... После двухчасовой возни пришёл к выводу, что проще систему восстановить из бекапа и дополнить нужным софтом.
Однако фокус не удался - установщик в процессе "update" что-то делал с диском, раздел диска стал каким-то не таким и используемая для бекапа программа Active Disk Image восстановления системного раздела сделать не сумела...
О бекапе системного диска/раздела – отдельно попозже.
Действие 2. - установка начисто и обустройство.
Запустил дистрибутив с компакта, его средствами удалил кривую партицию и в освободившееся место установил новый экземпляр Windows-7 RC.
Установку всякого софта делал, по преимуществу, не на системный диск - бекапить меньше да и из других Осей можно попользоваться:
- Сразу после установки запустил не получавшуюся ранее установку виртуальной машины для Windows 7. Установилась, но криво - мастер создания новых машин установился, но без ярлыка в меню: пришлось искать программку (нашлась в system32) и ярлык самому делать. Более пристальное рассматривание не выявило признаков работы с x64-системами, сделал испытанную штуку – установил Server 2008 x64 в VirtualBox 3.0.2. А там посмотрим.
- Установились драйверы/апдейты - много чего сразу притащило, в т.ч. русский LangPack.
- Установил необходимые для жизни мелочи - Avira Personal, Daemon Tools Lite, разные gadgets, nncron, ditto, gladinet, архиваторы, RoboForm, LastPass.
- Для Интернета и Шарепойнта - FireFox 3.5, Safari 4, IE7Pro, Digsby, Windows Live, WindowsLiveSync.
- Клиенты DynDNS и No-IP сервисов
В итоге система заняла на диске ок. 18 Гб (включая 7 Гб. pagefile и hiberfile).
Органайзеры (OneNote и EverNote)
Вполне похожие по функциям и возможностям, не считая мелочей типа бедноватого редактора текста в Evernote. Даже бесплатностью похожи - с апреля 2009 г. OneNote 2007 входит в бесплатный пакет с Sharepoint Designer 2007. Как дальше будет, посмотрим.
Но есть у каждого крупные недостатки, компенсируемые, впрочем, функциональностью другого.
OneNote:
Нет возможности централизованного хранения данных на сервере. Компенсируется возможностью EverNote импортировать заметки из OneNote.
EverNote:
В мобильном клиенте (по крайней мере, для WM) отсутствует возможность регулировать объём синхронизации данных - не нужна на телефоне вся база (с картинками, которые там и не рассмотреть). Из-за этого пришлось даже от этого клиента отказаться, функции заметок OneNote аналогичны (правда, пользоваться удобнее клиентом EverNote – на кнопки нажимать нужно заметно меньше)
воскресенье, июля 19, 2009
Логины блогов в Writer’е
Сидят в реестре в подключах ключа
HKEY_CURRENT_USER\Software\Microsoft\Windows Live\Writer.
Без паролей, правда, но это проще, чем вспоминать все адреса. Можно сохранить в файл и сохранить где-нить – на SkyDrive, в EverNote и т.д. При всяких авариях достаточно импортировать сохранённое, а при отправке ввести пароль…
Ну, не придумали более пристойной архивации этого дела…
понедельник, июля 13, 2009
Sharepoint и экономическая “школа”
Больше года работы по внедрению MOSS 2007 в ставшей вдруг, неизвестно почему, известной РЭШ с показательным окончанием...
четверг, июля 02, 2009
Google Writer
Для пробы опубликовал описание "Картотеки PSI". Сначала загрузил как docx, оно тут отобразилось. Естественно, вордовские рисунки отобразились никак, пришлось вставить png-рисунок.
Потом выяснилось, что можно постить в блог, что и сделал.
Слабовато, конечно. Но если нет другого, сойдёт. -Konstantin 02.07.09 3:10
среда, июня 10, 2009
Windows Vista x64 ended
Окончание мыльной оперы (предыдущие серии здесь, здесь, здесь, здесь, здесь и здесь) с Windows Vista в главной роли, растянувшейся почти на 2 года. Сказать по-правде, к концу жизни Vista стала вполне пристойной системой, на ней получалось выполнять всю нужную мне работу. Некоторые глюки, в то же время, так и остались неизлеченными (неизлечимые?) даже после установки sp2 rc – самые досадные из них с IE8 и с Visual Studio 2008 (sp1 установить не получается, снести Студию можно, установить снова – нельзя ).
После выхода Дистрибутива с интегрированным sp2 решил применить испытанное безотказное оружие – установка поверх имеющейся версии. Во всех предыдущих версиях Windows средство действовало безотказно, но здесь случилась осечка – за время пути мыльной оперы собачка смогла подрасти аппетиты системы выросли и она захотела 16 Гб свободного места для выполнения обновления (в начале эпопеи хотела 7 Гб). Если учесть, что и с требованиями к размеру дисков для установки изготовители промахнулись минимум в два раза, а я их цифру увеличил всего в полтора, то больше 10 Гб освободить не получилось. Пришлось записать дистрибутив на болванку, снести все обломки и установить Vista x64 sp2 начисто.
После установки и загрузки выяснилось, что работает система заметно быстрее, на уровне “семёрки”. Так что, если та будет продолжать глючить, есть куда вернуться.
понедельник, июня 01, 2009
Windows 7, continued.
Ещё в первой серии нашего мыла экспериментов c Windows “se7en” поставил предлагаемую для “семёрки” версию Virtual PC – она вполне себе работала, однако поствила в мои виртуалки собственные дополнения, которые не сильно понравились VPC 2007 в Висте. Поэтому при втором подходе к снаряду второй установке и настройке поставил старую виртуалку, чтобы была совместимость в двух системах (а сильно рекламируемый режим XP-совместимости мне вовсе и не нужен).
Теперь, когда с Вистой решил отношения прекратить, для порядка попробовал поставить “родную” семёрочную виртуалку. Не тут-то было, ставится, требует перезагрузки, на загрузке начинает делать какие-то действия и обламывается. В системном логе сиротливое сообщение “Ошибка установки: не удается установить следующее обновление из-за ошибки 0x8007054f: Обновление для ОС Windows (KB958559).” мало чего объясняет . Ну, и привет.
пятница, мая 22, 2009
Горе от ума
Неплохой набор средств для изготовления РП в Sharepoint Designer содержит, в частности, средства для манипуляций разрешениями на элементы списков (библиотек). Эти средства вполне успешно были применены в проекте год назад, однако при попытке использовать их на сервере комьюнити выяснилось, что назначение разрешений работает только в случае Windows-пользователей. Для пользователей с LiveID-аутентификацией назначение разрешений заканчивается ошибкой .
Причина обнаружилась в фрагменте кода, выполняющем поиск пользователя по имени.
if (SPUtility.IsLoginValid(site, userOrGroup)) {
myUser = site.RootWeb.EnsureUser(userOrGroup);
}
Понятно, что авторы при помощи метода IsLoginValid пытались избавиться от обработки исключений , но в Шарепойнте так много действий построено на обработке исключений, что эта попытка выглядит ловлей мелких насекомых. Хуже того, IsLoginValid, похоже, не находит LiveID-пользователей вовсе
. Выяснилось, что вполне можно было обойтись и без этого метода:
try {
myUser = site.RootWeb.EnsureUser(userOrGroup);
} catch {}
В этом случае оба типа пользователей благополучно находятся и весь процесс назначения разрешений работает как ожидалось.
вторник, мая 19, 2009
Visual Studio 2008
Очень хороший продукт, много чего может. И работает достаточно быстро и надёжно.
Работает, пока что-нибудь не произойдёт. У меня это "что-то" произошло после установки MSDN для Visual Studio sp1 - как-то странно стали расползаться окна в Студии, перестали загружаться пакеты и кое-что по мелочи. Никакие "восстановительные действия" ни к чему хорошему не привели.
После полного удаления Студии и установки с самого начала она, в общем-то, заработала, однако sp1 установить больше не удаётся по причине зацикливания – установщик SPInstaller.exe намекает, что "You must first use Microsoft Visual Studio Patch removal tool before installing Visual Studio 2008 SP1. The tool will verify Visual Studio integrity and remove previous Visual Studio 2008 updates or pre-release software". Запуск помянутого инстрУмента VS2008-PatchRemovalTool-x86.exe проходит "успешно", но SPInstaller.exe при следующем запуске снова намекает на своё... Найденные "рецепты" для исправления проблем ничего не дают.
При этом установить MSDN, с которого всё и началось, вполне можно...
Получается какая-то неремонтопригодная штуковина... Не припомню что-то других продуктов, которые можно снести и обратно не установить. Надеюсь, что после полной переустановки ОС фокус, всё же, получится, но я это проделывал совсем недавно, чуть больше недели назад, и энтузиазма повторить эпопею пока не испытываю.
P.S. Эти приключения – на Windows 7, на Vista – тоже приколы со Студией, но другие…
суббота, мая 16, 2009
Сюрпризик от GetSiteData
Есть такой полезный метод SPWeb.GetSiteData, собирающий данные по спискам/библиотекам, объединённым, например, наличием одинаковой колонки. Всё хорошо до тех пор, пока эта колонка не имеет тип LookUp с множественным выбором. Метод для таких колонок просто не возвращает никаких данных, без каких-либо сообщений.
Исправляется глюк копированием (например, простеньким SPD РП) содержимого в колонку типа “однострочный текст”.
среда, мая 13, 2009
Windows 7, continued.
После регенерации, вернее, установки по-новой, “семёрка” не стала брыкаться, а спокойно заработала. После двух дней – праздники же, не очень до неё было – новой жизни решил обустроиться по-серьёзному. Office 2007 Ultimate, Sharepoint Designer 2007, Visual Studio 2008 Team Suite, SQL Server 2008 Developer Edition, Windows Sharepoint Services 2007 sp2 – весь этот зверинец пришлось запустить, не обойтись без него при работе с Шарепойнтом.
По ходу дела выяснилось, что Visual Studio надо бы устанавливать до Office (он без всякого спросу устанавливает какой-то огрызок от Студии 2005 ). В дальнейшем основная Студия устанавливается в папку, связанную с той, куда установлен огрызок, а иногда надо бы порулить путями, куда ставить. То, что Студию надо ставить и до SQL Server’а, выяснилось ещё раньше (SQL устанавливает свою версию Студии, не обязательно совпадающую с запланированной к установке).
Для установки Шарепойнта использовался испытанный Bamboo-способ, модифицированный для борьбы с “семёркой”. При использовании этого способа основное – не забыть включить отключённый сервис обратно и перезагрузиться. При выключенном сервисе “Центр Администрирования Шарепойнта” при запуске обычным порядком, через ссылку в “Administrative Tools”, выглядит довольно непривычно.
В итоге всё это хозяйство заработало исправно и, хочется верить, достаточно шустро (измерять, естественно, лениво ). Вот уже пятый день… Тьфу-тьфу
Всё прочее хозяйство, нужное для жизни (Пунты-Торренты и Daemon Tools’ы, Аськи-Messenger’ы, Picasa-Gallery…) тоже заработало, в основном. Несколько гаджетов, ставших привычными в Висте, потерялись или не заработали, но нашлись другие, похожие, или получилось заменить системными средствами.
вторник, мая 12, 2009
Бессмертное…
Почти 2 года назад обнаружилась смешная глюковинка, легко поддающаяся исправлению. Ан нет – и во втором сервиспаке глюковинка на месте.
понедельник, мая 11, 2009
Windows 7, continued. Regeneration.
Почитал для начала статьи про восстановление предыдущих версий ОС (наподобие вот этой) и решил попробовать сэкономить ранее потраченное на установку время. Предлагаемый метод восстановления вылился в такой вот командный скрипт (запускать его надо по методике из статьи после перехода на диск, где надо выполнить манипуляции):
rem backup current OSПосле выполнения скрипта система вполне себе нормально загружается и выглядит как взаправдашняя. Вместе с глюками, побудившими от неё отказаться. Радости от этого немного, поэтому решил воспользоваться старым казачьим способом – установить систему поверх себя в надежде получить функционирующую ОС без потери настроек. Способ применялся для разных Windows, начиная с версии 3.11, и практически всегда давал приличные результаты.
move /y \windows \Windows.srv\
move /y "\Program Files" \Windows.srv\
move /y "\Program Files (x86)" \Windows.srv\
move /y \Users \Windows.srv\
move /y \ProgramData \Windows.srv\
rem restore previous OS
move /y \Windows.old\windows \
move /y "\Windows.old\Program Files" \
move /y "\Windows.old\Program Files (x86)" \
move /y \Windows.old\Users \
move /y \Windows.old\ProgramData \
Здесь же приличного результата не получилось – несмотря на долгое время работы (около полутора часов с тремя или четырьмя перезагрузками) никакого улучшения в работе не обнаружилось. Может, “благодаря” использованному способу переноса настроек – судя по сообщениям во время установки применялся встроенный способ “Windows Easy Transport”.
Собственно, всё как обычно – попытка сэкономить время приводит к его дальнейшему непроизводительному расходу.