Как создать сайт (SPWEB) на SharePoint Online
-
09-12-2019 - |
Вопрос
У меня проблема создания сайтов на SharePoint Online. Код, который работает на месте, не работает на SharePoint Online.
Я не хочу беспокоить вас с кодом, я просто хочу чистый старт.
Так мой вопрос:
Как создать сайт на SharePoint Online программно?
--------------- Раствор -----------------
Причина, по которой это работает иногда:
Несоответствие Ваш опыт, это связано с тем, что, если первый раз, когда ваш сценарий запускается, требуется 20 сек. Если вы в то время начните это снова, это пришлось бы подождать первым, чтобы закончить. Но у него все еще есть только 30 отцветников, чтобы выполнить, включая время, проведенное в ожидании. Таким образом, первый скрипт тока 20 сек, чем только 10 Secounts остается на рабочую задание 20 секунд, и она будет прекращена. Вот почему это работает иногда.
--------------- редактировать -----------------
Вот код - это работает на на месте:
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
namespace EventReceiverProject1.EventReceiver1
{
/// <summary>
/// List Item Events
/// </summary>
public class EventReceiver1 : SPItemEventReceiver
{
/// <summary>
/// An item is being added.
/// </summary>
public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
DateTime dt = DateTime.Now;
String strDate = "";
strDate = dt.ToString("HH.mm.ss");
properties.AfterProperties["Title"] = "Kevi2n Changed by event receiver at" + strDate;
SPWeb createWebsite;
SPWeb _w = properties.Web;
SPWebTemplate spWebTemplate = _w.Site.GetWebTemplates(1030)["STS#1"];
string title = properties.AfterProperties["Title"].ToString();
createWebsite = _w.Webs.Add(title, title, "Sagwebsted omkring " + title, 1030, SPWebTemplate.WebTemplateSTS, false, false);
// SPContentType obsolete = _w.ContentTypes[SPContentTypeId("0x01")];
}
}
}
.
------------ редактировать 2 -------------
using System;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.Workflow;
namespace EventReceiverProject1.EventReceiver1
{
/// <summary>
/// List Item Events
/// </summary>
public class EventReceiver1 : SPItemEventReceiver
{
/// <summary>
/// An item is being added.
/// </summary>
public override void ItemAdding(SPItemEventProperties properties)
{
base.ItemAdding(properties);
}
/// <summary>
/// An item was added
/// </summary>
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
DateTime dt = DateTime.Now;
String strDate = "";
strDate = dt.ToString("HH.mm.ss");
properties.ListItem["Title"] = "Kevi2n Changed by event receiver at" + strDate;
properties.ListItem.Update();
//properties.AfterProperties["Title"] = "Kevi2n Changed by event receiver at" + strDate;
SPWeb createWebsite;
SPWeb _w = properties.Web;
SPWebTemplate spWebTemplate = _w.Site.GetWebTemplates(1030)["STS#1"];
string title = properties.ListItem["Title"].ToString();
createWebsite = _w.Webs.Add(title, title, "Sagwebsted omkring " + title, 1030, SPWebTemplate.WebTemplateSTS, false, false);
// SPContentType obsolete = _w.ContentTypes[SPContentTypeId("0x01")];
}
}
}
.
Ссылка на файл Visual Studio. https://docs.google.com/file/d/0b9a1bcw2haaaxau03budtrvpscnm/edit ? PLI= 1
Решение
Попробуйте:
SPWeb createWebsite;
SPWeb _w = properties.Web;
SPWebTemplate spWebTemplate = _w.Site.GetWebTemplates(1030)["STS#1"];
string title = properties.ListItem["Title"].ToString();
_w.AllowUnsafeUpdates = true;
createWebsite = _w.Webs.Add(title, title, "Sagwebsted omkring " + title, 1030, SPWebTemplate.WebTemplateSTS, false, false);
_w.update();
_w.AllowUnsafeUpdates = false;
. Другие советы
Это, вероятно, связано с отсутствием разрешений.В SharePoint-Online мы также не можем использовать RunWithElevatedPrivileges
, который выполняет указанный метод с полными управляющими правами, даже если пользователь не имеет полного контроля.
Тем не менее, вы лучшие шансы - разработать пользовательский полный доверительный довес, чтобы завершить эту задачу.
Я видел ваш вопрос раньше, но не мог получить шанс ответить.В вашем коде вы сделали что-то подобное:
SPWeb web = ParentWeb.Webs.Add("param1","param2",...);
.
Однако вам не позволило небезопасном обновлениям в сети, под которым создаются сайты.Сделай это так:
ParentWeb.AllowUnsafeUpdates = true;
SPWeb web = ParentWeb.Webs.Add("param1","param2",...);
ParentWeb.Update()
ParentWeb.AllowUnsafeUpdates = false;
.
Я ранее создал сайты программные сайты в SharePoint онлайн, используя тот же подход.