Posts Tagged ‘SharePoint’

Несмотря на то, что давно есть ITIL, бизнес и IT разговаривают на разных языках. Это иллюстрируется диалогом на одной из презентаций какого-то мега-супер-пупер SharePoint документооборота, когда на вопрос из зала

«Так а как в итоге мне сделать отчёт вот по вот этим вот карточкам, чтоб за месяц?..»

докладчик отвечает что

«Для отчётов у нас есть ‘БиАй-чик’, и кстати мы вынесли его на отдельные сервера. У нас распределённая ферма..»

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

Но дело не только в этом. Недавно мне попался пост автора Bjørn Furuknap, я переведу его здесь так как на мой взгляд он является must-read для людей, которые хотели бы внедрить SharePoint, или просто посмотреть что это и как это может помочь их бизнесу, либо чувствуют что хотелось бы улучшить то что есть, но ещё сами не понимают как(и это imho вполне нормально)

В оригинале пост называется “SharePoint and Why It Always Depends”, но для русской аудитории я позволил себе немного переиначить название. Сам текст рассчитан на англоязычного читателя, но общий смысл будет донесён.

Как правильно ставить задачи SharePoint –разработчику

Когда вы задаёте SharePoint-консультанту вопрос, велики шансы что вы получите ответ “В зависимости от ситуации..”. Клиента подчас такой ответ разочаровывает, и мне кажется что в этом месте имеет смысл уточнить — почему же многое в SharePoint-е действительно — «В зависимости от ситуации..»

И раз уж быть честным, то на самом деле по большей части это ваша вина, как заказчика. Я здесь чтобы помочь вам разобраться, хотя мне тоже немного жаль что вы не услышите привычное «Клиент всегда прав!». Ну – по крайней мере в этом абзаце точно не услышите..

Реальность заключается в том, что вы делаете свою работу, а мы, как SharePoint разработчики – должны иметь возможность делать свою. Единственная вещь которую действительно надо выстроить – это понять каким образом мы можем быть вам полезны.

А что же для этого нужно? Ну, как вам сказать..

В зависимости от ситуации!..

Задавая неверный вопрос

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

Дело в том, что SharePoint – чрезвычайно массивный продукт, и в нём существует великое множество мелочей, без учёта которых невозможно выдать клиенту действительно хороший ответ. Эти мелочи — напрямую зависят от вопроса, поэтому чем более точно поставлен вопрос, и чем больше информации вы дадите о вашей текущей ситуации — тем больше шансов на то что вы получите ответ, который потом позволит вам выжать из SharePoint максимальную выгоду.

Я осознаю что вы, как клиент, вполне можете не знать о факторах, которые влияют на возможность дать вам хороший ответ. И это нормально; даже многие SharePoint-профессионалы не могут сразу определить, что будет иметь влияние именно в вашей ситуации. Вот почему когда вы спрашиваете специалиста по SharePoint — профессионал скорее всего задаст вам несколько смежных вопросов, которые помогут ему понять – что именно вы хотите получить в итоге.

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

"А как мне сделать X в SharePoint?"

Вы могли бы подумать, что задаёте вполне конкретный вопрос, спрашивая к примеру – «Как мне добавить пользователей на сайт-коллекцию SharePoint?». Мысля с колокольни разработчика, я в свою очередь могу подумать о минимум трёх разных способах добавления пользователей на сайт-коллекцию SharePoint, и каждый имеет право на жизнь в определённом сценарии. Добавляете ли вы юзеров через веб-интерфейс, или в вашем случае нужно написать код чтобы делать это через веб-часть; а возможно права раздаются пользователям в обработчике событий?

Скорее всего, если вы не разработчик SharePoint -то наиболее вероятно что вы предполагаете использовать веб-интерфейс. Это хорошо, но тогда в этом случае берут ответвления новые вопросы, зависящие от того, как именно устроена ваша SharePoint security. Возможно в вашем решении пользователи получают доступ не напрямую, а через группы Active Directory, в таком случае вообще не затрагивая SharePoint.

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

Вышеописанный пример применим и ко всем прочим вопросам из категории «А как мне сделать X в SharePoint». Теперь вы примерно представляете себе, как на первый взгляд легко решаемая задача -становится практически невозможной без получения дополнительных сведений конкретно о вашем случае и том, что же вам в итоге нужно получить на выхлопе.

