2009-08-04 73 views
1

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

第一个困难是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 />"); 

通话结束后,现场仍需要=“FALSE”。

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

任何帮助将不胜感激。

回答

2

我调查了这一点,发现相同的东西。我也尝试添加属性Cmd="Update"Method元素,但没有成功。如何使用UpdateContentType的This example也有帮助。

我不相信您可以使用开箱即用的SharePoint服务来完成此任务。你已经通过查看stssoap.dll验证了这看起来没有正常工作。另一种“客户端”式选项是使用RPC methods,但根本没有一个可以提供内容类型的功能。

网络服务是特别是令人沮丧,因为这种类型的不那么边缘的情况经常出现。我考虑使用它们是非常罕见的,因为时间浪费与他们的限制有关。

您是否有任何选项部署自定义代码到服务器?您可以使用对象模型开发此功能,并将其包装在您自己的自定义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服务时是一个常见的故事。

+0

对我来说,在服务器上部署代码实际上是不可能的,可悲的是,因此寻求解决方法。最终,如果找不到其他方法,我将不得不放弃这个功能。 – CMerat 2009-08-12 13:33:46