пятница, 7 октября 2011 г.

Sharepoint 2010: Социальные кнопки

На одном из проектов потребовалось добавить социальные кнопки к некоторой информации на сайте. Например, при отображении новости нужны были эти самые кнопки.
Решил создать контрол, который будет отображать эти самые кнопки. Данные контрол можно будет разместить как на мастер-странице, и так же включить в состав любого нашего элемента управления. Ограничение контрола: при нажатии на социальную кнопку должно происходить добавление ссылки на текущую отображаемую страницу в браузере, т.е. то что есть в адресной строке.

пятница, 26 августа 2011 г.

Sharepoint 2010: Миграция БД на другой сервер

Иногда бывает необходимо перенести базы данных с одного сервера на другой. Информация по этому храниться в статьях:

Интеграция TFS 2010 и Sharepoint 2010

У нас уже больше года развернут TFS 2010. Но как-то вышло странно, что сапожник оказался без сапог: не было интеграции TFS 2010 с Sharepoint 2010, т.е. файлики хранились на дисках.

Как только я это узнал (сам же я год работал с другой системой контроля версий, а если и касался TFS, то вся необходимая информация была в постановке задачи), сразу решил исправить это дело.

Sharepoint 2010: Протоколирование

Про пользу протоколирования написано много, в том числе и мной.
В Sharepoint для протоколирования можно пользоваться стандартным методом
try
{
    var i = 0;
    var a = 2 / i;
}
catch (Exception ex)
{
    SPDiagnosticsService.Local.WriteTrace(0, new SPDiagnosticsCategory("My Category", TraceSeverity.Unexpected, EventSeverity.Error), TraceSeverity.Unexpected, ex.Message, ex.StackTrace);
}

Sharepoint 2010: AutoSPInstaller

Наверное многим из вас приходилось устанавливать Sharepoint 2010 на сервера. Помните какое это долгое и нудное занятие? Надо постоянно помнить конфигурацию, что и в какой последовательности устанавливать, скачивать необходимые пакеты перед установкой. Знаете же какие имена получают Базы Данных того или иного сервиса? Бррр!!!

Непрерывная интеграция (Continuous Integration)

Вот и заканчивается август. В этом месяце мне удалось сходить в отпуск и смотаться в командировку в Москву. Удалось побывать на МАКСе 2011. Продолжим писанину Улыбка
Это скорее заметка, чем полноценная статья. Здесь будут только тезисы из книги “Непрерывная интеграция. Улучшение качества программного обеспечения и снижение риска.” Поль м. Дюваль, Стивен Матиас и Эндрю Гловер (к сожалению, книга не моя, а брал почитать). В скобках в основном указано название программы-инструмента, которая позволяет выполнить описанную задачу.

пятница, 22 июля 2011 г.

Microsoft Theme Builder

В блоге Дмитрия Плотникова натолкнулся на интересное описание инструмента Microsoft Theme Builder. Данные инструмент предполагает более глубокую настройку тем.

пятница, 1 июля 2011 г.

Sharepoint 2010: Работа с Вариантами (Variations)

Спасибо IAfanasov за решение вопроса.
Рано или поздно при разработке сайтов с помощью Sharepoint возникает необходимость предоставить разные варианты отображения одного и того же сайта. И это без разницы доступен ли сайт через интернет или им пользуются только в интрасети.
Сценарии, при которых может потребоваться использование вариантов, могут быть следующие:
  • Несколько языков. В этом сценарии большая часть контента создается на языке исходного варианта веб-сайта и копируется в некоторые или во все конечные варианты веб-сайта для перевода на различные языки. Например, контент может быть создан на английском языке и скопирован в конечные варианты веб-сайтов для перевода на немецкий, французский и испанский языки
  • Несколько устройств. Логику работы страницы VariationRoot.aspx можно настроить так, чтобы перенаправить пользователей на страницы, предназначенные для работы с различными типами устройств. Например, можно использовать конечные варианты веб-сайта со страницами, предназначенными для показа на устройствах с различными размерами экранов или различным разрешением экранов.
  • Несколько расположений или фирменных стилей. Например, организация, предоставляющая автомобили в аренду, может использовать конечные варианты веб-сайтов для всех городов, в которых у этой компании есть филиалы. Большая часть сведений о компании одинакова для всех филиалов, поэтому для этих страниц используются варианты, а остальной контент, например специальные предложения или мероприятия по продвижению услуг, создается на конечных вариантах веб-сайта, для которых он предназначен.

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

