четверг, ноября 27, 2008

Локализация Windows Live Authentication (continued)

После некоторых упражнений с Sharepoint (по-правде, в упражнения входил полный снос и повторная установка) обнаружился ещё один недостаток - пропала группа Authenticated Live Users (аналог группы NT AUTHORITY\authenticated users для Windows-аутентификации). Понятно, что она должна создаваться провайдером, но когда и как его подтолкнуть на этот подвиг, выяснить не удалось. А без такой группы настраивать разрешения для каждого пользователя – ужасная затея…

В итоге добавил процедуру формирования на каждом узле, где предполагается использование LiveID-аутентификации, группы с именем вида <имя узла> - Authenticated Live Users. При логине или изменении данных пользователи заносятся в эту группу.

Для облегчения жизни добавил скрипт _config.cmd с инструкцией по настройке в файле README_ru.txt.

Результаты можно скачать отсюда (установочный пакет) и отсюда (целиком проект с исходными текстами).


Technorati Tags: , ,

среда, ноября 12, 2008

Локализация Windows Live Authentication

На codeplex Lawrence Liu размещено отличное решение по аутентификации на Sharepoint-сайтах с использованием Windows LiveID. Практически готовое к использованию решение и, если не обращать внимание на мелкие неудобства, его можно сразу и использовать.

Неудобства заключаются, во-первых, в неправильной работе редактора профиля LiveID, подключённого через CustomAction к меню пользователя (введённые данные не передаются в свойства пользователя узла и после закрытия редактора пользователь оказывается в корневом узле). Во-вторых, решение явно разработано без учёта использования на системах с неанглийской локализацией (все формы/меню на английском, а использовать узел с русской, например, локализацией в качестве служебного, просто не получается).

Для исправления недостатков проведён анализ предоставляемого кода и исправлены досадные ошибки (неверная привязка EventHandler’а, к примеру). Жёсткая привязка к английской локализации устранена заменой в двух операторах

SPListTemplate template = web.ListTemplates["Custom List"];
SPList list = sweb.Lists["User Information List"];

использования английских имён списков и шаблонов на вызовы методов, не зависящих от локализации. Кроме того, заменено использование list.Fields["Title"] на list.Fields[SPBuiltInFieldId.Title]. В результате решение стало работать и на узлах с русской локализацией.

Перенаправление на корневой узел исправлено добавлением адреса контекстного узла в описание CustomAction:

<UrlAction Url="~site/_layouts/liveinfo.aspx"/>

Средства для локализации решения обнаружились в блогах Mikhail Dikov, Maxime Bombardier и Jan Tielens. В aspx-формах и XML-описаниях текстовые константы заменены ссылками на строки в ресурсном файле LiveIDAuth.<culture>.resx. Нетривиальным, как выяснилось, является размещение ресурсов для использования в разных объектах. Так, для Feature-объектов, размещённых в папке \12\TEMPLATE\FEATURES\WindowsLiveAuthenticationSettings, ресурс должен находиться в папке \12\Resources (с использованием ссылок вида $Resources:LiveIDAuth,varName) или в папке 12\TEMPLATE\FEATURES\WindowsLiveAuthenticationSettings\Resources\ с именем Resources.<culture>.resx (с использованием ссылок вида $Resources:varName).

Для aspx-форм ресурс должен находиться в папке App_GlobalResources web-приложения.

В итоге в wsp-пакет пакет помещаются две копии ресурса с разными именами в разные папки (WindowsLiveAuthenticationSettings\Resources\Resources.resx и Config\Resources\LiveIDAuth.resx), а командный файл для установки дополнен командой
stsadm -o CopyAppBinContent,
копирующей ресурсы в папки App_GlobalResources веб-приложений.

Продолжение истории - здесь.

Результаты можно скачать отсюда (установочный пакет) и отсюда (целиком проект с исходными текстами).

Technorati Tags: , ,

воскресенье, ноября 02, 2008

База знаний на шаблоне "Блог"

Пытался на базе шаблона “блог” сделать узел для работы со статьями. Статьи от “записей” блога отличаются довольно мало, поэтому была надежда малыми силами (средствами WSS и, м.б., SPD) привести узел к нужному состоянию.smile_thinking

Добавил к списку "Записи"(Posts) поле "Автор статьи", изменил параметры веб-частей (поля запроса, группировка, сортировка) на страницах default.aspx и Post.aspx. Всё легко прошло, не удалось только сделать нормальную группировку по авторам (группировка-то получилась, но на страницу при этом мимо всяких веб-частей и зон лепится текст, до управления выводом которого простыми средствами добраться не удалосьthumbs_down). Пришлось ограничиться сортировкой по автору и названию, что, впрочем, и не так уж и плохо.

