C# &引用;由于对象的当前状态,操作无效。”;当我试图解封列表上的字段时

C# &引用;由于对象的当前状态,操作无效。”;当我试图解封列表上的字段时,c#,.net,sharepoint-2007,C#,.net,Sharepoint 2007,我在使用模式创建的列表上有几个字段。模式和列表似乎不同步,因此当我尝试更改模式中某个字段的属性时,这些更改不会反映在列表中,除非它们是添加项(即新字段) 我有几个密封的字段需要解封。但是,当我尝试使用SharePoint Manager或我编写的实用程序将Sealed=false设置为时,会出现以下错误: “由于对象的当前状态,操作无效。”我似乎找不到有关此错误的更多可用信息 在我的实用程序中,这发生在线路上: field.Sealed = false; 我甚至还没有在抛出异常之前尝试更新字段

我在使用模式创建的列表上有几个字段。模式和列表似乎不同步,因此当我尝试更改模式中某个字段的属性时,这些更改不会反映在列表中,除非它们是添加项(即新字段)

我有几个密封的字段需要解封。但是,当我尝试使用SharePoint Manager或我编写的实用程序将Sealed=false设置为时,会出现以下错误: “由于对象的当前状态,操作无效。”我似乎找不到有关此错误的更多可用信息

在我的实用程序中,这发生在线路上:

field.Sealed = false;
我甚至还没有在抛出异常之前尝试更新字段。field.SchemaXml看起来也不错。我看不出有什么问题

这发生在列表中的多个字段上


有人知道该怎么做吗?

错误是什么,失败的字段是什么

根据,您不能更改开箱即用或外部数据字段:

  • InvalidOperationException:试图为SharePoint中内置的字段类型赋值。此类字段的真/假值必须保持出厂设置
  • NotSupportedException:当SharePoint字段是外部数据列时,尝试分配false
更新(突出显示注释中可能隐藏的信息):


调用以避免(或检测)InvalidOperationException。如果SPBuiltInFieldId.Contains返回true,则无法设置密封属性。

根据Rich的回答,如果需要修改SPBuiltInFieldId集合中的列,可以在运行时将列的GUID设置为new GUID(),然后对所需的列进行任何更改。请小心,Microsoft试图阻止您编辑这些列是有原因的。我需要修复组日历中资源(设施)列的列表关系,这允许我这样做

我不确定这是否是我以前看到的错误,但根据经验,在更改任何其他属性之前,必须先打开字段并调用Update()。我不想更改任何内容。实际上,我对字段所做的唯一操作就是获取它,然后尝试将其解封,此时抛出异常。我试过allowunsafeupdates,只针对gits和shiggles,但没有成功。这是无效操作例外,它在密封的属性上。这是您可以切换的,以防止通过UI以任何有意义的方式删除或修改字段设置。对不起,不是什么属性,而是什么字段?您试图更改其密封属性的字段的名称或GUID是什么?根据错误,它听起来像是一个OOTB字段,无法修改。这是我的一位老同事,我们在同一时间来回发送电子邮件-这就是我回答的原因。这是一个注释字段。与其他密封字段的唯一区别在于,它是根据XML定义密封的,而不是通过OM代码密封的。现在他正试图用密码来解封。我想知道这是否是这里的问题——它最初是通过XML密封的。引用Seinfeld的话,“你的yadda yadda超过了最好的部分。”尝试一下,调用spBuiltFieldId.Contains(“{blah blah}”),其中“blah blah blah blah blah”是字段的实际Guid。如果SPBuiltInFieldId.Contains返回true,则无法更新密封属性。