Sharepoint 2010: Ошибки миграции.


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

воскресенье, 26 июня 2011 г.

Sharepoint 2010: Заменяемые параметры проекта

Вы еще ручками прописываете в проетк полное название сборки, класса, фичи, проекта? Тогда вам пригодится вот эта информация.
Удачи!

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

Sharepoint 2010: Site Directory

Сегодня решил пройтись по стандартным веб-частям. Наткнулся в разделе "Каталог узлов" на веб-часть "Категории". Решил глянуть что она из себя представляет. Да вот невезение: при размещении её на странице появляется вот такая ошибка


Поиск в логах по предоставленному CorrelationId ничего путного не дал. Начал рыскать в сети и нашёл вот эту статью. Суть в том, что для корректного отображения веб-части ей нужно указать список "Список сайтов" (вот почему бы об этом прямо не сказать?). Просто так создать такой список у меня не получилось. Но он создается при создании узла по шаблону "Каталог сайтов". Но дело в том, что изначально этот шаблон не доступен в Sharepoint 2010 (Microsoft его сделала невидимым). Как сделать этот шаблон видимым как раз описано в статье, которую я упоминал выше.
После того, как шаблон будет открыт, можно будет создать сайт на его основе



Затем вернуться к нашей веб-части "Категории" и в настройках указать нужный список. 

Sharepoint 2010: Изменение поведения поля DocIcon

Суть проблемы
После миграции с Sharepoint 2007 на Sharepoint 2010 перестали работать представления библиотек документов так как к этому привыкли пользователи: при клике на иконку документа перестало происходить скачивание документа. Вместо это строчка с документом просто выделяется. Начали поступать жалобы.

Решение
Суть в том, что Microsoft заменили List View Web Part новым расширяемым XSLT List View Web Part. "Из коробки" новая веб-часть зависит от файлов main.xsl, fldtypes.xsl и vwstyles.xsl, которые рендерятся представлением документов. Эти XSLT файлы расположены в папке:
%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\14\template\layouts\XSL
Таким образом, решение заключается в использовании отдельного XSL-файла с нужным рендерингом (включая ссылки) для иконки документа. Решение основано на расширении fldtypes, доступные в SharePoint 2010. Поподробней об этом описано в статье.
Собственно само решение от Microsoft нашей проблемы описано вот здесь.

Так же есть стороннее решение, решающее данную проблему аналогично, но маленько с другой структурой файла.

Обновление 07.09.2011:
В некоторых браузерах и в некоторых ситуациях :) для анонимного пользователя, чтобы скачать файл, система запрашивает логин-пароль. Откуда он у него? Похоже на то, что js-функции, которые возвращают файл, используют какие-то внутренние ресурсы, к которым нужна авторизация. Предлагаю поменять содержимое файла на следующее:
          

	
	  
		
			
				
					{$thisNode/@FileLeafRef}
				
				
					
: 
					{$alttext}
					{$alttext}                            
				
			                  
		
		
			{$thisNode/@FileLeafRef}
		  
		
	  
	
 

понедельник, 6 июня 2011 г.

Обучение Sharepoint

Хороший цикл для обучения премудростям Sharepoint, можно почитать на сайте.

