4D v16

Wakandaアプリケーション側の設定

ホーム

 
4D v16
Wakandaアプリケーション側の設定

Wakandaアプリケーション側の設定    


 

 

Wakanda Enterprise側では、以下の二つの方法を用いて4Dのデータベースへと接続することができます:

  • "Connect to Remote Datastore" ダイアログボックスを使用する(Wakanda Enterprise Studio内にあります)。
  • JavaScript メソッド(mergeOutsideCatalog(), openRemoteStore() or addRemoteStore())を実行する。

Wakandaと4Dの間に接続が確立されると、Wakandaは4Dアプリケーションにて公開されているテーブル、属性、そしてプロジェクトメソッドをローカルオブジェクトとして使用する事ができるようになります。

また他のJavaScriptコードを実行する事もできます。例えば、例えば、リモート属性のプロパティをローカルに修正したり、クラスを拡張したり、計算属性を追加したりできます。

Wakanda Enterprise Studioでは、Connect to Remote Datastore... コマンド(File メニューまたはプロジェクトのコンテキストメニュー内にあります)を使用してリモートのdatastore とのリンクを開設します。このリモートのdatastore としては4Dデータベースまたは他のWakandaアプリケーションを使用可能です。どちらの場合でも、Wakanda Enterprise Studioがリモートモデルにアクセスできるようにするために、リモート datastore のHTTPサーバーは開始される必要があります。
リンクが定義されると、アプリケーションが開かれるたびに".waRemoteConfig"ファイルに保存された接続引数を使用して自動的に復元されます(以下を参照して下さい)。

Connect to Remote Datastore... コマンドを選択すると、接続ダイアログボックスが表示されます:

この中では以下の接続引数を設定する事ができます。

  • Remote datastore name: Solution Explorerに表示されているリモートカタログのローカル名を指定します。Merge with active Model オプションのチェックを外すと、この名前は"ds" としてではなく、datastore id として使用されます(以下を参照して下さい)。この場合、使用可能な文字のみを使用するように気を付けて下さい(Wakandaドキュメント内のProgramming and Writing Conventions を参照して下さい)。
  • Hostname: リモートデータサーバーのアドレスを指定します(より良い安全性のためにHTTPSを使用して下さい)。
  • UserPassword: 4Dデータベース上で4D Mobileセッションを開くためのユーザー名とパスワードを指定します。
  • Session duration: リモート4Dデータベースへと接続したセッションを保持する分数を設定します(デフォルトは60)。この引数は接続がユーザー名と空でないパスワードによって開かれていた場合にのみ有効になります(4D Mobile接続を4D側で保護する事は強く推奨されています)。
  • Merge with active Model (デフォルトではこのオプションはチェックされています): このオプションをチェックすると、リモートdatastore classesds ネームスペース(特にWakanda のGUI Designerのクラスのリスト)に表示されるようにするために、リモートdatastore with をプロジェクトのアクティブなモデル(ds オブジェクト)と統合します。より詳細な情報に関しては、アクティブなモデルとの併合か、専属のモデルの使用かを参照して下さい。

"Connect to a Remote Datastore"ダイアログボックスを使用してWakanda と 4D Server との間の接続が確立されると、Wakanda Enterprise Studio は自動的にプロジェクトのフォルダ内に二つのファイルを作成します(作成されたファイルはアイコンに赤の矢印が付いています)。

  • 最初のファイル(拡張子が".waRemoteConfig"のファイル)には、ダイアログボックス内で定義された接続パラメーターが保存されます。
  • 二つ目のファイル(拡張子が".waRemoteModel"のファイル)には、リモートのdatastoreのモデルをローカルに表したものが含まれます。この中身はWakanda モデルエディターウィンドウ内で表示する事ができます(ただし編集はできません)。
Note: Youファイルの拡張子はWakanda Studio の Explorer 内でファイルを選択したときに表示されるヘルプTipの中に表示されます。

Wakanda Enterprise Server では、JavaScriptメソッドを実行することによっても 4D データベースとのリンクを設定する事ができます。各セッション中にリンクを有効にするためには、接続メソッドは通常アプリケーションが開かれたときに実行されるコード(bootstrap.js)の中か、またはモデルが開かれたときに実行されるコード(model.js)内に置かれる必要があります。

4D Mobile リンクを確立するために使えるメソッドは三つあります:

  • model.mergeOutsideCatalog()
  • addRemoteStore()
  • openRemoteStore()
これらのメソッドの主な違いは、リモートの datastore から来るオブジェクトとWakandaアプリケーションとの統合のされ方に関係します。model.mergeOutsideCatalog() は、リモートのカタログをアクティブなモデルと併合させます。その一方で、 addRemoteStore()openRemoteStore() は専属のモデルを生成します。この点についての詳細は、以下の アクティブなモデルとの併合か、専属のモデルの使用か を参照して下さい。

mergeOutsideCatalog() JavaScript メソッドはリモートデータのカタログを指定し、それをカレントの Wakanda モデルと併合させます。このメソッドはカレントのモデルに関連付けられている .js ファイル内で呼び出され、Wakandaサーバーによって実行されなければなりません。

