tag:blogger.com,1999:blog-56848648702791006832024-03-12T16:46:02.436-07:00Русский блог SharePoint 2010Установка, внедрение, администрирование Sharepoint 2010.
Разработка под Sharepoint.Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.comBlogger28125tag:blogger.com,1999:blog-5684864870279100683.post-47899686437425110602012-06-14T06:28:00.001-07:002012-06-14T06:30:43.857-07:00Тонкости получения списка SharePoint<div dir="ltr" style="text-align: left;" trbidi="on">
Есть несколько способов получения списка по его названию без выбрасывания исключения. Это <a href="http://msdn.microsoft.com/en-us/library/ms443550" target="_blank">индексатор SPListCollection</a> и метод <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistcollection.trygetlist" target="_blank">SPListCollection.TryGetList</a>. Однако не стоит исключать, что в процессе жизни решения названия списков могут измениться. Это вполне вероятно, особенно при переходе от пилотной эксплуатации к промышленной. В это время решением попользовались простые пользователя и поняли как всякие мелочи, вроде названия списка, будут удобны именно им, а не разработчикам, которые эти названия придумывали.<br />
В отличии от названия, Url и Guid списка не меняются на протяжении жизни развернутого решения. При каждом разворачивании Guid'ы списков меняются, поэтому использовать их для поиска нужных списков не удобно. А вот Url, пожалуй, является самым главным претендентом для поиска списков. Мне удалось найти только один метод, позволяющий получить список по Url, это <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.getlist" target="_blank">SPWeb.GetList</a>. Однако его недостатком является выбрасывание исключения при попытке получения списка по несуществующему Url. Это можно обойти при помощи объекта <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfolder.aspx" target="_blank">SPFolder</a>. Каждый список имеет RootFolder, в котором хранятся страницы для просмотра списка элементов и форм элемента. Для его получения есть метод не выбрасывающий исключений. Вот как можно получить список, обезопасив себя от исключений:<br />
<br />
<pre class="brush: csharp">SPWeb web = site.RootWeb;
SPFolder folder = web.GetFolder("your list url");
if (true == folder.Exist)
//Если библиотека
if (null != folder.DocumentLibrary)
return folder.DocumentLibrary;
else
return web.GetList(folder.Url);
</pre>
<br />
Таким образом, исключение может возникнуть только при попытке получить список по Url существующей на сайте папке, не принадлежащей к списку. Например, "Lists". Однако, вероятность того, что программист сам попытается получить список по такому Url мала и в большинстве случаем достаточно описанного выше метода. </div>Anonymoushttp://www.blogger.com/profile/08100447777959635541noreply@blogger.com8tag:blogger.com,1999:blog-5684864870279100683.post-85060365935904304532012-03-24T02:01:00.001-07:002012-03-24T02:09:01.885-07:00Полезные протоколы SharePoint<div dir="ltr" style="text-align: left;" trbidi="on">
Мало кто знает (а я ни от кого ещё не слышал), что SharePoint имеет протокол удаленного вызова процедур, который дает некоторые вкусные возможности.<br />
<br />
<h3 style="text-align: left;">
URL протокол</h3>
<div style="text-align: left;">
<br /></div>
При помощи URL протокола, можно получить, например, <strong>Caml схему любого списка коллекции введя в строке адреса браузера</strong> http://Server_Name/[sites/][Site/]_vti_bin/owssvr.dll?Cmd=ExportList&List={ListID} или получить представление папки таким, как оно выглядит в диалоге проводника(когда сохраняем файл в библиотеку SharePoint), набрав http://Server_Name/[sites/][Site/]_vti_bin/owssvr.dll?dialogview=FileOpen&location=Document_Library[/Folder][/File]<br />
<a href="http://4.bp.blogspot.com/-VtoTJEA5_NY/T2192wWugjI/AAAAAAAAAFU/Pb7G3chThbQ/s1600/FileProperties.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="http://4.bp.blogspot.com/-VtoTJEA5_NY/T2192wWugjI/AAAAAAAAAFU/Pb7G3chThbQ/s400/FileProperties.jpg" width="400" /></a><br />
<br />
Есть ещё несколько методов, которые можно вызвать набрав параметры в строке адреса браузера. Очень интересным так же может быть RenderView (Формат URL не просто понять из статьи, <a href="http://sp/_vti_bin/owssvr.dll?Cmd=RenderView&List=136a6f1f-12f2-46e7-bfe6-e442765598be&View={D5EEC531-66E7-4C62-A279-FFA5492691D8}&urlbase=%26urlbase%3Dhttp%3A%2F%2Fsp%2FLists%2FClients%2FAllItems.aspx" target="_blank">вот пример</a>). Полный поддерживаемых команд находится в этой статье: <a href="http://msdn.microsoft.com/en-us/library/ms478653.aspx">http://msdn.microsoft.com/en-us/library/ms478653.aspx</a><br />
.<br />
<h3 style="text-align: left;">
Протокол SharePoint Foundation RPC</h3>
<div style="text-align: left;">
<br /></div>
При помощи этого протокола можно выполнить несколько различных методов, позволяющих работать с элементами списков, списками, представлениями, столбцми и пр. Полный список методов в этой статье: <a href="http://msdn.microsoft.com/en-us/library/ms480784.aspx">http://msdn.microsoft.com/en-us/library/ms480784.aspx</a>.<br />
Из кода любой метод можно вызвать при помощи <a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.processbatchdata.aspx">SPWeb<span xmlns="">.</span>ProcessBatchData</a>. Причем за один вызов можно выполнять несолько методов, благодаря чему открывается side effect, который подметили разработчики - обработка большого количества данных при помощи SPWeb.ProcessBatchData происходит гораздо быстрее, чем при использовании объектной модели. Для демонстрации я написал консольное приложение, сравнивающее производительность обоих методов. Код получилася простой и громоздкий, посмотреть его можно по <a href="http://pastebin.com/AbJaNF4m">ссылке</a>. Результат получился таким:<br />
<img border="0" height="197" src="http://3.bp.blogspot.com/-kNMkaYPok_U/T22FyxdCR4I/AAAAAAAAAFc/RfiTLr5mALY/s400/Console.jpg" width="400" /><br />
<br />
Как видно, метод <strong>SPWeb.ProcessBatchData примерно в два раза быстрее</strong>.<br />
<br />
Протокол SharePoint Foundation RPC так же содержит методы и для получения данных. Возвращает данные в виде XML на основе указанного View. В простеньком тесте, скорость возвращения данных у меня была быстрее чем при помощи SPQuery с указанием ViewFields примерно в 5 раз. Глубже этот метод я ещё не рассмотрел. Есть у меня подозрение, что Xslt List View Web Part и ей подобные могут использовать именно этот механизм для получения данных.<br />
В методе SPWeb.ProcessBatchData скрыты грабли. Скрыты, на мой взгляд весьма успешно, так что и не разглядишь. Парсер, который разбирает переданный батч, весьма привередлив и не всегда воспринимает апостроф. Например, при использовании метода "display" и написании xml в таком виде: "<SetVar Name=<strong><span style="color: red;">'</span></strong>Cmd<strong><span style="color: red;">'</span></strong>>Display</SetVar>" метод SPWeb.ProcessBatchData выбрасывает ошибку неуправляемого кода. А вот если использовать экраннирование и ковычки ("<SetVar Name=<strong><span style="color: red;">\"</span></strong>Cmd<strong><span style="color: red;">\"</span></strong>>Display</SetVar>"), то метод срабатывает. При использовании метода "Save" у меня такой проблемы не возникало.<br />
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
Протокол Stssync</h3>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Stssync протокол позволяет добавить SharePoint списки контактов и событий в Outlook или другие приложения. <a href="http://msdn.microsoft.com/en-us/library/ms457051.aspx">Подробнее</a>.</div>
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
FrontPage Server Extensions RPC Methods</h3>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Данное расширение дает ряд административных методов, позволяющих, например, работать с сайтами и документами. Здесь есть методы для создания директорий и документов сайта, создания/изменения/удаления сайтов и ещё много возможных полезностей. Полный список в этой статье: <a href="http://msdn.microsoft.com/en-us/library/ms443099.aspx">http://msdn.microsoft.com/en-us/library/ms443099.aspx</a>.</div>
<h3 style="text-align: left;">
</h3>
<h3 style="text-align: left;">
Что дальше?</h3>
<div style="text-align: left;">
<br /></div>
<div style="text-align: left;">
Если вы решите использовать этот функционал в своих решениях, то вам будет полезно ознакомиться со статьями <a href="http://msdn.microsoft.com/en-us/library/ms463030.aspx">Method Syntax</a> и <a href="http://msdn.microsoft.com/en-us/library/ms413845.aspx">Return Values</a>. Статья <a href="http://msdn.microsoft.com/en-us/library/ms454532.aspx">Error Message Format for SharePoint Foundation</a> упростит вам жизнь при отладке.</div>
</div>Anonymoushttp://www.blogger.com/profile/08100447777959635541noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-43671777197018147772011-12-04T06:23:00.001-08:002011-12-05T01:30:07.979-08:00Стажировка в Microsoft Consulting Service Russia. Пост второй.<div dir="ltr" style="text-align: left;" trbidi="on">
<a href="http://rusharepoint2010.blogspot.com/2011/09/microsoft-consulting-service-russia.html" target="_blank">Первая статья серии</a><br />
<h2>
</h2>
<div class="MsoNormal">
С начала стажировки прошло уже три месяца. Произошли
некоторые интересные события. Мне довелось повидать главного операционного директора корпорации <span lang="EN-US">Microsoft</span><span lang="EN-US"> </span>–
Кевина Тернера, который посетил нас после выступления на <span lang="EN-US">TechEd</span> 2011. Он рассказал о планах
компании на будущее и отвечал на вопросы сотрудников. Радовался вопросам и с
неподдельным вниманием выслушивал каждый вопрос. Думаю такое внимание связанно
не только с трудностью понимания им русского английского=).</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Как я рассказывал ранее, каждый интерн определил совместно с
ментором и менеджером планы развития. В моем плане до конца этого года значились
сдача экзамена 70-668: <span lang="EN-US">PRO</span>:
<span lang="EN-US">Microsoft</span><span lang="EN-US"> </span><span lang="EN-US">SharePoint</span>
2010, <span lang="EN-US">Administrator</span>, изучение
<span lang="EN-US">MSF</span><span lang="EN-US"> </span>и
полезное участие в проектах. </div>
<a name='more'></a>С экзаменом и участием в проектах оказалось
справиться не трудно. Подготовка к экзамену уже привычное дело – 3 штуки до
этого уже сдал. Опыт работы с <span lang="EN-US">SharePoint</span>
у меня есть, поэтому на проектах я так же мог приносить некоторую пользу, а
быстрый рост <span lang="EN-US">SharePoint</span><span lang="EN-US"> </span>на рынке подстегивает востребованность специалистов, что
наверно тоже сыграло роль и в моей востребованности. В проектах мне доверяли
написание кода, а так же тестирование, благодаря чему я познакомился с <span lang="EN-US">Team</span><span lang="EN-US"> </span><span lang="EN-US">Foundation</span><span lang="EN-US"> </span><span lang="EN-US">Server</span> и наделал в нем багов.<br />
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US">MSF</span><span lang="EN-US"> </span>слету взять не удалось. Материалов по платформе очень мало.
Начал я изучение с русской книжки, т.к. она досталась в бумажном виде.
Рекомендую её не читать. Материал очень тяжелый для перевода и в русском
варианте очень тяжелый для понимания. А его нужно именно понимать. Мое
понимание оценивали ментор и менеджер. За час я успел рассказать про то, что
есть <span lang="EN-US">MSF</span>, про модель
команды? жизненный цикл проекта и обсудить итерации, которые, как оказалось, я не полностью понял.
Теперь мне осталось довникнуть в итерации и рассказать, что я понял о проджект
менеджменте и управлении рисками.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US"></span></div>
<div class="MsoNormal">
Не так давно нас познакомили с деятельностью компании в
направлении связей компании с айти специалистами. Мы узнали некоторые вещи о <span lang="EN-US">Microsoft
Student Partner, User Group, MCP Group, Most Valuable Professional, </span>форумах<span lang="EN-US">. </span>Благодаря этой беседе я
узнал кому нужно отправлять пожелания по форумам <span lang="EN-US">technet</span>, отправил и стал модератором
ветки <span lang="EN-US">SharePoint</span>.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Мега интересную беседу провел с нами менеджер. Он рассказал нам о карьерной лестнице в <span lang="EN-US">Microsoft</span><span lang="EN-US"> </span><span lang="EN-US">Consulting</span><span lang="EN-US"> </span><span lang="EN-US">Service</span><span lang="EN-US"> </span>и
дал очень классную табличку, благодаря которой я могу иметь понимание какими навыками
мне надо владеть для получения следующей должности. Думаю, очень мало
организаций в нашей стране, в которых сотрудники могут получать столь ясное
понимание того, что им нужно достичь, чтобы получить новую должность.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Помимо этих активностей, мне довелось побывать на лекциях
архитектора о <span lang="EN-US">Active</span><span lang="EN-US"> </span><span lang="EN-US">Directory</span>.
Сдача экзамена по <span lang="EN-US">Active</span><span lang="EN-US"> </span><span lang="EN-US">Directory</span><span lang="EN-US"> </span>в плане назначена на начало следующего года. <span lang="EN-US">Active</span><span lang="EN-US"> </span><span lang="EN-US">Directory</span> и <span lang="EN-US">SQL</span><span lang="EN-US"> </span><span lang="EN-US">Server</span> являются
ядром инфраструктуры от <span lang="EN-US">Microsoft</span>,
поэтому ментор и я посчитали очень полезным уделить внимание и этим
технологиям, помимо <span lang="EN-US">SharePoint</span>.
А благодаря лекциям от архитектора я имею возможность с относительно малыми
затратами времени получить очень хорошие знания.</div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
Скоро начнутся первые тренинги. Мне открылась возможность пройти обучение искусству бизнес-презентации. Думаю, навыки этого
тренинга помогут мне осуществлять презентации как для заказчиков, так и для айтишных
встреч.<br />
<br />
Буду рад вашим получать от читателей интересующие вопросы о стажировке.</div>
</div>Anonymoushttp://www.blogger.com/profile/08100447777959635541noreply@blogger.com4tag:blogger.com,1999:blog-5684864870279100683.post-12648510107215462832011-11-04T08:16:00.000-07:002011-12-05T01:30:29.608-08:00Возникла неожиданная ошибка<div dir="ltr" style="text-align: left;" trbidi="on">
<br />
<div class="MsoNormal">
Очень часто на форумах появляются вопросе о том, как
вылечить неожиданную ошибку или о том, как прочитать логи <span lang="EN-US">SharePoint. </span></div>
<div class="MsoNormal">
<span lang="EN-US"><br /></span></div>
<div class="MsoNormal">
<span lang="EN-US">На мой взгляд этот вопрос очень прост, но все же я очень часто встречаю его на форумах и поэтому решил написать короткую статью на эту тему.</span></div>
<div class="MsoNormal">
<span lang="EN-US"><br /></span></div>
<div class="MsoNormal">
<span style="font-size: large;"><span lang="EN-US">Типичный сценарий</span></span></div>
<div class="MsoNormal">
<span lang="EN-US"><br /></span></div>
При открытии страницы получаем окно вида<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://blogs.msdn.com/blogfiles/spses/WindowsLiveWriter/SharePoint2010LoggingImprovementsPart1_10178/clip_image002_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="149" src="http://blogs.msdn.com/blogfiles/spses/WindowsLiveWriter/SharePoint2010LoggingImprovementsPart1_10178/clip_image002_2.jpg" width="320" /></a></div>
<br />
<br />
<br />
<span id="x_errorPageTitleSpan">Или на русском:</span><br />
<br />
<span id="x_errorPageTitleSpan">Ошибка</span><br />
<span id="x_ctl00_PlaceHolderMain_LabelMessage">Возникла неожиданная ошибка.</span>
<br />
<span id="x_ctl00_PlaceHolderMain_helptopic_WSSEndUser_troubleshooting"><a href="http://social.technet.microsoft.com/Forums/ru-RU/sharepointru/thread/02205531-e05e-4ce7-af89-7730332592f3" rel="nofollow" title="Устранение неполадок в работе службы Microsoft SharePoint Foundation. - открытие в новом окне">Устранение неполадок в работе службы Microsoft SharePoint
Foundation.</a></span> <br />
<span id="x_ctl00_PlaceHolderMain_RequestGuidText">Идентификатор взаимосвязи: a90f0e23-675e-4eee-ba8f-2cb3be4dcc3e</span><br />
<br />
<span style="font-size: large;"><span id="x_ctl00_PlaceHolderMain_RequestGuidText">Что же делать?</span></span><br />
<span id="x_ctl00_PlaceHolderMain_RequestGuidText"><br /></span><br />
<span id="x_ctl00_PlaceHolderMain_RequestGuidText">Найти подробный </span>текст ошибки можно в папке <a href="http://www.google.ru/search?q=14+hive&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-GB:official&client=firefox-a" target="_blank">14 hive</a>\LOGS<br />
В этой папке много файлов с логами, которые по умолчанию создаются каждые полчаса и в их названии указывается дата и время создания. Можно открыть их блокнотом и найти нужную строчку по CorrelationID, который указан на странице ошибки. Более удобно их открывать при помощи программы <a href="http://archive.msdn.microsoft.com/ULSViewer" target="_blank">ULS Viewer</a>. этой программой можно открыть как любой из старых файлов, так и текущий для просмотра логов в реальном времени. Удобно настраиваемые фильтры помогают отобрать нужные строки логов<br />
<br />
В абсолютном большинстве случаев этих знаний о логировании администратору SharePoint хватит на всю жизнь, однако это не вся информация. SharePoint так же пишит логи в Windows Events, а так же в базу данных логирования, где уже можно найти логи со всех машин SharePoint фермы. Подробнее об этом вы можете прочитать в чудесной книжке <a href="http://www.amazon.com/Professional-SharePoint-2010-Administration-Klindt/dp/0470533331" target="_blank">Professional SharePoint 2010 Administration</a><br />
<br />
<br />
Полезные ссылки:<br />
<br />
<a href="http://technet.microsoft.com/en-us/library/ee748636.aspx" target="_blank">Technet: Monitoring overview (SharePoint Server 2010)</a><br />
<a href="http://blogs.msdn.com/b/spses/archive/2009/12/18/sharepoint-2010-logging-improvements-part-1.aspx" target="_blank"> SharePoint 2010 Logging Improvements – Part 1</a><br />
<a href="http://archive.msdn.microsoft.com/ULSViewer" target="_blank">ULS Viewer</a><br />
<a href="http://www.amazon.com/Professional-SharePoint-2010-Administration-Klindt/dp/0470533331" target="_blank">Professional SharePoint 2010 Administration</a> </div>Anonymoushttp://www.blogger.com/profile/08100447777959635541noreply@blogger.com2tag:blogger.com,1999:blog-5684864870279100683.post-35178729805192319162011-09-18T02:01:00.000-07:002011-11-24T00:29:26.683-08:00Стажировка в Microsoft Consulting Service Russia<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="MsoNormal" style="background: white; line-height: 18pt; margin: 0cm 0cm 3.6pt; mso-outline-level: 4;">
<span style="font-family: Arial; font-size: medium;">Не так давно в блоге </span><a href="http://blogs.technet.com/b/career/"><span style="line-height: 115%;"><span style="color: blue; font-family: Arial; font-size: medium;">Career&Development</span></span></a><span style="font-family: Arial; font-size: medium;"> было </span><a href="http://blogs.technet.com/b/career/archive/2011/05/31/3432510.aspx"><span style="line-height: 115%;"><span style="font-family: Arial; font-size: medium;">объявлено</span></span></a><span style="font-family: Arial; font-size: medium;"> о начале активного рассмотрения кандидатов на оплачиваемую стажировку в </span><span style="font-size: medium;"><span style="font-family: Arial;"><span lang="EN-US">Microsoft</span><span lang="EN-US"> </span><span lang="EN-US">Consulting</span><span lang="EN-US"> </span><span lang="EN-US">Service</span>. Цели и обязанности весьма заинтересовали меня. Работа в <span lang="EN-US">Microsoft</span>, думаю, почти каждому айтишнику будет весьма интересна. Методики, обтесанные десятилетиями, коллектив одних из самых продвиннутых в своей сфере коллег, крупные, интересные проекты и куча разных корпоративных плюшек. Я решил подать резюме. Вскоре после <span lang="EN-US"><a href="http://rusug.net/SPConf"><span style="line-height: 115%;">SPC</span><span lang="RU" style="line-height: 115%;">.</span><span style="line-height: 115%;">Russia</span><span lang="RU" style="line-height: 115%;"> 2011</span></a></span>, оставившего очень много впечатлений, случился первый звонок.</span></span></div>
<div class="MsoNormal" style="background: white; line-height: 18pt; margin: 4.8pt 0cm 6pt;">
<span style="font-family: Arial;"><b style="mso-bidi-font-weight: normal;"><span style="color: black; font-size: 16.5pt;">Собеседования</span></b><span style="color: black;"></span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<a href="http://www.blogger.com/" name=".D0.9E.D0.B1.D1.81.D1.83.D0.B6.D0.B4.D0."></a><span style="font-size: medium;"><span style="font-family: Arial;">Первая беседа была вводной. <span lang="EN-US">HR</span><span lang="EN-US"> </span>расспросила кто я, чем занимаюсь, как учусь и прочие подобные вопросы, после чего мне велено было ждать второй звонок. Второй раз мы лишь договарились о дате и времени видео беседы, которая была более содержательной и интересной. Меня расспрашивали о проектах, которыми я занимался, спрашивали почему хочу в <span lang="EN-US">ms</span>, оценили мой уровень английского, расспросили о предыдущих местах работы. Мне показалось, что ещё были какие-то психологические хитрости, но в этом я уж не силен.</span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-size: medium;"><span style="font-family: Arial;">Следующим шагом было техническое собеседование. Изначально планировалось провести эту беседу лично, но все же решили провести эту беседу удаленно, при помощи телефона. Собеседовали меня три специалиста. После видео беседы я решительно вознамерился переехать в Москву и к моменту технического собеседования в <span lang="EN-US">MCS</span><span lang="EN-US"> </span>у меня уже был опыт технических собеседований. Беседа со специалистами <span lang="EN-US">MCS</span><span lang="EN-US"> </span>была самой трудной. Скорее всего причиной этому было моё большое желание пройти это собеседование. Из всей беседы мне запомнился только факт того, что вопросы задавались в непривычных формулировках, и лишь один вопрос. Ответ на него есть в любой книге по разработке под <span lang="EN-US">SharePoint</span>, но я с ним давно не сталкивался на практике, не задумывался об этой проблеме и ответил с затруднением.</span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-size: medium;"><span style="font-family: Arial;">Последнее собеседование было личным. Офис <span lang="EN-US">Microsoft</span><span lang="EN-US"> </span>на крылатских холмах навеял много мощных впечатлений. Даже в сравнении с офисами московских компаний, в которые я в этот же день собеседовался, офис <span lang="EN-US">Microsoft</span><span lang="EN-US"> </span>выглядел другой планетой, а в сравнении с родной провинцией - далекой вселенной. Последняя беседа была с приятным человеком в должности <span lang="EN-US">MCS</span><span lang="EN-US"> </span><span lang="EN-US">Lead</span>. Беседа носила скорее характер беседы о жизни. Рассказали о работе в <span lang="EN-US">MCS</span>, в целом о карьере в <span lang="EN-US">Microsoft</span>. Пожалуй, самая вдохновляющая беседа.</span></span></div>
<h1 style="margin: 24pt 0cm 0pt;">
<span style="font-size: large;"><span style="font-family: Arial;">Начало работы</span></span></h1>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-size: medium;"><span style="font-family: Arial;">24 августа я получил оффер и уже 6 сентября приступил к работе. Первый день, как и полагается, был вводным. Началось все с собрания, где мы узнали интересные вещи о компании, увидели своих менеджеров и менторов, немного познакомились друг с другом(очень разными людьми оказались стажеры, объединяет разве что то, что все недавно окончили или скоро окончат вузы), получили очень полезный «<span lang="EN-US">Microsoft</span><span lang="EN-US"> </span><span lang="EN-US">welcome</span><span lang="EN-US"> </span><span lang="EN-US">guide</span>». После чего нам показали офис, в котором мы теперь работаем, рассказали где что находится и как этим пользоваться, помогли получить и настроить технику и на этом программа первого дня закончилась. Далее у каждого была индивидуальная программа. Кого-то отправили на проект, кто-то получил темы и материалы для изучения. В беседе с менеджером и ментором мы установили, какие именно цели мне нужно достичь в ближайшие 3 месяца, каковы будут параметры оценки достижения этих целей и когда будут проводится оценки. На ближайшие 9 месяцев план не во всем столь четкий. Среди целей изучение определенных технологий, наработка полезных часов на проектах и сдача экзаменов.</span></span></div>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-size: medium;"><span style="font-family: Arial;">Каждую неделю у стажеров назначенна встреча с <span lang="EN-US">HR</span>, на которых с нас собирают <span lang="EN-US">feedback</span> о работе. В ближайшие понедельник и вторник нас пригласили на <span lang="EN-US">new</span><span lang="EN-US"> </span><span lang="EN-US">employees</span><span lang="EN-US"> </span><span lang="EN-US">orientation</span><span lang="EN-US"> </span><span lang="EN-US">days</span>. Обещают познакомить с руководителями ключевых подразделений, лучше узнать ценности и философию компании.</span></span></div>
<h1 style="margin: 24pt 0cm 0pt;">
<span style="font-size: large;"><span style="font-family: Arial;">Заключение </span></span></h1>
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;">
<span style="font-size: medium;"><span style="font-family: Arial;">В офисе очень дружелюбная и доброжалательная атмосфера. Люди тут улыбаются</span><span style="font-family: Wingdings;">J</span><span style="font-family: Arial;"> Легко заводятся беседы с незнакомыми коллегами. Видел нескольких людей, до этого знакомых только из интернетов. Очень приятно работать в такой атмосфере.</span></span></div>
</div>Anonymoushttp://www.blogger.com/profile/08100447777959635541noreply@blogger.com7tag:blogger.com,1999:blog-5684864870279100683.post-38700926768034104852011-07-31T00:48:00.000-07:002011-07-31T00:48:26.789-07:00Опыт сдачи PRO: Designing and Developing Microsoft SharePoint 2010 Applications<div dir="ltr" style="text-align: left;" trbidi="on"><a href="http://4.bp.blogspot.com/-MvCyqGtSKmY/TjUHHbEz1pI/AAAAAAAAAD4/OLn3IxiwH4Q/s1600/MCPD%2528rgb%2529_1350.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5635418332832454290" src="http://4.bp.blogspot.com/-MvCyqGtSKmY/TjUHHbEz1pI/AAAAAAAAAD4/OLn3IxiwH4Q/s320/MCPD%2528rgb%2529_1350.jpg" style="cursor: hand; cursor: pointer; display: block; height: 80px; margin: 0px auto 10px; text-align: center; width: 301px;" /></a><br />
<h3><span class="Apple-style-span" style="font-size: 16px; font-weight: normal;">План подготовки к экзамену был уже опробован и показал себя и на этот раз достаточно эффективным: <span lang="EN-US">training</span><span lang="EN-US"> </span><span lang="EN-US">test</span><span lang="EN-US"> </span>помогает понять, что за вопросы будут в экзаменах, выявить свои слабые зоны, далее поиск материалов для подготовки по слабым направлениям и изучение материалов. Прохождения этого теста сразу показало, что экзамен гораздо интереснее чем 70-573, что очень здорово и очень мотивирует. <a name='more'></a>Для меня сложными темами оказались:</span></h3><div class="MsoNormal"><o:p></o:p></div><div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"></div><ul style="text-align: left;"><li><span lang="EN-US">Business</span><span lang="EN-US"> </span><span lang="EN-US">Connectivity</span><span lang="EN-US"> </span><span lang="EN-US">Service (BCS)</span>. Никогда не работал с этой технологией и, возможно, никогда не буду. Но для знания возможностей <span lang="EN-US">SharePoint</span><span lang="EN-US"> </span>очень полезно будет познакомиться с ней. Вопросы<span lang="EN-US">, </span>касающиеся<span> <span lang="EN-US">BCS, </span></span>очень<span> </span>глубокие<span lang="EN-US">. </span>Для<span> </span>подготовки<span> </span>читал<span> </span>книгу<span> <span> </span><span lang="EN-US"><a href="http://www.amazon.com/Professional-Business-Connectivity-SharePoint-Programmer/dp/047061790X">Professional Business Connectivity Services in SharePoint 2010</a>. </span></span>Изучал первые 5-6 глав. Времени до сдачи экзамена оставалось мало и остальное я только пролистал.</li>
<li><span lang="EN-US">Workflow</span>. Опыта создания <span lang="EN-US">workflow</span><span lang="EN-US"> </span>у меня мало, читал я про них так же не много – только главу из <a href="http://www.apress.com/9781430227069">SharePoint 2010 as a Development Platform</a>. Для подготовки я выполнял <a href="http://rshelton.com/archive/2007/10/05/sharepoint-document-workflow-with-visual-studio-workshop-documents-download.aspx">лабораторные работы</a>.</li>
<li><span lang="EN-US">Authentication</span>. С этим пунктом оказалось тяжелее всего. Я уже был знаком с <span lang="EN-US">FBA</span> (а думал, что «знаю», оказалось «знаком»), поверхностно знал, что такое <span lang="EN-US">Claims</span><span lang="EN-US"> </span><span lang="EN-US">Based</span><span lang="EN-US"> </span><span lang="EN-US">Authentication</span> (<span lang="EN-US">CBA</span>), ничего не знал о <span lang="EN-US">NTLM</span><span lang="EN-US"> </span>и чуть-чуть слышал <span lang="EN-US">Kerberos</span> на лекции в универе (!!! Очень меня удивило, что лекции из универа оказались полезны в столь глубоких дебрях). Материалов я практически не нашел. Только глава о <span lang="EN-US">CBA</span><span lang="EN-US"> </span>в <span lang="EN-US"><a href="http://www.amazon.com/Professional-SharePoint-2010-Administration-Klindt/dp/0470533331">Professional<span> </span>SharePoint<span lang="RU"> 2010 </span>Administration</a></span><span lang="EN-US"> </span>и небольшая <a href="http://sharepointstream.com/2010/11/28/develop-a-security-approach/">ознакомительная статья</a> с одного из <a href="http://sharepointstream.com/2011/01/21/study-guide-to-the-exam-70-576-microsoft-sharepoint-2010-designing-and-developing/">Study guide to the exam 70-576</a>. Думаю он тоже может быть полезен, но мне показалось, что очень уж ознакомительный характер сей гайд носит.</li>
<li>Хранение<span> </span>параметров<span> </span>решений<span lang="EN-US">. </span>С<span> </span>этим<span> </span>вопросом<span> </span>очень<span> </span>хорошо<span> </span>помогла<span> </span>статья<span> </span>на<span> <span lang="EN-US">msdn: </span></span><a href="http://msdn.microsoft.com/en-us/library/ee855123(office.12).aspx"><span lang="EN-US">Managing Custom Configuration Options for a SharePoint Application</span></a></li>
</ul><o:p></o:p><br />
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><o:p></o:p></div><div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"><o:p></o:p></div><div class="MsoNormal">Помимо этих вопросов, многие касались механизма развертывания решений (пожалуй это самый массивный пункт), сайтов на <span lang="EN-US">SharePoint</span> (рекомендую <span lang="EN-US"><a href="http://rusharepoint2010.blogspot.com/2011/02/professional-sharepoint-2010-branding.html">Professional SharePoint 2010 Branding and User Interface Design</a>), </span>локализации<span> </span>приложений<span lang="EN-US">, </span>и<span> </span>различных<span> </span>специфичных<span> </span>для<span> <span lang="EN-US">SharePoint </span></span>аспектов<span lang="EN-US">: event receiver, sandbox, blob, cache, timer job, application page, navigation </span>и<span> </span>пр<span lang="EN-US">. </span>Встречаются как достаточно трудные и интересные вопросы, когда нужно, например, подумать над архитектурой решения, выбрать артифакты и правильно их расставить, так и очень простые и скучные, например, нужно было выбрать с какого списка на какой надо поставить <span lang="EN-US">lookup</span>. Большинство вопросов достаточно глубокие и нужно глубоко понимать механизмы работы <span lang="EN-US">SharePoint</span>.<o:p></o:p></div><div class="MsoNormal">Время на сдачу экзамена – 130 минут. На деле вполне хватает часа. <span> </span>Так же 50 вопросов и проходной балл 700.<o:p></o:p></div><div class="MsoNormal">В целом, экзамен очень интересный и чертовски приятно видел <span lang="EN-US">passed</span><span lang="EN-US"> </span>после сдачи.<o:p></o:p></div></div>Anonymoushttp://www.blogger.com/profile/08100447777959635541noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-79047132399165542552011-07-02T04:01:00.000-07:002011-07-02T04:02:23.245-07:00Опыт реализации многоязычного сайта на платформе SharePoint 2010<p class="MsoNormal"><span lang="EN-US" style="mso-ansi-language:EN-US">SharePoint</span> 2010 имеет встроенный функционал, помогающий в реализации многоязычного сайта. В книгах не трудно найти информацию о легкости перевода пользовательского интерфейса, навигации и списков, в том числе столбцов списков. Достаточно установить <span lang="EN-US" style="mso-ansi-language:EN-US">language</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">pack</span>, указать <span style="mso-spacerun:yes"> </span>возможные языки для сайта и пользователь будет иметь возможность выбрать язык отображения сайта. Пользовательский интерфейс сразу будет переведен на выбранный язык, списки, столбцы и пункты навигации достаточно один раз перевести вручную и введенные значения сохранятся только для текущего языка. Куда труднее обстоят дела с переводом контента. Создавать отдельный сайт для контента каждого языка – неизбежность. Поиски (<a href="http://social.technet.microsoft.com/Forums/en-US/sharepoint2010setup/thread/81cf9c1f-cc02-429f-9dae-897831918ad7/#6f3ff521-1ce1-44bd-92e9-d3ec142acc80">1</a>, <a href="http://sharepoint.stackexchange.com/questions/15131/sharepoint-multilingual-site-best-practices/15165#15165">2</a>) материалов по этой теме навели меня на <span lang="EN-US" style="mso-ansi-language: EN-US">variation</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">feature</span>. Статьи в блогах гласили, что этот инструмент копирует весь контент и структуру (списки и подсайты) с сайта источника на остальные сайты настраиваемой иерархии. Скопированный контент становится черновиком и ждет ручного перевода. Видимо так было для <span lang="EN-US" style="mso-ansi-language:EN-US">SharePoint</span> 2007. Развернув этот инструмент, я обнаружил, что нет ни малейшего намека на копирование контента.<o:p></o:p></p> <p class="MsoNormal">Продолжив исследования, я нашел статьи на <span lang="EN-US" style="mso-ansi-language:EN-US">technet</span>, посвященные развертыванию многоязычного сайта и в частности <span lang="EN-US" style="mso-ansi-language: EN-US">variation</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">feature</span>: <a href="http://technet.microsoft.com/en-us/library/cc262055.aspx"><span lang="EN-US" style="mso-ansi-language:EN-US">Plan</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">for</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">multilingual</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">sites</span> (<span lang="EN-US" style="mso-ansi-language:EN-US">SharePoint</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">Server</span> 2010)</a>, <a href="http://technet.microsoft.com/en-us/library/ff628966.aspx"><span lang="EN-US" style="mso-ansi-language:EN-US">Variations</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">overview</span></a>, <a href="http://technet.microsoft.com/en-us/library/cc262404.aspx"><span lang="EN-US" style="mso-ansi-language:EN-US">Plan</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">variations</span></a>. <o:p></o:p></p> <p class="MsoNormal">Статья <a href="http://technet.microsoft.com/en-us/library/ff628966.aspx#section145"><span lang="EN-US" style="mso-ansi-language:EN-US">variation</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">overview</span></a> прямо говорит о том, что <span lang="EN-US" style="mso-ansi-language:EN-US">variation</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">feature</span><span lang="EN-US"> </span>не копирует контент, за исключением библиотеки <span lang="EN-US" style="mso-ansi-language:EN-US">Pages</span><span lang="EN-US"> </span>инфраструктуры публикации, от которой я отказался в виду сложностей с версткой. <span style="mso-spacerun:yes"> </span>Аналогично состоят дела и с копированием структуры сайтов – копируется только структура сайтов (то есть подсайты), а списки и библиотеки не затрагиваются. Итого в моем случае полезность <span lang="EN-US" style="mso-ansi-language:EN-US">variation</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language:EN-US">feature</span><span lang="EN-US"> </span>– это автоматическое перенаправление на сайт, соответствующий текущему языку посетителя сайта. На первый взгляд это кажется упущением разработчиков, однако это дает бОльшую гибкость (списки на разных языковых версиях можно делать разными), при незначительно бОльших затратах на разработку.<o:p></o:p></p> <p class="MsoNormal">Итак, нужно решить ряд проблемы связанные с синхронизацией структуры списков, самих списков и их контент.<o:p></o:p></p> <p class="MsoNormal">Со структурой списков все очень просто. Всю проблему решают типы контента. Достаточно на корневом сайте создать тип контента и он будет виден на остальных сайтах иерархии вариаций. После чего развернуть список на основе этого типа контента и перевести названия столбцов на нужный язык.<o:p></o:p></p> <p class="MsoNormal">Сами списки можно разворачивать на всех сайтах при помощи кода или вручную, что тоже не затратить большого количества времени, если использовать типы контента.<o:p></o:p></p> <p class="MsoNormal">Синхронизация контента уже более интересная вещь. Самым логичным на мой взгляд является вариант с разработкой рабочего процесса, который будет выставлять всем переводчикам задачи о необходимости перевода контента. Это требует некоторого времени. Если переводить контент нужно всего одного-двух списков и расти собирается не скоро, то, на мой взгляд, достаточно поставить уведомления переводчику, этот путь и был мною выбран.<o:p></o:p></p>Anonymoushttp://www.blogger.com/profile/08100447777959635541noreply@blogger.com2tag:blogger.com,1999:blog-5684864870279100683.post-72146712919486041022011-06-21T09:47:00.000-07:002011-06-21T09:52:16.212-07:00SPConf.Russia впечатления<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="http://rusug.net/Resources/SPConf2011RU.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="103" src="http://rusug.net/Resources/SPConf2011RU.PNG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div>Вчера прошла большая и очень интересная конференция <a href="http://rusug.net/spconf/Pages/default.aspx">SPConf.Russia 2011</a>. И мне посчастливилось посетить это событие. Впервые в живую увидел людей, которых активно читал в интернетах. Мой маршрут был таким: В. Колесников (веб-сайты на SP) -> А. Романов (SharePoint online, sandbox) -> М. Хлупнов (duet enterprise) -> А. Маркеев (ribbon) -> А. Матюшенко (visio).<br />
<br />
<a name='more'></a><br />
Матюшенко был просто поразителен! Чертовски быстро и в живую показывал красочные, содержательные и понятные примеры. Мне кажется, он живет вместе с visio не один десяток лет. Или visio живет в нем. После такой презентации visio видится уже совсем не таким сложным инструментом.<br />
<br />
Маркеев показал чудеса программирования в строке ввода и повеселил пошлыми и не очень шутками. Ribbon стал видеться мне не только стильным, удобным, но и вполне кастомизируемым инструментом. Что немаловажно, не смотря на высокий технический уровень доклада, я понимал все примеры. Помимо этого, Андрей поделился интересными tips and tricks, о которых я ранее никогда не слышал. Из всех докладов, доклад Андрея, на мой взгляд, самый полезных для технических специалистов.<br />
<br />
Доклад Хлупнова о duet enterprise Носил для меня ознакомительный характер. До этого я ничего не знал о SAP. Теперь знаю, что есть средства удобной интеграции SAP и SP.<br />
<br />
Романов очень интересно рассказал о SharePoint Online и sandbox и наградил меня рыжей книжкой. После доклада, мне удалось очень продуктивно пообщаться с Александром. Узнал из уст разработчика плотно поработавшего с SharePoint Online состояние дел на этом рынке и о самой платформе.<br />
<br />
Доклад о использовании SharePoint для создания был весьма интересным. Слушая его, я почувствовал, что я что-то в SharePoint знаю:)<br />
<br />
В целом конференция более чем удалась! Было очень интересно! огромное спасибо организаторам за труды!</div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com1tag:blogger.com,1999:blog-5684864870279100683.post-30174802152445179832011-06-19T04:18:00.001-07:002011-06-19T05:36:49.513-07:00Использование капчи в формах SharePoint<div dir="ltr" style="text-align: left;" trbidi="on">Любой интернет сайт нуждается в защите от спам-ботов. Простая и эффективная защита от роботов - это капча. Задача этот статья - рассказать как использовать капчу в SharePoint. Для этого мы сделаем три шага - рассмотрим предмет разработки, подберем средства для разработки и разработаем веб-часть с капчей.<br />
<div><br />
<a href="http://2.bp.blogspot.com/-Y2fS6mjD3_k/Tf3nZN5SRxI/AAAAAAAAACQ/4_C-7FisU0I/s1600/1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5619902330440926994" src="http://2.bp.blogspot.com/-Y2fS6mjD3_k/Tf3nZN5SRxI/AAAAAAAAACQ/4_C-7FisU0I/s320/1.jpg" style="cursor: hand; cursor: pointer; display: block; height: 310px; margin: 0px auto 10px; text-align: center; width: 320px;" /></a><br />
<a name='more'></a><div><span class="Apple-style-span" style="font-size: x-large;">Предмет разработки</span></div><div><div style="text-align: left;"><span class="Apple-style-span">Капча нужна прежде всего для форм добавления элементов. Было бы очень неудобно для использования капчи изменять стандартную форму добавления элемента. </span><span class="Apple-style-span" style="font-size: medium;">Страницы SharePoint основаны на технологиях ASP.NET WebForms. Все веб-части, находящиеся на странице принадлежат одной форме. При отправки заполненной формы на сервер, обрабатываются все элементы формы, находящиеся в ней. А значит если наша форма добавления элемента и капча будут в разных веб-частях, то при отправки формы обработается и капча и форма добавления.</span></div></div><div><span class="Apple-style-span" style="font-size: medium;"><br />
</span></div><div><span class="Apple-style-span" style="font-size: x-large;">Подбор средств разработки</span></div><div><span class="Apple-style-span">Рисовать капчу самим нету смысла - полно сервисов бесплатно предоставляющих свои услуги по генерации капчи. Логично использовать один из них. В этом вопросе мне приглянулась разработка </span><a href="http://captcha.biz/" style="font-size: medium;">BotDetect</a><span class="Apple-style-span">. Разработчики <a href="http://captcha.biz/doc/aspnet/howto/sharepoint-captcha.html">описали</a> как сделать веб-часть с капчей при помощи BotDetect. Их вариант неудобен тем, что проверка правильности введенных символов происходит по нажатию кнопки, расположенной на веб-части с капчей. Нам же нужно, чтобы проверка происходила при нажатии на кнопку "Сохранить" формы добавления элемента.</span></div><div><span class="Apple-style-span"><br />
</span></div><div><span class="Apple-style-span" style="font-size: x-large;">Разработка</span></div><div><span class="Apple-style-span">Первым делом необходимо установить на компьютер, используемый для разработки, пакет BotDetect CAPTCHA, в частности можно использовать <a href="http://captcha.biz/captcha-download.html?version=aspnet">бесплатную версию</a>.</span></div><div><span class="Apple-style-span">Далее необходимо произвести некоторые правки в web.config файле веб-приложения, для которого разрабатывается веб часть. Эти правки написаны в <a href="http://captcha.biz/doc/aspnet/howto/sharepoint-captcha.html">шаге 2 описания</a> от разработчиков BotDetect. Думаю лучше оставить этот шаг ссылкой на авторов, ибо при внесении ими изменений, статья по ссылке будет актуальнее этого поста.</span></div><div><span class="Apple-style-span">Следующим шагом необходимо разработать веб-часть капчи. Для этого создаем проект по шаблону Visual Web Part. Нам необходимо внести правки в два файла. Сначала внесем изменения в файл веб-части с расширением ascx. Регистрируем TagPrefix:</span></div><blockquote class=""><code></code><br />
<ol class="asp" style="font-family: monospace;"><li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><code><b><%</b><b>@</b> Register TagPrefix<b>=</b>"Captcha" Namespace<b>=</b>"BotDetect.Web.UI"</code></div></li>
<code>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">Assembly<b>=</b>"BotDetect, Version=3.0.7.0, Culture=neutral, PublicKeyToken=74616036388b765f" <b>%></b></div></li>
</code></ol></blockquote><br />
______________________<br />
<h6>Текст подготовлен в <a href="http://www.softcoder.ru/blogeditor/">Редакторе Блогов</a> от © SoftCoder.ru</h6><div>и наносим html разметку и необходимые контролы:</div><blockquote class=""><code></code><br />
<ol class="html4strict" style="font-family: monospace;"><li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><code><<b>table</b>></code></div></li>
<code>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><<b>tr</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><<b>td</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><Captcha:Captcha ID="captchaControl" runat="server" /></div></li>
<li style="font-weight: bold; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"></<b>td</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"></<b>tr</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><<b>tr</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><<b>td</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><asp:RequiredFieldValidator runat="server" ID="CaptchaRequiredValidator" ControlToValidate="CaptchaInput" Text="Поле обязательно для заполнения" /></div></li>
<li style="font-weight: bold; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><asp:CustomValidator runat="server" ID="CaptchaCorrectValidator" ControlToValidate="CaptchaInput" Text="Не верно" OnServerValidate="CaptchaCorrectValidator_ServerValidate" /></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"></<b>td</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"></<b>tr</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><<b>tr</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><<b>td</b>></div></li>
<li style="font-weight: bold; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><asp:TextBox ID="CaptchaInput" runat="server" /></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"></<b>td</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"></<b>tr</b>></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"></<b>table</b>></div></li>
</code></ol></blockquote><br />
______________________<br />
<h6>Текст подготовлен в <a href="http://www.softcoder.ru/blogeditor/">Редакторе Блогов</a> от © SoftCoder.ru</h6><br />
<div><span class="Apple-style-span"><br />
</span></div><div><span class="Apple-style-span">Вместо кнопки для проверки правильности введенных данных я использую </span><span class="Apple-style-span" style="font-size: medium;">CustimValidator. Для проверки используется серверная функция. С этой функцией возникла загвоздка. Пока по неизвестной мне причине, при нажатии на кнопку "Сохранить" формы добавления элемента в список она вызывается два раза и первый раз в переменной сессии хранится именно то значение, которое ввел пользователь, а второй раз совсем другое значение. Я обошел это поведение при помощи ввода свойства, в котором храню результат первой проверки. Получившейся код:</span></div><blockquote class=""><code></code><br />
<ol class="csharp" style="font-family: monospace;"><li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"><code>public void CaptchaCorrectValidator_ServerValidate(object source, ServerValidateEventArgs args)</code></div></li>
<code>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">{</div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">if (!validated)</div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">validated = captchaControl.Validate(CaptchaInput.Text.Trim().ToUpper());</div></li>
<li style="font-weight: bold; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">args.IsValid = validated;</div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">}</div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;"></div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">private bool _validated;</div></li>
<li style="font-weight: normal; vertical-align: top;"><div style="background: none; font: normal normal 1em/1.2em monospace; margin: 0; padding: 0; vertical-align: top;">public bool validated { get { return _validated; } set { _validated = value; } }</div></li>
</code></ol></blockquote><br />
______________________<br />
<h6>Текст подготовлен в <a href="http://www.softcoder.ru/blogeditor/">Редакторе Блогов</a> от © SoftCoder.ru</h6><br />
<div><span class="Apple-style-span" style="font-size: medium;"></span><br />
<pre style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 13px;"></pre></div><div><span class="Apple-style-span">Осталось лишь собрать проект и развернуть его на нужном веб-приложении.</span></div><div><span class="Apple-style-span"><br />
</span></div><div><span class="Apple-style-span"><br />
</span></div><div></div></div></div>Anonymoushttp://www.blogger.com/profile/08100447777959635541noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-51388118870873578432011-04-16T04:54:00.000-07:002011-04-16T04:54:07.718-07:00Сдача 70-573 TS: Microsoft SharePoint 2010, Application Development<div dir="ltr" style="text-align: left;" trbidi="on">Сегодня я сдал Exam 70-573: TS: Microsoft SharePoint 2010, Application Development.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nunoluz/MCTS_5F00_414EF415.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="148" src="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/nunoluz/MCTS_5F00_414EF415.gif" width="200" /></a></div><br />
<br />
Процедура сдачи экзамена весьма понятна и прозрачна - при мне менеджер купил мне ваучер на два экзамена (скоро ещё 70-667 сдавать буду) с помощью visa classic(стоит это удовольствие $85), после чего выбрал названный мной экзамен, уведомил, что есть только версия на английском языке(иного мне и не нужно было) и время сдачи 105 минут.<br />
<a name='more'></a> После настроил компьютер для сдачи. Первые вопросы были анкетные: сколько опыта работы в сфере программирования, сколько с sp, как оцениваете свой уровень в разных аспектах и прочее. На результат они не влияют. Помимо этого кучка соглашений, правил(не пользоваться карманными компьютерами, телефонами, не списывать вопросы). Из вспомогательных средств на экране есть кнопка калькулятор и менеджер выдает некий листок, похожий на ламинированную бумагу и фломастер (как не раз читал, сделано это чтобы студенты не могли списать и оставить себе вопросы). Ни то, ни другое не пригодилось.<br />
<br />
Начинается процедура сдачи. На экране вопрос и варианты ответа. Я не встретил ни одного вопроса, на который нужно было выбрать несколько вариантов ответов. Позволю себе дать совет планирующий сдать экзамен. Каждый раз мы видим на экране вопрос и варианты ответа. На мой взгляд, можно сэкономить время и меньше напрягать мозг, если читать сначала меньшую часть. Если вопрос в двух строчках, то стоит сначала прочитать его, а потом варианты ответа, иначе сначала читать варианты ответа, а потом вопрос.<br />
<br />
Вопросы. Некоторые вопросы казались мне совсем не знакомыми. Таких было совсем мало. Однако в каждом вопросе всегда можно убрать заведомо неправильные ответы. Например, когда речь идет про subsite, то скорее правильный ответ будет содержать в себе SPWeb, а не SPSite.<br />
<br />
Каждый вопрос можно отметить для review. После прохождения всех вопросов отображается табличка с вопросами и пометками(review или нет), из которой можно перейти на любой вопрос, а потом вернутся к этой таблице. Про темы вопросов не буду расписывать - они хорошо написаны <a href="http://www.microsoft.com/learning/en/us/exam.aspx?id=70-573">на страничке экзамена</a>.<br />
<br />
Вместе с review, вся сдача заняла у меня не больше 50 минут. Все это время в офисе было тихо, что очень приятно.<br />
<br />
Результат. После сдачи программа тестирования выдала какой-то massege box с ошибкой. Менеджер поколдовал, через несколько минут выдал мне распечатку и поставил на ней объемную печать, которую почти не видно на скане.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/-Dn-2nGsD6Zw/TamA1Q8CEpI/AAAAAAAAAGo/U9GISHhtfMw/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/-Dn-2nGsD6Zw/TamA1Q8CEpI/AAAAAAAAAGo/U9GISHhtfMw/s320/1.jpg" width="232" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"></div>На распечатке видно, что результат мой не блестящий и близок к границе не сдачи. Очень полезная инфа о том, каковы мои успехи в каждой из тем экзамена. Лучше всего я отвечал на вопросы о UI, хуже всего с stabilizing and deploy.<br />
<br />
Экзамен сдан, теперь готовиться к Exam 70-667:TS: Microsoft SharePoint 2010, Configuring.</div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-71748569130599336052011-03-07T10:20:00.000-08:002011-03-07T10:20:01.313-08:00Unlocking the Mysteries of the SharePoint Data View Web Part XSL Tags<div dir="ltr" style="text-align: left;" trbidi="on"><div class="separator" style="clear: both; text-align: center;"><a href="http://ebook-dvwpxsl-01.eventbrite.com/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.endusersharepoint.com/blog/wp-content/uploads/NewsLetterImages/MarcAnderson-BookCover-125x182.gif" /></a></div>Приступая к прочтению этой книги я имел лишь поверхностные знания о XSL трансформации и совсем не знал особенностей её использования в DVWP. Сама трансформация в принципе совсем не сложна. Достаточно мельком просмотреть все главы книжки, чтобы понять как XSLT работает. Внимание стоит останавливать на черном человечке с пальцем, указывающем на текст. Под ним автор делится своим опытом и best practice. Ещё очень интересно как используется рекурсия в XSL. Думаю, чтобы догадаться самому как заменить все разделители в поле типа пользователь на читаемый текст или как выбрать из html разметки поля типа многострочный текст первые n слов без форматирования нужно было бы потратить совсем не мало времени.<br />
Помимо этого, книжка сохраняет голову программиста от кучи шишок набиваемых в поисках того, как выполнить простейшие функции, вроде выборки подстроки из строки, округления числа, выявления столбца, по которому произведена сортировка, форматирования вывода числа и многих других.<br />
<br />
Спасибо <a href="http://twitter.com/#!/avishnyakov">Антону</a> за пинок в правильном направлении.</div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-7232195661036144392011-02-20T05:34:00.000-08:002011-02-20T06:07:13.472-08:00ЗАМЕТКА: книга "Professional SharePoint 2010 Branding and User Interface Design (Wrox Programmer to Programmer)"<div dir="ltr" style="text-align: left;" trbidi="on"><div style="text-align: center;"><a href="http://www.amazon.com/Professional-SharePoint-Branding-Interface-Programmer/dp/0470584645" target="blank"><img border="0" src="http://ecx.images-amazon.com/images/I/51iRGOliXtL._SL500_AA300_.jpg" /></a></div><div style="text-align: left;">Материал в книге разжеван очень подробно. Расписаны даже самые мелкие детали. Взять её в руки и понять основы интеграции дизайна в sharepoint сможет даже человек, ни разу его не видевший, поэтому на мой взгляд она относится скорее к серии "For dummies", чем к "Programmer to Programmer".</div><a name='more'></a><br />
<div style="text-align: left;">Главы 1-5,7,12-14 я пролистал, практически ничего нового не узнал. Новыми для меня были только css селекторы > и +.</div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: large;">Глава 6. Working with Navigation</span></div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: inherit;">Из этой главы я узнал о встроенной в sharepoint возможности делать fly-out меню(при наведении на пункт "всплывают" подпункты). По умолчанию показываются только подпункты - сайты, хотелось бы ещё видеть ссылки на библиотеки и списки и/или иметь воможность вручную редактировать эти пункты.</span></div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: inherit;">Так же узнал о контролах навигации sharepoint.</span></div><div style="text-align: left;"><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: large;">Глава 8. Master Pages</span></div>С master pages я уже был знаком и имел представления о их структуре. Специфично для sharepoint я узнал какие ContentPlaceHolder обязательно нужны для master page в sharepoint и системных страниц, а так же, что в случае ошибки в master page, системные страницы грузятся на основе v4.master, так что в случае неисправности в применяемой master page не придется лезть в базу sql и править настройки в табличке.<br />
<div><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: large;">Глава 9. Page Layouts</span></div>До этой книге я совсем не знал о существование Page Layouts. Они представляют из себя нечто вроде шаблонов статей, на которых нанесено в каком месте какое поле списка должно быть отображено. Они доступны только в двух шаблонах коллекций сайтов: портал публикаций и корпоративный вики-сайт. Обоими мне до этого не приходилось пользоваться.<br />
<div>Есть 16 Out-of-the-Box Page Layouts и, само собой, можно делать вручную свои Page Layouts.</div><div>На мой субъективный взгляд шаблону семейства сайтов "Портал публикаций" очень не хватает рубрикатора статей и возможности просмотра списка статей. Толи это не интуитивно заложено, то ли придется делать вручную на основе Xslt List View Web Part (XLV) или CQWP.</div><div><span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: large;">Глава 10. Web Parts and XSLT</span></div>С веб частями я уже был знаком, поэтому начало пропустил. Для меня очень интересно было узнать о XSL Tranformation. Именно с помощью этой технологии XLV отображает содержимое списков. Именно XSL нужно править для изменения внешнего отображения элементов. Однако руководствуясь лишь одной книгой я смог изменить только отображение в Sharepoint Designer, в браузере же отображалось представление по умолчанию. Благодаря <a href="http://goo.gl/MSRyR">интернетам</a> я узнал какие ещё танцы с бубном надо использовать для применения своих стилей.<br />
<div> <span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: large;">Глава 11. </span><span class="Apple-style-span" style="font-size: large;">Deploying Branding in SharePoint</span></div>В этой главе объясняются 3 способа применения готового дизайна к sharepoint. Разъясняется разница между ними. Если кратко - то можно быстро и с плохой производительностью(вполне пойдет для небольшого корпоративного портала с небольшой нагрузкой), а можно дольше, но с хорошей(для интернет сайтво нужно делать только так).</div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com2tag:blogger.com,1999:blog-5684864870279100683.post-16720163295419666062011-01-11T11:17:00.000-08:002011-02-20T05:59:32.581-08:00Camlex.NET - очень удобное средство для построения CAML запросов<div dir="ltr" style="text-align: left;" trbidi="on">Сегодня коллега показал мне очень удобное средство для построения CAML запросов - <a href="http://camlex.codeplex.com/">Camlex.NET</a>. Это средство позволяет очень удобно при помощи лямбда выражений строить запросы, причем даже динамические. Приведу один пример запроса(на странице по ссылке много примеров).<br />
Так выглядит CAML запрос:<br />
<br />
<span class="Apple-style-span" style="font-family: 'Segoe UI', 'Microsoft Sans Serif', Arial, Geneva, sans-serif; font-size: 13px;"></span><br />
<pre style="background-color: rgb(236, 236, 236) !important; border-bottom-color: rgb(62, 98, 166) !important; border-bottom-style: dashed !important; border-bottom-width: 0.1em !important; border-left-color: rgb(62, 98, 166) !important; border-left-style: dashed !important; border-left-width: 0.1em !important; border-right-color: rgb(62, 98, 166) !important; border-right-style: dashed !important; border-right-width: 0.1em !important; border-top-color: rgb(62, 98, 166) !important; border-top-style: dashed !important; border-top-width: 0.1em !important; font-family: Consolas, 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 1.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; width: 895px;"><span style="color: blue;"><</span><span style="color: #a31515;">Where</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: #a31515;">IsNotNull</span><span style="color: blue;">></span>
<span style="color: blue;"><</span><span style="color: #a31515;">FieldRef</span> <span style="color: red;">Name</span><span style="color: blue;">=</span><span style="color: black;">"</span><span style="color: blue;">Status</span><span style="color: black;">"</span> <span style="color: blue;">/></span>
<<span class="Apple-style-span" style="color: blue;">/</span><span class="Apple-style-span" style="color: blue;"><span style="color: #a31515;">IsNotNull</span><span style="color: blue;">></span></span>
<span style="color: blue;"><span style="color: #a31515;"><span class="Apple-style-span" style="color: blue;"><span style="color: #a31515;"><span class="Apple-style-span" style="color: black;"><<span class="Apple-style-span" style="color: blue;">/</span></span>Where</span><span style="color: blue;">></span></span></span><<span style="color: #a31515;">GroupBy</span><span style="color: blue;">></span>
<<span style="color: #a31515;">FieldRef</span> <span style="color: red;">Name</span><span style="color: blue;">=</span><span style="color: black;">"</span><span style="color: blue;">Author</span><span style="color: black;">"</span> <span style="color: blue;">/></span>
</span><span class="Apple-style-span" style="color: blue;"><span style="color: #a31515;"><span class="Apple-style-span" style="color: black;"><<span class="Apple-style-span" style="color: blue;">/</span></span>GroupBy</span><span style="color: blue;">></span></span></pre><br />
А так его можно сделать с помощью Camlex:<br />
<pre class="brush:cpp"><span class="Apple-style-span" style="font-family: 'Segoe UI', 'Microsoft Sans Serif', Arial, Geneva, sans-serif; font-size: 13px; white-space: normal;"><pre style="background-color: rgb(236, 236, 236) !important; border-bottom-color: rgb(62, 98, 166) !important; border-bottom-style: dashed !important; border-bottom-width: 0.1em !important; border-left-color: rgb(62, 98, 166) !important; border-left-style: dashed !important; border-left-width: 0.1em !important; border-right-color: rgb(62, 98, 166) !important; border-right-style: dashed !important; border-right-width: 0.1em !important; border-top-color: rgb(62, 98, 166) !important; border-top-style: dashed !important; border-top-width: 0.1em !important; font-family: Consolas, 'Courier New', Courier, monospace !important; font-size: 1em !important; height: auto; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 1.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; width: 895px;"><span style="color: blue;">var</span> caml =
Camlex.Query()
.Where(x => x[<span style="color: #a31515;">"Status"</span>] != <span style="color: blue;">null</span>)
.GroupBy(x => x[<span style="color: #a31515;">"Author"</span>]).ToString();</pre></span></pre><br />
Гораздо короче и быстрее читается.<br />
<br />
Неудобно в случае, когда название полей не английские вместо <span class="Apple-style-span" style="font-family: Consolas, 'Courier New', Courier, monospace; font-size: 13px; white-space: pre;">x[<span style="color: #a31515;">"Поле"</span>] писать </span><span class="Apple-style-span" style="font-family: Consolas, 'Courier New', Courier, monospace; font-size: 13px; white-space: pre;">x[List.Fields[<span style="color: #a31515;">"Поле"</span>].Id]. На codeplex ребята быстро отвечали на мои вопросы, это тоже очень приятно.</span></div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com10tag:blogger.com,1999:blog-5684864870279100683.post-50300358779808613102011-01-06T15:19:00.000-08:002011-01-06T15:19:48.953-08:00ЗАМЕТКА: книга "Jorg Krause. SharePoint 2010 as a Development Platform". Chapter 5. External Data AccessЧто я для себя отметил из этой главы:<br />
<br />
<ol><li>Получать данные с помощью WCF сервисов можно получать через различные, так называемые, RESTfull протоколы. Среди них: HTTP, FTP, SMTP</li>
<li>Данные можно отправить и получать в виде AtomPub или JSON и сериализовывать в объекты. Для указания в каком формате получать и отправлять данные, необходимо указать соответствующий параметр в HTTP Header</li>
<li>Адрес сервисадля получания данных из списков: http://[servername]/_vti_bin/listdata.svc</li>
<li>Параметры фильтрации. сортировки, выборки указываются GET параметрами запроса.</li>
<li>Для работы из приложения, удобно подключать WCF Service как Service Reference. В этом случае можно делать запросы используя привычный синтаксис LINQ или при помощи лямба выражений.</li>
</ol>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-40853928263629312092010-12-15T23:48:00.000-08:002010-12-15T23:53:18.511-08:00Нюанс SPFieldLookupValue<pre class="csharp" style="font-family: monospace;">SPListItem item <span style="color: green;">=</span> SomeSPList.<span style="color: blue;">Items</span><span style="color: black;">[</span><span style="color: red;">0</span><span style="color: black;">]</span><span style="color: green;">;</span></pre><pre class="csharp" style="font-family: monospace;">
var tmp1 <span style="color: green;">=</span> SomeSPList.<span style="color: blue;">Items</span>.<span style="color: blue;">Where</span><span style="color: black;">(</span>x <span style="color: green;">=></span> x<span style="color: black;">[</span><span style="color: #666666;">"Артикул"</span><span style="color: black;">]</span> <span style="color: green;">==</span> item<span style="color: black;">[</span><span style="color: #666666;">"Артикул"</span><span style="color: black;">]</span><span style="color: black;">)</span><span style="color: green;">;</span><span style="color: teal; font-style: italic;">//<b>Вернет только item</b></span>
var tmp2 <span style="color: green;">=</span> SomeSPList.<span style="color: blue;">Items</span>.<span style="color: blue;">Where</span><span style="color: black;">(</span>x <span style="color: green;">=></span> <span style="color: green;">new</span> SPFieldLookupValue<span style="color: black;">(</span>x<span style="color: black;">[</span><span style="color: #666666;">"Артикул"</span><span style="color: black;">]</span>.<span style="color: blue;">ToString</span><span style="color: black;">(</span><span style="color: black;">)</span><span style="color: black;">)</span>.<span style="color: blue;">LookupId</span> <span style="color: green;">==</span> <span style="color: green;">new</span> SPFieldLookupValue<span style="color: black;">(item</span><span style="color: black;">[</span><span style="color: #666666;">"Артикул"</span><span style="color: black;">]</span>.<span style="color: blue;">ToString</span><span style="color: black;">(</span><span style="color: black;">)</span><span style="color: black;">)</span>.<span style="color: blue;">LookupId</span><span style="color: black;">)</span><span style="color: green;">;</span><span style="color: teal; font-style: italic;">//Вернет все элементы с таким же lookupid</span></pre>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com3tag:blogger.com,1999:blog-5684864870279100683.post-73330338545265389382010-12-13T10:52:00.000-08:002010-12-13T10:52:00.454-08:00ЗАМЕТКА: книга "Внутреннее устройство Microsoft Windows SharePoint Services 3.0", Глава 4. Веб-части<div>Что нового для себя я подчеркнул из этой главы:</div><ol><li>Добавляя на страницу веб-часть мы на самом деле добавляем её сериализуемый экземпляр в базу данных содержимого.</li>
<li>Для возможности изменения свойства веб-части при помощи пункта меню "изменить веб-часть" достаточно установить аттрибуты WebBrowsable в true и Personalizable в нужный scope (Shared - для всего приложения, User - для пользователя)</li>
<li>Для использования асинхронной обработки запросов можно использовать метод RegisterAsyncTask класса Page</li>
<li>Для использования контроллов можно использовать метод LoadControl класса Page</li>
<li>Для добавление команды в меню веб части нужно переопределить getter свойства веб-части Verbs типа WebPartVerbCollection</li>
<li>Для соединения веб частей (Сделка -> позиции, конструкция->детали) слу;fт аттрибуты ConnectionProvider(родитель и ConnectionConsumer(дочерний). Проще всего для соединения веб-частей реализовавыть специальные интерфейсы, такие как ICustomerProvider или IWebPartField</li>
</ol>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-47464260606169829962010-11-28T04:15:00.000-08:002010-11-28T04:15:20.944-08:00Отображение списка родительского сайта на дочернем<div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Через sharepoint designer заходим в все файлы->Lists->[Нужный список]. Нажимаем правой кнопкой на AllItems.aspx -> Изменить в расширенном режиме. </div><div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Далее выделяем в дизайнере страницы веб часть, отображающую список элементов и на вкладке "веб-часть" жмем "в коллекцию сайта". Задаем имя веб части и, если надо, свойства.</div><div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/_TB6_FhnZGXE/TPJHp8qj4XI/AAAAAAAAAEQ/LE7uP6kQwf8/s1600/ListInChild1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="199" src="http://3.bp.blogspot.com/_TB6_FhnZGXE/TPJHp8qj4XI/AAAAAAAAAEQ/LE7uP6kQwf8/s320/ListInChild1.jpg" width="320" /></a></div><div style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px;"></div><div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Теперь <span class="ms-rteThemeForeColor-9-4" style="color: #288400;">обязательно через sharepoint designer д<span class="ms-rteThemeForeColor-1-5" style="color: #7f7f7f;">обавляем эту веб-часть на нужную страницу.</span></span></div><div style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="ms-rteThemeForeColor-9-4" style="color: #288400;"><span class="ms-rteThemeForeColor-1-5" style="color: #7f7f7f;">Кнопка "Веб часть" активна только при выделении области веб частей из дизайнера страницы, при выделении из кода она не активна.</span></span></div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com1tag:blogger.com,1999:blog-5684864870279100683.post-2177518556359606502010-11-23T06:09:00.000-08:002010-11-23T06:48:12.000-08:00Перечисление всех коллекций сайтов приложения и сайтов в коллекцииМожно получить все сайты в коллекции сайтов, подсайты и списки текущего сайта или коллекцию сайтов.<br />
<br />
<a name='more'></a><br />
Свойство AllWebs класса SPSite возвращает все сайты в коллекции сайтов.<br />
Каждый пример требует подключенной сборки <span class="Apple-style-span" style="font-family: consolas; white-space: pre;">Microsoft.SharePoint.dll</span><br />
<pre style="font-family: consolas;"></pre>Следующий пример перечисляет все названия сайтов и листов текущего сайта:<br />
<span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial;"></span><br />
<pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; word-break: break-all; word-wrap: break-word;"><span class="Apple-style-span" style="font-family: Consolas, Courier, monospace;">using (SPSite site = new SPSite("http://sharepoint"))
{
SPWebCollection collWebsite = site.AllWebs;
for (int i = 0; i < collWebsite.Count; i++)
{
using (SPWeb oWebsite = collWebsite[i])
{
SPListCollection collList = oWebsite.Lists;
for (int j = 0; j < collList.Count; j++)
{
Console.WriteLine(collWebsite[i].Title + " "
+ collList[j].Title);
}
}
}
}</span></pre><br />
Свойство Webs класса SPWeb возвращает коллекцию подсайтов. Пример:<br />
<span class="Apple-style-span" style="font-family: 'Segoe UI', Verdana, Arial;"></span><br />
<pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; word-break: break-all; word-wrap: break-word;"><span class="Apple-style-span" style="font-family: Consolas, Courier, monospace;">string webUrl = "http://sharepoint";
using (SPWeb oWebsite = new SPSite(webUrl).OpenWeb())
{
SPWebCollection collWebsite = oWebsite.Webs;
foreach (SPWeb subSite in collWebsite)
{
Console.WriteLine(subSite.Title);
subSite.Close();
}
}</span></pre><br />
Следующий пример выводит название все подсайтов и листов, а также количество элементов в листе:<br />
<br />
<pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; word-break: break-all; word-wrap: break-word;"><span class="Apple-style-span" style="font-family: Consolas, Courier, monospace;">using (SPWeb site = new SPSite("http://office.andata.ru").OpenWeb())
{
SPWebCollection subSites = site.Webs;
foreach (SPWeb subSite in subSites)
{
Console.WriteLine(subSite.Title);
SPListCollection collList = subSite.Lists;
foreach (SPList oList in collList)
{
Console.WriteLine(oList.Title + " " + oList.ItemCount.ToString());
}
subSite.Close();
}
}</span></pre><br />
<br />
<a href="http://msdn.microsoft.com/en-us/library/ms462161.aspx">http://msdn.microsoft.com/en-us/library/ms462161.aspx</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-34963228436295021482010-11-21T22:52:00.000-08:002010-11-21T23:05:16.412-08:00Создание нового solution на основе работающего в ферме<div style="color: #676767; font-family: Verdana, sans-serif; font-size: 11px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Появилась необходимость создать новую веб-часть, функционал которой во многом повторяет одну из прошлых веб-частей. Для того, чтобы избежать конфликтов с прошлой вебчастью и начинать разработку основываясь на ней, необходимо сделать следующие шаги:</div><div style="color: #676767; font-family: Verdana, sans-serif; font-size: 11px; margin-bottom: 10px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"></div><ol style="color: #676767; font-family: Verdana, sans-serif; font-size: 11px;"><li>Скопировать папку проекта</li>
<li>Открыть копию в VS</li>
<li>На feture нажать правой кнопкой -> Open Folder in Windows Explorer</li>
<li>Открыть в блокноте файл *.feature</li>
<li>Поменять аттрибут Id у элемента feature на любой уникальный</li>
<li>Переименовать UserControl, иначе будет затираться контрол из другого проекта</li>
</ol><div><span class="Apple-style-span" style="color: #676767; font-family: Verdana, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 11px;">Будет полезна статья о управлениями feature: <span class="Apple-style-span" style="font-family: verdana, sans-serif;"><a href="http://msdn.microsoft.com/en-us/library/ms442691.aspx" style="color: #0072bc; text-decoration: none;">http://msdn.microsoft.com/en-us/library/ms442691.aspx</a></span></span></span></div><div style="color: #676767; font-family: Verdana, sans-serif; font-size: 11px;"></div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-29919588963018519062010-11-09T06:31:00.000-08:002011-12-27T04:46:23.319-08:00Проблема производительности при использовании Explorer View<div dir="ltr" style="text-align: left;" trbidi="on">
Решили перевести все документы компании на Sharepoint. Пользоваться веб интерфейсом для просмотра папок/файлов, их перемещения, копирования и т.д. очень неудобно. Поэтому решили использовать Explorer View - просмотр папок и файлов портала через explorer. Я обнаружил, что для этого достаточно ввести адрес \\<адрес портала>\DavWWWRoot, например \\sharepoint\DavWWWRoot. Однако папки открываются очень уж медленно. Сетевая файлопомойка работает гораздо шустрее, а значит в таком переход на хранилище в виде портала sharepoint будет нецелесообразен. В связи этим пытаемся решить проблему производительности при просмотре в Explorer View.<br />
<br />
<br />Проблема была решена снятие галочки "Automatically detect connection settings", которую можно найти пройдя по Tools-> Internet Options-> Connections -> Lan settings.</div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com5tag:blogger.com,1999:blog-5684864870279100683.post-18063250844875868132010-11-08T11:17:00.000-08:002010-11-11T11:03:31.923-08:00ЗАМЕТКА: книга "Внутреннее устройство Microsoft Windows SharePoint Services 3.0", Глава 3. Страницы и дизайн<ol><li>Я понял в чем соль использования "призраков" страниц. "Призрак" единожды загружается в пул приложения в виде DLL. "Без призрака" хранится в базе и вытаскивается из базы при каждом запросе. Если бы все страницы были бы в памяти пула, то они занимали бы очень много памяти. Однако нельзя обходиться "призраками", т.к. они совсем не гибки.</li>
<li>Все файлы (aspx страницы, css таблицы и пр.) можно получить из SPWeb при помощи метода GetFile(string FileName), который имеет методы OpenBinary и OpenBinaryStream позволяющие прочитать файл.</li>
<li>Иерархия файлов в SPWeb организована аналогичной файловой системе. Есть корневой каталог RootFolder, который содержит в себе подкаталоги и файлы, доступ к которым осуществляется через свойства SubFolders и Files</li>
<li>Шаблоны страниц, на основе которых делаются "страницы с призраком", можно создавать программно.</li>
<li>По умолчанию все страницы "без призрака" обрабатываются в безопасном режиме. Это означает, что нельзя использовать inline коды. К кастомизации страниц могут иметь доступ простые пользователи и если они смогут писать inline коды, то будет открытая возможность для взлома злоумышленниками. По мимо этого, минус inline кодов - необходимость компиляции страницы. А после компиляции и внесения в пул, DLL вытащить из пула (из оперативной памяти) без перезагрузки процессов нельзя. Однако, не смотря на эти минусы, через web.config можно разрешить обработку страниц в небезопасном режиме.</li>
<li>Для того, чтобы на страницу можно было занести элементы управления и обрабатывать страницу в безопасном режиме, их нужно занести в блок SafeControls в web.config. Любая веб часть может быть использована только если её DLL внесена в этот блок.</li>
<li>Пользовательские элементы управления компилятся в DLL и заносятся в GAC или папку bin корневого сайта. При их создании невозможно использовать визуальный редактор Visual Studio. Они более легкие.</li>
<li>Элементы управления пользователя представляют собой ASCX файлы, обрабатываемые аналогично ASPX страницам. Хранятся они в файловой системе веб-сервера и компилируются при каждом запросе к ним. Специально отведенная виртуальная директория для них: TEMPLATES/CONTROLTEMPLATES или _controltemplates.</li>
<li>Страница веб частей - это страница с призраком. Она содержит в себе лишь WebPartZone, а информация о том, какие там вебчасти и кастомизации вебчастей хранится в базе.</li>
<li>Элементы управления делегирования - это элементы, на месте которых устанавливаются контролы. В ЭУД указывается ControlID. Control с соответствующим ID заменяет ЭУД через активацию специфичной фичи. Замена может происходит на разных scope активации: ферма, веб-приложение, семейство сайтов, сайт.</li>
<li>master page также может быть "с призраком". При её изменении, она становится "без призрака". Поэтому лучше делать её на основе шаблона.</li>
<li>~masterurl/default.master ссылается на _catalogs/masterpage/ + SPWeb.MasterUrl, ~masterurl/custom.master ссылается на _catalogs/masterpage/ + SPWeb.CustomMasterUrl. Для смены master page семейства сайтов необходимо рекурсией пройтись по всем узлам и поменять свойство MasterUrl</li>
<li>core.css лучше не менять и не использовать для создания брендинга. Этот файл может быть перезаписан при обновлении sharepoint. Для брендинга нужно использовать темы. Они представляют собой css файлы и графику, причем css файлы подключаются после core.css. Таким образом стили будут отрисовываться из css файла стилей, а не core.css. Все эти файлы хранятся в TEMPLATE\THEMES\THEMENAME. Когда пользователь выбирают тему узла, эти файлы копируются на узел и с ними можно работать как с любыми другими файлами, т.е. версионность и прочие плюшки. </li>
<li>AlternateCssUrl в книги не объяснен. Следующие вопросы: Если назначить это свойство, то будет браться css по нему или будет браться "не alternate"(оригинальная css). Как после установки AlternateCssUrl вернуть все в зад? Ясно только одно - css файлы тем перекрывают AlternateCss</li>
</ol>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-80760781944239109912010-11-07T11:36:00.000-08:002010-11-08T09:36:16.826-08:00ЗАМЕТКА: книга "Внутреннее устройство Microsoft Windows SharePoint Services 3.0", Глава 2. Архитектура sharepoint<span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">Из этой главы я подчеркнул:</span><br />
<br />
<ol><li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">ASP.NET это своеобразный framework для ISAPI - низкоуровневого обработчика запросов.</span></span></li>
<li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">WSS физически хранит ASP.NET страницы не в файловой системе, а в базе. Однако дефолтные страницы, создаваемые на основе шаблона хранятся физически на файловой системе. Если создано очень много сайтов по одному шаблону и дефолтная страница в них не менялась, то она берется из файловой системы и это один файл для всех сайтов. Такая страница называется "призрак". Как только в ней что-то поменяли и сохранили - она хранится в базе и называется "страница без призрака".</span></span></li>
<li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">SPVirtualPathProvider - штука, позволяющая wss брать страницы не из файловой системы, а из базы. После неё страницы контролируются SPPageParserFilter, который контролирует компилиться ли странице в dll или страница обрабатывается в режиме без поддержки компиляции.</span></span></li>
<li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">Для веб приложений существуют виртуальные каталоги:</span></span><br />
<span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;"><ul><li>_vti_bin - dll и asmx сервисы</li>
<li>_controltemplates - пользовательские контролы</li>
<li>_wpresources - исходные файлы, используемые наряду с веб-частями. Из этих слов ничего не понятно, думаю вернусь к этому месту когда пойму что это.</li>
<li>_layouts - Application pages</li>
</ul></span></li>
<li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">Application page отличается от страниц узлов тем, что в них можно писать inline code, они хранятся в единичной dll и не позволяют осуществлять пользовательскую настройку, что обеспечивает масштабируемость, но не дает гибкость.</span></span></li>
<li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">Чтобы не возникало конфликтов с именование ApplicationPage в папке LAYOUTS лучше создавать подкаталог и хранить в нем свои страницы.</span></span></li>
<li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">Контекст ApplicationPage зависит от страницы, с которой был осуществлен переход на неё.</span></span></li>
<li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: small;"><span class="Apple-style-span" style="font-size: 13px; line-height: 18px;">Чтобы сделать url относительно текущей SiteCollection можно использовать префикс ~sitecollection. Например </span></span><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">~sitecollection/_layouts/page.aspx</span></li>
<li><span class="Apple-style-span" style="color: #444444; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;">Для передачи параметров элемента списка/библиотеки через контекстное меню (ECM) существуют теги {ItemId} и {ListId}.</span></li>
</ol>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-47707126360629164352010-11-07T05:51:00.000-08:002011-06-30T09:50:54.999-07:00ЗАМЕТКА: книга Inside Microsoft Windows SharePoint Services 3.0, Chapter 1. Getting Started<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Из этой главы я подчеркнул:</span></span></span><br /><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;"><br /></span></span></span><br /><ol><li><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">WSS не имеет своей аутентификации, а использует провайдеры (например к AD или правильно настроенной sql базе)</span></span></span></li><li><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Site Collection - мощная вещь, позволяющая гибко настраивать безопасность и использовать объекты несколько раз в дочерних элементах (например можно использовать Site column в списков дочерних сайтов, причем если эта Site column будет изменена на корне, то она измениться и во всех списках, в которых она используется)</span></span></span></li><li><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Типичная WSS ферма состоит из нескольких Web Application, которые могут исполняться даже на разных серверах, но данные их будут храниться на одной машине в MS Sql Server. Вариант с несколькими sql серверами так же вполне вероятен.</span></span></span></li><li><span class="Apple-style-span" style="line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Customizing - это изменения в content database портала, в основном по средствам браузера или Sharepoint Designer. </span></span></span></span><span class="Apple-style-span" style="line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Developing - внесение изменений по средствам компилируемых сборок, работающих на веб сервере.</span></span></span></span></li><li><span class="Apple-style-span" style="line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Для внесения изменений через Developing используется feature. Эта вещь активируется на сервере. На физическом уровне она представляет собой папку. В ней обязательно есть файл feature.xml, содержащий информацию о feature, такую как ID и читаемый пользователем её заголовок.</span></span></span></span></li><li><span class="Apple-style-span" style="line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Sharepoint Object Model - объектная модель Sharepoint, через которую программист связывается с sharepoint. Хранится в </span></span></span></span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Microsoft.SharePoint.dll.</span></span></span></li><li><span class="Apple-style-span" style="line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Скрытая feature может быть активирована из кода, командной строки, через зависимости.</span></span></span></span></li><li><span class="Apple-style-span" style="line-height: 18px;"><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="Apple-style-span" style="color: #444444;"><span class="Apple-style-span" style="font-size: small;">Разворачивание проектов было значительно упрощенно в sSarePoint 2010</span></span></span></span></li></ol>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com2tag:blogger.com,1999:blog-5684864870279100683.post-89502450778280015392010-10-20T23:14:00.000-07:002010-10-20T23:14:52.663-07:00создание screencast'овДолго искал бесплатный софт для создания how-to видео. Остановился на связки из 4-х программ:<br />
<br />
1.Запись с экрана<br />
Бесплатных программ для записи с экрана полным-полно. Одной из первых попробовал <a href="http://www.officelabs.com/projects/communityclips/Pages/Default.aspx">Microsoft Community Clip</a>. <div class="separator" style="clear: both; text-align: center;"><a href="http://www.officelabs.com/projects/communityclips/PublishingImages/Community%20Clips%20screenshot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="197" src="http://www.officelabs.com/projects/communityclips/PublishingImages/Community%20Clips%20screenshot.jpg" width="320" /></a></div><div><br />
</div><div>Позволяет записывать окно, область экран и весь экран. Работает стабильно. Этого мне вполне достаточно.<div><br />
</div><div>2. Эффекты</div><div>Для хорошего скринкаста иногда требуется увеличить экран, написать что-либо для пользователя на экране, пометить. Было бы удобно делать это с уже отснятым материалом, однако не встречал такого функционала в бесплатных видео редакторов, поэтому использовал <a href="http://technet.microsoft.com/en-us/sysinternals/bb897434.aspx">ZoomIt</a>, тоже продукт Microsoft, позволяющий увеличивать изображение на экране, писать на экране, помечать.</div><div class="separator" style="clear: both; text-align: center;"><a href="http://i.technet.microsoft.com/bb897434.zoomit4-1(en-us,MSDN.10).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://i.technet.microsoft.com/bb897434.zoomit4-1(en-us,MSDN.10).png" width="280" /></a></div><div><br />
</div><div><br />
</div><div>3. Видео редактор</div><div class="separator" style="clear: both; text-align: center;"><a href="http://fixounet.free.fr/avidemux/index_files/picture.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://fixounet.free.fr/avidemux/index_files/picture.png" /></a></div><div><br />
</div><div>Весьма скупо выглядели все скрины бесплатных редакторов, которые мне посчастливилось увидеть. Единственная моя задача, решить которую должен видео редактор, была - вырезание куска видео. С этой задачей вполне справляется <a href="http://fixounet.free.fr/avidemux/">avidemux</a>. Интерфейс совсем не интуитивный. Нельзя мышкой выделить кусок видео на таймлайне, нельзя кочевать по видео во время проигрывания. Для того, чтобы удалить кусок нужно нажать на красноватую кнопку с буквой "А" или кнопку рядом с буквой "Б", после чего нажать del.</div><div><br />
</div><div>4. Видео конвертер</div><div>Здесь все просто: <a href="http://www.any-video-converter.com/products/for_video_free/">any video converter</a>.</div><div class="separator" style="clear: both; text-align: center;"><a href="http://www.any-video-converter.com/images/avc-freeversion-left.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.any-video-converter.com/images/avc-freeversion-left.jpg" /></a></div><div><br />
</div><div>Поддерживает много форматов видео, позволяет менять разрешение, при кодировании не до конца грузит систему - работать при кодировании можно, хоть и заметно уменьшение производительности.</div></div>Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0tag:blogger.com,1999:blog-5684864870279100683.post-72790250424175537582010-08-17T04:26:00.000-07:002010-08-17T04:26:59.594-07:00Добавление видео в блог sharepoint<a href="http://blogs.msdn.com/b/sharepointdesigner/archive/2009/12/11/video-blogging-with-javascript-and-the-media-web-part.aspx">Статья</a><br />
<br />
Сайт, сделанный по шаблону сайта "блог" при добавлении новой записи красуется кнопочкой "видео" на ленте в блоке "вставка", однако так шаблон "блог" сделан на sharepoint service, а не sharepoint server, а для публикации видео необходимо включить возможность сайта "Публикация SharePoint Server", которая, как видно из названия, на sharepoint service не работает, поэтому приходится использовать javascript.Афанасов Игорьhttp://www.blogger.com/profile/00389536628296803638noreply@blogger.com0