Разновидность, подвид от вопроса выше — «А как мне наилучшим способом реализовать X в SharePoint?» – ещё более труден для ответа и является даже более вероятным кандидатом на получение в ответ “В зависимости от ситуации…”. В отсутствие соответствующих исследований вашей ситуации, «лучшесть», «хорошесть» — да или просто вообще возможность реализовать что-либо — в данном случае будет зависеть от слишком многих факторов-мелочей, на которые требуется ответ.

Чего вы в итоге хотите?

Вместо того, чтобы спрашивать как сделать то или это наилучшим образом – сфокусируйтесь на том чего вы в итоге хотите добиться. Для примера выше это может формулироваться например в таких строках: «у нас есть сотрудник из отдела бухгалтерии, и ему нужно ознакомиться с несколькими отчётами на нашем SharePoint сайте. У нас в компании есть настроенные группы Active Directory, но в данном случае нам нужно только единоразово выдать им доступ, да и прямого доступа изменять состав групп на домен-контроллере у меня нет. Как мне убедиться что бухгалтера получат эти отчёты?»

Даже с таким, довольно подробным объяснением, всё ещё возможен ответ «В зависимости от». Вдруг всё-таки лучшим решением для вас — будет выкачать эти отчёты и переслать их бухгалтерам по e-mail, на случай если, к примеру, вас сильно беспокоит что они получат «лишний» доступ к неким остальным частям сайта. Так или иначе – с дополнительной информацией уже намного проще дать вам нормальное предложение, которое в итоге реализует то чего вы хотите достичь. А это в свою очередь увеличивает ваши шансы получить от SharePoint больше.

По факту, это общий совет который можно дать когда речь заходит о SharePoint. Фокусируйтесь на том, чего вы хотите, нежели на том, как это реализовать. И если второе здесь –только для SharePoint-разработчика, то первое – только для вас.

.b

ссылка на оригинал

do-not-repeat-it-in-production_demotivator

Одна из документированных, но малоизвестных фозможностей SharePoint — восстановление случайно удалённой сайт-коллекции.

Если с сайтами-вебами всё относительно понятно и у нас есть два «форпоста» в виде корзины сайт-коллекции (http://server/_layouts/15/AdminRecycleBin.aspx?View=2 ),

и корзины Central Administration, то в случае удаления корневой коллекции которая их все и содержит — в корзине CA не будет ничего. А удаляется она так же просто, и из веб-интерфейса вообще никак не восстанавливается 🙂

connection_close

Теоретически создателям было бы неплохо добавить какую-нибудь ‘проверку-защиту от дурака’, как например сделано на GitHub-е:

Github_Are_You_sure.png

Но скорее всего её уже не впихнуть в существующую архитектуру да и вообще — это не наши методы 🙂

Как обычно — сначала создав нам проблему, SharePoint потом предлагает её решение: удалённая сайт-коллекция остаётся сидеть в объекте доступном по Get-SPDeletedSite:

Get-SPDeletedSite

Зная его SiteId, можно восстановить коллекцию сайтов обратно через Restore-SPDeletedSite:

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
Get-SPDeletedSite
Restore-SPDeletedSite -Identity 8be8d8d4-a8c5-4eda-91cd-0c27b79a050d

p.s.: И да — при желании SharePoint спешит на помощь к особо упорным желающим убить ферму, и предоставляет коммандлет Remove-SPSite, который «cannot be undone» уже и в Powershell 🙂

 

 

 

 

Есть вебчасть, содержащая внутри себя меню PeopleEditor. Столкнулся с тем что для анонимных пользователей она недоступна:

control is not available

Спасибо Karel Hájek, который раскопал рефлектором что дело в дополнительной проверке, которая происходит на этапе рендеринга. Для отображения не хватает пермишна “BrowseUserInfo”, который по умолчанию выключен для анонимных юзеров, а веб-интерфейс не позволяет его выдать.

does_user_have_permissions

Karel предлагает подредактировать базу данных контента и разрешить анонимные запросы в Active Directory.

Намного проще это сделать через Powershell-скрипт, тем более что редактирование базы контента напрямую это очень bad-practice 🙂

Подключаем консоль, получим текущие разрешения и добавим к ним SPBasePermissions.BrowseUserInfo:

$sharePointSnapin = Get-PSSnapin | Where-Object { $_.Name -eq "Microsoft.SharePoint.PowerShell"}
if($sharePointSnapin -eq $null)
{
 Add-PSSnapin Microsoft.SharePoint.PowerShell 
}


$web = Get-SPWeb http://portal/web/

$web.AnonymousPermMask64;
# output: ViewListItems, ViewVersions, ViewFormPages, Open, ViewPages, UseClientIntegration


$web.AnonymousPermMask64 = "$rights, BrowseUserInfo";
$web.Update();

Теперь PeoplePicker рендерится для всех пользователей(для того чтобы он ещё и работал надо включить запросы в AD):

people_picker_rendered

Задача:

Предварительный софт(prerequisites) Sharepoint 2010 не ставится. Обычно такое происходит например когда вы ставите SharePoint на систему, которую он “официально” будет поддерживать только после сервис-пака, который ещё не вышел:

image

PrerequisiteInstaller.exe — Application Error

The application was unable to start correctly (0xc0000006). Click OK to close the application.

clip_image003

 

Решение:

1) Распаковать установочный диск SharePoint в какую-то локальную папку, например C:\SharepointInstall

