Dkms's Blog on WordPress

F#, вторая серия. Параллельная.

Posted in .NET, Глюкалово, F#, Sharepoint, SPF 2010 by DkmS on 23.06.2011

Попытка соорудить способ параллельного выполнения кода по запросу данных из нескольких списков Sharepoint. Собственно, способ предполагалось использовать в веб-части, написанной на C#, выбор F# для реализации способа обусловлен наличием в нём средств для параллельного выполнения асинхронных операций (класс Async).

Упрощённая тестовая программка на C#:

image

Параллельный исполнятель на F#:

image

Однако фокус не удался: из всех списков, переданных в ParallelExecutor, данные добываются только из одного (иногда из первого, иногда из последнего). На всех остальных операция list.Items.GetDataTable() падает с диковинным сообщением <nativehr>0×80010102</nativehr><nativestack></nativestack> Печальная рожица

Похоже, разработчики Sharepoint не сумели подружиться не только с .NET 4.0, но и с F#-классом Async…

Technorati Tags:
Tagged with:

Веб-часть XmListViewer 2010

Posted in .NET, LinQ, OSS 2010, Sharepoint, SPF 2010 by DkmS on 23.06.2011

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

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

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

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

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

Technorati Tags:

Хвала Reflection.

Posted in .NET, Sharepoint by DkmS on 07.03.2011

Потребовалось в проекте выгружать на диск документы из библиотек Шарепойнт. На первый взгляд – ничего особенного: запрашиваем у пользователя путь к папке сохранения на манер модуля резервного копирования в Центре Управления, подключаем пространство имён System.IO,  класс DirectoryInfo, методы CreateSubdirectory, file.OpenBinary() + stream.Write() – и все дела. На второй взгляд – тоже просто: примеры решения подобных задач имено так и сделаны. На третий взгляд – вообще всё замечательно: после компиляции код работает, документы выгружает. Ура.

Хуже на четвёртый взгляд, взгляд тестировщика – не выгружаецца! Целевая папка как бы недоступна… Нда… Модуль резервного копирования в ту же папку спокойно свои файлы сохраняет… При помощи отладчика можно наблюдать, как конструктор

 new DirectoryInfo(path)

без выбрасывания каких-либо исключений возвращает непустой объект (что и ожидается), у которого свойство Exists == false. Сюрприз, фокус-покус.

Фокус разоблачается разглядыванием в Рефлекторе или IL-шпионе (ILSpy) кода классов из пространства Microsoft.SharePoint.Administration.Backup. Там методы System.IO используются примерно так:

using (SecurityContext.RevertToSelf())

        {

              info = new DirectoryInfo(dir);

       }

Класс Microsoft.SharePoint.Utilities.SecurityContext почему-то “внутренний”, использовать как обычно его не получится, но для Reflection преград же нет… Дразнюсь

Technorati Tags: , ,
Tagged with: ,

Значение ID из УРЛ страницы

Posted in LinQ, Sharepoint by DkmS on 30.11.2010

В коде веб-части для получения значения параметра ID (да и любого другого) из УРЛа страницы, на которой веб-часть установлена, можно использовать LINQ-выражение:

   1: ID = (from urlParameterName in this.Page.Request.QueryString.AllKeys 

   2:       where urlParameterName.ToUpper() == "ID"

   3:       select this.Page.Request.QueryString[urlParameterName]).FirstOrDefault();

 
Выглядит забавно, написать сразу не получается (не то, что кучка циклов из MSDN), но преимуществ такого подхода много…
Tagged with:

Оказывается – 5

Posted in .NET, Глюкалово by DkmS on 17.11.2010

… что и MSDN не всегда говорит правду.

Например, читаем

An expression using the &= assignment operator, such as
x &= y
is equivalent to
x = x & y

На практике оказывается, что эквивалентность для логических операндов наблюдается только в приведённом примере с константами:

class AndAssignment
{
    static void Main()
    {
        bool b = true;
        b &= false;
        Console.WriteLine(b);
    }
}
/*
Output:
False
*/

Если же операнд y является вызовом какой-либо процедуры, то оператор &= эту процедуру вызывает всегда, независимо от значения x.

.NET и Mono final-2

Posted in .NET by DkmS on 06.06.2008

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

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

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

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

Technorati Tags: , , ,

.NET и Mono continued

Posted in .NET by DkmS on 13.03.2008

Помрёт, похоже, этот мой эксперимент на гриде – элементах DataGrid или DataGridView. В принципе, они работают и в Linux (Ubuntu), кое-какие свойства глючат, но терпимо. Плохо, что не работает толком редактирование в ячейках, но обойти можно, хоть и будет это выглядеть чесанием левой ногой правого уха. Самое плохое с навигацией по гриду – на колесо мышиное не реагирует, а полосы прокрутки (scrolling) загружают процессор на 100% :

net-mono2

Нижний контрол на форме – DataGridView, зелёная линия справа – график загрузки процессора (скачок загрузки произошёл в момент изменения размеров формы до появления scrollbar’а на гриде).

В общем, для практики гриды применить не получится.smile_cry smile_angry Слабо, правда, представляю деловые программы без гридов: прайс-лист соорудить, счёт выписать – везде гриды нужны. Привыкли все…

Осталось попробовать сделать интерфейс на ListView вместо грида – он, вроде, без фокусов с навигацией. Или делать программу в технике asp.net – говорят, эти программки переносятся хорошо (собственно, только они и переносятся).

Follow

Get every new post delivered to your Inbox.

Join 76 other followers