Ich nutze ein Repository (mit MS SQL-Server) und muss leider einen Bericht doppelt nutzen, einmal für LL23 und einmal für LL24, weil ich nicht alle Clients auf einen Schlag updaten kann.
Dazu möchte ich den Bericht im Repository kopieren und entsprechend an LL24 anpassen.
Wie mache ich das?
Alter würde es auch reichen den Bericht ins FileSystem zu exportieren und dann mit Hilfe der ImportUtils wieder zu importieren. Auch hier wäre ich für jede Hilfe dankbar.
Hast Du denn die Möglichkeit, den Bericht im Designer zu öffnen? Da müsste es ein “Speichern als…” geben, über den Du den Bericht ins Filesystem bekommst. So klappt das zumindest im Report Server, der verwendet ja auch ein Repository.
Wir sind bei uns eben auf genau das selbe Problem gestossen.
Bei uns werden die Berichte in der Datenbank gespeichert und in die IRepository-Implementierung geladen.
Wir haben einfach die Datenbank-Einträge kopiert und es war alles gut, weil wir pro Bericht noch eine eigene Entität haben, über die wir bestimmen, welche Elemente überhaupt von unserer IRepository-Implementierung geladen werden.
Vielleicht könnte das in der beschriebenen Situation schon ausreichen.
Leider haben wir nun einen Baustein kopiert und diese werden bei uns im Repository immer alle geladen. Da nun beide die selbe InternalId haben, wird nur einer davon in der Baustein-Auswahl angezeigt.
Auch wir suchen daher nach einer Möglichkeit die Datenbankzeile zu kopieren und die Repository-InternalId und Description anzupassen.
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?