GrapeCity ActiveReports for .NET 16.0J
Angularアプリケーションへの組み込み
ActiveReportsユーザーガイド > 概念 > ActiveReports Webデザイナ > Angularアプリケーションへの組み込み

このトピックでは、AngularアプリケーションにWebデザイナコンポーネントを組み込む方法について説明します。Angularアプリケーションサーバーを実行するには、NodeJSが必要です。

  1. Visual Studio 2022を開き、「Angular でのASP.NET Core」テンプレートを選択して、新しいプロジェクトを追加します。

    Create a New Project Dialog

  2. プロジェクト名を入力し、[次へ]をクリックします。

    Configure your New Project Dialog

  3. フレームワークとして「.NET 6.0(長期的なサポート)」を選択し、「HTTPS 用の構成」のチェックボックスを外します。
          

    Create a New Project Dialog

  4.  [ソリューションエクスプローラー]で、ソリューションを右クリックし、[NuGet パッケージの管理]を選択します。
  5. 次のパッケージをプロジェクトに追加します。

    GrapeCity.ActiveReports.Aspnetcore.Designer.ja
    GrapeCity.ActiveReports.Aspnetcore.Viewer.ja

  6. プロジェクトフォルダ内に[resources]フォルダを作成します。 [resources] フォルダに、既存のレポート、テーマ、画像を保存できます。

  7. レポートの[ビルドアクション]プロパティが「埋め込みリソース」に設定されていることを確認します。

  8. Program.csファイルを開き、上部に次のusingステートメントを追加し、[resources] フォルダを指定してコンテナにサービスを追加します。

    Program.cs
    コードのコピー
    using GrapeCity.ActiveReports.Aspnetcore.Designer;
    using GrapeCity.ActiveReports.Aspnetcore.Viewer;
    using System.IO;
    // リソース(レポート、テーマ、画像)の場所
    var ResourcesRootDirectory = new DirectoryInfo(".\\resources\\");
    var builder = WebApplication.CreateBuilder(args);
    // コンテナにサービスを追加します。
    builder.Services.AddControllersWithViews();
    builder.Services
         .AddReporting()
         .AddDesigner()
         .AddMvc(options => options.EnableEndpointRouting = false)
         .AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null);
    var app = builder.Build();
    // HTTP要求パイプラインを構成します。
    if (!app.Environment.IsDevelopment())
    {
        // HSTSの既定値は30日です。本番シナリオでは変更することをお勧めします。詳細については、「https://aka.ms/aspnetcore-hsts」を参照してください。
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseReporting(config => config.UseFileStore(ResourcesRootDirectory));
    app.UseDesigner(config => config.UseFileStore(ResourcesRootDirectory, false));
    app.UseStaticFiles();
    app.UseRouting();
    
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller}/{action=Index}/{id?}");
    app.MapFallbackToFile("index.html"); ;
    app.Run();
    
  9. ClientAppフォルダを展開します。

  10. package.jsonファイルを開き、「dependencies」の下にActiveReportsのビューワおよびデザイナの次のパッケージを追加します。

    "@grapecity/ar-designer": "^16.x.x",
    "@grapecity/ar-viewer": "^16.x.x",
    "ncp": "^2.0.0"

  11. package.jsonファイルのscriptsセクションを、次の内容に置き換えます。
    package.json
    コードのコピー
      "scripts": {
        "deploy-bundles": "ncp ./node_modules/@grapecity/ar-viewer/dist ./src/assets && ncp ./node_modules/@grapecity/ar-designer/dist ./src/assets",
        "ng": "ng",
        "start": "run-script-os",
        "start:windows": "ng serve --port 44494 --ssl --ssl-cert %APPDATA%\\ASP.NET\\https\\%npm_package_name%.pem --ssl-key %APPDATA%\\ASP.NET\\https\\%npm_package_name%.key",
        "start:default": "ng serve --port 44494 --ssl --ssl-cert $HOME/.aspnet/https${npm_package_name}.pem --ssl-key $HOME/.aspnet/https${npm_package_name}.key",
        "build": "npm run deploy-bundles && ng build",
        "build:ssr": "ng run WebDesigner_Angular:server:dev",
        "watch": "ng build --watch --configuration development",
        "test": "ng test"
      },
    

    上記のコードでは、アプリケーション名を独自のアプリケーション名に置き換える必要があります。

  12. コマンドプロンプトでClientAppフォルダを開き、次のコマンドを実行してnpmパッケージをインストールします。

     

    npm install

           

    WebデザイナとjsViewerに関するファイルとフォルダは、現在のディレクトリにダウンロードされます。".\node_modules\@grapecity\ar-designer\dist"、".\node_modules\@grapecity\ar-viewer\dist"

  13. デザイナに関する次のファイル/フォルダをコピーし、ClientApp\srcフォルダ内の「assets」フォルダに貼り付けます。

    • web-designer.css

    • web-designer.js

    • vendor フォルダ

    • jsViewer.min.css

    • jsViewer.min.js

    • custom-locale.json

  14. ClientApp\srcフォルダ内のappフォルダを展開します。
  15. app.component.tsファイルを開き、そのコードを次のコードに置き換えて、デザイナのインスタンスを初期化します。

    app.component.ts
    コードのコピー
    import { Component, ViewChild, ElementRef, OnInit } from '@angular/core';
    import { ActivatedRoute } from '@angular/router';
    declare var GrapeCity: any;
    declare var $: any;
    @Component({
      selector: 'app-root',
      templateUrl: './app.component.html'
    })
    export class AppComponent {
      title = 'app';
      private viewer: any;
      constructor(private route: ActivatedRoute) {} 
      ngOnInit() {
        GrapeCity.ActiveReports.Designer.create('#ar-web-designer', {
          appBar: { openButton: { visible: true } },
          editor: { showGrid: false },
          data: { dataSets: { canModify: true }, dataSources: { canModify: true } },
          preview: {
            openViewer: (options: any) => {
              if (this.viewer) {
                this.viewer.openReport(options.documentInfo.id);
                return;
              }
              this.viewer = GrapeCity.ActiveReports.JSViewer.create({
                element: '#' + options.element,
                renderFormat: 'svg',
                reportService: {
                  url: 'api/reporting',
                },
                reportID: options.documentInfo.id,
                settings: {
                  zoomType: 'FitPage',
                },
              });
            }
          }
        });
      }
      ngOnDestroy() {
        this.viewer.destroy();
      }
    }
    
  16. app.component.htmlファイルを開き、その内容を次の内容に置き換えて、要素をホストします。

    app.component.html
    コードのコピー
    <body>
      <div id="ar-web-designer" class="ar-web-designer">
        <span class="ar-web-designer__loader"><b>ActiveReports Webデザイナ</b></span>
      </div>
    </body>
    
  17. ClientApp\srcフォルダ内のindex.htmlを選択し、内容を次のように変更します。

    index.html
    コードのコピー
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8" />
      <title>WebDesigner_Angular</title>
      <base href="/" />
      <link rel="stylesheet" href="assets/vendor/css/fonts-googleapis.css" type="text/css" />
      <link rel="stylesheet" href="assets/jsViewer.min.css" type="text/css" />
      <link rel="stylesheet" href="assets/web-designer.css" type="text/css" />
      <meta name="viewport" content="width=device-width, initial-scale=1" />
      <link rel="icon" type="image/x-icon" href="favicon.ico" />
    </head>
    <body>
      <script src="assets/jsViewer.min.js"></script>
      <script src="assets/web-designer.js"></script>
      <app-root>Loading...</app-root>
    </body>
    </html>
    
  18. プロジェクトの.csprojファイルを開き、次のセクションを追加します。

    .csproj
    コードのコピー
      <Target Name="ClientBuild" BeforeTargets="BeforeBuild">
           <Exec WorkingDirectory="ClientApp" Command="npm install" />
           <Exec WorkingDirectory="ClientApp" Command="npm run deploy-bundles" />
      </Target>
    
  19. ClientApp\proxy.conf.jsファイルを開き、コードの「context」セクションを次のように更新します。

    proxy.conf.js
    コードのコピー
    context: [
          "/weatherforecast",
          "/api"
       ],
    
  20. アプリケーションのルートに新しい項目「Web 構成ファイル」ファイルを追加し、その内容を次のコードに置き換えます。

    web.config
    コードのコピー
    <configuration>
      <system.webServer>
        <security>
          <requestFiltering allowDoubleEscaping="true"/>
        </security>
      </system.webServer>
    </configuration>
    
  21. [ビルド] > [ソリューションのビルド]をクリックして、ソリューションをビルドします。F5を押して実行します。