2009-06-23 9 views
0

Nous utilisons Sitecore et pour partager le contenu entre les développeurs, nous sérialisons l'arborescence de contenu vers le système de fichiers, puis nous vérifions cela dans le contrôle de source. Cela a bien fonctionné dans le dernier projet qui a utilisé SVN, mais ce nouveau projet utilise TFS.Comment vérifier l'arborescence de sérialisation de SiteCore dans TFS

Malheureusement TFS n'accepteront pas les chemins qui ont un signe de dollar en eux, à savoir

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

ce qui est un nom de fichier très commun pour la structure de sérialisation de Sitecore. Y at-il un moyen de contourner cela? Can Sitecore peut-il être modifié pour ne pas mettre le $ devant les noms de fichiers ou devons-nous passer à SVN?

Répondre

0

J'ai fait quelques recherches. C'est faisable, mais pas immédiatement simple.

Lors de la sérialisation d'un arbre, Sitecore invoque: Sitecore.Shell.Framework.Commands.Serialization.DumpTreeCommand. Ceci est défini dans /App_Config/Commands.config. Lors de la sérialisation, l'équivalent .LoadTreeCommand est appelé.

Ce que ces commandes font, est un peu plus que d'invoquer:

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

Et malheureusement, pour se rendre à la fonctionnalité dont vous avez besoin pour passer outre, il semble que vous allez devoir 1) remplacer la commande en commands.config, puis créez votre propre Serialization Manager (héritant de Sitecore).

Je ne suis pas entièrement sûr de la facilité avec laquelle cela serait, puisque la plupart des méthodes de cette classe sont des membres statiques. La méthode que vous devrez remplacer/re-mettre en œuvre est celle-ci:

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(); 
    } 
} 

Le nom de fichier, comme vous pouvez le voir, est entièrement basé sur le chemin de l'élément. L'hypothèse est, vous pourriez peut-être sortir avec quelque chose comme .Replace ("$", "! Dollartoken!") Et mettre en œuvre l'inverse dans votre dé-sérialiseur.

Cela semble malheureusement beaucoup de travail.