代码之家  ›  专栏  ›  技术社区  ›  CMerat

SharePoint Web服务-是否更新ContentType字段的必需属性?

  •  1
  • CMerat  · 技术社区  · 16 年前

    我一直在尝试以编程方式重现在SharePoint网站管理屏幕中编辑内容类型的字段属性以及使用wss 3.0 Web服务的web s.asmx“updateContentType”方法无法成功地选择“必需”单选按钮的行为。

    第一个困难是,有关msdn文档的问题,即所述字段应该是fieldRef类型,而实际上它们需要是字段类型。( 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 />");
    

    呼叫后,该字段仍需为“假”。

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

    任何帮助都将不胜感激。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Alex Angas Colin    16 年前

    我调查过这个发现了同样的事情。我还尝试添加属性 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/SharePoint2007 Web服务时,这是一个常见的情况。