Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以编程方式将文章页面添加到sharepoint网站?_C#_Sharepoint_Visual Studio 2010_Migration - Fatal编程技术网

C# 如何以编程方式将文章页面添加到sharepoint网站?

C# 如何以编程方式将文章页面添加到sharepoint网站?,c#,sharepoint,visual-studio-2010,migration,C#,Sharepoint,Visual Studio 2010,Migration,我的任务是将内容从另一个CMS系统迁移到SharePoint 2010 旧系统中的数据很容易捕获,页面层次结构也很简单,所以我不担心这一点 然而,对于如何用代码创建页面,我完全感到困惑。我使用的是Microsoft.SharePoint.Client命名空间,因为我的系统上没有安装SharePoint,我希望将其编码为控制台应用程序,因此我使用的是ClientContext。(另一方面,如有必要,我愿意探讨其他解决方案) 我的最终游戏:将一个页面上传到某个文件夹层次结构中,该文件夹层次结构使用母

我的任务是将内容从另一个CMS系统迁移到SharePoint 2010

旧系统中的数据很容易捕获,页面层次结构也很简单,所以我不担心这一点

然而,对于如何用代码创建页面,我完全感到困惑。我使用的是
Microsoft.SharePoint.Client
命名空间,因为我的系统上没有安装SharePoint,我希望将其编码为控制台应用程序,因此我使用的是
ClientContext
。(另一方面,如有必要,我愿意探讨其他解决方案)

我的最终游戏:将一个页面上传到某个文件夹层次结构中,该文件夹层次结构使用母版页,在页眉web部件中有页面标题,在正文中有一个大的“ol”内容可编辑web部件,因此任何用户都可以过来编辑内容

到目前为止我已经尝试过的事情:

  • 使用FileCollection.Add()将aspx文件添加到文件夹“Site Pages”。这会在浏览器中呈现html,但不会启用任何功能供用户编辑页面
  • 使用ListItemCollection.Add()向站点添加页面,但我不知道需要哪些字段。我还记得它出现了一个运行时错误,说我应该使用FileCollection.Add()
  • 上载到“站点页面”而不是“页面”
  • 那么多其他人。。。我的头啊:(
我在网上看到的唯一可信的东西是使用
PublishingPage
类型以及
PublishingWeb
。然而,PublishingWeb只能从SPWeb对象构建,这要求我在工作站上实际托管sharepoint应用程序


如果有人能伸出援手,我将不胜感激:)

如果没有实际的发布方法,我看不到创建发布页面的方法

当您创建一个新的文章页面时,它只会在页面内创建几个xml参数,布局本身存在于/_catalogs/masterpage/article-XXXX.aspx文件中

您可以尝试下载在Pages文档库中创建的本机文件,了解其结构,用数据填充XML,然后使用FileCollection将其上载回Pages文档库——这是我唯一的猜测

编辑:示例文章页面

<%@ Page Inherits="Microsoft.SharePoint.Publishing.TemplateRedirectionPage,Microsoft.SharePoint.Publishing,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %>
<%@ Reference VirtualPath="~TemplatePageUrl" %> 
<%@ Reference VirtualPath="~masterurl/custom.master" %>
<html xmlns:mso="urn:schemas-microsoft-com:office:office" xmlns:msdt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"><head>
&nbsp;<!--[if gte mso 9]><xml>
<mso:CustomDocumentProperties>
<mso:PublishingContact msdt:dt="string">1073741823</mso:PublishingContact>
<mso:display_urn_x003a_schemas-microsoft-com_x003a_office_x003a_office_x0023_PublishingContact msdt:dt="string">System Account</mso:display_urn_x003a_schemas-microsoft-com_x003a_office_x003a_office_x0023_PublishingContact>
<mso:PublishingContactPicture msdt:dt="string"></mso:PublishingContactPicture>
<mso:PublishingContactName msdt:dt="string"></mso:PublishingContactName>
<mso:ContentTypeId msdt:dt="string">0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF390078FB5FE740F6714B9595501175ECD8F000727044016EAB3B45B9E104498E366C85</mso:ContentTypeId>
<mso:Comments msdt:dt="string"></mso:Comments>
<mso:PublishingContactEmail msdt:dt="string"></mso:PublishingContactEmail>
<mso:PublishingPageLayout msdt:dt="string">http://dmserver008/_catalogs/masterpage/ArticlePage.aspx, EstudoAndre</mso:PublishingPageLayout>
</mso:CustomDocumentProperties>
</xml><![endif]--><title>New Article</title></head>

新文章

要获取一个页面,请点击页面库=>内容菜单=>发送到=>下载副本

上传页面文件应该可以,只要您正确设置了项目以及文档本身。上载文件后,可以适当设置内容类型和属性。如果首先手动创建页面,则应该能够获得具有所有正确设置的对象


