Time is running very fast, and there is a couple of weeks before the release of the new version 2015.1. Meanwhile, the development and improvement of components is not stopping even for a minute. And now it is safe to tell you about adding new features in StiMvcViewer that is a part of Stimulsoft Reports.Web. One of the most anticipated features is that in the nearest release, the new Viewer for MVC will support more than 15 color themes of the user interface. This will give you the opportunity to choose color preferences which are the most pleasant to you and matching your requirements. Here are a few of the themes on the picture below.

MvcViewer Themes
For us, constant improvement of products is not just moving forward. This is primarily, understanding of our own mistakes, correcting them, implementing new technologies and optimizing the existing things. In the official release 2015.1 one of the components that will make you happy will be the report viewer – StiMvcViewer. This component is a part of Stimulsoft Reports.Web.

We have optimized and grouped properties, added new controls, partially redesigned the user interface. Expanded support for the UI themes, and subsequently it will be possible to add and custom themes. The most striking possibility of a new viewer will be support for the touch interface. The viewer for MVC will be run on mobile devices.

MVC Viewer
StiMobileDesigner ist eine ASP.NET-Komponente für Erstellen und Bearbeiten der Berichte im Browser. In diesem Artikel beschreiben wir die Verwendung dieser Komponente mit der Cloud-Plattform Azure.

Es sei erwähnt, dass die Komponente StiMobile Designer auf der Technologie Client-Server basiert. Auf der Serverseite befindet sich der Cache, ein schneller Puffer-Speicher, der Zugriffe auf ein langsames Hintergrundmedium oder aufwendige Neuberechnungen zu vermeiden hilft. Daten, die bereits einmal geladen wurden, verbleiben im Cache, so dass sie bei späterem Bedarf schneller wieder abgerufen werden können. Und wenn der Designer auf Azure geladen ist, kann die speichernde Variante des Objektes in verschiedene Serverinstanzen gespeichert werden. In dieser Situation entsteht ein Problem mit dem Speichern des Berichtes. Für richtige, korrekte Arbeit soll der Bericht in einer Instanz gespeichert werden.

Um dieses Problem zu lösen, erstellten unsere Entwickler die Klasse StiCacheHelper für folgende Komponenten: StiMvcMobileDesigner, StiMvcMobileViewer, StiMobileDesigner, StiMobileViewer und erlaubten den Benutzern zwei öffentliche Methoden SaveObjectToCache und GetObjectFromCache zu überschreiben. Innerhalb dieser Methoden kann der Benutzer seinen eigenen Speicher im Cache beschreiben. Anders gesagt, man muss die Methode überschreiben und alle Objekte in seinen eigenen Cache speichern, was die Arbeit mit Berichten auf Azure schnell und einfach macht.

classStiAzureCacheHelper : StiMobileViewer.StiCacheHelper
{
    string SlsPath = RoleEnvironment.GetLocalResource("TestStorage").RootPath + "\\";
    public override void SaveObjectToCache(object obj, string guid)
    {
        byte[] cacheData = GetCacheDataFromObject(obj);
        System.IO.File.WriteAllBytes(SlsPath + guid, cacheData);
    }
    public override object GetObjectFromCache(string guid)
    {
        if (!System.IO.File.Exists(SlsPath + guid)) return null;
        byte[] cacheData = System.IO.File.ReadAllBytes(SlsPath + guid);
        return GetObjectFromCacheData(cacheData);
    }
}
StiMobileViewer1.CacheHelper = new StiAzureCacheHelper();
Using the SQL queries helps avoiding the data duplication in the tables and provides maximum flexibility when searching and showing the data in a database. This also allows requesting only required data, fields, registers etc.

One of the ways to get only required data is using parameters. When you create a query you can use Parameter. It is used to pass additional information into the query for selecting data. For example, you can create a query with parameters when it is required to use some values in the query during every execution of this query. The object Parameter can be used only together with SQL data sources.

More information about it can you read in our documentation.