Засада ждала на странице Category.aspx, показывающей список с фильтром по категориям. Очень быстро выяснилось, что страница очень легко портится простым изменением состава полей запроса данных – после этого не показывается никаких результатов (или все сразу, в зависимости от настроек фильтра в запросе). При этом выяснилось, что инвалидность страницы – 1-й степени (работоспособность не восстанавливается никакими доступными средствами). Попутно обнаружилось, что стандартные средства связи веб-частей не используются, а сама фильтрация закопана где-то в коде.smile_angry

В итоге ничего не оставалось кроме действий по учебнику – связал две веб-части стандартным способом и всё заработало.smile_nerd Внешний вид, конечно, похуже… Но в итоге даже SPD не понадобился.

Technorati Tags: ,

четверг, октября 30, 2008

Sharepoint, Outlook и Windows Mobile

Навели (заказчик, кстатиsmile_wink) на мысль использовать сабжевую комбинацию для документирования взаимодействия (получение заданий, отчёт о выполнении) с заказчиками - одним или несколькими, связанными или независимыми. Сделать оказалось довольно просто.

Настройка системы:

  1. На узле у заказчика (личном узле работника или ещё каком...) создаётся список типа "Задачи" с именем, например, "Задачи для Иванова И.И."
  2. Там же создаётся список типа "Календарь" с именем "Выполнение заданий Ивановым И.И."
  3. Оба списка подключаются к Outlook (Действия -> Подключиться к Outlook), при подключении папкам даются имена "Задания от ХХХ" и "Выполнение заданий ХХХ" соответственно.
  4. На мобильное устройство под Windows Mobile v.5+ (смартфон, PPC) устанавливается , настраивается синхронизация задач и календаря устройства с настольным компьютером.

П.п. 1-3 выполняются по всем работодателям.

Методика работы:

  • Те задания из папки "Задания от ХХХ", выполнение которых требуется трассировать, переносятся (правой кнопкой мышки, скопировать) в основной список задач Outlook, с которым выполняется синхронизация для мобильного устройства.
  • При выполнении задания запускаем на устройстве трассировку задачи, после окончания останавливаем и сохраняем результат в календаре устройства.
  • После синхронизации с настольным компьютером результаты трассировки (помечены категорией "[tracking report]") переносим в соответствующую папку "Выполнение заданий ХХХ".

В результате заказчик выдаёт задания и контролирует ход их выполнения через интерфейс своего Sharepoint-узла, а работник взаимодействует с Outlook'ом и своим мобильным устройством. При отсутствии мобильного устройства трассировку, собственно, можно делать и "вручную" внесением записей в календарь "Выполнение заданий ХХХ".

Примечание. Задачи должны иметь непустые поля дат начала и окончания, в противном случае синхронизация с устройством не проходит (по крайней мере, так у меня на Vista sp1, Outlook 2007 и qtek 3810 с WM5)

среда, октября 01, 2008

Punto switcher v.3

Попробовал новую версию программки. Работает, вроде, но в IE8 beta2 – облом.

Переключение раскладки доп.клавишами - не фурычит. Даже индикация раскладки в трее не работает. Говорить про автоматическое переключение даже и на стоит. Только полуавтомат (выделить и Shift-Break). smile_omg

Выяснилось, что из всякой задницы можно найти выход - отключил UAC, всё стало работать как надо.clap

IE8 beta2 и Google

Дерутся две компании - ничего из гуглевского в ИЕ8 b2 толком не работает - ни почта, ни блоги.
Кто уж там больше выпендривается - ХЗ. Похоже, Гугль - вчера вполне в блоги заметки писались, сегодня фокус не удаётся: при открытии редактора браузер входит в цикл с открытием новых вкладок и окон. Смотрится смешно.thumbs_up

После проведения разысканий, выяснилось, что и Microsoft не плошает - на ИЕ7 происходят те же фокусыclap. И не только на гуглевских сервисах, но и на Hotmail.com тоже. Кроме того, вспомнилось, что в очередной раз включил “на попробовать” UAC. После отключения этого чуда всё прошло. В общем, попробовал… smile_angry

четверг, сентября 18, 2008

Новый Writer

Предложили скачать, скачал, вот пишу в нём. smile_speedy

Ничего плохогоrose, и картинки просто вставлять стало. Может, ещё чего хорошего найдётся.smile_embaressed

Technorati Tags:

вторник, сентября 02, 2008

psiCards-KB - формулы

Вот примеры, которые можно использовать в вычисляемых полях.