但是,我强烈建议您建立一个控制台应用程序,该应用程序将在sharepoint服务器上运行,而不是依赖web服务。服务器端API(包括PublishingPage)往往更易于使用。

以下是我用来创建页面的方法。这似乎是一种比阿基诺先生更受支持的网页制作方式。虽然这是莫斯2007的,但我相信2010年也存在类似的情况。此外,我建议使用完整对象模型创建控制台应用程序。您必须在服务器上运行它,但这对迁移来说似乎不是什么问题?这样你就不会受到任何限制

public static void CreatePage(string url, string pageName, string title, string layoutName, Dictionary<string, string> fieldDataCollection)
    {
        var relUrl = new Uri(url);

        using (SPSite site = new SPSite(url))
        using (SPWeb web = site.AllWebs[relUrl.AbsolutePath])
        {
            if (!PublishingWeb.IsPublishingWeb(web))
                throw new ArgumentException("The specified web is not a publishing web.");
            PublishingWeb pubweb = PublishingWeb.GetPublishingWeb(web);
            PageLayout layout = null;
            string availableLayouts = string.Empty;
            foreach (PageLayout lo in pubweb.GetAvailablePageLayouts())
            {
                availableLayouts += "\t" + lo.Name + "\r\n";
                if (lo.Name.ToLowerInvariant() == layoutName.ToLowerInvariant())
                { layout = lo; break; }
            }
            if (layout == null)
                throw new ArgumentException("The layout specified could not be found.  Available layouts are:\r\n" + availableLayouts);

            if (!pageName.ToLowerInvariant().EndsWith(".aspx")) pageName += ".aspx";
            PublishingPage page = pubweb.GetPublishingPages().Add(pageName, layout);
            page.Title = title;
            SPListItem item = page.ListItem;

            foreach (string fieldName in fieldDataCollection.Keys)
            {
                string fieldData = fieldDataCollection[fieldName];
                try
                {
                    SPField field = item.Fields.GetFieldByInternalName(fieldName);

                    if (field.ReadOnlyField)
                    {
                        Console.WriteLine("Field '{0}' is read only and will not be updated.", field.InternalName);
                        continue;

                    }
                    if (field.Type == SPFieldType.Computed)
                    {
                        Console.WriteLine("Field '{0}' is a computed column and will not be updated.", field.InternalName);
                        continue;
                    }
                    if (field.Type == SPFieldType.URL)
                    {
                        item[field.Id] = new SPFieldUrlValue(fieldData);
                    }
                    else if (field.Type == SPFieldType.User)
                    {
                       // AddListItem.SetUserField(web, item, field, fieldData);
                    }
                    else
                    {
                        item[field.Id] = fieldData;
                    }
                }
                catch (ArgumentException)
                {
                    Console.WriteLine("WARNING: Could not set field {0} for item {1}.", fieldName, item.ID);
                }
            } 
            page.Update();
        }
    }
publicstaticvoidcreatepage(字符串url、字符串页面名、字符串标题、字符串布局名、字典字段数据集合)
{
var relUrl=新Uri(url);
使用(SPSite站点=新SPSite(url))
使用(SPWeb web=site.AllWebs[relUrl.AbsolutePath])
{
如果(!PublishingWeb.IsPublishingWeb(web))
抛出新ArgumentException(“指定的网站不是发布网站”);
PublishingWeb pubweb=PublishingWeb.GetPublishingWeb(web);
PageLayout=null;
string availableLayouts=string.Empty;
foreach(pubweb.GetAvailablePageLayouts()中的页面布局lo)
{
availableLayouts+=“\t”+lo.Name+“\r\n”;
if(lo.Name.ToLowerInvariant()==layoutName.ToLowerInvariant())
{layout=lo;break;}
}
if(布局==null)
抛出新ArgumentException(“找不到指定的布局。可用布局为:\r\n”+availableLayouts);
如果(!pageName.ToLowerInvariant().EndsWith(“.aspx”))pageName+=“.aspx”;
PublishingPage=pubweb.GetPublishingPages().Add(页面名称、布局);
页面标题=标题;
SPListItem=page.ListItem;
foreach(fieldDataCollection.Keys中的字符串fieldName)
{
字符串fieldData=fieldDataCollection[fieldName];
尝试
{
SPField field=item.Fields.GetFieldByInternalName(fieldName);
if(字段只读字段)
{
WriteLine(“字段“{0}”是只读的,不会更新。”,Field.InternalName);
继续;
}
if(field.Type==SPFieldType.Computed)
{
WriteLine(“字段“{0}”是一个计算列,不会被更新。”,Field.InternalName);
继续;
}
if(field.Type==SPFieldType.URL)
{
项[field.Id]=新的SPFieldUrlValue(fieldData);
}
else if(field.Type==SPFieldType.User)
{
//SetUserField(web、item、field、fieldData);
}
其他的
{
项目[字段Id]=字段数据;
}
}
C