【问题标题】:SharePoint Web Services - Updating ContentType field Required property?SharePoint Web 服务 - 更新 ContentType 字段 必需属性?
【发布时间】:2010-11-16 19:09:48
【问题描述】:

我一直在尝试以编程方式重现在 SharePoint 站点管理屏幕中编辑内容类型的字段属性并使用 WSS 3.0 Web 服务的 Webs.asmx“UpdateContentType”方法选择“必需”单选按钮但没有成功的行为.

第一个困难是 MSDN 文档的问题,即所述字段应该是 FieldRef 类型,而实际上它们需要是 Field 类型 (reference)。修复后添加字段和删除字段工作正常,但更新字段似乎根本不起作用。 (还应该注意的是,我按照上一个链接上的建议使用Method="2" 更新字段,但它没有任何改变,并且使用除 1 之外的方法值添加或除 3 之外的方法值也可以正常工作)。

这是 Web 服务调用(为了便于阅读,用字符串而不是 XmlNode 对象稍作修改):

SharePointWebServices.Webs webService = new SharePointWebServices.Webs();
webService.Url = "http://mysharepointserver/site";
webService.UseDefaultCredentials = true;

webService.UpdateContentType(
    @"0x01005A089D9EC8A382458FB1F6C72096D52A", 
    @"<ContentType />", 
    @"<Fields />",
    @"<Fields><Method ID=""1""><Field Name=""SomeField"" ID=""{8a4803c4-6545-4a7a-804d-237eebff0ce3}"" Required=""TRUE"" Hidden=""FALSE"" ReadOnly=""FALSE"" PITarget="""" PIAttribute="""" PrimaryPIAttribute="""" Aggregation="""" Node="""" /></Method></Fields>",
    @"<Fields />");

调用后,该字段仍为Required="FALSE"。

快速查看 stssoap.dll 程序集表明“必需”属性在更新过程中显然被忽略了。这是正常行为吗?如果是这样,以编程方式从客户端代码(不在 SharePoint 服务器上执行)更改“必需”字段的推荐方法是什么?

任何帮助将不胜感激。

【问题讨论】:

    标签: web-services sharepoint content-type


    【解决方案1】:

    我对此进行了调查并发现了同样的事情。我还尝试将属性 Cmd="Update" 添加到 Method 元素但没有成功。 This example 如何使用 UpdateContentType 也很有帮助。

    我认为您无法使用开箱即用的 SharePoint 服务做到这一点。您已通过查看 stssoap.dll 确认这似乎无法正常工作。另一个“客户端”风格的选项是使用RPC methods,但似乎根本没有为内容类型提供功能。

    Web 服务尤其令人沮丧,因为这种不那么边缘的情况经常出现。我很少考虑使用它们,因为它们的局限性会浪费时间。

    您有任何选项将自定义代码部署到服务器吗?您可以使用对象模型开发此功能并将其包装在您自己的自定义 Web 服务中(有一个 walkthrough here)非常容易。

    这是一个改编自 Gabe Wishnie 的示例,可以满足您的要求:

    SPContentType myContentType = myWeb.ContentTypes["myContentType"];
    string internalName = myContentType.Fields["fieldToUpdate"].InternalName;
    myContentType.FieldLinks[internalName].Required = false;
    myContentType.Update(true);
    

    很抱歉,这并没有多大帮助,但这是使用 WSS 3.0 / SharePoint 2007 Web 服务时的常见情况。

    【讨论】:

    • 遗憾的是,我基本上不可能在服务器上部署代码,因此寻求解决方法。最终,如果没有找到其他方法,我将不得不完全放弃这个功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多