<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Poline</title>
    <description>The latest articles on DEV Community by Poline (@guemja_lee).</description>
    <link>https://dev.to/guemja_lee</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1176647%2Fa54b51a4-e40c-4a1c-9fb0-a24f3838b5d4.jpg</url>
      <title>DEV Community: Poline</title>
      <link>https://dev.to/guemja_lee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/guemja_lee"/>
    <language>en</language>
    <item>
      <title>Create a Web API Application with our Office File API (Powered by the platform-agnostic DevExpress.Drawing Graphics Engine)</title>
      <dc:creator>Poline</dc:creator>
      <pubDate>Mon, 13 Nov 2023 11:20:34 +0000</pubDate>
      <link>https://dev.to/devexpress-technical/create-a-web-api-application-with-our-office-file-api-powered-by-the-platform-agnostic-devexpressdrawing-graphics-engine-1b58</link>
      <guid>https://dev.to/devexpress-technical/create-a-web-api-application-with-our-office-file-api-powered-by-the-platform-agnostic-devexpressdrawing-graphics-engine-1b58</guid>
      <description>&lt;p&gt;In our summer v23.1 major release, our new DevExpress Drawing graphics library was released to manufacturing (RTM). &lt;br&gt;
This new engine is available for the following DevExpress products:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.devexpress.com/products/net/office-file-api/" rel="noopener noreferrer"&gt;Office File API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.devexpress.com/subscriptions/reporting/" rel="noopener noreferrer"&gt;Reporting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.devexpress.com/products/net/dashboard/" rel="noopener noreferrer"&gt;BI Dashboard&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I am starting a new blog post series where I’ll describe how to use our cross-platform engine and maximize its full potential. In this particular blog post, I'll show you how to integrate &lt;a href="https://www.devexpress.com/products/net/office-file-api/" rel="noopener noreferrer"&gt;Office File API&lt;/a&gt; functionality in Web API applications. But first, let me give a brief explanation of what the DevExpress.Drawing library is.&lt;/p&gt;

&lt;h2&gt;
  
  
  DevExpress.Drawing Library: Backstory
&lt;/h2&gt;

&lt;p&gt;Microsoft attributed &lt;code&gt;System.Drawing.Common&lt;/code&gt; as a Windows-specific library in .NET 6 and higher: &lt;a href="https://docs.microsoft.com/en-us/dotnet/core/compatibility/core-libraries/6.0/system-drawing-common-windows-only" rel="noopener noreferrer"&gt;System.Drawing.Common only supported on Windows&lt;/a&gt;. This breaking change affected the DevExpress cross-platform products - components that use &lt;code&gt;System.Drawing.Common&lt;/code&gt; as a rendering/text measurement engine - including Reporting, Office File API and BI Dashboards.&lt;/p&gt;

&lt;p&gt;To address issues with the &lt;code&gt;System.Drawing.Common&lt;/code&gt; package, we introduced a new &lt;a href="https://docs.devexpress.com/CoreLibraries/404247/devexpress-drawing-library" rel="noopener noreferrer"&gt;DevExpress.Drawing&lt;/a&gt; assembly in our v22.1 release cycle. This assembly contains custom implementations of all &lt;code&gt;System.Drawing&lt;/code&gt; classes not supported for non-Windows systems. We made a series of enhancements during the 22.1 and 23.1 release cycles, and the library reached its final state in v23.1.&lt;/p&gt;

&lt;p&gt;DevExpress.Drawing is &lt;code&gt;gdiplus&lt;/code&gt;-independent and works on DevExpress primitives. This means that you can use supported components within applications that target different operating systems (Linux, macOS) and cloud services (Azure, AWS). Our internal test results demonstrate that the new engine works with the same efficiency as our previous GDI+ engine.&lt;/p&gt;

&lt;p&gt;Our new approach allows our cross-platform products to work as expected across all supported platforms/target frameworks. And this change has opened up numerous opportunities in other areas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Organize and Convert Files in a Web API Application
&lt;/h2&gt;

&lt;p&gt;Web API (Application Programming Interface) offers numerous benefits. Web API is platform-agnostic, which means it can be used across various devices and operating systems.&lt;/p&gt;

