Neues/leeres Projekt im Web Designer anlegen und verwenden

Einleitung

Der Web Designer, der in ASP.NET Anwendungen verwendet wird, kann in zwei unterschiedlichen Modi mit Projekten umgehen.

Dateibasierter Standard-Modus

Zum einen ist das der Standard-Modus, in dem direkt dateibasierende Projekte verwendet werden. Jedoch hat dieser Modus einige Nachteile wie bspw. die fehlende Unterstützung für zusätzliche Dateien. Denn hierbei sind im Web Designer alle Funktionen des (Desktop-)Designers, welche zusätzliche Dateien (neben dem Hauptprojekt) benötigen, deaktiviert. Dies ist der Fall, da nicht garantiert werden kann, dass die ausgewählten lokalen Dateipfade sowohl auf dem Client wie auf dem Server gültig sind. Dies betrifft beispielsweise Drilldown-Projekte, Projektbausteine, nicht eingebettete Bilder und PDF-Dateien, etc.

Streambasierter Repository-Modus

Der zweite Modus, um mit Projekten im Web Designer zu arbeiten, ist der sogenannte Repository-Mode, der aufgrund der zahlreichen Einschränkungen des dateibasierten Standard-Modus auch empfohlen wird. Dabei werden die Dateizugriffe in ein virtuelles Dateisystem (streambasiert) umgeleitet und ermöglichen die Verwaltung aller projektrelevanten Dateien durch Ihren eigenen Code - bspw. in einer SQLite Datenbank.

Umsetzung

Damit es nun aber möglich wird, den Web Designer mit einem neuen, leeren Projekt zu starten, müssen je nach Modus unterschiedliche Vorarbeiten durchgeführt werden. Prinzipiell geht es jedoch lediglich darum, die beiden Eigenschaften AutoProjectType sowie AutoProjectFile mit passenden Werten zu versehen.

Dateibasierter Standard-Modus

Es ist erforderlich, dass die neue/leere Projektdatei zunächst serverseitig im Dateisystem erstellt wird. Erst dann kann der Web Designer beim Starten diese Datei vom Server beziehen und lokal auf dem Client verwenden. Hierfür kommt das Objektmodell (DOM) zum Einsatz um eine leere Projektdatei zu erstellen:

// create the List & Label object, set required options,
// set the LicensingInfo property, define the used data source etc. 
//...

// we need to create the project file (empty!) with DOM on the server-side first
String projectFileName = Server.MapPath("~/App_Data/myNewProject.lst");
using (ProjectList domNewProject = new ProjectList(LL))
{
    domNewProject.Open(projectFileName, LlDomFileMode.Create);
    domNewProject.Save();
    domNewProject.Close();
}

// pass the newly created project to the Web Designer
LL.AutoProjectFile = projectFileName;

// also define the matching project type
LL.AutoProjectType = LL.Core.LlUtilsGetProjectType(projectFileName);

// attach the prepared List & Label object to the Web Designer component
//...

Streambasierter Repository-Modus

Um das Arbeiten mit dem Repository zu erleichtern gibt es eine hilfreiche Klasse RepositoryImportUtil. Und hier gibt es auch die Möglichkeit ein neues Projekt mit Hilfe von CreateNewProject hinzuzufügen:

// create the List & Label object, set required options,
// set the LicensingInfo property, define the repository, 
// define the used data source etc. 
//...

// we need to create a new/empty repository item
LlProject projectType = LlProject.List;
using (RepositoryImportUtil importUtil = new RepositoryImportUtil(RepositoryHelper.GetCurrentRepository()))
{
    reportRepositoryID = importUtil.CreateNewProject(projectType, null);
}

// define new create project (its repository ID) to use in the Web Designer
LL.AutoProjectFile = reportRepositoryID;

// also define the matching project type
LL.AutoProjectType = projectType;

// attach the prepared List & Label object to the Web Designer component
//...

Empfehlung

Egal für welchen Modus Sie sich letzten Endes entscheiden - mit den Snippets oben wird der Web Designer mit einem neuen/leeren Projekt gestartet. Dennoch empfehlen wir den streambasierten Modus aufgrund des erweiterten Feature-Umfangs zu verwenden.