2009-06-23 4 views
0

우리는 Sitecore를 사용하고 컨텐츠 트리를 파일 시스템에 직렬화하는 개발자간에 컨텐츠를 공유 한 다음이를 소스 제어로 점검합니다. 이것은 SVN을 사용한 마지막 프로젝트에서 잘 동작했지만이 새로운 프로젝트는 TFS를 사용합니다.SiteCore의 직렬화 트리를 TFS로 확인하는 방법

불행하게도 TFS 그들에 달러 기호가 경로, 즉

\serialization\master\sitecore\templates\Branches\Calendar\Agenda View Settings\$name.item 

이이 Sitecore의 직렬화 구조에 대한 매우 일반적인 파일 이름을 허용하지 않습니다. 이 주위에 어떤 방법이 있습니까? Sitecore를 변경하여 파일 이름 앞에 $를 두지 않거나 SVN으로 전환해야합니까?

답변

0

나는 파고 들었다. 그것은 가능하지만, 즉각적인 것은 아닙니다.

트리를 serialize 할 때 Sitecore는 다음을 호출합니다. Sitecore.Shell.Framework.Commands.Serialization.DumpTreeCommand. 이것은 /App_Config/Commands.config에 정의되어 있습니다. 직렬화를 해제하면 해당하는 .LoadTreeCommand가 호출됩니다.

protected override void Dump(Item item) 
{ 
    Sitecore.Data.Serialization.Manager.DumpTree(item); 
} 

그리고 당신이 명령을 무시) 1로해야 할 것 같은 불행하게도, 당신이 우선해야 할 기능에 도착하면, 보이는을 :이 명령은 무엇

는, 호출보다는 조금 더 commands.config를 열고 자신의 직렬화 관리자를 만듭니다 (Sitecore의 상속을받습니다).

이 클래스의 메서드 대부분은 정적 멤버이므로이 방법이 얼마나 쉬운 지 확신 할 수 없습니다. 당신이 재정의/다시 구현해야하는 방법이 하나입니다

public static void DumpItem(string path, Item item) 
{ 
    Assert.ArgumentNotNullOrEmpty(path, "path"); 
    Assert.ArgumentNotNull(item, "item"); 
    Directory.CreateDirectory(Path.GetDirectoryName(path)); 
    using (new SecurityDisabler()) 
    { 
     TextWriter writer = new StreamWriter(File.Create(path)); 
     try 
     { 
      ItemSynchronization.WriteItem(item, writer); 
     } 
     catch 
     { 
     } 
     writer.Close(); 
    } 
} 

파일 이름은 당신이 볼 수 있듯이, 항목의 경로에 전적으로 기반으로합니다. 가정하면, 당신은 아마도 .Replace ("$", "! dollartoken!")와 같은 것을 빠져 나와 디시리얼라이저에서 그 반대를 구현할 수 있습니다.

불행히도 많은 작업이 진행됩니다.