&lt;p&gt;Our Office File API suite allows you to organize Word, Excel, and PDF documents. Each library in the suite ships with a comprehensive set of features, such as PDF/HTML conversion, mail merge, digital signature support, etc.&lt;/p&gt;

&lt;p&gt;You can integrate our DevExpress Office File API into a Web API app and then consume available endpoints from frontend apps built using any programming language. This increases reach and allows you to introduce Excel, Word, and PDF-related document management functionality across platforms.&lt;/p&gt;

&lt;p&gt;To help illustrate what's possible, I created an Office File API in Web API apps sample solution. Please refer to the following link for more information: &lt;a href="https://github.com/DevExpress-Examples/office-file-api-in-web-api-app" rel="noopener noreferrer"&gt;Office File API - Use DevExpress Office File API Libraries (at the backend) for your Web-API Applications&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; You need to purchase a license to use the DevExpress Office File API in production code (either the &lt;a href="https://www.devexpress.com/products/net/office-file-api/" rel="noopener noreferrer"&gt;DevExpress Office File API Subscription&lt;/a&gt; or &lt;a href="https://www.devexpress.com/subscriptions/universal.xml" rel="noopener noreferrer"&gt;DevExpress Universal Subscription&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;My example uses Swagger UI, but you can change the client-side implementation to suit your specific requirements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8khxwaa84d0c0o52scw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8khxwaa84d0c0o52scw.png" alt="web api main view"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The project contains a set of endpoints for the popular tasks you can address when using the DevExpress Office File API. These pre-built functions and services accelerate the development process so you can focus on the unique aspects of your application rather than building everything from scratch.&lt;/p&gt;

&lt;p&gt;Let’s take a look at document conversion and organization (merge and split documents) as an example.&lt;/p&gt;

&lt;h3&gt;
  
  
  Convert Documents
&lt;/h3&gt;

&lt;p&gt;We prepared conversion endpoints to Word and Excel files. The web request allows you to load a file (file format is detected automatically). The drop-down menu displays available conversion formats.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9jvidygbwmog1pic88r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk9jvidygbwmog1pic88r.png" alt="web api conversion"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can download the result (after successful conversion) in the &lt;strong&gt;Response&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpojavpnd0ll4kodrqp4a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpojavpnd0ll4kodrqp4a.png" alt="web api result"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Merge and Split Files
&lt;/h3&gt;

&lt;p&gt;The merge and split endpoints are available for Word, Excel, and PDF files. Load files to merge and select the format of the resulting file. Download the result in the &lt;strong&gt;Response&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g9bhwpx2pqxa9kijoxh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g9bhwpx2pqxa9kijoxh.png" alt="web api merge"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As for splitting, the web request splits the loaded file page-by-page and exports results to a zip file with documents in the selected format.&lt;/p&gt;

&lt;p&gt;The endpoints described herein illustrate the basic implementation of conversion, split, and merge operations. You can download and modify the project based on specific requirements. Refer to the following articles for additional information in this regard:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.devexpress.com/OfficeFileAPI/17488/word-processing-document-api" rel="noopener noreferrer"&gt;Word Processing Document API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.devexpress.com/OfficeFileAPI/14912/spreadsheet-document-api" rel="noopener noreferrer"&gt;Spreadsheet Document API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.devexpress.com/OfficeFileAPI/16491/pdf-document-api" rel="noopener noreferrer"&gt;PDF Document API&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devexpress</category>
      <category>webapi</category>
      <category>documentprocessing</category>
      <category>officefileapi</category>
    </item>
    <item>
      <title>Reporting — Create and Modify DevExpress Reports in Visual Studio Code (VS Code) on macOS and Linux (CTP)</title>
      <dc:creator>Poline</dc:creator>
      <pubDate>Tue, 07 Nov 2023 08:07:04 +0000</pubDate>
      <link>https://dev.to/devexpress-technical/reporting-create-and-modify-devexpress-reports-in-visual-studio-code-vs-code-on-macos-and-linux-ctp-320j</link>
      <guid>https://dev.to/devexpress-technical/reporting-create-and-modify-devexpress-reports-in-visual-studio-code-vs-code-on-macos-and-linux-ctp-320j</guid>
      <description>&lt;p&gt;DevExpress Reports — our cross-platform reporting suite — allows you to generate report documents in applications targeting any .NET-based platform, deployable on any supported operating system. Over the past few months, we've focused on enhancing the report generation process within multiple environments, while maintaining independence from the host operating system itself. Before we dig into specifics, a word or two about Visual Studio Code and why chose it over available alternatives.&lt;/p&gt;

