複数の4Dデータソース、興味ありますか?

Deeplからの自動翻訳

4D v18のエキサイティングな新機能を発表します!タイトルからすでにヒントがあるかもしれませんね。

この機能は、クライアント/サーバワークの新しい可能性を開きます。4D v18のアプリケーションは、現在のデータベースに限定され、永久的なネットワーク接続を必要とするのではなく、4Dサーバーに公開されている別のリモート4Dデータベースからデータを取得することができます!

この機能により、多くのオプションが利用可能になります。例えば、 オフラインで動作するようにアプリケーションを構成し、リモートデータにアクセスできるときだけローカルデータを同期させることができます。あるいは、複数のサーバーにデータを公開し、必要に応じて切り替えることもできます。また、データモデルを異なるデータベースローカルデータ、海外データなど)に分散させるという方法もあります。データを異なる場所に分散させながら、 1つの4Dクライアントコード(プロジェクトメソッドとフォームオブジェクト )でアクセスするのはどうでしょうか。このブログでは、これらのシナリオを実現する方法を紹介します。

HDI: リモートデータストアでの作業方法

4D v18では、4DデータベースをRESTサーバーとして他の4Dクライアントアプリケーションに公開することができます。これは、4Dクライアントが、あなたが公開したデータと対話(作成、読み込み、更新、削除)できることを意味します。さらに良いニュースです。このやり取りはORDAの概念に基づいているので、完全にオブジェクト指向です!

4Dデータベースをリモートアクセスのために公開する方法は?

データベースのウェブ設定にあります。

  • 設定 “タブで、HTTPポートを設定します(セキュリティ上の理由から、本番モードでは必ずHTTPSを使用してください!)。

  • REST resourceタブで、“Expose as REST Server“オプションを選択します。

blank

  • Webサーバーを起動します。上記の例では、データベースの起動時にサーバーを起動するように選択しました。
  • 4D サーバーでデータベースを開きます。
  • おめでとうございます。これで、あなたのマシンのIPと設定したポートから、データベースにリモートアクセスできるようになりました!

:RESTサーバーにアクセスするためにWebサーバーを使用する場合、Webサーバーのライセンスは必要ありません。標準の4D Clientライセンスが接続に使用されます。

リモートデータベースの操作

Open datastoreコマンド

先に述べたように、データベースはORDAの概念によって到達可能です:データベースはデータストアオブジェクトで扱われます。したがって、最初のステップは、あなたがアクセスしたいリモートデータベースに対応するデータストアオブジェクトを取得することです。問題ありません!正しいホスト名で Open datastoreコマンドを正しいホスト名で呼び出せば、すぐに実行できます。

データストアオブジェクトをローカルID「students」に関連付けます。これで、ORDAを使ったリモートデータベースでの作業を開始できます(クエリーの実行、エンティティのロード/アップデートなど)。

C_OBJECT

($connectTo;$schoolDS;$s)
C_TEXT ($dataClass)

//The database contains a Students dataclass
$dataClass :=「学生」

$connectTo :=New object("hostname"; "school.acme.com")
$schoolDS :=Open datastore($connectTo; "students")//local id of this remote datastore is "students"//Start working with ORDA means ALERT ("They are "+String($schoolDS[$dataClass].all().length)+" students )