Копипаст gandjustas:

  1. SharePoint это в первую очередь ASP.NET приложение, если не владеете им, то начать можно отсюда: http://www.asp.net/web-forms.
  2. Далее Get Started: http://msdn.microsoft.com/en-US/sharepoint/ee513147.aspx, обязательно выполните лабораторные работы.
  3. Затем сразу Advanced training: http://msdn.microsoft.com/en-US/sharepoint/ff420377.aspx, обязательно выполните лабораторные работы.
  4. В дальнейшем ответы на вопросы по использованию отдельных модулей шарика можно найти в Resource Centers: http://msdn.microsoft.com/en-US/sharepoint/bb964529.aspx.
  5. Далее обязательно прочитать книгу Real World SharePoint 2010: Indispensable Experiences from 22 MVPs, узнаете много нового
  6. Если будете заниматься брендингом (созданием уникального внешнего вида) SharePoint, то вам также понадобится книга Professional SharePoint 2010 Branding and User Interface Design.
  7. Далее обязательно изучите SharePoint Guidance 2010, причем как примеры кода (он там, чуть более чем образцовый), так и подходы к разработке. Кстати там тоже есть лабораторные работы, которые также надо выполнить.
  8. SharePoint это не только ценный мех серверная платформа, но и мощная клиентская часть в виде Office 2010. Для изучения Office и его интеграции с SharePoint можно посмотреть онлайн курс: http://msdn.microsoft.com/en-us/gg605831, и снова обязательно выполнить все лабораторки.
  9. Из того же комплекта обучающих курсов стоит пройти курсы по Office365, SharePoint and Silverlight.
  10. Со временем вы поймете что 90% задач в SharePoint\Office можно решить с помощью существующих средств. Чтобы в совершенстве овладеть всеми этими средствами надо внимательно изучить контент на сайте http://office.microsoft.com/ru-ru/training/
Вдогонку для администраторов:
  1. Для изучения администрирования SharePoint понадобятся базовые знания об администрировании следующих компонент и приложений:
    1. Active Directory Domain Services
    2. SQL Server 2008
    3. IIS Weberver
  2. Для начала просмотреть видеокурс Getting Started for IT Pros.
  3. Затем курс Advanced IT Professional Training. Обязательно выполните лабораторки в этом курсе.
  4. Далее прочитайте цикл статей про развертывание SharePoint в организации.
  5. Администраторы обычно выполняют  функции Power Users, занимаются небольшими кастомизациями и обучением пользователей. Поэтому крайне необходимо изучать все материалы на сайте http://office.microsoft.com/ru-ru/training/.
  6. Если вы хотите качественно настроить поиск SharePoint, то вам может пригодиться видеокурс Enterprise Search IT professional training. Обязательно выполняйте лабораторки.
  7. Справку и различные гайды по интересующим вас аспектами SharePoint вы сможете найти в Resource Centers.
  8. Для повышения квалификации выполняйте лабораторные работы. Они отнимают немного времени и позволяют изучить различные аспекты с которыми вы (пока) не столкнулись в работе.
  9. SharePoint активно использует PowerShell для администрирования. Изучайте PowerShell, это поможет вам решать задачи, которые требуют программирования.
  10. Ответы почти на все вопросы можно найти на TechNet. Зачастую достаточно пошагово выполнить руководство чтобы все заработало как надо.

понедельник, 30 мая 2011 г.

Sharepoint: Ошибка мастер-страницы

После редактирования мастер-страницы (как вариант, после миграции) при просмотре страницы, которая основывается на этой мастер страницы, я ловлю ошибку (на желтом экране "смерти"):
Error: The base type 'System.Web.UI.MasterPage' is not allowed for this page

Решение: глянуть web.config и проверить наличие
Если этой строчки нет, то нужно добавить.
Источник

среда, 25 мая 2011 г.

Sharepoint: Модификация мастер-страниц.

Описание проблемы.
Есть решение, содержащее шаблон узла и фичу, публикующую мастер-страницы. Определение фичи:
<Module Name="MasterPages" Url="_catalogs/masterpage" Path="MasterPages" RootWebOnly="TRUE">
  <File...

Для каких-то потребностей создается веб-приложение. В этом веб-приложении создается семейство сайтов с использование разработанного шаблона узла. На созданном сайте активируется наша фича, которая успешно размещает мастер-страницы в библиотеке мастер-страниц.
Допустим создали два веб-приложения. Мастер-страницы в библиотеке не меняем. Обновляем наше решение (в мастер-странице добавили некий элемент, фичу не переактивируем), используя stsadm -o upgradesolution. Что мы увидим?