1. Перевод первого символа в верхний регистр:

Строка:= xs="#this#", 
String.IsNullOrEmpty(xs)?"":
xs=xs.Trim(), String.IsNullOrEmpty(xs)?"":
xs.Length==1?xs.ToUpper():
xs.Substring(0,1).ToUpper()+xs.Substring(1)

2. Проверка возраста на заданное число лет:

Строка:=xi=16,xs="~~Дата рождения~~",xs==""?"": 
(new DateTime(
Int32.Parse(xs.Split('.')[2]),
Int32.Parse(xs.Split('.')[1]),
Int32.Parse(xs.Split('.')[0])) > DateTime.Today.AddYears(-xi))?
throwerr(String.Format("Возраст не может быть меньше {0} лет!",xi)):xs
/*годится для русской локализации */

3. Проверка даты на заданное "упреждение" - время от текщего момента до срока в дате:

Строка:=DateTime.Parse("#this#")>DateTime.Now.AddHours(24)?"#this#":
throwerr("Заявка не может быть оформлена позднее, чем за 24 часа до начала конференции")

вторник, августа 19, 2008

Опять сюрприз...

Попытался использовать в форме стандартный контрол UserField. Нашлась неплохая статеечка на эту тему. Добавил код, как описано, плюс после некоторых поисков добавил ещё контекст (по умолчанию контрол работает на том же узле, что и связанный список), т.к. мне нужно работать со списками с других узлов. В общем, всё замечательно, только кнопка для выбора пользователей никакого эффекта не вызывает.smile_embaressed Кнопка проверки ввода работает, а эта - нет.smile_angry При внимательном рассмотрении выяснилось, что не находится имя нужной функции, причём по причине длины имени!? В итоге получился вот такой работающий фрагмент кода thumbs_up:

((UserField)ValElem).ListId = DataItem.ListItems.List.ID;
((UserField)ValElem).ItemId = DataItem.ID;
((UserField)ValElem).ID = "uf_" + DataItem.Fields[name].Id.ToString("N");
//DataItem.Fields[name].Id даёт слишком длинное имя!!!smile_omg
((UserField)ValElem).FieldName = this.Name;
((UserField)ValElem).ControlMode = SPControlMode.Edit;
SPContext ctx =
SPContext.GetContext(HttpContext.Current,
DataItem.ID, DataItem.ListItems.List.ID,
DataItem.ListItems.List.ParentWeb);
((UserField)ValElem).ItemContext = ctx;
((UserField)ValElem).RenderContext = ctx;
Technorati Tags: , ,

вторник, августа 05, 2008

Бесплатный антивирус в Windows

Довольно давно приладился использовать бесплатный антивирус ClamWin на Windows Server 2003. Его же использую и на Vista x64, и на Windows Server 2008.
Недавно обнаружил, что во "временных" папках могут встречаться "подозрительные", по мнению антивируса, файлы. Что ж, не жалко, настроил через планировщика самого антивируса сканирование этих папок раз в день (во время обеда, чтоб не мешалось). Живём дальше... smile_wink

среда, июня 25, 2008

И снова сюрприз

При создании полей в списках для имён, которые содержат цифры и не более 4-х букв (например, f1...fff1), первая буква преобразуется в конструкцию _x0_nn_... При этом безразлично, какова локаль текущего узла, есть ли вообще локализация... smile_baringteeth

Совсем уж сюрприз неожиданный - постоянно операцию создания использую, а вот как-то не попалось...smile_embaressed

Technorati Tags: ,

понедельник, июня 09, 2008

.NET и Mono final-3

Действительно, дистрибутив SUSE 10.3 качался почти три дня, установился довольно гладко. При ближайшем рассмотрении Mono в дистрибутиве оказалась не самой последней версии, и тестовая программка показывала те же глюки, что и на Ubuntu. После установки с сайта Mono последней версии все глюки прошли, тестовая программка работает одинаково под Windows и под Linux SUSE 10.3.clap

Но тут же выяснилось, что гордый дистрибутив SUSE 10.3 не желает работать с моей видеокартой от NVIDIA. Что ж с того, что стараяsmile_embaressed - остальные-то работают (Windows XP, Windows 2003/2008, Ubuntu 7.10, Fedora 9), новомодные штучки типа aero и compiz, конечно, не фурычат, но движется всё плавно и легко. В SUSE же сплошные дёргания при таскании и изменении размеров окон, про скроллинг внутри окон вообще без слёз вспомнить нельзяsmile_angry. Несмотря на наличие специальной инструкции по установке, драйвер ставиться не пожелал (или система не принимала?), а после насильственной установки (есть там такая опция) - графика приказала долго жить thumbs_down.

