2009-12-14 85 views
0

我已创建多列自定义字段并将其部署到SharePoint中。为了能够使用我自定义字段中的字段值,我还部署了一个事件接收器,将三个值从我的自定义字段复制到三个单独的常规文本字段。如果三个文本字段不存在,我使用代码中的XML创建它们。即使字段存在,我也确保字段具有正确的可见性设置。非空字段在字中为空

创建领域的XML:

string fieldXml = string.Format("<Field ID=\"{0}\" " + 
            "Type=\"{1}\" " + 
            "Name=\"{2}\" " + 
            "StaticName=\"{2}\" " + 
            "DisplayName=\"{2}\" " + 
            "Required=\"{3}\" " + 
            "ShowInEditForm=\"TRUE\" " + 
            "ShowInNewForm=\"TRUE\" " + 
            "ShowInDisplayForm=\"TRUE\" " + 
            "ShowInListSettings=\"TRUE\" " + 
            "ShowInViewForms=\"TRUE\" " + 
            "ShowInVersionHistory=\"TRUE\" " + 
            "ShowInFileDlg=\"TRUE\"" + 
            "></Field>", 
            Guid.NewGuid(), 
            fieldType, 
            fieldName, 
            required); 

list.Fields.AddFieldAsXml(fieldXml, true, SPAddFieldOptions.Default); 

确保可见性设置确定,当领域已经存在:

field.ShowInEditForm = true; 
field.ShowInNewForm = true; 
field.ShowInDisplayForm = true; 
field.ShowInListSettings = true; 
field.ShowInViewForms = true; 
field.ShowInVersionHistory = true; 
field.Update(); 
list.Update(); 

我发现没有编程设置ShowInFileDlg财产的方式,一旦领域创建。

事情是,这段代码很好用,直到我在MS Word中打开一个文档,并且三个文本字段都在列表中分配了文本,但在Word中它们是空的!

有没有人看过这个,我做错了什么!?

+0

通过使用docx扩展而不是旧文档来解决它! – 2009-12-14 15:22:40

+0

如果有人有时间。关于以编程方式向列表项添加字段的最佳做法是什么?是否应该将它们添加到内容类型,列表或列表项目中? – 2009-12-14 15:24:11

回答

0

为了能够在DIP(在word文档上的文档信息面板)打开一个领域,你需要到的sourceID属性添加到域:

SourceID="http://schemas.microsoft.com/sharepoint/v3"

欲了解更多信息,请参阅here( MSDN)。