Logify 24/7 Application Monitoring - Newest Features

Thanks to great feedback from our users, we've extended the capabilities of Logify so it can better meet the 24/7 application monitoring needs of customers.

Logify - 24/7 Application Monitoring Service

If you've not had the opportunity to review its capabilities or evaluate it within your organization, please visit Logify.DevExpress.com and register for your 15-day trial.

New - Removing Sensitive Data from Your Logify Crash Reports

Logify allows you to remove sensitive data stored within your reports. If you've used Logify, you'll know that all request data (form fields, headers, cookies and server variables) are included within the report sent to Logify Alert when a web application crashes. At your discretion, you can remove sensitive HTTP request data from reports before sending them.

New - Collect Breadcrumbs

Logify now includes a Breadcrumb feature and is able to collect information on the actions that preceded an app crash event (text input, clicks, network requests and an application state changes).

New - Collect Method Arguments

When analyzing an exception’s call stack, it's often useful to review method arguments that were being executed when an exception occurred. Logify Alert provides two new methods to support this capability: TrackArguments and ResetTrack Arguments

New - Related Issues Support

You can now associate external links to issues/tickets/cards/messages stored within an issue tracker or external app. This will help you link known issues to crash events displayed within a Logify report. 

Additional new features include remote client configuration support, "favorite" report fields, ability to merge reports, and advanced search options.  

As always, we are here to help - if you have any questions about Logify, email us at info@devexpress.com.



WPF Theme Designer (v17.2)

As you know, a typical app-wide color scheme consists of numerous palettes/colors/shades. Without the proper tools, creating your own custom theme can be incredibly tedious and time consuming process - a process that very few people willingly tackle.

In this blog post, I will demonstrate how to quickly customize an existing DevExpress WPF theme and how you and your team can leverage our WPF Theme Designer to tailor the look and feel of WPF apps you deliver to end-users.

WPF Theme Designer: Transformation

Download and Install

The DevExpress WPF Theme Designer was designed to reduce the grunt work associated with custom app-wide theme development. It is a free standalone tool that allows you to generate custom themes by altering the base colors of existing DevExpress Themes for the WPF platform. To customize existing DevExpress themes, you'll need to download the Theme Designer and install it on your machine:

https://www.devexpress.com/products/net/controls/wpf/themes/theme-designer.xml

Once you've installed the Theme Designer, you are ready to explore its capabilities.

Modify an Existing Theme

Though you can always build a theme from scratch, it's best to start with a theme that offers you most of what you need. My objective in this blog post is to take the DevExpress Office 2016 Colorful theme and modify a couple of its colors so that it is more in line with Microsoft Excel.

To begin, I will build my project by pressing the F6 key or by clicking the Build Ribbon button.

WPF Theme Designer: First Look

Next, I'll select a DevExpress control on the left panel to preview its color scheme.

The panel on the right displays the theme's palette (combines colors used by different controls). The Palette tab for the Office 2016 Colorful theme includes 29 colors. The Individual Colors tab on the right panel includes thousands of colors. I can group them to see which colors are included within the palette.

WPF Theme Designer: Palette Colors

Note that changing a palette color automatically sets a new value for all corresponding individual colors. This reduces the amount of work involved in customizing them and helps maintain overall consistency.

Make it Look Like Excel

The next step is to change the background color of the DevExpress Ribbon and Hamburger Menu to mimic the appearance of Microsoft Excel.

To obtain the name of the required palette color, I select the Filter Colors tool and point to the ribbon background area while holding the SHIFT key.

WPF Theme Designer: Filter Colors

If you're following along, you'll notice that I must modify the Backstage.Window.Background color. To double-check, I click the Highlight Colors tool and select this palette color to highlight all affected elements.

WPF Theme Designer: Highlight Elements

Once I know what I need to modify, it's time to select the new color. The Theme Designer's built-in Color Picker allows me to select any on-screen color. I'll use it to pick the color (green) used within Microsoft Excel.

WPF Theme Designer: Color Picker

Note that by changing the Backstage.Window.Background palette color, I set a new value for all 81 occurrences of this color within different DevExpress controls: the Ribbon's background in the Ribbon, Diagram Designer and Spreadsheet controls, the background of the Hamburger Menu, etc.

WPF Theme Designer: Excel Green Color

I use the Color Editor to set the Backstage.Delimiter, Backstage.HoverBackground and Backstage.SelectionBackground palette colors by modifying the tone and saturation of the Backstage.Window.Background color value.

WPF Theme Designer: Shades of Green

Apply the New Theme to the Application

