製品をチェック

製品の情報と30日間無償トライアル

HubDB 連携ソリューション 相談したい

SAPUI5 MVC Apps のHubDB にリアルタイム連携を実現

SAPUI5 でビルトインODataModel を使い、HubDB への変更をリアルタイムで反映するWeb アプリを作成します。

古川えりか
コンテンツスペシャリスト

最終更新日:2022-12-09
hubdb ロゴ

CData

apiserver ロゴ画像
SAP UI5 ロゴ

こんにちは!ドライバー周りのヘルプドキュメントを担当している古川です。

この記事では、バックエンドデータベースに書き込むことなくHubDB API の機能を活用するSAPUI5 アプリを作成するために、CData API サーバーおよびADO.NET Provider for HubDB (または240+ の他のADO.NET Providers) を使用する方法を説明します。API サーバーは、サーバー上で実行されてHubDB のOData フィードを生成する軽量のWeb アプリケーションです。OData は、Web を介したリアルタイムデータアクセスの標準であり、SAPUI5 およびOpenUI5 にビルトインのサポートがあります。

API サーバーをセットアップ

以下のステップに従って、安全なHubDB OData サービスの作成を開始します。

デプロイ

API サーバーは独自のサーバーで実行されます。Windows では、スタンドアロンサーバーまたはIIS を使用して展開できます。Java サーブレットコンテナで、API Server WAR ファイルをドロップします。詳細とハウツーについては、ヘルプドキュメントを参照してください。

API Server は、Microsoft AzureAmazon EC2Heroku にも簡単にデプロイできます。

HubDB に接続

API サーバーとADO.NET Provider for HubDB を展開した後、[Settings]->[Connections]をクリックし、API サーバー管理コンソールで新しい接続を追加してHubDB に接続するために必要な認証値とその他の接続プロパティを指定します。

HubDBデータソースへの接続には、パブリックHubSpotアプリケーションを使用したOAuth認証とプライベートアプリケーショントークンを使用した認証の2つの方法があります。

カスタムOAuthアプリを使用する

すべてのOAuthフローでAuthSchemeを"OAuth"に設定する必要があります。特定の認証ニーズ(デスクトップアプリケーション、Webアプリケーション、ヘッドレスマシン)に必要な接続プロパティについては、ヘルプドキュメントを確認してください。

アプリケーションを登録し、OAuthクライアント認証情報を取得するには、以下の手順を実行してください。

  1. HubSpotアプリ開発者アカウントにログインします。
    • アプリ開発者アカウントである必要があります。標準のHubSpotアカウントではパブリックアプリを作成できません。
  2. 開発者アカウントのホームページで、アプリタブをクリックします。
  3. アプリを作成をクリックします。
  4. アプリ情報タブで、ユーザーが接続する際に表示される値を入力し、必要に応じて変更します。これらの値には、パブリックアプリケーション名、アプリケーションロゴ、アプリケーションの説明が含まれます。
  5. 認証タブで、「リダイレクトURL」ボックスにコールバックURLを入力します。
    • デスクトップアプリケーションを作成する場合は、http://localhost:33333のようなローカルにアクセス可能なURLに設定します。
    • Webアプリケーションを作成する場合は、ユーザーがアプリケーションを承認した際にリダイレクトされる信頼できるURLに設定します。
  6. アプリを作成をクリックします。HubSpotがアプリケーションとそれに関連する認証情報を生成します。
  7. 認証タブで、クライアントIDクライアントシークレットを確認します。これらは後でドライバーを設定する際に使用します。
  8. スコープの下で、アプリケーションの意図する機能に必要なスコープを選択します。

    テーブルにアクセスするには、最低限以下のスコープが必要です:

    • hubdb
    • oauth
    • crm.objects.owners.read
  9. 変更を保存をクリックします。
  10. 統合に必要な機能にアクセスできる本番ポータルにアプリケーションをインストールします。
    • 「インストールURL(OAuth)」の下で、完全なURLをコピーをクリックして、アプリケーションのインストールURLをコピーします。
    • コピーしたリンクをブラウザで開きます。アプリケーションをインストールする標準アカウントを選択します。
    • アプリを接続をクリックします。結果のタブは閉じて構いません。

