Eine Möglichkeit wäre, codeseitig den Content des Repository-Items als Projekt im Filesystem zu speichern und dann per RepositoryImportUtil wieder einzufügen.
Ich habe zumindest mit einem einfachen Projekt getestet wie es sich verhält. Druckereinstellungen etc. werden neu angelegt, was in diesem Fall denke ich auch korrekt wäre.
Beispiel:
Projekt „Test_24“ (8026D191-1547-4930-A805-36A78EB890B1) ist vorhanden und soll auf Version 25 mit dem Namen „Test_25“ kopiert werden.
MyRepository repo = new MyRepository();
using (var util = new RepositoryImportUtil(repo))
{
using (var ll = new ListLabel())
{
ll.FileRepository = repo;
using (var stream = new MemoryStream())
{
repo.LoadItem("repository://{8026D191-1547-4930-A805-36A78EB890B1}", stream, CancellationToken.None);
File.WriteAllBytes(@"D:\tmp.lst", stream.ToArray());
var id = util.ImportProjectFile(ll, @"D:\tmp.lst");
util.SetItemUIName(id, "Test_25");
}
}
}
Alternativ können Sie in Ihrer IRepository-Implementierung natürlich auch noch Funktionen für das Kopieren definieren.
Wenn natürlich noch zusätzlich Drilldowns und weitere Dateien benötigt werden wird das Ganze etwas komplexer
. Hilft Ihnen das so schon weiter?