Sharepoint 2010: Работа с офисными документами в вебе.

Буквально вчера столкнулся со странной проблемой. На самом деле это не проблема, а странность её заключается в том, что я запутался на ровном месте. :)
Смысл в том, что очень часто встречал упоминание работы (просмотр/редактирование) с офисными документами в вебе: при беглом чтении статей, при просмотре презентаций и т.д. И почему-то у меня сложилось впечатление, что этот функционал есть изначально при установки MOSS 2010. В голове кружилась фраза "Раньше для просмотра офисных документов в вебе надо было ставить WebApp, а сейчас он по-умолчанию интегрирован в Sharepoint" (такая же фигня про PerfomancePoint). Частично это фраза верна, а чистично вводит в заблуждение. В обще решил попробовать.
Может быть раньше интеграция WebApp с Sharepoint была не так проста (не знаю), но сейчас если установить Sharepoint, а после WebAp, то никаких дополнительных усилий не нужно. В большинстве случаев все работает сразу, необходимо только активировать соответствующую фичу. Вот что значит "по-умолчанию интегрирован". Но всё равно WebApp нужно скачивать и устанавливать отдельно. Я смог его скачать по подписке MSDN (искать в Servers пункт Office web apps).
К тому же, эта путаница (с работоспособностью по-умолчанию) возникла из-за Excel Services. Вообще там такая вещь: просматривать документы Excel в вебе можно и без WebAp, но чтобы их редактировать нужен WebAp. Так же меня запутали преобразователи документов (в html), это немного другое.
Вывод: хочешь работать с офисными документами в вебе, скачивай и устанавливай WebAp

Ссылки:
  1. Развертывание Office Web Apps (устанавливаемых с продуктами SharePoint 2010)
  2. Deploy Office Web Apps (Installed on SharePoint 2010 Products)
  3. "The workbook cannot be opened" Error with SharePoint Server 2010
  4. http://office.microsoft.com/ru-ru/web-apps-help/
  5. Installing Office Web Apps for SharePoint 2010
  6. Развертывание Office Web Apps (SharePoint Foundation 2010)
  7. Обзор Office Web Apps
Ссылки для отображения pdf в вебе:
  1. Open PDF File in Browser from SharePoint 2010
  2. Opening PDF Files in SharePoint 2010
  3. Adding PDF Icon or Creating a Site From Template triggers Prompt for Download In SharePoint 2010
  4. How to open PDF files in browser and set file type association icons in SharePoint 2010
  5. Sharepoint 2010 and pdf integration. Series part 1
  6. How to configure PDF iFilter for SharePoint Server 2010 or Search Server 2010

среда, 11 мая 2011 г.

Sharepoint: Валидация данных формы в режиме редактирования страницы

Ситуация:
Есть страница веб-частей. На странице расположена веб-часть с формой заполнения. На форме внедрена валидация полей (через контролы валидации). Страницу открываем в режиме редактирования, меняем её, после чего пытаемся опубликовать. Получаем ошибку:
"Эта страница содержит недопустимое содержимое или форматирование. Дополнительные 
сведения можно найти в затронутых разделах"
или
"This page contains content or formatting that is not valid. You can find more information in the affected sections."


Решение.
Скорее всего, если форма будет заполнена корректно, то такого сообщения не будет, но очень муторно каждый раз при редактировании страницы заполнять поля формы. Поэтому правильным решением будет отключать валидаторы на время редактирования страницы.
Чтобы проверить режим отображения страницы, можно воспользоваться следующими способами:
Способ 1 (найден здесь): WebPartManager wp = WebPartManager.GetCurrentWebPartManager(Page);
if(wp.DisplayMode == WebPartManager.BrowseDisplayMode){/*что-то делаем*/}
Способ 2 (найден здесь): 
if(SPContext.Current.FormContext.FormMode == SPControlMode.Display){/*что-то делаем*/}