このとき、以下の二つのシンタックスのどちらかを使用できます:

  • ダイレクトシンタックス:
    model.mergeOutsideCatalog(localName, address, user, password);
  • オブジェクトを使用したシンタックス:
    model.mergeOutsideCatalog(localName, {
        hostname: address,
        user: userName, 
        password: password,
        jsFile: jsFilePath 
        timeout: minutes });

オブジェクトを使用したシンタックスの利点は、4Dデータベースに接続したあとに実行される.jsファイルを追加できることです。このファイルはリモートデータベースから参照されるカタログをローカルに修正することができます。

引数説明
localName文字列リモートカタログのローカル名
ipAddress文字列リモートデータサーバーのアドレス(セキュリティのためにHTTPSを使用して下さい)
userName文字列セッションを開くためのユーザー名
password文字列セッションを開くためのパスワード
jsFilePath文字列モデルと同じフォルダ内にあるJavaScriptファイルへの相対パス名(任意、詳細は外部ファイルの変更を参照して下さい)
timeout数字4Dデータベースへのクライアント接続のタイムアウト(分、初期設定は60。任意)この引数は接続がユーザー名と空でないパスワードで開かれている場合にのみ有効であるという点に注意して下さい(4D Mobile接続を4D Server側で保護する事は強く推奨されています)。

より詳細な情報に関しては、 Wakanda Server-Side API manual の、mergeOutsideCatalog() メソッドのドキュメントを参照して下さい。

model  

model オブジェクトは、Wakandaアプリケーションのカレントの「モデル」をあらわします。つまり、Wakandaの"datastore classes"(テーブル)とメソッド一式のことです。4D Mobileアーキテクチャにおいては、Wakanda モデルは空であっても構いません。Wakanda アプリケーションにオブジェクトが既に含まれる場合、リモート4Dアプリケーションから参照されたクラスとメソッドはmergeOutsideCatalog() メソッドを使用したときにローカルのモデルと組み込みされます。

接続が正常に確立されると、「公開」されている4D テーブルがWakanda側のモデルのクラスのリストに表示されます。Wakanda Enterprise Studio 側では、リモートテーブルがローカルモデルのクラスの一覧の中に表示されます。外部要素は赤い矢印で表示されます。
外部カタログはWakanda Studio側でも特定のカタログ(localName.waRemoteCatalog という名前)で表示されます。これもまた赤い矢印が表示されています:

Note: ファイルの拡張子はWakanda Studioでは隠すことができます。

このファイルをダブルクリックすることにより外部カタログをWakanda Enterprise Studio内で見ることができます:

例題  

  • ダイレクト接続の例:
    model.mergeOutsideCatalog("base4D","localhost:80", "admin", "123456");
  • オブジェクトを使用した接続例:
    model.mergeOutsideCatalog("base4D", {    
        hostname: "http://localhost:8050",
        user: "wak", 
        password: "123456",
        jsFile: "Model2.js" 
        timeout: 15 });

Wakanda と 4D 間の動的なリンクは、 openRemoteStore() と addRemoteStore() を使うことによっても設定することができます。

これらのメソッドは mergeOutsideCatalog() のように、4D データベースのデータへのダイナミックなアクセスを可能にしますが、仕組みが異なります:

  • これら二つのメソッドはWakanda セッション中であればソリューションがロードされたときでなくてもいつでもリモートモデルを参照することができます。
  • 外部モデルのテーブル、属性、メソッドは、個別のデータストアを使用してアクセス可能です。Wakandaアプリケーションのローカルモデル(ds オブジェクトによってアクセス可)と統合はされません。

openRemoteStore() はカレントのJavaScriptのコンテキストの中でのみ有効な参照を返しますが、 openRemoteStore() はセッションの間はずっと参照を維持し続けます。

より詳細な情報に関しては、Wakanda documentationの openRemoteStore()addRemoteStore() についての説明を参照してください。

どちらの方法(Wakanda Studio の"Connect to Remote Datastore" ダイアログボックス、または JavaScript メソッドの実行)を使用して4D datastore に接続したとしても、リモートクラス(テーブル)がアクティブなモデルと併合されるか、専属のモデル内に配置されるかのどちらかを選択しなければなりません。

具体的な手法をまとめると以下の表のようになります:

4D datastoreへ接続する手段アクティブなモデルと併合するには専属のモデルを使用するには
"Connect to Remote Datastore" ダイアログボックスMerge with active Model にチェックを入れるMerge with active Model のチェックを外す
JavaScript メソッドmergeOutsideCatalog()を使用openRemoteStore() または addRemoteStore()を使用

リモート4Dテーブルをアクティブなモデルと併合するとき、アプリケーションの(datastore が ds オブジェクトである)デフォルトのモデルへと、ローカルクラスとして統合されます。データにアクセスする際は以下の原理に沿います。

  • サーバー側からは、 ds オブジェクト(4Dテーブルとメソッドの呼び出し を参照のこと)を使用してリモート4Dテーブルとメソッドへとアクセスします:
    var invoiceList = ds.INVOICES.all(); //カタログのINVOICESテーブルへとデフォルトでアクセスする
  • クライアント側からは、Wakanda Ajax Framework (WAF) の自動機能を使用します。リモート4Dテーブルへは、高レベル datasource オブジェクト、または低レベルアクセスを管理する dataprovider API を使用することによってアクセスします。
  • Wakanda Enterprise Studio では、4D データベースのテーブルはWakandaのGUIデザイナーの中に、ローカルクラスとともに表示されています:

