2011-09-16 2 views
3

미디어 라이브러리의 미디어 항목을 참조하는 Treelist 필드가있는 항목 집합이 있습니다. 다른 항목에서 참조하는 미디어 항목을 삭제하면 "링크 끊기", "다른 항목에 연결"또는 "끊어진 링크 만 남기"옵션을 제공하는 "깨진 링크"대화 상자가 나타납니다.항목을 삭제할 때 콘텐츠 편집기의 링크 제거 옵션을 에뮬레이션하려면 어떻게해야합니까?

링크 제거를 선택하면 어떤 API가 호출되고 있습니까? 코드 숨김에서 이와 동일한 작업을 프로그래밍 방식으로 수행하고 싶습니다.

문맥을 위해 광고 회원이 이미지를 업로드하고 맞춤 웹 인터페이스를 통해 이미지 라이브러리를 조작 할 수 있도록 허용하고 있습니다. 따라서 누군가가 세트에서 이미지를 삭제할 때 분명히 이러한 미디어 라이브러리 항목에 끊어진 링크를 남기고 싶지는 않습니다.

답변

3

링크 데이터베이스가됩니다. 참조를 찾으려면 항목을 삭제하기 전에 항목을 삭제할 수 있습니다.

Sitecore.Globals.LinkDatabase.GetReferrers(item) 

반환되는 ItemLink 객체에는 삭제하려는 항목이 참조되는 항목 및 필드가 포함됩니다. 해당 Field 클래스를 사용하여 참조를 제거하십시오.

LinkDatabase에서 RemoveLinks 또는 RemoveReferences 메서드를 사용하면 원하는 것을 수행 할 수 있다고 생각할 수도 있지만 실제로는 링크 데이터베이스 자체에서 링크/참조를 제거하는 것입니다.

편집 : 약간의 반사경 작업이 분야의 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

를 참조하여 발견 테스트되지 않은 코드입니다
관련 문제