Думаю, это последний финал...

Technorati Tags: , , ,

суббота, июня 07, 2008

Ещё один Sharepoint-сюрприз

Одному из пользователей в период наладки узла были предоставлены разрешения уровня "Полный доступ", после начала эксплуатации разрешения понижены до чтения, но ...не понизились. В итоге пользователю удалось удалить пару документов из библиотеки, при этом удаление делалось из SPD, мимо корзины. Вот такой вот сюрприз.smile_angry

 

Technorati Tags: ,

пятница, июня 06, 2008

.NET и Mono final-2

Всё же, финал получился какой-то неполный - так и неясно, как же эти программы, скомпилированные под Windows, работают в Linux под Mono последней версии smile_embaressed. Пошарил по закромам, обнаружилась купленная когда-то за деньги smile_shades (!!) версия Fedora Core, однако расследование показало, что с момента покупки прошло уже довольно много времени и эта моя версия больше не поддерживается. Пришлось качать актуальную, тем более, что вышла она меньше месяца назад, должно быть всё самое свежее.

Скачал Live CD (ок. 700 Мб), установил на диск (всё встало гладко и даже по-русски), подключилась системка к Сети и сразу же скачала 165 Мб. обновлений. Однако... И никакой последней версии Mono, естественно, на диске тоже не оказалось - ладно, не привыкать, скачал, поставил.

При запуске тестовой программки обнаружилось, что все ранее описанные неприятности пропали clap. Но, естественно, выявились новые - в TextBox и др. не вводятся с клавиатуры русские символы. Английские вводятся, при переключении раскладки - вовсе ничего не вводится thumbs_down. Хотя через clipboard можно и русские буквы всунуть. Какие-то тут сложные взаимодействия у них... Может, эта Fedora под Mono не приспособлена?

Осталось попробовать на SUSE - кому уж лучше быть приспособленной? Но очень уж дистрибутив здоровый у них...

Technorati Tags: , , ,

понедельник, июня 02, 2008

.NET и Mono final

Полез на сайт Mono ставить на Runtu последнюю версию Mono: там всё объяснили, что и откуда запустить, всё стало качаться, но наряду с нужным скачалось и ещё что-то, которое в процессе спрашивало что-то про дисплей и оконный менеджер (естественно, я согласился). На этом всё и закончилось - после перезагрузки могу зайти в консоль (что-то типа безопасного режима) или запустить failsafe сессию (ни гном-, ни kde-сессии не запускаются). mad.gif Попытки как-то хозяйство оживить результата не дали и были заброшены после плача Ярославны и ползания по разным местам, где есть другие дистрибутивы.

Пришёл к выводу, что сделать-то рабочую установку Линуха с поддержкой .NET-программ, скомпилированных в Windows, может, и сделаю (а занятие это уже утратило привлекательность), но передавать её в эксплуатацию чайникам - нет, не буду: я ж не изверг smile_omg.

del.icio.us Tags: , , ,

пятница, мая 23, 2008

Опять сюрприз

И опять от Sharepoint, на этот раз не сильно безобидный smile_baringteeth.

Есть у меня веб-часть, разработанная ещё пол WSS 2003 и переработанная под WSS 2007. Собственно, форма для ввода данных в списки со всякими наворотами типа проверок/валидаторов, вычисляемых полей и т.д. Имеется также режим для работы анонимных юзеров. Всё жило довольно мирно, готовились к передаче заказчику, но после того, как прикрутил в веб-части HIP-систему , начали выскакивать странные ошибки, ранее никогда не встречавшиеся. При внимательном рассмотрении выяснилось, что возникает ошибка в куске кода вроде вот этого

   myData = myList.GetItemById(dataID);



после нескольких (5-6) постбеков с неправильными значениями в полях формы (юзеру выдаётся сообщение и предлагается заполнить поля правильно). При этом и myList != null, и dataID имеет нужное значение, а вылетает ошибка с сообщением о неверном значении dataID smile_angry. Самое противное, что возникает ошибка только на "боевом" сервере у заказчика, на моих тестовых серверах - ни разу не получил, насмотревшись на кошек до мяуканьяsmile_embaressed. Впору тронуться...


Решилось дело (вот уже два дня ошибки не возникает) заменой кода на вот такой

myData = myList.Items.GetItemById(dataID);

Вот, блин... thumbs_down


del.icio.us Tags: ,

воскресенье, мая 18, 2008

Очередной сюрприз от Sharepoint

