昨年9月、4D は Qodly Studio for 4D を発表し、ダイナミックで効率的なビジネスWebアプリケーションをシームレスに作成できる包括的な機能を提供しました。まだの方は、ブログ記事 Qodly Studio を始めよう で詳細をご覧ください。
Qodly Studio は qodly.com からもアクセス可能で、こちらは 4Dの新しい SaaSサービスの一部となっています。
qodly.com アプリケーションは Qodly Studio for 4D とは異なり、4D から完全に独立したものとして動作します。しかし、qodly.com の環境でも 4Dアプリケーションのデータやビジネスロジックを活用したい場面があるかもしれません。ご安心ください、新しい QodlyScript openDatastore コマンドの導入により、qodly.com の Webアプリケーションは、4D Server上で運用されている 4Dアプリケーションにシームレスに接続できるようになり、qodly.com から 4Dプロジェクトをリモートデータストア として簡単に使用できるようになりました。この新機能により、qodly.com と 4Dアプリケーションの相乗効果が新たな高みに達します。
もし、既存の 4D Serverベースのアプリケーションで、デスクトップクライアントと Qodlyフォームを使った Webクライアントの両方を扱う方法が、あなたの現在のアプローチと同じであれば、この先は読み飛ばしてください。
しかし、もし既存の 4D Serverベースのアプリケーションを、Webベースのまったく新しいアプリケーションで拡張したいのなら、そしてこれに qodly.com でホストされたアプリケーションを使うのであれば、この記事を読み進めてください。qodly.com アプリケーションが 4D Server とコミュニケーションを取る方法を紹介します。
具体例
注記: 以下のコードは 、JavaScript と 4D に基づいた言語である QodlyScript を使用して います。4D によく似ていますが、まったく同じではありません。
例1
qodly.com で Qodly-HR という人事用の Webアプリケーションを開発するとします。すでに 4D-HR という 4Dプロジェクトでいくつかのビジネスロジックがコーディングされています。このロジックをQodlyScript で書き直す代わりに、openDatastore コマンドで呼び出すことができます!
この簡単な例では、従業員の時給を処理します。働く国によって、従業員の時給は異なります。
これが Qodly-HR のモデルです:

Qodly-HR では新規の従業員データを作成します。その際、彼らの時給を計算する必要がありますが、4D-HR には既存のビジネスロジックがあるので、これを活用したいところです。4D-HR に既存の computeHourlyRates という関数は、引数として特定の国と時給を受け取り、戻り値として同じ等級における各国での時給をコレクションとして返します。
以下の QodlyScript コードの抜粋は、Qodly-HR で従業員を作成するのに使用されます。このコードは、4D-HR データストア関数の computeHourlyRates を呼び出し、フランスの時給を引数として渡し、イギリスとアメリカの時給を取得します。
var employee: cs.EmployeesEntity
var salaryInfo : cs.SalaryInfoEntity
var salaries: collection
var info : object
var status: object
employee = ds.Employees.new()
employee.firstname="Mary"
employee.lastname="Smith"
status=employee.save()
salaries=ds.getHRDatastore().computeHourlyRates("FR", 100)
// salaries の中身: [{country:FR,hourlyRate:100},{country:UK,hourlyRate:95},{country:US,hourlyRate:90}]
forEach(info, salaries)
salaryInfo=ds.SalaryInfo.new()
salaryInfo.fromObject(info)
salaryInfo.theEmployee=employee
status=salaryInfo.save()
end
以下が Qodly-HR の DataStoreクラスです:
extends DataStoreImplementation
exposed Function getHRDatastore() : 4D.DataStoreImplementation
var connectionInfo : object = {hostname: "hr@acme.com"}
var remoteDS : 4D.DataStoreImplementation
remoteDS = openDatastore(connectionInfo, "hr")
return remoteDS
例2
もう 1つ 4Dプロジェクトがあるとしましょう。4D-Sales は、販売と顧客を扱うプロジェクトです。これも、4D-HR 4Dプロジェクトと同じように使えます。
Qodly-HR の DataStoreクラスは、4Dプロジェクト 4D-Sales をリモートデータストアとして使用するための関数も用意しています:
exposed Function getSalesDatastore() : 4D.DataStoreImplementation
var connectionInfo : object = {hostname: "sales@acme.com"}
var remoteDS : 4D.DataStoreImplementation
remoteDS = openDatastore(connectionInfo, "sales")
return remoteDS
Qodly-HR Webアプリで、売上総額が平均より大きい顧客を取得する必要があるとします。
これには、まず 4D-Sales 4Dプロジェクトの全顧客を読み込み、次にそれをクエリします:
var customers, targetCustomers: 4D.EntitySelection
var amountAverage : number
customers=ds.getSalesDatastore().Customer.all()
amountAverage=customers.average("totalAmount")
targetCustomers=customers.query("totalAmount >= :1", amountAverage)
それだけです!
Qodly.com と 4D Server の接続についてもっと知りたい方は、今後の記事にもご期待ください!
現在、この投稿へのコメント機能は利用できません。