Т.е. мы проверяем в каком режиме находится форма и прячем валидаторы на странице, если находимся в режиме редактирования (validator.Visible = false) или вообще не добавляем валидаторы на страницу (в методе protected override void CreateChildControls())

пятница, 25 марта 2011 г.

Обновление feature

Натолкнулся на статью, в которой есть ссылка на интересный цикл статей как работать с Upgrade Features.
Очень рекомендую!

понедельник, 21 марта 2011 г.

Протоколирование. Часть 4. Популярные платформы протоколирования.

1. TraceListener

Сайт разработчика: microsoft.com
Последняя дата обновления: Входит в состав .NET Framework
Функционал протоколирования, который поставляется совместно в .NET Framework (System.Diagnostics.TraceListener). Ранее я упоминал, что в составе .NET Framework есть функции Trace.Write и Debug.Write, которые являются одной из наиболее полезных особенностей отладки.NET Framework. Функционально Trace очень похож на Debug, но в отличие от своего Debug брата, который должен быть использован только во время отладки, Trace функция может быть внедрена в программу и поставлена заказчикам, в том случае, если пользователи сталкиваются с проблемой, они могут активировать Trace, просто редактируя файл конфигурации приложений.

1.1. Переключатели

Следующий элемент, с помощью которого можно управлять протоколированием – это переключатели. Грубо говоря – это флаги, которые можно использовать перед вызовов функции протоколирования.

пятница, 18 марта 2011 г.

Протоколирование. Часть 3. Критерии выбора логгеров


В данной статье рассматриваются критерии выбора профессиональных решений для протоколирования.

1.   Основные

1.1.     Протоколирование простых текстовых сообщений

Таких как отладочная информация или ошибки и связанная с ними информация, такая как время.

1.2.     Уровни логов для фильтрации сообщений

Большинство инструментов протоколирования позволяют разработчикам указывать уровень лога, такой как debug, info, warning и error для каждого сообщения и фильтровать сообщения по степени важности. В зависимости от пользователя ему могут быть интересны сообщения определенного уровня. Например, разработчикам необходима более детальная информация  в процессе отладки.

четверг, 17 марта 2011 г.

Создание управляемых свойств для поиска в Sharepoint 2010

В связи с миграцией решения с 2007 на 2010 версию Sharepoint, потребовалось переделать функционал регистрации управляемых свойство в службе поиска Sharepoint. Хотя старый функционал и работал, но функции, которые в нем применялись, были помечены как устаревшие.
Начал гуглить. Вначале нашел решение на PowerShell, а затем на C#.
Пользуйтесь!

пятница, 11 марта 2011 г.

Миграция с MOSS2007 на MOSS2010. Поехали!

Как я писал ранее, миграция Sharepoint с версии 2007 на 2010 не приносит особых сложностей, если используется только стандартный функционал. Но такое бывает крайне редко. Передо мной стала задача миграции портала вместе с существующими наработками.
Текущая версия портала развернута на MS  Windows Server 2003 SP2 (32-разрядная). В приведенной ссылке есть ссылка на документацию от MS по миграции. Существуют Требования к оборудованию и программному обеспечению (SharePoint Server 2010). Исходя из этой ситуации мне подходит только миграция БД с сервера c Sharepoint 2007 на сервер с Sharepoint 2010. Как всегда в интернете можно найти много информации, поэтому буду отталкиваться от статьи SharePoint 2010 Cookbook: How to Migrate a SharePoint 2007 Site to SharePoint 2010 Using Database Attach (некоторые картинки будут оттуда).
Опишу последовательность шагов:

суббота, 5 марта 2011 г.

Установка MOSS 2007 на Windows Server 2008 R2

В процессе миграции с MOSS 2007 на MOSS2010 решил попробовать In Place Upgrade. Для этого понадобилось установить имеющейся MOSS 2007 SP1 на Windows Server 2008 R2. Конечно же это не получилось сделать так просто, т.к. для того чтобы провести эту установку надо использовать MOSS 2007 SP2.

Решений много:
  • Скачать MOSS 2007 SP2
  • Скачать только  SP2 и провести обновление с MOSS 2007 SP1 на MOSS 2007 SP2 [1, 2]