プライベートアプリを使用する

HubSpotプライベートアプリケーショントークンを使用して接続するには、AuthSchemeプロパティを"PrivateApp"に設定します。

以下の手順に従ってプライベートアプリケーショントークンを生成できます:

  1. HubDBアカウントで、メインナビゲーションバーの設定アイコン(歯車)をクリックします。
  2. 左サイドバーメニューで、統合 > プライベートアプリに移動します。
  3. プライベートアプリを作成をクリックします。
  4. 基本情報タブで、アプリケーションの詳細(名前、ロゴ、説明)を設定します。
  5. スコープタブで、プライベートアプリケーションがアクセスできるようにしたい各スコープに対して読み取りまたは書き込みを選択します。
  6. テーブルにアクセスするには、最低限hubdbとcrm.objects.owners.readが必要です。
  7. アプリケーションの設定が完了したら、右上のアプリを作成をクリックします。
  8. アプリケーションのアクセストークンに関する情報を確認し、作成を続行をクリックし、その後トークンを表示をクリックします。
  9. コピーをクリックして、プライベートアプリケーショントークンをコピーします。

接続するには、PrivateAppTokenを取得したプライベートアプリケーショントークンに設定します。

次に、[Settings]->[Resources]をクリックして、API サーバーへのアクセスを許可するHubDB エンティティを選択できます。この記事では、例としてNorthwindProducts を用います。

API サーバーユーザーを承認

作成するOData サービスを決定したら、[Settings]->[Users]をクリックしてユーザーを承認します。API サーバーは、認証トークンベースの認証を使用して主要な認証スキームをサポートします。SSL を使用して、接続を認証及び暗号化することができます。アクセスはIP アドレスによって制限することもできます。デフォルトでは、ローカルマシンのみに制限されています。

ビューの作成

この記事では、ユーザーはSAPUI5 テーブルコントロールを介してHubDB を表示および操作します。テーブルのカラムは、API サーバーのAPI エンドポイントから取得したメタデータから自動的に検出されます。次のテーブルを別のView.view.xml ファイルで定義します。


<mvc:View
  controllerName="sap.ui.table.sample.OData2.Controller"
  xmlns="sap.ui.table"
  xmlns:mvc="sap.ui.core.mvc"
  xmlns:u="sap.ui.unified"
  xmlns:c="sap.ui.core"
  xmlns:m="sap.m">
  <m:Page
    showHeader="false"
    enableScrolling="false"
    class="sapUiContentPadding">
    <m:content>
      <Table
        id="table"
        selectionMode="MultiToggle"
        visibleRowCount="10"
        enableSelectAll="false"
        rows="{/NorthwindProducts}"
        threshold="15"
        enableBusyIndicator="true"
        columns="{
          path: 'meta>/dataServices/schema/[${namespace}===\'CData\']/entityType/[${name}===\'NorthwindProducts\']/property',
          factory: '.columnFactory'
        }">
        <toolbar>
          <m:Toolbar>
            <m:Title text="HubDB NorthwindProducts"></m:Title>
          </m:Toolbar>
        </toolbar>
        <noData>
          <m:BusyIndicator class="sapUiMediumMargin"/>
        </noData>
      </Table>
    </m:content>
  </m:Page>
</mvc:View>

モデルとコントローラーの作成

SAPUI5 では、OData クエリを作成する必要はありません。ODataModel インスタンスはアプリケーションのデータアクセスコマンドを処理します。 次に、API サーバーはクエリをHubDB API 呼び出しに変換します。

コントローラーはユーザー入力を処理し、ビューを通じてユーザーに情報を表示します。新しいファイルであるController.controller.js でコントローラーを定義します。onInit 関数でモデルをインスタンス化します。API サーバーへのURL、API サーバーのOData エンドポイントへのアクセスを許可されたユーザー、そしてユーザーの認証トークンのプレースホルダー値を置き換える必要があります。

