Ещё: http://sharepoint.microsoft.com/en-us/buy/Pages/Editions-Comparison.aspx
Или тут на русском: http://blogs.msdn.com/b/serpo_msdn/archive/2010/06/08/10021382.aspx
http://office.microsoft.com/ru-ru/sharepoint-designer-help/HA010239046.aspx
Действительно, в шаблонах от Microsoft еть любопытные вещи и тут описывается хотя бы примерно “как это работает”
И также полезно вот это, как памятка заказчику перед началом любого проекта. Прежде чем начинать, определи следующие понятия:
* Исполнители и роли в бизнес-процессе. В данном случае ответственный за проект создает проект и следит за данными о задачах, вопросах и т. д. Ответственным за задачи назначаются вопросы и задачи, с которыми им необходимо взаимодействовать для выполнения своих заданий. Управляющие должны видеть сводные данные общего состояния проекта.
* Элементы пользовательского интерфейса, необходимые для различных исполнителей В данном случае у ответственного за проект, ответственных за задачи и управляющего свои режимы отображения, соответствующие выполняемым ими задачам. Например, у ответственного за задачу должна быть возможность просмотра всех вопросов, назначенных ему, тогда как у ответственного за проект должна быть возможность просмотра всех просроченных вопросов.
* Суть бизнес-процесса В данном случае ответственный за проект создает проект, промежуточные отчеты, задачи и бюджетные операции, а затем следит за выполнением проекта. Ответственный за проект постоянно осуществляет доступ ко всем данным, а ответственный за задачу должен работать над данными при назначении ему задачи.
* Местонахождение данных Будут использоваться только данные в Windows SharePoint Services или требуется доступ к внешним данным (из базы данных, через веб-службу, через каталог бизнес-данных и т. д.), потребуется ли хранение данных вне Windows SharePoint Services?
* Отношения между данными В данном случае требуются проект, отчет, задачи и вопросы. Они должны составлять логическую иерархию. Также в иерархию должны входить пользователи и точки данных и такие элементы, как бюджет, количество дней и им подобные.
Вроде бы и так всё очевидно? Неа, не всегда…
Последнее небольшое приложение использует по-максимуму всё то, что можно сделать не открывая VisualStudio =)
Приложение – опрос для экспертов. Стандартный в целом опрос, с одной только особенностью – в процессе него подсчитываются баллы и записываются в отдельный список. Для этого потребовалось с помощью Power Item Event Receiver добавить powershell-код в события ItemUpdating/ItemAdding. “Малой кровью”, а именно рабочими процессами – никак, т.к. на элементы опроса рабочие процессы попросту не навешиваются – недоработка.
DispForm того списка, куда пишутся результаты, максимально облегчена – с помощью style.display="none"; скрыто всё лишнее – меню добавления/удаления, кнопки, информация о создании – всё.
Часть данных хранится в другом списке, отображается в настоящей DispForm с помощью связки через переменную в адресной строке:
Создаем новый элемент в связанном списке
С помощью переменной в строке URL делаем привязку. Главное, чтобы пользователь её не поменял =)
В целом страница-анкета (так DispForm называется теперь на языке заказчика) выглядит вполне компактно:
Заметил интересную особенность: если в ссылке на страницу, где следует выполнить какое-то действие <a href …> присутствует “onclick="javascript:this.href = unescapeProperly(escape(this.href)); GoToLink(this); return false;" target="_self" то после окончания действия (нажатия ОК или Отмена) нас вернет на исходную страницу. Удобно, но загвоздка в одном - если у исходной страницы в URL присутствует Source – то идет возврат на него.
Помог вот этот топик форума: http://www.gotdotnet.ru/forums/5/119622/
“В SharePoint есть уже встроенный javascript, для организации передачи Source. Так что надо просто его использовать. Для этого оформляйте ссылку так:
<a href="url" onclick="javascript:GoToLink(this); return false;" target="_self">Link title</a>
Только чтобы это заработало необходимо, чтобы на странице было описание javascript функции GetSource, которая почему-то не описана в файлах javascript'ов SharePoint. Так что Вам придется на страницу добавить еще и вот такой кусок:
<SCRIPT type="text/javascript">
function GetSource(defaultSource)
{
return escapeProperly(STSPageUrlValidation(window.location.href));
}
</SCRIPT>”
[System.Reflection.Assembly]::LoadWithPartialName(”Microsoft.SharePoint”)Продолжение следует, пока что жду доп инфо от MS, а тем временем моя задача придумать как сделать так чтобы всё это выполнялось в автоматическом режиме и заказчик был доволен...
function ChangeWorkflowVersionOnItem
{
param ($siteurl, $listURL, $itemID)
Write-Host "Getting data"
$mysite = new-object Microsoft.SharePoint.SPSite($siteurl)
$myweb = $mysite.OpenWeb()
$mylist = $myweb.GetList($listURL)
$myitem = $mylist.GetItemById($itemID)
$myitem["WorkflowVersion"] = 1
$myitem.SystemUpdate()
Write-Host "DONE Item ", $itemID
}
function ChangeWorkflowVersionOnList
{
param ($siteurl, $listURL)
Write-Host "Getting data"
$mysite = new-object Microsoft.SharePoint.SPSite($siteurl)
$myweb = $mysite.OpenWeb()
$mylist = $myweb.GetList($listURL)
foreach ($item in $mylist.Items)
{
if ($item["WorkflowVersion"] -ne 1)
{
$item["WorkflowVersion"] = 1
$item.SystemUpdate()
Write-Host "DONE Item ", $item.ID
}
}
Write-Host "DONE List"
}
# to call the functions use the commands as below:
# For a specific item (recommended)
#ChangeWorkflowVersion "http://an-moss2007dev" "Lists/Tasks" 2
# or for an entire list
#ChangeWorkflowVersionOnList "http://an-moss2007dev" "Lists/Tasks"