&lt;p&gt;For the past three years, Visual Studio Code (VS Code) has consistently held the top spot as the preferred IDE among members of the global developer community (this conclusion is based on Stack Overflow developer surveys). Wide adoption was one reason we chose to target VS Code. Another was Microsoft's recent announcement regarding &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-for-mac-retirement-announcement/"&gt;Visual Studio for Mac&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The DevExpress Visual Studio Code Report Designer Extension
&lt;/h2&gt;

&lt;p&gt;As its name implies, &lt;a href="https://marketplace.visualstudio.com/items?itemName=DevExpress.devexpress-report-designer-ex"&gt;our VS Code Report Designer extension&lt;/a&gt; allows you to create and edit DevExpress Report documents within the Visual Studio Code IDE. In this blog post, I'll guide you through the setup process on macOS and illustrate how you can leverage the extension's capabilities to develop and modify existing reports.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WbZ78-Vt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pomb8nrafttrngsxaeev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WbZ78-Vt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pomb8nrafttrngsxaeev.png" alt="vs extension" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The current DevExpress VS Code Extension is available as a Community Technology Preview (CTP). The primary goal for this release cycle is to gather feedback and refine our long-term development strategies. We've included a short survey at the end of this blog post. If cross-platform development is of importance to you, please take a moment to complete the survey and help us shape the future of our VS Code Extension. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Technology Underlying our VS Code Extension
&lt;/h2&gt;

&lt;p&gt;If you've incorporated DevExpress Reporting tools within a web app in the past, you will recognize similarities between the DevExpress Web Report Designer and our VS Code Extension. &lt;/p&gt;

&lt;p&gt;Our Web Report Designer is implemented using JavaScript, with server-side logic executed in .NET. We integrated this designer into Visual Studio Code, allowing the backend to quietly run when you open a workspace with the backend config file. When you double-click a &lt;code&gt;*.REPX (Report Template File)&lt;/code&gt;, a new IDE dock panel renders the web page with the Report Designer. This implementation is based on .NET 7 and leverages our &lt;a href="https://docs.devexpress.com/CoreLibraries/404247/devexpress-drawing-library"&gt;Skia-based cross-platform drawing engine&lt;/a&gt; (allowing you to preview report documents within the IDE itself).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0dpTtVYM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j89e3m8gfu7gptuggvyj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0dpTtVYM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j89e3m8gfu7gptuggvyj.png" alt="preview opened from vs code extension" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Here's what you'll need to execute the DevExpress VS Code Report Designer on your machine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp"&gt;C# VSCode Extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.vscode-dotnet-runtime"&gt;.NET Runtime Install Tool VSCode Extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dotnet.microsoft.com/en-us/download"&gt;.NET 7 SDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.devexpress.com/GeneralInformation/116042/installation/install-devexpress-controls-using-nuget-packages/obtain-your-nuget-feed-credentials"&gt;DevExpress NuGet Feed API Key (Licensed or Trial)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=DevExpress.devexpress-report-designer-ex"&gt;DevExpress VSCode Report Designer Extension&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the following sections of this article, I will use Docker to showcase runtime results. We offer various pre-configured Dockerfiles in the form of a sample project: &lt;a href="https://github.com/DevExpress-Examples/reporting-use-devexpress-drawing-skia-engine"&gt;How to Use the SkiaSharp-Based DevExpress Drawing Engine&lt;/a&gt;. We created these Dockerfiles to address potential challenges in both development and deployment processes. The Docker container created from these files installs all necessary native libraries during initialization.&lt;/p&gt;

