4

フィールド値をバックエンドから動的に変更しようとしていますが、変更が保存されていないようです。

コード

itemmaster データベースから取得されます。

   using (new EditContext(item))
   {
        item.Editing.BeginEdit();
        try
        {
            //Value is updated here from "" to Test
            item.Fields["Content"].Value = "Test";
        }
        finally
        {
            //item.Fields["Content"].Value is "" again. 
            item.Editing.AcceptChanges();
            item.Editing.EndEdit();
        }                 
    }

アップデート

@sitecore クライマーが言ったように、コードを使用するように変更しました -

new Sitecore.SecurityModel.SecurityDisabler()

ただし、問題はキャッシングでした。更新された値がコンテンツ エディターに表示されたのは、キャッシュをクリアしてブラウザーを再起動した後でした。

それを回避するために、編集を行う前にキャッシュを無効にし、編集が完了したら再び有効にしました。

CacheManager.Enabled = false;

       using (new Sitecore.SecurityModel.SecurityDisabler())
       {
            item.Editing.BeginEdit();
            try
            {
                item.Fields["Content"].Value = "Test";
            }
            finally
            {
                item.Editing.EndEdit();
            }                 
        }
CacheManager.Enabled = true;
4

2 に答える 2

2

追加してください: (new Sitecore.SecurityModel.SecurityDisabler())

EditContext には、次のコード行が含まれています。

 public EditContext(Item item)
{
  Assert.ArgumentNotNull((object) item, "item");
  this._item = item;
  this._item.Editing.BeginEdit();
}

コード内に item.Editing.BeginEdit(); がある場合は、ここで必要ありません。

あなたのコードは:

  using (new Sitecore.SecurityModel.SecurityDisabler())
 {
    item.Editing.BeginEdit();
    try
    {
        //Value is updated here from "" to Test
        item.Fields["Content"].Value = "Test";
    }
    finally
    {
        //item.Fields["Content"].Value is "" again. 
       // Remove AcceptChanges I never use it , for editing . 
      //  item.Editing.AcceptChanges();
        item.Editing.EndEdit();
    }                 
}

回答を更新しました。何か変更があるかどうか、コンテンツ エディターで確認しましたか? キャッシュをクリアして、もう一度確認してください。なぜ機能しないのか、本当に奇妙です。キャッシュの問題である可能性があります。

于 2013-10-28T04:34:26.493 に答える
0

役立つ場合は、SecurityDisabler を使用してみてください。

 using (new Sitecore.SecurityModel.SecurityDisabler())
{
  item.Editing.BeginEdit();
    try
    {
        //Value is updated here from "" to Test
        item.Fields["Content"].Value = "Test";
    }
    finally
    {
        //item.Fields["Content"].Value is "" again. 
        item.Editing.AcceptChanges();
        item.Editing.EndEdit();
    }
}
于 2013-10-28T06:46:27.073 に答える