sap.ui.define([
  "sap/ui/core/mvc/Controller",
  "sap/ui/model/odata/v2/ODataModel",
  "sap/ui/model/json/JSONModel",
  "sap/ui/table/Column",
  "sap/m/Text",
], function(Controller, ODataModel, JSONModel, Column, Text ) {
  "use strict";
  

  return Controller.extend("sap.ui.table.sample.OData2.Controller", {
    
    onInit : function () {
      
      var oView = this.getView();
      var oDataModel = new ODataModel("http://myserver/api.rsc/",{user:"MyUser", password:"MyAuthToken"});
      
      oDataModel.getMetaModel().loaded().then(function(){
        oView.setModel(oDataModel.getMetaModel(), "meta");
      });
      oView.setModel(oDataModel);
      
      var oTable = oView.byId("table");
      var oBinding = oTable.getBinding("rows");
      var oBusyIndicator = oTable.getNoData();
      oBinding.attachDataRequested(function(){
      oTable.setNoData(oBusyIndicator);
      });
      oBinding.attachDataReceived(function(){
        oTable.setNoData(null); //use default again ("no data" in case no data is available)
      });
    },
    
    onExit : function () {
    },
    
    columnFactory : function(sId, oContext) {
      var oModel = this.getView().getModel();
      var sName = oContext.getProperty("name");
      var sType = oContext.getProperty("type");
      var iLen = oContext.getProperty("maxLength");
      iLen = iLen ? parseInt(iLen, 10) :10;
      
      return new Column(sId, {
        sortProperty: sName, 
        filterProperty: sName,
        width: (iLen > 9 ? (iLen > 50 ?15 :10) :5) + "rem",
        label: new sap.m.Label({text: "{/#NorthwindProducts/" + sName + "/@name}"}),
        hAlign: sType && sType.indexOf("Decimal") >= 0 ?"End" :"Begin",
        template: new Text({text: {path: sName}})
      });
    }
    
  });

});

アプリケーションロジックの説明

アプリケーションのリソースを含むコンポーネントを作成します。Component.js で以下を定義します。


sap.ui.define([
  'sap/ui/core/UIComponent'
], function(UIComponent) {
  "use strict";

  return UIComponent.extend("sap.ui.table.sample.OData2.Component", {
    metadata : {
      rootView : "sap.ui.table.sample.OData2.View",
      dependencies : {
        libs : [
          "sap.ui.table",
          "sap.ui.unified",
          "sap.m"
        ]
      },

      config : {
        sample : {
          stretch : true,
          files : [
            "View.view.xml",
            "Controller.controller.js"
          ]
        }
      }
    }
  });

});

OpenUI5 をブーストラップして起動

MVC アプリケーションを完了するには、ブートストラップと初期化コードを追加します。これらをindex.html に直接追加します。

<!DOCTYPE HTML>

<html>
<head>
  <meta http-equiv="x-ua-compatible" content="ie=edge" />
  <meta charset="utf-8"> 
  <title>HubDB NorthwindProducts</title>
  
  <script id="sap-ui-bootstrap"
    src="https://openui5.hana.ondemand.com/resources/sap-ui-core.js"
    data-sap-ui-libs="sap.m"
    data-sap-ui-theme="sap_bluecrystal"
    data-sap-ui-xx-bindingSyntax="complex"
    data-sap-ui-preload="async"
    data-sap-ui-compatVersion="edge" 
    data-sap-ui-resourceroots='{"sap.ui.table.sample.OData2": "./", "sap.ui.demo.mock": "mockdata"}'>
  </script>
  
  <!-- application launch configuration -->
  <script>
  
      sap.ui.getCore().attachInit(function() {
        new sap.m.App ({
          pages: [
                new sap.m.Page({
                    title: "HubDB NorthwindProducts", 
                    enableScrolling : false,
                  content: [ new sap.ui.core.ComponentContainer({
                  height :"100%", name : "sap.ui.table.sample.OData2"
                })]
            })
          ]
      }).placeAt("content");
    });

  </script>
</head> 
  <!-- UI Content -->
<body class="sapUiBody" id="content" role="application">
</body> 
</html>

結果のSAPUI5 テーブルコントロールは、リモートHubDB 内のテーブルへの変更を反映します。これで、現在のHubDB を参照および検索できます。

A table in SAPUI5 that reflects changes to the data in real time.(Salesforce is shown.)

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。