これらの原理は4D Moblieアプリケーションの開発を容易にしてくれますが、それと同時にテーブル間での名前の問題を引き起こす事があります。これは特にWebアプリケーションが複数の datastore を呼び出した場合に起こります。この場合、リモートの要素を専属のモデル内に配置するのが有効な場合があります。

リモートの4Dテーブルは、アクティブなモデルと併合しないときには"専属"のモデルを使用します。リモートクラスは、アプリケーションが接続しているdatasotre特有のネームスペースを使用し、これらはdsオブジェクト内部ではアクセスすることができません。この方法なら同じ名前を持つ複数のテーブルを、複数の異なるdatastoreにて使用することが可能になります。

    • サーバー側では、Remote datastore name 接続引数(ダイアログボックス)または localName(JavaScript メソッド)に渡した名前のカスタムのカタログを使用してリモート4Dテーブルとメソッドにアクセスします。例えば、"my4Dstore"という名前のリンクを作成した場合、アプリケーションのコード内には以下のように記述します:
      var invoiceList = my4Dstore.INVOICES.all(); // my4Dstore datastore の INVOICESテーブルへアクセス

しかしながら、この原則にはカレントのバージョンのWakanda Enterpriseにおいてはいくつかの制約もあります:

  • クライアントアプリケーションから、WAFライブラリーやRESTを使用してリモートクラスへと直接アクセスすることはできません。
  • リモートクラスは、Wakanda Enterprise Studio の GUI Designer の一覧には表示されません。

ですから、クライアントアプリが4Dリモートテーブルのデータへと直接アクセスしないといけないときには、通常 datastore には併合モードを使用することが推奨されます。

Wakanda Enterprise を使用すると、カスタマイズやセキュリティ、最適化などの目的で、外部モデルのローカルバージョンのいくつかの特性を変更することができます。

そのためには、ローカル名と同じ名前と ".js" 拡張子を持つ.jsファイル内に適切なJavaScriptコードを書き、そのファイルをモデルと同じフォルダの中に置きます。例えば、ローカルカタログの名前がEmp4D.waRemoteModel であれば、モデルと同じフォルダ内にあるEmp4D.js という名前のファイルを使用する必要があります。

注:
  • v11以降、このファイルはWakanda Studioによって自動的に作成されます。
  • JavaScript メソッドを使用して接続を確立した場合、jsFile 引数を使用して他の名前を使用することも可能です。

Wakanda は、外部カタログが初期化されたときにこのファイルを使用します。このファイルを使用することによって以下の様なことが可能です:

  • イベントやスコープなどのデータスコアクラス属性のプロパティを変更できます。以下の様に記述します:
    model.className.attributeName.scope ="publicOnServer"
  • データスコアクラスに計算属性を追加することができます。以下の様に記述します:
    model.className.calcAtt = new Attribute("calculated", "string");
    model.className.calcAtt.onGet = function();
    model.className.calcAtt.onSet = function();
  • エイリアス属性をデータストアクラスに追加する事ができます。以下の様に記述します:
    model.className.newAlias = new Attribute("alias", "number", "Link_15.cinteger");
  • 外部カタログのテーブルから派生させたローカルのデータストアクラスを作成し、クライアントへ送られるデータを完全に管理することができます。派生された データストアクラスは外部テーブルのカスタムビューを表示することができる一方、Wakanda Server上の拡張された(親の) データストアクラスへもアクセスることができます。以下の様に記述します:
    model.DerivedClass = new DataClass("Emps", "public", "My4DTable")
  • セキュリティのため、またはネットワークトラフィックを最適化するために、派生したデータストアクラスから属性を除去することができます。以下の様に記述します:
    model.DerivedClass = new DataClass("Emps", "public", "My4DTable") 
    model.DerivedClass.removeAttribute("salary");
    model.DerivedClass.removeAttribute("comments");
    model.DerivedClass.removeAttribute("...");

    上記のコードは、 "My4DTable"をもとに派生した"DerivedClass"という名前のクラスを作成し、このクラスはネットワークを使用して必要な属性のみを送ります。

モデルと組み合わせて使用できるJavaScript コードに関しては、Wakandaのドキュメントの中の Model API の章を参照して下さい。

リモートモデルに対して、Wakanda Server 全体に特定の許可を設定することができます。また、それぞれのクラスに関しては個別に許可を設定することができます。この点に関しての詳細な情報についてはWakandaドキュメントの Assigning Group Permissions を参照して下さい。

 
 



参照 

4D データベースの設定

 
プロパティ 

プロダクト: 4D
テーマ: Wakandaアプリケーション側の設定

 
履歴 

 
ARTICLE USAGE

4D Mobile ( 4D v16)