2017-11-14 1 views
0

プログラムでリストアイテムを作成すると問題が発生します。 szenario:変更リストのカスタムコンテンツタイプとフィールドを持つプログラムで作成されたドキュメントセットアイテムは常にフォルダです

  • 2リスト(変更-CustomDocSet Libの、リスク・カスタムタスクリスト)

  • 新しい/編集フォームは、データグリッドの魔女が示し含みリスクリストのアイテム

リスクリストに手動で作成したすべてのアイテムが表示されます。これで、[追加]ボタンを使用して、変更リストの新しい/編集フォームから項目を追加できます。挿入することはできますが、アイテムはグリッドに表示されません。変更リストの新しいフォーム内

リスク項目:

enter image description here

なぜ?リスクリストを調べると、挿入されたアイテムが表示されますが、アイテムではなく、フォルダタイプとして表示されます。

新たなリスク項目の追加:これはアイテムを追加するために、私の実装です

enter image description here

を:

SPListItem item = list.Items.Add(); 
item["ChangeReference"] = "1"; 
item[SPBuiltInFieldId.Title] = title.Text; 
item["Title"] = title.Text; 
item["Risk"] = risk.Text; 
item["Probability"] = probability.Text; 
item.Update(); 

リスト定義は私のカスタムコンテンツタイプがあります。

<List xmlns:ows="Microsoft SharePoint" Title="Risks" FolderCreation="FALSE" Direction="$Resources:Direction;" EnableContentTypes="TRUE" Url="Lists\Risks" BaseType="0" xmlns="http://schemas.microsoft.com/sharepoint/"> 
    <MetaData> 
    <ContentTypes> 
     <ContentTypeRef ID="0x0108009007F1B9465C48F2AE80B77CC58A4AA7" /> 
    </ContentTypes> 
... 

手動で作成されたアイテムはlist.Items内にあります。 programmitcally作成された項目は常にlist.foldersで作成されますが、私はなぜ、どのようにそれを変更するのか分からないのですか?私は通常のアイテムが必要で、フォルダは必要ありません。

enter image description here

どれidears:PROG項目対手動

更新:

私はすでにCTを成功させようとしています。私は現在、カスタムコンテンツタイプのない標準タスクリストを使用していますが、常にアイテムの代わりにフォルダを作成しました。

デバッグ中に、すべてが正常に見える:あなたがリスト項目を追加するたびに、あなたのコンテンツタイプが設定されて取得されていないよう

Debugging item creation

答えて

0

が見えます。

コンテンツタイプ名がExample Content Typeであると仮定すると、以下のコードを試すことができます。コンテンツタイプ名に合わせて変更してください:

SPContentType spctExampleContentType = list.ContentTypes["Example Content Type"]; 

SPListItem item = list.Items.Add(); 
item["ChangeReference"] = "1"; 
item[SPBuiltInFieldId.Title] = title.Text; 
item["Title"] = title.Text; 
item["Risk"] = risk.Text; 
item["Probability"] = probability.Text; 
spliNewItem["ContentTypeId"] = spctExampleContentType.Id; 
item.Update(); 
+0

私はすでに成功せず、それをやろう。私は現在、カスタムコンテンツタイプのない標準タスクリストを使用していますが、常にアイテムの代わりにフォルダを作成しました。 –

0

解決方法が見つからないため、CSOMの回避策を使用しています。

var clientContext = new ClientContext(SPContext.Current.Web.Url); 
var oList = clientContext.Web.Lists.GetByTitle("Risks"); 
var itemCreateInfo = new ListItemCreationInformation(); 
var oListItem = oList.AddItem(itemCreateInfo); 
oListItem["Title"] = title.Text; 
oListItem["Risk"] = risk.Text; 
oListItem["Probability"] = probability.Text; 
oListItem["Severity"] = severity.Text; 
oListItem["ChangeReference"] = int.Parse(this.Page.Request.QueryString["ItemId"]); 
oListItem.Update(); 
clientContext.Load(oListItem); 
clientContext.ExecuteQuery(); 
0

てみてください代わりにRootFolder.Itemsに項目を追加するには:

SPListItem item = list.RootFolder.Items.Add(); 
関連する問題