The Web Designer is a special browser-independent version of the Designer which can be used to design reports on a web server. It is installed as a regular Windows program on the client. In this way, the Web Designer does not appear as a part of the website, but instead as an independent desktop program which is launched from your website.
If you need to use a Designer without a local Windows installation, which is used completely in the browser, you can use the
Web Report Designer.
Basic Concepts/Requirements
- In order to use the Web Designer in your own ASP.NET project, the two List & Label NuGet packages combit.ListLabel30 and combit.ListLabel30.Web must be added. The other external dependencies are added automatically. Further details on the use of NuGet packages and deployment can be found under NuGet Package Support.
- The List & Label Web Designer needs to be distributed together with your own application. To do so, you will have to store the setup file at a location (of your own choosing) on the web server. The users of the Designer will then download it and install it on their local computer. The Designer launches as an independent program outside the web browser!
- You will need to place DesignerControl on a website under ASP.NET WebForms or call the command @Html.ListLabelMvcWindowsClientWebDesigner() under ASP.NET MVC from a view. This ensures that the web browser performing the call launches the Web Designer or prompts the user to install it.
- On the server, you will only need to set a few parameters and add and assign the List & Label data provider as usual. The Web Designer will internally ensure that the data from the data source on the web server is forwarded to the Designer on the client for the real-time data preview.
- Use the NuGet package Microsoft.AspNetCore.Mvc.NewtonsoftJson in the .NET version appropriate to the application. In addition, locate the code line builder.Services.AddControllersWithViews(); and replace it with builder.Services.AddControllersWithViews().AddNewtonsoftJson(); or add it, so that the appropriate JSON parser is used for serializing and de-serializing between server and client.
Integration
To integrate the Web Designer into your application, proceed as follows. For more details, please refer to the application examples provided for ASP.NET.
Step 1: Add Web Designer to Application
Copy the setup file of the Web Designer ("LL30WebDesignerSetup.exe") to any one of the web application's folders so that clients are able to download it from there. The setup file is located in the List & Label installation folder under "Redistribution".
When switching to a new List & Label version (also for service packs), the setup file for the Web Designer on the server will need to be updated. The clients will then automatically prompt the user to perform an update the next time the application is launched.
Finally, add a reference to the assembly combit.Reporting.Web. How the Web Designer call is inserted differs according to the web framework used. You will find the necessary code in the programming examples in the List & Label installation folder under ".\Samples\Microsoft .NET\.NET Framework 4\ASP.NET\":
…\C#\Web Reporting Sample\Default.aspx
…\C#\MVC Web Reporting Sample\MVC Web Reporting Sample\Views\Sample\WebDesignerLauncher.cshtml
…\C#\MVC Web Reporting Sample\MVC Web Reporting Sample\Controllers\SampleController.cs
Step 2: Configure Data Provider for Real-Time Data Preview
Assign your data provider to the ListLabel object and/or the DataSource property of the WindowsClientWebDesignerOptions object as usual. No direct connection is created between the Web Designer and the data source; the Web Designer communicates with your web application exclusively via HTTP(S), wherein a server-side module of the Web Designer forwards the data from your data source to the Web Designer. Hence, no additional adjustments are necessary on the data source side (or for your database server), such as having to enable connections in your firewall.
Step 3: Expand the Application Configuration
The new Web Designer always uses ASP.NET MVC for the internal processing of HTTP requests. Hence, the necessary routes will need to be registered in the Application_Start() function of your application (Global.asax file), even if your application is not based on ASP.NET MVC. Add the following lines:
WindowsClientWebDesignerConfig.RegisterRoutes(RouteTable.Routes);
WindowsClientWebDesignerConfig.WindowsClientWebDesignerSetupFile = Server.MapPath("~/Webdesigner/LL30WebDesignerSetup.exe");
WindowsClientWebDesignerConfig.LicensingInfo = "<ToDo: insert your license here>";
WindowsClientWebDesignerConfig.RegisterRoutes(RouteTable.Routes)
WindowsClientWebDesignerConfig.WindowsClientWebDesignerSetupFile = Server.MapPath("~/Webdesigner/LL30WebDesignerSetup.exe")
WindowsClientWebDesignerConfig.LicensingInfo = "<ToDo: insert your license here>"
Important: If you are also using MVC/Web API, the WindowsClientWebDesignerConfig.RegisterRoutes function must be registered before your own routes.
The second instruction specifies the local data path of the Web Designer setup which is downloaded if the client has not yet installed it. Distribute the Web Designer setup together with your web application and modify this link accordingly.
Additionally the List & Label license key (see also LicensingInfo) must be specified.
Step 4 (Recommended): Enable Drilldown, Table of Contents etc.
By default, all features of the (Desktop) Designer requiring additional files (apart from the main project) are disabled in the Web Designer. This is done because it cannot be guaranteed that the selected local data paths will be valid both on the client and on the server. For example, this applies to drilldown projects, project includes, pictures and PDF files that are not embedded etc.
These limitations do not apply when the repository mode of List & Label is used, with which the files from one or more reports are managed by a simple, virtual file system - the repository. How to use the List & Label repository mode is described in namespace combit.Reporting.Repository. Using List & Label to retroactively convert a web application to repository mode can be rather time-consuming and complicated. Therefore, it is recommended that repository mode be used with new web applications from the very beginning despite the higher level of complexity - even if the features available without a repository initially satisfy your requirements. Hence, the included ASP.NET examples all use the repository. A exemplary manual could be found at Using the Repository-Mode.
Limitations and Troubleshooting
General limitations in the Web Designer as compared to the normal Designer:
- no interactive formula functions (AskString$, AskStringChoice$, LibraryPath$, ProjectPath$, ApplicationPath$)
- no possibility to use local file paths or formulas as source for HTML objects
- no OLE objects
- no fax/mail features
- no custom DesignerActions
- no custom-added variables that change their value for each page
- no objects drawn using callback
There are also additional restrictions in the Web Designer if the Repository-Mode is not used:
- no drilldown
- no project includes
- no report sections (*.toc, *.gtc, *.idx) and sub-reports
- pictures and PDF files must be embedded in the project file
- no external shapefiles
Older versions of IIS may not work properly with the MVC framework. If this happens, try adding the following entries to the web.config file under system.webServer\handlers::
...
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
modules="IsapiModule"
scriptProcessor="windir\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll"
preCondition="classicMode,runtimeVersionv4.0,bitness32"
responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
modules="IsapiModule"
scriptProcessor="windir\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
preCondition="classicMode,runtimeVersionv4.0,bitness64"
responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
...