2)      Скачать недостающие prerequisites. Для автоматизации можно использовать powershell-скрипты:

для 2010 Sharepoint

для 2013 SharePoint

Перед использованием ps-файла, может понадобиться сделать на нём правый клик -> Properties-> “Unblock”.  Когда скрипт спросит куда выкачать файлы, укажите папку C:\SharepointInstall\

image

Файлы должны в итоге быть скопированы в папку c распакованным дистрибутивом C:\SharepointInstall\prerequisiteinstallerfiles\     

(рядом должен быть FilterPack):

image)

3)     

Для 2010 – запустить PrerequisiteInstaller.exe. Инсталляция должна стартовать:

clip_image002[6]

Если после завершения может появиться сообщение что в ходе установки произошла ошибка

Hotfix for Microsoft Windows (KB976462): installation error

То просто перезапускаем установщик(перегружать не надо), и дожидаемся

clip_image004

 

Для 2013 – положить в корень c:\SharepointInstall файл mysetup.cmd

prerequisiteinstaller.exe
/SQLNCLi:prerequisiteinstallerfiles\sqlncli.msi
/PowerShell:prerequisiteinstallerfiles\Windows6.1-KB2506143-x64.msu
/NETFX:prerequisiteinstallerfiles\dotNetFx45_Full_x86_x64.exe
/IDFX:prerequisiteinstallerfiles\Windows6.1-KB974405-x64.msu
/Sync:prerequisiteinstallerfiles\Synchronization.msi
/AppFabric:prerequisiteinstallerfiles\WindowsServerAppFabricSetup_x64.exe
/IDFX11:prerequisiteinstallerfiles\MicrosoftIdentityExtensions-64.msi
/MSIPCClient:prerequisiteinstallerfiles\setup_msipc_x64.msi
/WCFDataServices:prerequisiteinstallerfiles\WcfDataServices.exe /quiet
/KB2671763:prerequisiteinstallerfiles\AppFabric1.1-RTM-KB2671763-x64-ENU.exe

и запустить. Появится меню установки:

image

Устанавливаем, перегружаем сколько нужно раз, ставим Sharepoint.

image

image

 Чего и вам желаю

Solution: move code from webpart constructor to OnInit method of the Page.

Симптом: вы получаете такое сообщение при добавлении вебпарты на страницу на целевом сервере, причем на developer-машине все может работать.

При просмотре логов IIS  например через ULSViewer вы находите исключение и ничего подробнее

Error importing WebPart. Assembly  ***, Version=1.0.0.0, Culture=neutral, PublicKeyToken=***,

TypeName. ***.***

Обычно в интернете в таких случаях советуют изменить уровень безопасности в web.config, указать полное описание сборки в *.webpart описании вашей вебчасти или проверить нет ли read-only файлов в проекте.

Возможное решение:

В моем случае решение было найдено в одном из комментариев на stackoverflow. Причина может быть в конструкторе вашей вебчасти. В моем случае конструктор вебчасти получал SPContext:

  1.     public MyWebpart()
  2.     {
  3.       this.ExportMode = WebPartExportMode.All;
  4.       // получаем контекст
  5.       web = SPContext.Current.Web;
  6.     }

 

* This source code was highlighted with Source Code Highlighter.

 

При добавлении вебчасти WebPartImporter вызывает конструктор вебчасти и по какой-то причине не отрабатывает правильно. После переноса кода из конструктора в метод OnInit вебчасть стала добавляться.