To apply the new theme to an application, I'll need to build the assembly by clicking the Publish button and add a reference to this assembly within my application project...

WPF Theme Designer: Load the Assembly

...And add a few lines of code to the app.xaml.cs file.

var theme = new Theme("TestTheme");
theme.AssemblyName = "DevExpress.Xpf.Themes.TestTheme.v17.2";
Theme.RegisterTheme(theme);
ApplicationThemeHelper.ApplicationThemeName = "TestTheme";

If you are ready to customize an existing WPF theme and want to learn more, please refer to the following online resources:

https://documentation.devexpress.com/WpfThemeDesigner/118707/WPF-Theme-Designer
https://www.youtube.com/watch?v=q1OwsGLOQ_Q

I'd love to hear from you - please share your thoughts on our WPF Theme Designer using the comments field below.

WPF Themes – VS 2017 & Office 2016 Black (v17.2)

Our most recent release (v17.2) ships with three Visual Studio-inspired themes. These themes are a great option for those who prefer a Dock-based UX versus MDI or SDI interfaces.

WPF Themes - Visual Studio

In addition to use within dock-based apps (apps that mirror the functionality found within Visual Studio), these themes can be used by those of you who prefer a more modern alternative to our Metropolis themes.
For those who prefer our Microsoft Office-inspired themes, v17.2 ships with a new Black option:

WPF Themes - Office Black

Both the VS 2017 and Office 2016 SE themes offer a simplified XAML file structure and support Color Palettes. All individual element colors (about 3000-4000 based upon theme complexity) within these themes are grouped into palettes of 30-40 colors - wherein every palette color describes a certain logical portion of the UI.

WPF Themes - Color Palettes

You can use these Color Palettes as your starting point to create your own themes using the DevExpress Theme Designer tool.

Excited about the new themes or Theme Designer? Have questions or feedback that you want to share? Let us know in the comments below or send us an email at support@devexpress.com.

WinForms Pivot Grid: Excel Inspired Filtering and Conditional Formatting (v17.2)

Excel-Style Filter Popup

As you may know, our WinForms Grid, TreeList and Vertical Grid controls allow end-users to filter data using Excel-like filter popups. These filter popups were designed to display unique filter options based upon the data type associated with a column. 

With our most recent release (v17.2), this feature is now available to those of you using our WinForms Pivot Grid control. 

To see this new feature in action, be sure to run our Excel Style Filtering demo. If you have our Demo Center installed (v17.2), you can launch the demo using this link.

This new filtering option has the following advantages over classic filter popups and pre-filters:

Automatic Filtering Options based upon a Field's Data Type

The Pivot Grid detects the filtered field's data type and selects the appropriate UI. For instance, the filter popup displays list of values for string fields...


... a range selector for numeric values ...



... or tree-like filter for date-time values.



Extended Filtering via the Filters Tab

For maximum flexibility, end-users can select from a wide range of predefined operators (such as Begins with, Equals, Contains, etc).


Instant Search

Built-in search allows end-users to locate required values within the filter popup.



Integration with External Filters

Our WinForms Pivot Grid's filtering UI is fully synchronized with our external filter editors (generated using the Filtering UI Context component). This means that any filter operation performed using the Pivot Grid UI is reflected in external filters (and vice versa).


Predefined Filters

Predefined filters can be used to apply filters using specified values missing in an underlying data source.



Filter Editor Support

Filters applied using the Excel-style filter popup can be changed within the Filter Editor dialog, allowing end-users to apply complex filter conditions when necessary.


Instant Filtering

The Pivot Grid immediately updates its data once you change filter values within the popup - without the need to click any buttons. 


Important Note: Excel-style filtering is not enabled by default for new projects because it has some limitations:
  • You cannot use this feature in OLAP mode.
  • Excel-style filters cannot be used for group filtering.
We expect to support OLAP mode and group filtering in our v18.1 release cycle. 


Excel-Inspired Conditional Formatting

Conditional formatting allows you and your end-users to alter the appearance of individual data cells based on specific conditions - and highlight critical information, identify business trends and compare data points. The Pivot Grid's context menu provides a number of presets that allow users to create rules without formulas:


Below are some common usage scenarios...

Highlight values that are less than a specific threshold (4,000,000 in the example below):


Highlight best or worst values. Top 5 trademarks are highlighted in the image below:


Use Color Scales to quickly compare high and low values using their color representation.


When you use conditional formatting to show Data Bars, the Pivot Grid draws a bar in each cell whose width corresponds to the value of the cell relative to the other cells.


Finally, end-users can change rules in our Excel-inspired Rules Manager:


Please take a moment to try our newest WinForms Demos and tell us what you think about these Excel-inspired Pivot Grid features.

Using Azure to Store and Load DevExpress Reports Across All Supported Platforms

In this blog post we'll describe how you can store DevExpress Reports on Azure. As you'll soon discover, you can use this approach to create a shared report repository and make it available via simple Open/Save report commands. 

If you are currently using DevExpress Reports for .NET, you already know that we offer Report Viewers and Designers for ASP.NET, WinForms and WPF. The benefit of the implementation described herein is that regardless of target platform (Desktop or Web clients), end-users will have access to all the reports you store on Azure.

Those of you with no interest in storing reports on Azure might still find this example quite useful - as it's an excellent way to store your Report Gallery (predefined elements/reports) and share it with users.

Report Storage on Azure

Regardless of the usage scenario, our implementation is straightforward and based on the following:

  • The API used to manage Azure storage provided by the "WindowsAzure.Storage" NuGet package.
  • The storage extension engine in our Reporting platform.

I'll explain the basics in this article, but if you’re ready to get started and want to skip the explanation, download the sample published in our Knowledge Base.

Setting Up Azure Access

If you don't already have an Azure account, you'll want to get one setup using the following link:  

https://docs.microsoft.com/en-us/azure/storage/storage-create-storage-account

Once you've obtained login credentials, we recommend that you add them to app.config, as shown below. You’ll then transmit the connection string to method calls that register your custom extensions.

<appSettings>
  <add key="StorageConnectionString" 
 value="DefaultEndpointsProtocol=https;AccountName=ACCOUNT;AccountKey=KEY" />
</appSettings>

Create a Shared Azure Storage for Reports

Let’s start with the extension that creates a common Azure storage for reports accessed through Open/Save UI commands. First, you'll need to create a ReportStorageWebExtension descendant and implement methods that cover basic actions such as display the report list, obtain a specific report, save a report to storage. Here’s your class stub with comments.

 
public class MyReportStorageWebExtension : 
      DevExpress.XtraReports.Web.Extensions.ReportStorageWebExtension { 
    // use Microsoft Azure API 
  readonly Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer container; 
  public MyReportStorageWebExtension(string storageAccountConnectionString) { 
      // initialize your storage using the connection string 
  } 
 
  public override Dictionary GetUrls() { 
      // retrieve report collection 
  } 
  
  public override byte[] GetData(string url) { 
      // obtain a report identified by its URL 
  } 
  
  public override bool CanSetData(string url) { 
      // can a report be updated? 
  } 
  
  public override void SetData(XtraReport report, string url) { 
      // update the report 
  } 
  
  public override string SetNewData(XtraReport report, string defaultUrl) { 
      // save a new report 
  } 
} 

You'll then register this newly created extension so that it takes effect. In our ASP.NET sample, you see a call to a static method in the Application_Start() method in Global.asax.cs. In WinForms, put it inside the Main() method.

ReportStorageWebExtension.RegisterExtensionGlobal(
   new MyReportStorageWebExtension(
      ConfigurationManager.AppSettings["StorageConnectionString"]
   )
); 

Create a Shared Azure Storage for the Report Gallery

The report Gallery is one of the Tool Windows you’ll find in the End-User Report Designer. It lists report templates, re-usable blocks with a few controls grouped together, or commonly used styles you can apply to elements.

If you want all these to be stored in the same centralized Azure storage, the procedure is mostly the same. This time, you need a ReportGalleryExtension class descendant.

class CloudReportGalleryExtension :
       ReportGalleryExtension { 
    // use Microsoft Azure API 
    readonly Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer container; 
    public CloudReportGalleryExtension(string connectionString){ 
        // initialize storage container 
    } 
    public override void SaveGallery(Gallery gallery) { 
        // save gallery 
    } 
  
    public override bool TryLoadGallery(out Gallery gallery) { 
        // check if a gallery can be loaded 
    } 
  
    CloudBlockBlob LoadBlob() { 
        // load gallery contents 
    } 
} 

Use the following to register the class in the system:

ReportGalleryExtension.RegisterExtensionGlobal(
   ConfigurationManager.AppSettings["StorageConnectionString"]
); 

Try Our Sample

As mentioned, we've published a complete sample demonstrating implementation details. The downloadable solution contains both an ASP.NET and WinForms application. If you have your Azure Storage account set up, update the connection string settings in the project and run it to see how it works.

Please remember, while we chose to showcase Azure storage in this sample, our extension model allows you to implement any kind of cloud or non-cloud storage provided that you have the necessary API.

More Posts