我最终修改了来自公开发布的POC:http://datacogs.com/datablogs/archive/2007/08/26/641.aspx的源代码,它是级联下拉菜单的自定义字段定义。修改是为了允许父-子列表框,用户可以在其中多选以过滤和选择要写回SharePoint列表的值。我让父子级联行为正常工作,但是保存操作只接受默认的Content Type值。
我将自定义字段控件的基类型从"SPFieldText“更改为"SPFieldMultiChoice",同时将文本字段定义值从:”FLD_TYPES“更改为"MultiChoice”。
说明步骤: 1.创建自定义字段,该字段派生自‘SPFieldMultiChoice’类。自定义字段允许选择多个值。2.将使用上述自定义字段创建的字段添加到自定义内容类型中,该自定义内容类型是从从‘文档’内容类型派生的GUI创建的。3.将自定义内容类型添加到文档库。4.上传文档,选择自定义内容类型并标记到文档。A.如果文档类型是.xls、.doc、.txt等,则使用正确的元数据标记正确的内容类型。如果文档类型为.xlsx、.docx,则会标记“文档内容类型”。
问题摘要- Point#B:这是一个问题,因为如果上载文档的类型为.xlsx或.docx,则未标记正确的内容类型,并且会标记默认内容类型。但是,如果文档类型是.xls或.doc,则相同的内容类型、相同的自定义字段也有效。
感谢您在这方面的投入。
感谢您抽出时间通读我的帖子。
干杯,~Poonam
发布于 2009-10-10 22:15:22
不确定为什么会发生这种情况,最好将此行为通知Microsoft。您所描述的.doc和.docx之间的区别非常非常奇怪。您是否可以尝试在itemeventreceiver中设置内容类型,以强制项目的ContentType或ContentTypeId字段显式反映正确的内容类型。
即
item["ContentTypeId"] = new ContentTypeId("0x010100your_id_plus_the_part_added_by_list");the_part_added_by_list是将ctype添加到列表时添加的额外guid,这是因为列表中的ctype基本上是您添加的实际ctype的子项
即0x010100 YOURGUID 00 LIST SPECIFIC GUID,
你可以使用诸如Stramit CAMLViewer或CAMLViewer这样的工具来获取这个完整的id。通过循环遍历SPLIst的ContentTypes集合。
(我的猜测是在ItemUpdating / ItemUpdated事件中执行此操作,以查看在这些调用期间ctype是否存在差异)
https://stackoverflow.com/questions/1545427
复制相似问题