Also you can create parameters from the code:

Dynamic SQL
Working with parameters in Stimulsoft Reports software is similar to the parameters in the .NET Framework.

Using variables in parameters

In Stimulsoft Reports you can use Variables in the report. The Variable provides an ability of placing and using a variable when creating reports. The variables can be of different types such as string, date, time, array, collection, range etc. All variables are stored in the data dictionary. Before you will use any variable, you should add it to the data dictionary. More information about this can be found in our documentation.

Variable in Parameter

Values to variables can be set from code or by request from the user. There are two ways how to do this from code. It depends on with which report (compiled or not) the user works.

before compilation:

Variable in SQL
after compilation:

Variable in SQL
When you request the value of the variable from the user, you should set the parameters on the panel Request from user. These parameters determine possible involvement of the user when applying a variable in the report. Possible values of variables the user can get from the data source, specifying it in the Data Source property. For correct work of this functionality you should get data for all data sources, and then request the selection of the values for variables from the user. If possible values are not taken from the data sources and values selected by a user are used in queries, then, in order to avoid requesting all the data once again, it makes sense to set the Request Parameters property of the report to true.

In our reporting tools you can use the variables directly in the query. The value of the variable will be inserted into the query directly before its execution without some additional actions. For example, when the query is:

Query Type
and a value of the variable is Chocolate, then in this case the next query will be executed:

Variable Chocolate
Naturally, this query will not be executed. The correct query is the next one:

Query Type
You can find this feature only when working with strings, but this behavior allows creating more difficult queries dynamically in contrast to values of variables. The similar example is shown below.

Using variables to output lists

From time to time you need to create more complex queries. For example, when, on one hand, you need to get data from the data source to give a choice for a user, and on the other hand, some queries may not be executed, because the required parameters are not set. In this case we a have a problem.

One of such examples. The variable with enabled option Request from user can be used both for selecting several values and in the operator IN of the SQL query.

You need to know one thing. By default the variables of the type List are filled only after connection of the dictionary to data sources. Therefore, during the first connection of data source this variable will be empty, and the expression Variable1.ToQueryString() throws an empty string and, accordingly, the entire query throws the error. To avoid this we have added an additional check.

Check
In this example all data will be shown and after you click the button Submit the report will be rebuilt using only selected data.

When you need to view only required data, you should do the following:

1. Set the report property report.RequestParameters to true. And, before the first click of the button Submit, only the empty report page will be viewed and rendering will begin after the click.
2. At once initialize the report variable with additional values.

Required Data
Let's discuss a very important thing – creating an OLEDB connection under a 64-bit OS with use of the adapter Microsoft Jet 4.0. This adapter is not supported in 64-bit applications. But the issue can be solved in several ways and takes this a couple of minutes. Despite the fact that the database adapter Microsoft Jet is present in Windows 7, it is a bit outdated. Therefore, you should use the new adapter Microsoft.ACE.OLEDB.12.0. This adapter can be downloaded from the official source, completely free of charge.

Once you have downloaded it. Install it. Run the file, accept the license agreement, define the installation location and wait for a while. It takes a couple of minutes. After the installation is finished, it is better to restart the report designer (if opened), and in case the installation wizard offers to restart the system, just follow its request. Next, create an OLEDB connection to the data source.

It should be noted that this adapter is designed exclusively for 64-bit applications; it will not work with 32-bit versions of Microsoft Office. Therefore, Microsoft.ACE.OLEDB.12.0 should be used only with 64-bit versions of the Office.

Here is a video that shows how to install the adapter Microsoft.ACE.OLEDB.12.0 and create the OLEDB connection to the data source.

Also, this problem can be solved without the adapter Microsoft.ACE.OLEDB.12.0. You can change the properties of your project. Go to the properties of the project by selecting the appropriate item from the context menu, or by Project -> Properties..., in the tab Build change the Platform target, selecting the value x86. After this, run the project, call the designer and create the OLEDB connection to the data source. This method can be watched the video below.