2011-09-16 3 views
3

私はメディアライブラリのメディアアイテムを参照するTreelistフィールドを持つ一連のアイテムを持っています。別のアイテムによって参照されているメディアアイテムを削除すると、「リンクを削除する」、「別のアイテムにリンクする」、または壊れたリンクを残すオプションが表示される「壊れたリンク」ダイアログボックスが表示されます。アイテムを削除するときにコンテンツエディタのリンクを削除オプションをエミュレートするにはどうすればよいですか?

[リンクを削除]を選択すると、どのAPIが呼び出されていますか?コードビハインドでこの同じアクションをプログラムで実行したいと思います。

文脈上、私たちの広告メンバーは、(カスタムWebインターフェイスを介して)画像をアップロードし、画像ライブラリを操作することができます。だから誰かが自分のセットから画像を削除したとき、明らかに私たちはこれらのメディアライブラリアイテムに壊れたリンクを残したくありません。

答えて

3

これはリンクデータベースです。あなたが参照元を見つけるために、項目を削除する前に、あなたはそれを利用することができます

Sitecore.Globals.LinkDatabase.GetReferrers(item) 

返さItemLinkオブジェクトを使用すると、削除された項目が参照されたアイテムとフィールドが含まれています。参照を削除するには、適切なFieldクラスを使用します。

LinkDatabaseのRemoveLinksまたはRemoveReferencesメソッドが探していると思うかもしれませんが、実際にはリンクデータベース自体からリンク/参照を削除するだけです。

EDIT: 少しリフレクターの仕事は、より完全なソリューションに付属しています...あなたは、フィールドのCustomFieldを取得するFieldTypeManager工場を使用している場合、あなたはフィールド上RemoveLink(ItemLink)を呼び出すことができます。

Field field = item.Fields[brokenField]; 
CustomField field2 = FieldTypeManager.GetField(field); 
item.Editing.BeginEdit(); 
field2.RemoveLink(itemLink); 
item.Editing.EndEdit(); 

これは、Sitecore.Shell.Applications.Links.EditLinksForm

を参照することによって見出されテストされていないコードは、あります
関連する問題