如何以编程方式更新内容类型?

时间:2010-08-05 15:22:08

标签: sharepoint

我想修改与内容类型相关联的列表字段的“必需”属性。 我已经修改了列表的内容类型和架构,但“必需”仍然设置为true,我希望它是可选的。

有什么想法吗?

感谢名单

2 个答案:

答案 0 :(得分:2)

试试这样:

private void SetFieldRequired(SPList list, string field, string contentType, bool required)
{
    SPField fieldInList = list.Fields[field];
    fieldInList.Required = required;        
    fieldInList.Update();

    SPField fieldInContentType = list.ContentTypes[contentType].Fields[field];
    fieldInContentType.Required = required;
    fieldInContentType.Update();
}

不要忘记添加一些异常处理。

答案 1 :(得分:1)

如果您以编程方式(使用XML文件)创建了列表和内容类型,则有一些地方需要进行更改:

  1. 在您的ContentType.CT.Columns.xml文件中(在Field元素的XML中设置Required =“FALSE”属性)。
  2. 在您的ContentType.CT.xml中(在FieldRef元素的XML中设置Required =“FALSE”属性)
  3. 在列表的schema.xml中,如果是该部分,请找到您的字段并将该属性设置为false。
  4. 您似乎已正确完成了这些事情。但是,列表的schema.xml仅在创建列表时使用。因此,如果您更改了schema.xml并对其进行了部署,但没有删除并重新创建列表,那么您的更改将无效。

    编辑:

    如果您无法删除并重新创建列表,则必须编写将以编程方式(通过功能或等效功能)执行此操作的代码。这样就可以了:

       using (SPSite site = new SPSite("http://yoursite"))
        {
            using (SPWeb web = site.RootWeb)
            {
                SPList list = web.Lists.TryGetList("Your List");
                if (list != null)
                {
                    SPField fld = list.Fields[SPBuiltInFieldId.RequiredField];
                    fld.Required = false;
                    fld.Update();
                }
            }
        }