Инструкция от Microsoft как проводить слияние.
Я решил пойти вторым путем, как наиболее интересным.

Во время установки и настройки Sharepoint может возникнуть проблема: When you launched “SharePoint Products and Technologies Configuration Wizard” and got into this error: Failed to start the database service MSSQL$OfficeServers.

Решение находится там же: Go to “regedit”, browse thru “HKLM_Local_Machine/Software/Microsoft/Shared Tools/Web Server Extensions/12.0/WSS/”. Then change the value of attribute named “ServerRole” from SINGLESERVER to APPLICATION

вторник, 15 февраля 2011 г.

Анализ зависимостей программно? NDepend!

Натолкнулся на просторах интернета на хорошую статью:
Regfor's devblog: Анализ зависимостей программно? NDepend!: "Как поддерживать качества код на должном уровне? Есть много способов – культура написания кода, регулярное code review, всевозможные договор..."
Сам недавно поработал с этой утилитой. Хотел написать заметку, но меня опередили :)
Постараюсь поподробнее описать функционал, если меня не опередят :)

среда, 9 февраля 2011 г.

Миграция с MOSS2007 на MOSS2010

Сегодня возникла необходимость миграции портала, реализованного на базе MOSS 2007 на новую версию MOSS 2010. Благо тема не новая, т.к. новая версия вышла в мае 2010 года, поэтому инструкции по миграции давно есть. Среди них всех я выделю пожалуй только одну от производителя. Очень подробно описано.
В общем, пока такой вердикт: если не было сторонних разработок и контент не успел сильно распухнуть, то проблем в миграции быть не должно.
Но у меня как раз ситуация в том, что надо мигрировать решения, которые были развернуты на MOSS 2007. Благо все исходники на руках.
Вооружился студией и начал перекидывать реализованный код. Т.к. при реализации существующих решений не использовалось расширение от Microsoft VseWSS, то процесс миграции кода происходит немного болезнее.
Создал простенький проект. При развертывании решения получил такую ошибку: "Путь содержит недопустимые знаки." Проблема быстро нагуглилась, оказалось, что русские имена в пути лучше не использовать и не работать под пользователем, в имени которого есть русские буквы.
Еще заметил интересный факт. Если создать фичу, то в папке Features на сервере она именуется как [Имя проекта]_[Имя фичи]. На мой взгляд, это очень удобно, т.к. приходилось самому называть подобным образом фичи, чтобы не было дублирования в разных проектах. Не знаю как это повлияет на мигрирование решения. Посмотрим...

четверг, 3 февраля 2011 г.

Протоколирование. Часть 2 Внедрение протоколирования.

Хотелось бы рассмотреть уровни зрелости внедрений протоколирования. Как-никак мы все в разной степени проходили через эти этапы.

Уровень 1. Начинающий.

Как правило, о протоколировании начинаешь задумываться, когда сталкиваешься с проблемами работы приложения на производственной среде Заказчика. Т.к., как говорилось ранее, не всегда у Заказчика возможно развернуть графические инструменты отладки, то приходится реализовывать инструмент протоколирования, например, запись в файл. Обычно разработчики начиняют свой код разного рода сообщениями, по которым он может понять до куда программа дошла, какие значения переменных имела и т.д. Иногда даже удается найти источник ошибки. После чего разработчику необходимо пересобрать приложение, убрав излишнее протоколирование или просто закомментировать, т.к. сильно частый вывод сообщений в протоколировании может уменьшить быстродействие приложения, поскольку тратится время на сам вывод сообщений. Но что происходит, когда появляется новая ошибка в приложении? Правильно, разработчик опять внедряет отладочные сообщения. Кстати, вполне реально, что он будет это делать в уже «отлаженном» в прошлый раз коде.

пятница, 28 января 2011 г.

Dependency Injection в SharePoint

