2016-01-11 188 views
0

我想獲取項目字段名稱的列表,但無法使其工作。Sitecore - 獲取項目的字段名稱

這是我嘗試迄今:

if (pathItemInLanguage.Versions.GetVersions().Length == 0) 
         { 
          Item newItemLangVersion = pathItemInLanguage.Versions.AddVersion(); 

          //Populate the new language version with values: 
          newItemLangVersion.Editing.BeginEdit(); 

          newItemLangVersion.Fields.ReadAll(); 
          foreach (Field field in newItemLangVersion.Fields) 
          { 
           string dn = "nix"; 
           dn = field.DisplayName; 
           string n = "nix"; 
           n = field.Name; 
           string k = "nix"; 
           k = field.Key; 
           string xy = "nix"; 
           xy = field.ToString(); 

           if ((FieldTypeManager.GetField(Sitecore.Context.Item.Fields[field.DisplayName]) is HtmlField) || 
            (FieldTypeManager.GetField(Sitecore.Context.Item.Fields[field.DisplayName]) is TextField)) 
           { 
            newItemLangVersion.Fields[field.Name].Value = "new"; 
           } 
          } 
          newItemLangVersion.Editing.EndEdit(); 

那些我從外地讀字符串沒有給該項目的實際字段名。該應用程序在Sitecore Desktop中作爲模塊運行。

我錯過了什麼?

+0

你嘗試添加使用(新的Sitecore.SecurityModel.SecurityDisabler())? –

+0

不,但傳遞一個實際的字段名像字符串newItemLangVersion.Fields [「Title」]。Value =「new」;作品。安全仍然是問題嗎? – SpaceJump

+0

是的,可以是一個問題。請檢查調試模式什麼是您的Sitecore.Context.UserName?並檢查你想要編輯的項目有哪些權利 –

回答

1

得到它的使用這個工作:

if ((FieldTypeManager.GetField(field) is HtmlField) || (FieldTypeManager.GetField(field) is TextField)) { 
... 
} 
+0

「,標準模板字段會發生什麼?你在更新它們嗎? :) –

+0

我不確定你的意思。你可以解釋嗎?當您運行newItemLangVersion.Fields.ReadAll()時運行 – SpaceJump

+0

; 的foreach(在newItemLangVersion.Fields場場) {是解析Sitecore的所有領域,包括像「__Renderings Sitecore的標準字段,__推進規則等,如果是類型文本字段或HTML場正在更新這個領域 –

1

我更新了我的答案。您需要在接下來的方式來做到:檢查該字段是一個標準的模板字段,並檢查該字段的類型:

請做到這一點是這樣的:

if (pathItemInLanguage.Versions.GetVersions().Length == 0) 
    { 
     Item newItemLangVersion = pathItemInLanguage.Versions.AddVersion(); 
     //Populate the new language version with values: 
     //Populate the new language version with values: 
     newItemLangVersion.Editing.BeginEdit(); 

     newItemLangVersion.Fields.ReadAll(); 

     foreach (Field field in newItemLangVersion.Fields) 
     { 
      if (!IsStandardTemplateField(field) && (field is HtmlField || field is TextField)) 
      newItemLangVersion.Fields[field.Name].Value = "new"; 
     } 
     newItemLangVersion.Editing.EndEdit(); 
     } 

,你必須檢查,如果是一個方法模板字段,因爲你並不需要修改那種場

public bool IsStandardTemplateField(
     Field field) 
    { 
     Sitecore.Data.Templates.Template template = Sitecore.Data.Managers.TemplateManager.GetTemplate(
      Sitecore.Configuration.Settings.DefaultBaseTemplate, 
      field.Database); 
     Sitecore.Diagnostics.Assert.IsNotNull(template, "template"); 
     return template.ContainsField(field.ID); 
    } 
+0

這對我不起作用,因爲我有許多不同領域的不同項目。我需要一個通用的方法來做到這一點。 – SpaceJump

+0

你想用你的代碼實現什麼? –

+0

我想穿過項目,在系統/語言下爲所有語言創建版本,並使用僞文本對文本字段和HTML字段進行傀儡化。爲所有語言創建項目版本已經有效,但我無法將虛構文本添加到項目中。困難的部分是項目基於不同的模板,因此它們具有不同的字段類型和字段名稱。 – SpaceJump