2016-07-24 69 views
0

我想保存在Kentico設置和我得到這個錯誤:與代號「XX」的設置鍵已經存在

The settings key with code name 'AvalaraOrderStatus' already exists.

我已經創建的設置,我已保存的值給它。代碼在Kentico 8中運行良好,但我被要求沒有SiteInfiIdentifer。

這裏是我創建進行設置代碼:

//if the setting does not exist, then create it 
if (SettingsKeyInfoProvider.GetSettingsKeyInfo(siteName + ".AvalaraOrderStatus", siteID) == null) 
{ 
    // Create and set up new SettingsKey 
    SettingsKeyInfo si = new SettingsKeyInfo(); 
    si.KeyName = "AvalaraOrderStatus"; 
    si.KeyDisplayName = "Avalara Order Status"; 
    si.KeyDescription = "Avalara order status for this site"; 
    si.KeyType = "string"; 
    si.KeyValue = string.Empty; 
    si.KeyCategoryID = category.CategoryID; 
    SettingsKeyInfoProvider.SetSettingsKeyInfo(si); 
} 

的代碼拋出的最後一行的錯誤。這裏是我的代碼:

int currentSiteID = CMS.SiteProvider.SiteContext.CurrentSiteID; 
SiteInfoIdentifier siteId = new SiteInfoIdentifier(currentSiteID); 

//update settings in system 
SettingsKeyInfoProvider.SetValue(siteName + ".AvalaraOrderStatus", siteId, orderStatus.Trim()); 

回答

1

有幾件事情需要注意:

  • SettingsKeyInfoProvider.GetSettingsKeyInfo方法的第一個參數不需要與站點名稱作爲前綴。這就是爲什麼提供一個站點標識符(在你的情況下,SiteID)。否則,每次if語句評估時,您可能會得到一個null值,這就是設置密鑰即使存在也要被重新創建的原因。所以這應該是:
    SettingsKeyInfoProvider.GetSettingsKeyInfo("AvalaraOrderStatus", siteID)
  • 這同樣適用於SettingsKeyInfoProvider.SetValue方法 - 不需要帶有站點名稱:
    SettingsKeyInfoProvider.SetValue("AvalaraOrderStatus", siteId, orderStatus.Trim())
  • CurrentSiteID整數是一個有效的SiteIdentifier,所以沒有必要顯式實例化SiteInfoIdentifier對象:
    SettingsKeyInfoProvider.SetValue("AlavaraOrderStatus", CMS.SiteProvider.SiteContext.CurrentSiteID, orderStatus.Trim())
相關問題