0

Kentico で設定を保存しようとすると、次のエラーが発生します。

コード名「AvalaraOrderStatus」の設定キーは既に存在します。

すでに設定を作成し、値を保存しました。コードは 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());
4

1 に答える 1

1

注意すべき点がいくつかあります。

  • メソッドの最初のパラメーターにはSettingsKeyInfoProvider.GetSettingsKeyInfo、サイト名をプレフィックスとして付ける必要はありません。これが、サイト識別子が提供される理由です (あなたの場合はSiteID)。そうしないとnull、ステートメントが評価されるたびに値を取得する可能性がありますif。これが、設定キーが存在する場合でも再作成される理由です。したがって、次のようになります。
    SettingsKeyInfoProvider.GetSettingsKeyInfo("AvalaraOrderStatus", siteID)
  • 同じことがメソッドにも当てはまりますSettingsKeyInfoProvider.SetValue- サイト名にプレフィックスを付ける必要はありません:
    SettingsKeyInfoProvider.SetValue("AvalaraOrderStatus", siteId, orderStatus.Trim())
  • 整数は有効な SiteIdentifier であるため、オブジェクトCurrentSiteIDを明示的にインスタンス化する必要はありません。SiteInfoIdentifier
    SettingsKeyInfoProvider.SetValue("AlavaraOrderStatus", CMS.SiteProvider.SiteContext.CurrentSiteID, orderStatus.Trim())
于 2016-07-24T22:45:08.433 に答える