&lt;p&gt;To display document print preview in VS Code, or if developing/executing reports on macOS/Linux locally, make certain to install all native dependencies on your development machine (on macOS, you must use &lt;code&gt;homebrew&lt;/code&gt; for this purpose):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;libicu&lt;/li&gt;
&lt;li&gt;libc&lt;/li&gt;
&lt;li&gt;fontconfit&lt;/li&gt;
&lt;li&gt;libjpeg&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Please refer to the &lt;a href="https://docs.devexpress.com/XtraReports/404221/dot-net-and-net-core-support/use-reporting-on-linux#enable-the-drawing-engine"&gt;Enable the Drawing Engine&lt;/a&gt; help topic for additional information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set Up
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Download the Extension and Specify Relevant Settings
&lt;/h3&gt;

&lt;p&gt;Once you've confirmed that your machine meets all prerequisites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search for the extension within the Visual Studio Code extensions tab to install it:
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2bcxX02F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y241zlyeg5s4z2af1ing.png" alt="install extension from search" width="800" height="254"&gt;
&lt;/li&gt;
&lt;li&gt;Or download the &lt;em&gt;*.VSIX file&lt;/em&gt; for the &lt;strong&gt;DevExpress VS Code Report Designer Extension&lt;/strong&gt; using the following Visual Studio Code Marketplace link: &lt;a href="https://marketplace.visualstudio.com/items?itemName=DevExpress.devexpress-report-designer-ex"&gt;Download DevExpress VS Code Report Designer Extension&lt;/a&gt;. Once you've obtained the file, open VS Code and navigate to the extensions tab. Click the end-ellipsis icon to display its context menu, and select "Install from VSIX...":
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qqDz4h0M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i2giwbtq63ed7wt2wt8b.png" alt="install extension from vsix" width="800" height="391"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you install the extension, click the gear icon in the bottom-right corner to modify settings:&lt;br&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ClGWUeTA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oual1d6p7bf4f5z6igu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ClGWUeTA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oual1d6p7bf4f5z6igu1.png" alt="specify extension settings" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter your &lt;a href="https://docs.devexpress.com/GeneralInformation/116042/installation/install-devexpress-controls-using-nuget-packages/obtain-your-nuget-feed-credentials"&gt;DevExpress NuGet feed API key&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Select the Report Designer visual theme (view the list of available themes here: &lt;a href="https://docs.devexpress.com/XtraReports/403924/web-reporting/asp-net-core-reporting/themes-and-styles"&gt;Themes and Styles&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Leave the default value for the &lt;code&gt;Version&lt;/code&gt; setting.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Prepare the Environment
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can use your own sample project or open an empty folder in Visual Studio Code to test functionality.&lt;/p&gt;

&lt;p&gt;I will utilize the following GitHub repository for demonstration purposes: &lt;a href="https://github.com/DevExpress-Examples/reporting-use-devexpress-drawing-skia-engine"&gt;How to Use the SkiaSharp-Based DevExpress Drawing Engine&lt;/a&gt;. To follow the steps in this article, hit &lt;strong&gt;F1&lt;/strong&gt;, enter &lt;code&gt;git clone&lt;/code&gt;, and provide VS Code with the repository URL to clone it to your machine. Once the directory (with the sample project) opens up in Visual Studio Code, add the new &lt;code&gt;reporting.config.json&lt;/code&gt; file to it or generate this file using the &lt;code&gt;DX Reporting: Start Designer VS Code&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HzDcqC_S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wgoejxiimyragnjsylhj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HzDcqC_S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wgoejxiimyragnjsylhj.png" alt="designer directory concepts" width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The extension reads the contents of this file before the backend process starts. Refer to the list of supported Report Designer settings below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;DataBindingMode&lt;/code&gt; (Expressions | DataBindings | ExpressionsAdvanced) — Sets up Report Designer data binding mode.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SqlConnectionStrings&lt;/code&gt; — Defines the collection of available SQL-based data sources. Make certain to use the XpoProvider prefix within the connection string. Refer to our &lt;a href="https://docs.devexpress.com/XPO/2114/product-information/database-systems-supported-by-xpo"&gt;Database Systems&lt;/a&gt; help topic for additional information in this regard.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;JsonConnectionStrings&lt;/code&gt; — Defines the collection of available JSON data sources.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ReportsDirectory&lt;/code&gt; — Stores a path to the directory with report templates.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ReportUrlsMap&lt;/code&gt; — Stores a collection of report names associated with report template files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A sample config file will look as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "DataBindingMode": "Expressions",
    "SqlConnectionStrings":{
        "Northwind_Connection": "XpoProvider=MSSqlServer;...."
    },
    "JsonConnectionStrings":{
        "Nwind JSON Data": "Uri=nwind.json",
        "Dummy 100 Users": "Uri=https://dummyjson.com/users/"
    },
    "ReportsDirectory" : "PredefinedReports",
    "ReportUrlsMap":{
        "Report1": "Report1.repx",
        "newReport": "newReport.repx"
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you add the file to the opened directory, re-open VS Code to initialize the Report Designer extension OR manually call the &lt;code&gt;DX Reporting: Start Designer&lt;/code&gt; command. The IDE will notify you about Report Designer initialization:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--w1V7tD72--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3pkwe8l61hszis3k5bz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--w1V7tD72--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l3pkwe8l61hszis3k5bz.png" alt="report extension notifications" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a New DevExpress Report
&lt;/h3&gt;

&lt;p&gt;At this point, we are ready to add a new report to the sample project. The extension adds a new &lt;code&gt;DX Reporting: New Report&lt;/code&gt; command to Visual Studio Code. Simply press &lt;strong&gt;F1&lt;/strong&gt; once again to use this command and specify a new report name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oUQ92rw---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kooju1p74zuydryx2lr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oUQ92rw---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kooju1p74zuydryx2lr.gif" alt="report commands" width="800" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;VS Code will automatically open the newly created report and render the DevExpress Report Designer with a blank report:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tW-FJaEi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k7px7iv89w8stir22v6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tW-FJaEi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k7px7iv89w8stir22v6j.png" alt="opened report designer" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this stage, we can add a data source to this report and design it using our built-in Report Wizard. We will select the data source tab on the right, and then click the "Add Data Source" button to invoke the Data Source Wizard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WGNPflHq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ju3e0p6uz1ank1e7femw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WGNPflHq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ju3e0p6uz1ank1e7femw.png" alt="add data source" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For purposes of this example, we'll use a sample "Dummy 100 Users" JSON data source I set up earlier in the &lt;code&gt;reporting.config.file&lt;/code&gt;. We'll select the available data source and click "Finish" to complete this operation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hBlctKb2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y1xznj8vizdxxs3n0xrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hBlctKb2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y1xznj8vizdxxs3n0xrq.png" alt="vs code report designer wizard" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we'll navigate to the Report Designer main menu and select &lt;strong&gt;Design in Report Wizard...&lt;/strong&gt; from the menu to start the Report Wizard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SlqzWfNY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y6xi2qnwgs594x3geyt0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SlqzWfNY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y6xi2qnwgs594x3geyt0.png" alt="report design in wizard" width="800" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll follow wizard prompts to finish the report generation process. If you are following this post, please make certain to save the report template file using the "Save" shortcut (&lt;strong&gt;Command+ S&lt;/strong&gt; in macOS). When you do, you should see the following on-screen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_IksvsQc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/suoz90iylzdz2k0mw0y3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_IksvsQc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/suoz90iylzdz2k0mw0y3.png" alt="after wizard" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To view results, we simply need to press the "Preview" button. As you would expect, you can print and export the report document from the built-in print preview window:&lt;/p&gt;

&lt;p&gt;To view results, we simply need to press the &lt;strong&gt;Preview&lt;/strong&gt; button. As you would expect, you can print and export the report document from the built-in print preview window:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0pJx3RQn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rusfgg9zgeolfybtavfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0pJx3RQn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rusfgg9zgeolfybtavfz.png" alt="report designer preview" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Run the Sample App
&lt;/h3&gt;

&lt;p&gt;At this stage, we must modify a few project code files to load this report layout to the &lt;code&gt;XtraReport&lt;/code&gt; class at runtime. First, we must move the &lt;em&gt;"newReport.repx"&lt;/em&gt; file to the &lt;code&gt;PredefinedReports&lt;/code&gt; directory. Once complete, we'll need to make the following changes:&lt;/p&gt;

&lt;h4&gt;
  
  
  HomeController.cs -&amp;gt; Viewer method
&lt;/h4&gt;

&lt;p&gt;Change the name of the report being opened in the Document Viewer to &lt;code&gt;newReport&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public IActionResult Viewer([FromServices] IWebDocumentViewerClientSideModelGenerator clientSideModelGenerator,
[FromQuery] string reportName) {

    var reportToOpen = string.IsNullOrEmpty(reportName) ? "newReport" : reportName;
    var model = new Models.ViewerModel {
    ViewerModelToBind = clientSideModelGenerator.GetModel(reportToOpen, WebDocumentViewerController.DefaultUri)
};
    return View(model);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ReportsFactory.cs
&lt;/h4&gt;

&lt;p&gt;Replace the code as follows to load the report template from the PredefinedReports directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public static class ReportsFactory
{
    public static string ReportsPath { get; set; }
    public static Dictionary&amp;lt;string, Func&amp;lt;XtraReport&amp;gt;&amp;gt; Reports = new Dictionary&amp;lt;string, Func&amp;lt;XtraReport&amp;gt;&amp;gt;()
    {
        ["TestReport"] = () =&amp;gt; new TestReport(),
        ["newReport"] = () =&amp;gt; XtraReport.FromFile(Path.Combine(ReportsPath + "/PredefinedReports/newReport.repx"))
    };

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Startup.cs
&lt;/h4&gt;

&lt;p&gt;Modify the class constructor to pass the &lt;code&gt;IWebEnvironment.ContnetRootPath&lt;/code&gt; variable to the &lt;code&gt;ReportsFactory&lt;/code&gt; class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;public Startup(IConfiguration configuration, IWebHostEnvironment environment) {
    Configuration = configuration;
    ReportsFactory.ReportsPath = environment.ContentRootPath;
    AppDomain.CurrentDomain.SetData("DataDirectory", environment.ContentRootPath);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ReportDbContext.cs -&amp;gt; InitializeDatabase method
&lt;/h4&gt;

&lt;p&gt;Add the JSON data source to the collection of data sources registered in the application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
var Dummy100UsersConnectionName = "Dummy 100 Users";
if(!JsonDataConnections.Any(x =&amp;gt; x.Name == Dummy100UsersConnectionName)) {
    var newData = new JsonDataConnectionDescription {
        Name = Dummy100UsersConnectionName,
        DisplayName = "Dummy 100 Users",
        ConnectionString = "Uri=https://dummyjson.com/users/"
    };
    JsonDataConnections.Add(newData);
}
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we'll need to make certain that the report template file is copied to the application output directory each time we build the application. To accomplish this, we'll need to add the following to the &lt;em&gt;"*.csproj"&lt;/em&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;ItemGroup&amp;gt;
    &amp;lt;None Remove="PredefinedReports\*.repx" /&amp;gt;
  &amp;lt;/ItemGroup&amp;gt;
  &amp;lt;ItemGroup&amp;gt;
    &amp;lt;Content Include="PredefinedReports\newReport.repx"&amp;gt;
      &amp;lt;CopyToOutputDirectory&amp;gt;PreserveNewest&amp;lt;/CopyToOutputDirectory&amp;gt;
    &amp;lt;/Content&amp;gt;
  &amp;lt;/ItemGroup&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With these modifications, we can switch to the terminal window within VS Code and run our Docker container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export DX_NUGET=https://nuget.devexpress.com/Your_API_Token/api
DOCKER_BUILDKIT=1 docker build -t reporting-app --secret id=dxnuget,env=DX_NUGET .
docker run -p 8080:80 reporting-app:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application page will be available at the following URL: &lt;a href="http://localhost:8080/"&gt;http://localhost:8080/&lt;/a&gt;. Click the "Document Viewer" link at the top to display a print preview of the report we just created in Visual Studio Code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qiBM8Ix2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bb78eihwa3g005asttuc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qiBM8Ix2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bb78eihwa3g005asttuc.png" alt="final preview run on docker" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>devexpress</category>
      <category>reports</category>
      <category>vscode</category>
    </item>
  </channel>
</rss>