Сегодня потребовалось внедрить в проект по SharePoint управление зависимостями.
В качестве инструмента IoC был выбран Ninject.
Внедрение зависимостей в SharePoint дело не простое. Там нет удобной так называемой единой точки входа, которую мы имеем в любом другом решение, которое пишем с нуля (например, ASP.NET-проект, где в нашем распоряжении есть файл global.asax). Кое-какие идеи по внедрению конечно были, но чтобы не изобретать велосипед, решил вначале в интернете посмотреть как люди решают подобную проблему.
Практически сразу наткнулся на статью. Почитал её. На мой взгляд, там нет ничего криминального для SharePoint. Да и к тому же увидел, что человек применил некоторые из моих идей, которые я хотел попробовать. Спасибо ему, что сэкономил моё время.
Попробую на продакшине. Должно работать как часы.
А вы что думаете?

четверг, 27 января 2011 г.

Установка Timeout в сгенерированных DataSet

Добрый день!
В одном из рабочих проектов используем сгенерированные DataSet через XSD-схему, на которую переносятся хранимые процедуры из БД. Как говорится, программа работала отлично до поры до времени. Объем данных вырос и отчеты, использующие эти хранимые процедуры, стали долго строиться (используем ReportViewer) и в конечном итоге вылетать по тайм-ауту. Ясно дело, что надо устанавливать Timeout у SqlConnection. Но лесть в сгенерированный код не хочется, но и не нужно.
Натолкнулся на статью с примером функции расширения:
public static void TableAdapterCommandTimeout(this T TableAdapter, 
        int CommandTimeout) where T : global::System.ComponentModel.Component
{                
    foreach (var c in typeof(T).GetProperty("CommandCollection", System.Reflection.BindingFlags.NonPublic | 
                         System.Reflection.BindingFlags.GetProperty | 
                         System.Reflection.BindingFlags.Instance).GetValue(TableAdapter, null) as 
                         System.Data.SqlClient.SqlCommand[])
        c.CommandTimeout = CommandTimeout;

}
Теперь можно её использовать, например так:
this.FooTableAdapter.TableAdapterCommandTimeout(60);
Медленно конечно будет работать, т.к. через рефлексию сделано, но нам быстро и не надо, т.к. отчеты относительно редко используемые. Да и рефлексия в сравнении со временем, которое нужно для построения отчетов, занимает не так уж много времени.

вторник, 25 января 2011 г.

Явное и неявное преобразование в строку

Тут что-то подумалось. Почему люди так любят вызывать метод ToString() в случаях подобном этому:
int x = 10; 
string str = "Значение = " + x.ToString();
Лично я предпочитаю следующую запись:
string str = "Значение = " + x;
Это удобно для меня во многих случаях. Самый яркий пример: есть коллекция и я пытаюсь получить оттуда значение:
IList<string, int> list = new List<string, int>();
list.Add("key", 10);
string str = "Значение = " + list["key2"]; //Напишет "Значение = "
Если попробовать применить ф-ю list["key2"].ToString(), то получим исключение. Чтобы не было исключений, надо проверять возвращаемое значение из коллекции.
Лично мне кажется это неудобным и поэтому я использую комбинацию:
  • list["key2"] + ""
  • Последующая проверка на string.IsNullOrEmpty(), если нужно.
А вы что думаете?

понедельник, 3 января 2011 г.

Протоколирование. Часть 1.

Всех с наступившим 2011 годом!!! Начнем цикл статей... 

Введение
Этот цикл статей родился не просто так. Тема протоколирования широкая (это демонстрирует объем прочитанных статей в интернете, на основе которых вкупе со своим опытом и создан этот материал), и каждый программист решает, как ему удобно отлаживать свои программы. Т.о. количество средств протоколирования растет очень быстро, т.к. постоянно изобретаются велосипеды. Вред подобного «велосипедостроительства» рано или поздно становится понятен каждому разработчику. К сожалению, я не стал исключением, реализовав свою систему протоколирования в нескольких проектах. Цель этого цикла статей – дать разработчику информацию о существующих системах протоколирования. И пусть каждый разработчик сам выбирает готовый инструмент в зависимости от своих потребностей. Если появятся интересы, то можно будет провести тестирования средств и понять, какое из них нам все же по душе.

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

Еще статьи

2leep.com