2012-01-26 4 views
8

私は常にサイトの既存のフィールドにリンクするSPFieldLinkを用いた例を見つけるコード(C#)を使用してcontenttypesの作成とフィールドをコンテンツタイプに追加するときにfieldLinksを使用する理由は何ですか?

contentType.FieldLinks.Add() 

を経由して、これを追加することについてのドキュメントを検索しかし、追加する方法もありますフィールドを直接。フィールドを単に追加してはならない理由はありますか?

contentType.Fields.Add(SpField()) 

!事前に

おかげで

答えて

5

私は今で分かったように単純な理由があるようです:それはちょうどcontenttypesの上では動作しません。フィールドを直接追加しようとすると、SP2010から例外が送信されます。

この機能は、リストに関連付けられていないフィールドコレクションでは使用できません。

私は絶対にこれを(スペインの審問も)期待していませんでしたが、それは可能ではないようです。

5

リストのXMLを見てみるとよいでしょう。ここで

はアナウンスコンテンツタイプのXMLである:ここで

<FieldRefs> 
    <FieldRef ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Name="Body" /> 
    <FieldRef ID="{6a09e75b-8d17-4698-94a8-371eda1af1ac}" Name="Expires" /> 
</FieldRefs> 

はお知らせリストのためのXMLです:

<Fields> 
    <Field ID="{7662cd2c-f069-4dba-9e35-082cf976e170}" Type="Note" RichText="TRUE" RichTextMode="FullHtml" IsolateStyles="TRUE" NumLines="15" Name="Body" DisplayName="$Resources:core,camlid2;" Sortable="FALSE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Body"> 
    </Field> 
    <Field ID="{6a09e75b-8d17-4698-94a8-371eda1af1ac}" Type="DateTime" Name="Expires" DisplayName="$Resources:core,camlid3;" Format="DateOnly" FromBaseType="TRUE" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="Expires"> 
    </Field> 
</Fields> 

リストは、フィールドを持っています。コンテンツタイプにはFieldRefがあります。

これは正しかったかどうかはわかりませんが、私はいつもそれをクラスとインターフェイスまたは抽象クラスの違いとして説明します。コンテンツタイプはリストの定義ですが、インターフェースのようにデータや機能は含まれていません。フィールドにはデータと機能が含まれているため、コンテンツタイプ(リストとの関連付けが解除されている)にはフィールドがなく、FieldRefがあります。 YMMV - それはいつも私がそれらをまっすぐに保つのを助ける。