Потребовалось сохранить информацию для веб-части в библиотечном файле. Сделал текстовый файл с нужной информацией, сохранил в UTF-8, загрузил в библиотеку.

В веб-части информацию считываю примерно таким кодом:

encoding = Encoding.UTF8;
//читаем документ
byte[] chars = file.OpenBinary();
OutStr = encoding.GetString(chars);



В OutStr получаю первый символ - мусорный thumbs_up. Другое дело, что у меня там комбинации вида имя=значение, поэтому удалось выкрутиться за счёт регэкспа. А если б патроны везли?smile_omg

среда, апреля 23, 2008

О глупости разработчиков антивирусов

В деревне Глюкалово не утихает жизнь. На досуге нашёлся ещё один способ подвесить мой компьютер с Vista x64 - в виртуальной машине с сервером Windows 2003 запустил антивирусный сканер от Microsoft OneCare в режиме полной проверки, на хосте (собственно, Vista x64) - сканер Dr.Web CureIt в режиме полной проверки. В течение 3-5 минут память "съели" на 99% и компьютер перестал подавать какие-либо признаки жизни.

После Reset'а выяснилось, что фокус произвёл Dr.Web, который сломал зубы на зацикливании при "обходе" папки, в которую смонтированы все мои диски и разделы - этим достигается инвариантность путей к файлам при работе в нескольких операционных системах. Ну, а так как подмонтированы все разделы, то и получается цикл. Не стал ждать очередного повешения и остановил это "сканирование".

Стало любопытно и запустил уже на Вистовом хосте Microsoft OneCare - вот уже не менее часа наблюдаю, как бедолага "выполняет" операцию "Чтение папок...". Интересно, когда остановится? Памяти ещё гигабайт есть.smile_speedy Неа, не дождался... Но остановить удалось, что уже хорошо smile_wink

Осталось ещё ClamWin запустить на сканирование этой папки...

пятница, апреля 04, 2008

Предел Висты или Vista limited

Похоже, удалось увидеть предельную загрузку, при которой происходит крах системы.lightbulb

Система - Vista Ultimate x64 на процессоре Core 2 Duo 2.16 Ghz, память - 4 Gb , диски SATA.

Было загружено на момент краха:

  • MS Virtual PC 2007 (память 1.5 Гб) с полной установкой Server 2003 и OSS 2007 (база небольшая, используется для тестирования при разработке)
  • два экземпляра Visual Studio 2008 с 15-20 открытыми окнами в каждой, одна в режиме отладки веб-части на виртуальном сервере
  • 4 экземпляра ИЕ 7.0 с 10-12 открытыми страницами в каждом
  • 1 экземпляр Firefox 2.0 с 5 страницами
  • 2 окна с удалёнными серверами по протоколу RDP
  • SQL Server Express
  • Outlook и OneNote 2007, Word 2007, 2 окна Excel 2007
  • 6 окон Sharepoint Designer 2007 с открытыми узлами на удалённых серверах
  • всякие мелочи - Sidebar, WMP, Intel Audio Studio, nnCron, DaemonTools и т.д.

Всё это хозяйство (естественно, несколько состав менялся) функционировало достаточно исправно в течение более 4-х суток (по таскманагеру Висты)thumbs_up. В один из моментов стали наблюдаться сначала мелкие неполадки (типа моргания окон), потом и крупные (неправильная компиляция проекта в Студии)thumbs_down. В таскманагере выяснилось, что в этот момент запустиось сканирование WinDefender'ом, индексация дисков встроенным поисковиком, Шарепойнт в виртуальном сервере тоже занялся какими-то своими делами. Загрузка процессора - постоянно 100%, памяти - 98%, на действия система не реагирует. Минут через пять сама предложила отключить Aero, после этого удалось закрыть некоторые программы, однако некоторые процессы остались висеть и чего-то делать. Загрузить ProcessExplorer и посмотреть на их занятия не удалось. Мало того, не удалось сделать ни Restart. ни Shutdown, работал только Hibernate, толку от которого в этой ситуации было мало. Помогло только отключение питания.smile_angry

Хорошо хоть, что почти ничего не пострадало, пришлось только запускать офисного тестировщика - чего-то восстанавливал, сказал, что всё хорошо.smile_regular

четверг, марта 27, 2008

Ыщо один сюрприз от Sharepoint

Новая фигня обнаружилась с этими SPD-процессами - будучи повешенными на создание элементов списка, запускаются только при ручном "создании". Если элемент добавляется программно (другим РП), то это событие молча игнорируется. thumbs_down

РП "студийные" запускаются в обоих случаях. thumbs_up

Technorati Tags: ,