【问题标题】:SPMeta2 System.InvalidCastException while trying to deploy model尝试部署模型时出现 SPMeta2 System.InvalidCastException
【发布时间】:2015-02-27 16:46:10
【问题描述】:

我目前正在尝试使用 SPMeta2 框架在 Sharepoint 365 中创建一个简单的列表。我已经尝试根据文档进行操作,但遇到了异常,然后我决定简单地从他们的示例中复制代码,位于here 现在,当我尝试部署我的模型时,我不断收到 System.InvalidCastException。它说它需要 SiteModelHost,但是当我给它 SiteModelHost 时,我得到了同样的异常,说是 WebModelHost。显然,当我给它网页时,它会要求提供网站。如有任何指示,我将不胜感激。

这是我部署模型的代码:

class Program
{
    static void Main (string[] args)
    {
        var targetSite = new Uri("https://url.com/");
        var login = "***.com";
        var password = "1234";
        var securePassword = new SecureString();
        foreach (char c in password)
        {
            securePassword.AppendChar(c);
        }

        var onlineCredentials = new SharePointOnlineCredentials(login, securePassword);
        var model = SPMeta2Model
                    .NewSiteModel(site =>
                    {
                        site
                            .WithFields(fields =>
                            {
                                fields
                                .AddField(FieldModels.Contact)
                                .AddField(FieldModels.Details);
                            })
                            .WithContentTypes(contentTypes =>
                            {
                                contentTypes
                                .AddContentType(ContentTypeModels.CustomItem)
                                .AddContentType(ContentTypeModels.CustomDocument);
                            })
                            .WithLists(lists =>
                            {
                                lists
                                .AddList(ListModels.TestLibrary)
                                .AddList(ListModels.TestList)
                                .AddList(ListModels.TestLinksList);
                            });
                    });
        using (var context = new ClientContext(targetSite))
        {
            context.Credentials = onlineCredentials;


            var povisionService = new CSOMProvisionService();

            povisionService.DeployModel(WebModelHost.FromClientContext(context), model); // WebModelHost/SiteModelHost - same exception
        }

【问题讨论】:

    标签: c# sharepoint


    【解决方案1】:

    简单。

    SPMeta2 允许多种类型的模型。

    站点模型反映并包含可以在站点级别部署的所有人工制品 - 站点功能、自定义操作、站点字段、内容类型等。 站点模型应部署在“站点模型主机”中。

    Web 模型 反映并包含可以在 Web 级别部署的所有人工制品 - Web 功能、列表、列表视图等。 网络模型应部署在“网络模型宿主”中。

    使用 CSOM 规定,应使用 SiteModelHost.FromClientContext(context) 和 WebModelHost.FromClientContext(context) 相应地推送站点或 Web 模型。

    这是站点模型的工作代码。 我们删除了列表(它们属于网络)并使用 SiteModelHost。

                var siteModel = SPMeta2Model
                       .NewSiteModel(site =>
                       {
                           site
                               .WithFields(fields =>
                               {
                                   fields
                                   .AddField(FieldModels.Contact)
                                   .AddField(FieldModels.Details);
                               })
                               .WithContentTypes(contentTypes =>
                               {
                                   contentTypes
                                   .AddContentType(ContentTypeModels.CustomItem)
                                   .AddContentType(ContentTypeModels.CustomDocument);
                               });
                       });
    
                using (var context = new ClientContext(targetSite))
                {
                    var povisionService = new CSOMProvisionService();
                    povisionService.DeployModel(SiteModelHost.FromClientContext(context), siteModel);
                }
    

    还有这里的网络模型。 我们删除了字段/内容类型,仅使用列表和 WebModelHost。

            var webModel = SPMeta2Model
                   .NewWebModel(web =>
                   {
                       web
                           .WithLists(lists =>
                           {
                               lists
                                   .AddList(ListModels.TestLibrary)
                                   .AddList(ListModels.TestList)
                                   .AddList(ListModels.TestLinksList);
                           });
                   });
    
            using (var context = new ClientContext(targetSite))
            {
                var povisionService = new CSOMProvisionService();
                povisionService.DeployModel(WebModelHost.FromClientContext(context), webModel);
            }
    

    最后,这里有几个开始的链接:

    如果您需要进一步的帮助,请告诉我情况如何。 干杯!

    【讨论】:

      猜你喜欢
      • 2022-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多