//Run an ORDA query on the Students dataclass
$s:=$schoolDS[$dataClass]です。query("lastname=:1"; "Smith").first()
If ($s#Null)
ALERT ("学生 "+$s.lastname+" 住んでいる "+$s.address.city)
End if

このコマンドを正しいホスト名で呼び出せば、すぐに実行できます。 Open datastoreのドキュメントを参照してください。

複数のリモートデータベースの使用

ここでは、複数のリモートデータベースを簡単に操作できる例を紹介します。1つはフランスの学生、もう1つはイギリスの学生を含む2つのデータベースを持っています。

フランス人またはイギリス人の学生のどちらかを表示するように選択することができます。

blank

blank

フォームメソッドです。

Case of
: ( . = ) FORM EventcodeOn Load
Form .:="french.acme.com" . :="english.acme.com"frenchServer
FormenglishServer
End case

フランス語の生徒を見る」ラジオボタンの背後にあるオブジェクトメソッド。

C_OBJECT
($connectTo;$students)
$connectTo :=New object()
$connectTo .hostname:=Form.frenchServer$students :=Open datastore($connectTo; "french") //datastore containing French students

Form.students:=$students.Students.all()

英語の生徒を見る」ラジオボタンの背後にあるオブジェクトメソッド。

C_OBJECT
($connectTo;$students)
$connectTo :=New object()
$connectTo .hostname:=Form.englishServer$students :=Open datastore($connectTo; "english")//datastore containing English students

Form.students:=$students.Students.all()

:Open datastore コマンドを最初に呼び出すと、データストアオブジェクトがメモリ上にロードされ、サーバー上にセッションがオープンされます。それ以降の呼び出しでは、単にこのデータストアオブジェクトの参照を返します。

リモートデータベースへのアクセスを制御する

公開した4Dデータベースを安全に保つために、アクセスをフィルタリングすることができます。もう一度 Open datastoreコマンドをもう一度見てみましょう。下図のように、ユーザーとパスワードを渡すことができます。

C_OBJECT
//local id of this remote datastore is "students"($connectTo;$myStudents)

ON ERR CALL ("manageErrors")

$connectTo :=New object()
$connectTo .hostname:="students.acme.com"
$connectTo user :="mary@4d.com"$connectTopassword :=Formpassword

$myStudents :=Open datastore($connectTo; "students")

ON ERR CALL ("")

4Dでは、許可されたユーザーにアクセスを制限するために2つの方法があります。

4Dユーザーグループを使用する

4Dユーザーグループを使用する4Dユーザーグループを使用して、アクセスを制限することができます。データベースを公開する際に、Web設定ページのRESTリソースタブで、アクセスを許可するグループを選択します。

blank

コマンドで指定されたユーザーが、選択されたグループに属している場合 Open datastoreコマンドで指定されたユーザーが選択されたグループに属している場合はアクセスが許可され、そうでない場合は認証エラーが生成されます。

オンレスト認証データベース方式を使用する

また、新しいOn REST 認証データベースメソッドを使用して、公開したデータベースへの独自のアクセス制御をコード化することもできます。このメソッドは、ユーザーの認証情報を Open datastoreコマンドで受け取ります。単純に Trueを返すだけで、リモートデータベースへのアクセスが許可されます。

以下はその例です。

C_TEXT
// The password to provide in Open datastore command
($1;$name;$2;$password)
C_BOOLEAN ($0;$result;$3;$digest)
C_OBJECT ($user)

$name :=$1 // The user to provide in Open datastore command $password :=$2
$digest :=$3 // True if password is hashed

$result :=False


//Search for the user in our Users dataclass
$user:=ds.Users.query("name=:1";$name)です.first()

If End if
End if
($user#Null)
// Passwords are hashed in Users dataclass
If ($digest & ($user.password=$password))
$result :=True

$0 := 。$result

dsdatastore.getInfo()コマンドは更新され、3つの新しいメソッドが追加されました。 datastore.startTransaction(), datastore.cancelTransaction()datastore.validateTransaction().

さて、いよいよ上記のHDIをダウンロードして、この素晴らしい機能をもっと知ってもらいましょう

Avatar
- プロダクトオーナー - Marie-Sophie Landrieu-Yvertは、2017年にプロダクトオーナーとして4Dプロダクトチームに参加しました。プロダクトオーナーとして、彼女はユーザーストーリー(ユーザーが期待する新機能とその使用法)を書き、それを具体的な機能仕様に変換する役割を担っています。また彼女の役割は、実装された機能が顧客のニーズを満たしているかどうかを確認することでもあります。彼女は1995年にESIGELEC Engineering Schoolを卒業し、IBMでエンジニアとしてのキャリアをスタートさせました。様々なプロジェクト(保守や新規のプロジェクト)に参加し、Cobolのデベロッパーとして働きました。その後、UMLデザイナーおよびJavaデベロッパーとして勤務。最近は、機能要件の分析・記述、ビジネスチームと開発チームの調整などを主に担当しています。