- SPSecurity.RunWithElevatedPrivileges(delegate(){
- {
- using (SPWeb web = site.OpenWeb())
- {
- // code goes here
- }
- }
- });
С октября 2008 года я работаю над порталом Sharepoint. Здесь будут заметки о том, как я решаю всякие проблемы и делаю некоторые хитроумные штуки.
Wednesday, June 30, 2010
Чтобы больше этого не забывать
В веб-интерфейсах для разных операций, имеющих дело с API MOSS 2007 злокозненная функция RunWithElevatedPrivileges должна идти ДО открытия сайта и узла. Таким вот образом:
Friday, March 19, 2010
пропажа ListFormWebPart
Как известно, при изменении стандартных форм Sharepoint крайне важно не трогать ListFormWebPart на страницах NewForm, EditForm и DispForm; если её удалить, появятся ошибки вроде "Неправильный URL страницы" при нажатии на "Создать".
Если это всё-таки случилось, не надо спешить следовать рекомендациям Микрософта, удалять лист и делать всё заново, можно решить проблему куда проще.
Поскольку испортился только, скажем, NewForm.aspx, а EditForm.aspx у нас на месте, открываем неиспорченный файл и копируем весь код ListFormWebPart оттуда, после чего вставляем его в какую-нибудь WebPartZone. Код этот выглядит примерно вот так:
А теперь - магия: меняем ControlMode на New и FormType на 8. Тогда эти строчки будут выглядеть вот так:
Сохраняем файл. Вуаля! Всё заработало. Надеюсь, это сэкономит кому-нибудь пару часов бития головой об стену. :)
PS Для DispForm.aspx ControlMode, соответственно, Display, а FormType - 4.
Если это всё-таки случилось, не надо спешить следовать рекомендациям Микрософта, удалять лист и делать всё заново, можно решить проблему куда проще.
Поскольку испортился только, скажем, NewForm.aspx, а EditForm.aspx у нас на месте, открываем неиспорченный файл и копируем весь код ListFormWebPart оттуда, после чего вставляем его в какую-нибудь WebPartZone. Код этот выглядит примерно вот так:
<WebPartPages:ListFormWebPart runat="server" __MarkupType="xmlmarkup" WebPart="true" __WebPartId="{2F5FA27F-56B9-46FC-90E1-85E853CA4204}" >
<WebPart xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/WebPart/v2">
<Title>Переговорные</Title>
<FrameType>Default</FrameType>
<Description />
<IsIncluded>true</IsIncluded>
<PartOrder>1</PartOrder>
<FrameState>Normal</FrameState>
<Height />
<Width />
<AllowRemove>true</AllowRemove>
<AllowZoneChange>true</AllowZoneChange>
<AllowMinimize>true</AllowMinimize>
<AllowConnect>true</AllowConnect>
<AllowEdit>true</AllowEdit>
<AllowHide>true</AllowHide>
<IsVisible>false</IsVisible>
<DetailLink />
<HelpLink />
<HelpMode>Modeless</HelpMode>
<Dir>Default</Dir>
<PartImageSmall />
<MissingAssembly>Невозможно импортировать эту веб-часть.</MissingAssembly>
<PartImageLarge />
<IsIncludedFilter />
<ExportControlledProperties>true</ExportControlledProperties>
<ConnectionID>00000000-0000-0000-0000-000000000000</ConnectionID>
<ID>g_2f5fa27f_56b9_46fc_90e1_85e853ca4204</ID>
<ListName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">{8CCD4B47-F922-4630-8F18-527F71928E4A}</ListName>
<ListItemId xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">0</ListItemId>
<ControlMode xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">Edit</ControlMode>
<TemplateName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">ListForm</TemplateName>
<FormType xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">6</FormType>
<ViewFlag xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">1048576</ViewFlag>
</WebPart>
</WebPartPages:ListFormWebPart>А теперь - магия: меняем ControlMode на New и FormType на 8. Тогда эти строчки будут выглядеть вот так:
<ControlMode xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">New</ControlMode>
<TemplateName xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">ListForm</TemplateName>
<FormType xmlns="http://schemas.microsoft.com/WebPart/v2/ListForm">8</FormType>
* This source code was highlighted with Source Code Highlighter.Сохраняем файл. Вуаля! Всё заработало. Надеюсь, это сэкономит кому-нибудь пару часов бития головой об стену. :)
PS Для DispForm.aspx ControlMode, соответственно, Display, а FormType - 4.
Monday, February 01, 2010
динамические баннеры
Недавно мне понадобилось, чтобы на странице нашего Sharepoint портала были сменяющие друг друга баннеры. Поскольку оказалось, что стандартными средствами MOSS 2007 этого достичь нельзя, я решил написать такую веб-часть сама. Оказалось несложно:)
Управляется она тремя свойствами: ссылкой, именем библиотеки с изображениями для показа, и ссылкой на узел (относительной или абсолютной), где оная библиотека находится.
Управляется она тремя свойствами: ссылкой, именем библиотеки с изображениями для показа, и ссылкой на узел (относительной или абсолютной), где оная библиотека находится.
using System;
using System.Runtime.InteropServices;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.WebPartPages;
using System.Web.UI.WebControls;
namespace RotatingBanner
{
[Guid("e93d7943-5503-4894-9ca8-1ad9368d1153")]
public class RotatingBannerWebPart : Microsoft.SharePoint.WebPartPages.WebPart
{
public string strURL = "";
public string strImgPath = "";
public string strList = "";
HyperLink link = new HyperLink();
// Свойства веб-части
[Personalizable(), WebBrowsable, WebDisplayName("Ссылка")]
public string URL
{
get
{
return this.strURL;
}
set
{
this.strURL = value;
if (link != null)
{
link.NavigateUrl = this.URL;
}
}
}
[Personalizable(), WebBrowsable, WebDisplayName("Узел с библиотекой баннеров")]
public string SPListURL
{
get
{
return this.strList;
}
set
{
this.strList = value;
}
}
[Personalizable(), WebBrowsable, WebDisplayName("Название библиотеки баннеров")]
public string ImgPath
{
get
{
return this.strImgPath;
}
set
{
this.strImgPath = value;
}
}
public void RotatingImage()
{
this.ExportMode = WebPartExportMode.All;
}
protected override void CreateChildControls()
{
base.CreateChildControls();
// Пробуем считать картинки из библиотеки
try
{
if (strList != "")
{
// Подключаемся к указанному узлу
SPSite site = new SPSite(strList);
SPWeb web = site.OpenWeb();
if (strImgPath != "")
{
// Подключаемся к указанной библиотеке
SPList list = web.Lists[strImgPath];
SPListItem item;
SPListItemCollection items = list.Items;
int iCount = 0;
Random r = new Random();
iCount = r.Next(0, list.ItemCount);
item = items[iCount];
string imageUrl = "/" + list.RootFolder.Url + "/" + item.Name;
// Вставляем картинку с ссылкой в веб-часть
link.ImageUrl = imageUrl;
this.Controls.Add(link);
}
// Закрыть используемый узел
site.Close();
site.Dispose();
web.Close();
web.Dispose();
}
}
catch (Exception ex)
{
TextField text = new TextField();
text.Value = ex.Message;
this.Controls.Add(text);
}
}
}
}
Subscribe to:
Posts (Atom)