6

xml 定義を使用して SharePoint のコンテンツ タイプにルックアップ フィールドを追加するにはどうすればよいですか? (エラーが発生しています)。

注意事項: - コンテンツ タイプがドキュメント ライブラリに追加されると、ルックアップ リストが存在します。- ルックアップ リストは常に同じ名前になります。- ルックアップ リストの名前にスペースが含まれています。

これは私がxmlに追加したものです:

  <Field ID="{GUID}"
         Type="Lookup"
         List="$Resources:core,lists_Folder;/List%20Name"
         ShowField="Title"
         Name="MyLookupFieldName"
         DisplayName="MyLookupFieldName"
         StaticName="MyLookupFieldName"
         Hidden="FALSE"
         Required="FALSE"
         Sealed="TRUE"
         >

次に、コンテンツ タイプをプログラムでドキュメント ライブラリに追加すると、例外が発生し (有益な情報はありません)、sharepoint ログに次のように記録されます。

08/18/2009 17:13:39.50 w3wp.exe (0x08B8) 0x11B0 Windows SharePoint Services データベース 6f8g 予期しない予期しないクエリの実行エラー、エラー コード 8114。SQL Server からの追加のエラー情報を以下に示します。「データ型 nvarchar を uniqueidentifier に変換中にエラーが発生しました。」クエリ テキスト (利用可能な場合): "{?=call proc_GetListMetaDataAndEventReceivers(?,?,?,?,?,?)}"

4

3 に答える 3

9

幸いなことに、SharePoint 2010 では、次の作業例に示すように、必要なすべてのプロパティを設定することで、これを宣言的に行うことができます。

<Field Type="Lookup" DisplayName="Link Type" Description="Represents link type." 
Required="TRUE" EnforceUniqueValues="FALSE" List="Lists/Links Types" WebId="~sitecollection" 
Overwrite="TRUE" PrependId="TRUE" ShowField="Title" UnlimitedLengthInDocumentLibrary="FALSE" 
Group="Research Links Columns" ID="{a15e9fa2-4ea0-41f1-a583-b21d53cf72d3}" 
SourceID="{30650f6f-fbb8-4acc-a935-29745f5d3c59}" StaticName="Link_x0020_Type" 
Name="Link_x0020_Type" Hidden="FALSE" ReadOnly="FALSE"></Field>

WebId の値を「~sitecollection」に設定し、Overwrite を TRUE に設定することが重要です。
より詳しい情報

于 2011-06-27T15:45:34.273 に答える
2

問題は、タイトルではなくリストの GUID を参照する必要があることです。おそらくリストの GUID がわからないので、後でカスタム コードを実行しないとこれを行うことはできません。

VSeWSS を使用していない場合でも、dahlbyk の投稿の最後の手順がリンクされており、これを行う方法が示されています。Chris O'Brien は、VSeWSS を使用していない場合に役立つCodePlex プロジェクトの作成に苦労しました。

于 2009-08-18T18:36:00.263 に答える
1

わかりました。なんらかの理由で、コンテンツ タイプのフィールドの xml 定義を取得できませんでした。コードでそれを行う方法を見つけました。私にとってうまくいった解決策は、フィールド定義をxmlに追加するのではなく、コードに追加することです。

  • コンテンツ タイプをリストに追加します (サイト定義コード内、または任意の場所)。
  • 指定された SPWeb にフィールド ルックアップを追加します (したがって、フィールドはサイト フィールドではなく Web? フィールドです)。
  • リスト コンテンツ タイプに新しいフィールド リンクを追加します。
  • コンテンツ タイプを更新します。

例えば:

SPContentType myContentType = myWeb.Site.RootWeb.ContentTypes["MyContentType "];
myLib.ContentTypes.Add(myContentType);

myContentType = myLib.ContentTypes["MyContentType "];

myWeb.Fields.AddLookup("MyLookupFieldName", myWeb.Lists["MyLookupListName"].ID, false);
SPFieldLink myFIeldLink = new SPFieldLink(myWeb.Fields["MyLookupFieldName"]);
myContentType.FieldLinks.Add(myFIeldLink);
myContentType.Update();
于 2009-08-19T14:25:56.283 に答える