DataStore
データストア とは、ORDA によって提供されるインターフェースオブジェクトです。データストアはデータベースへの参照とアクセスを提供します。 Datastore
オブジェクトは以下のコマンドによって返されます:
- ds: メインデータストアへのショートカット
- Open datastore: リモートデータストアを開きます
概要
.cancelTransaction() トランザクションをキャンセルします |
.dataclassName : 4D.DataClass データクラスの詳細が格納されています |
.encryptionStatus(): Object カレントデータファイルの暗号化状態を示すオブジェクトを返します |
.getInfo(): Object データストアの情報を提供するオブジェクトを返します |
.getRequestLog() : Collection クライアント側のメモリに記録されている ORDAリクエストを返します |
.makeSelectionsAlterable() カレントアプリケーションのデータストアにおいて、すべての新規エンティティセレクションをデフォルトで追加可能に設定します |
.provideDataKey( curPassPhrase : Text ) : Object .provideDataKey( curDataKey : Object ) : Object データストアのカレントデータファイルのデータ暗号化キーを受け取り、暗号化されたデータと合致するかどうかチェックします |
.setAdminProtection( status : Boolean ) WebAdmin セッションにおける データエクスプローラー 含め、Web管理ポート上でのデータアクセスを無効に設定することができます |
.startRequestLog() .startRequestLog( file : 4D.File ) .startRequestLog( reqNum : Integer ) クライアント側で ORDAリクエストのログを開始します |
.startTransaction() 対象データストアに対応するデータベース上で、カレントプロセス内のトランザクションを開始します |
.stopRequestLog() クライアント側の ORDAリクエストのログをすべて停止します |
.validateTransaction() トランザクションを受け入れます |
ds
履歴
リリース | 内容 |
---|---|
18 | localID パラメーターをサポート |
17 | 追加 |
ds { ( localID : Text ) } : cs.DataStore
引数 | 型 | 説明 | |
---|---|---|---|
localID | Text | -> | 参照を取得したいリモートデータストアのローカルID |
戻り値 | cs.DataStore | <- | データストア参照 |
|
説明
ds
コマンドは、 カレントの 4Dデータベース、または localID で指定したデータベースに合致するデータストアの参照を返します.
localID を省略した (または空の文字列 "" を渡した) 場合には、ローカル4Dデータベース (4D Server でリモートデータベースを開いている場合にはそのデータベース) に合致するデータストアの参照を返します。 データストアは自動的に開かれ、ds
を介して直接利用することができます。
開かれているリモートデータストアのローカルIDを localID パラメーターに渡すと、その参照を取得できます。 このデータストアは、あらかじめカレントデータベース (ホストまたはコンポーネント) によって Open datastore
コマンドで開かれている必要があります。 このコマンドを使用したときにローカルIDが定義されます。
ロー カルIDのスコープは、当該データストアを開いたデータベースです。
localID に合致するデータストアが見つからない場合、コマンドは Null を返します。
ds
を使用するには、データベースが ORDAの必須要件 の章で説明されているように ORDA に準拠している必要があります。 以下のルールが適用されます:
- データストアは単一のプライマリーキーを持つテーブルのみを参照します。 プライマリーキーがないテーブル、あるいは複合プライマリーキーがあるテーブルは参照されません。
- BLOB型属性はデータストアで管理されません。
例題 1
4Dデータベースのメインデータストアを使用します:
$result:=ds.Employee.query("firstName = :1";"S@")
例題 2
var $connectTo; $firstFrench; $firstForeign : Object
var $frenchStudents; $foreignStudents : cs.DataStore
$connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044")
$frenchStudents:=Open datastore($connectTo;"french")
$connectTo.hostname:="192.168.18.11:8050"
$foreignStudents:=Open datastore($connectTo;"foreign")
//...
//...
$firstFrench:=getFirst("french";"Students")
$firstForeign:=getFirst("foreign";"Students")
// getFirst メソッド
// getFirst(localID;dataclass) -> entity
#DECLARE( $localId : Text; $dataClassName : Text ) -> $entity : 4D.Entity
$0:=ds($localId)[$dataClassName].all().first()
Open datastore
履歴
リリース | 内容 |
---|---|
18 | 追加 |
Open datastore( connectionInfo : Object ; localID : Text ) : cs.DataStore
引数 | 型 | 説明 | |
---|---|---|---|
connectionInfo | Object | -> | リモートデータストアへの接続に使用する接続プロパティ |
localID | Text | -> | ローカルアプリケーション内で、開かれたデータストアに対して割り当てる ID (必須) |
戻り値 | cs.DataStore | <- | データストアオブジェクト |
|
説明
Open datastore
コマンドは、 connectionInfo 引数が指定する 4Dデータベースにアプリケーションを接続します 。戻り値は、localID ローカルエイリアスに紐づけられた cs.DataStore
オブジェクトです。
connectionInfo で指定する 4Dデータベースはリモートデーターストアとして利用可能でなければなりません。つまり、以下の条件を満たしている必要があります:
- データベースの Webサーバーは、http または https が有効化された状態で開始されていなければなりません。
- データベースの REST サーバーとして公開 オプションがチェックされている必要があります。
- データベースにおいて、少なくとも 1つのクライアントライセンスが利用可能でなければなりません。
合致するデータベースが見つからない場合、Open datastore
は Null を返します。
localID 引数は、リモートデータストア上で開かれるセッションのローカルエイリアスです。 localID 引数の ID がすでにアプリケーションに存在している場合、その ID が使用されています。 そうでない場合、データストアオブジェクトが使用されたときに localID のセッションが新規に作成されます。
一旦セッションが開かれると、以下の 2行の宣言は同等のものとなり、同じデータストアオブジェク トへの参照を返します:
$myds:=Open datastore(connectionInfo;"myLocalId")
$myds2:=ds("myLocalId")
//$myds と $myds2 は同一のものです
connectionInfo には、接続したいリモートデータストアの詳細を格納したオブジェクトを渡します。 オブジェクトは以下のプロパティを格納することができます (hostname を除き、すべてのプロパティは任意です):
プロパティ | 型 | 説明 |
---|---|---|
hostname | Text | リモートデータストアの名前または IPアドレス + ":" + ポート番号 (ポート番号は必須) |
user | Text | ユー ザー名 |
password | Text | ユーザーパスワード |
idleTimeout | Longint | アクティビティがなかった場合に、セッションがタイムアウトするまでの時間 (分単位)。この時間を過ぎると、4D によって自動的にセッションが閉じられます。 省略時のデフォルトは 60 (1時間) です。 60 (分) 未満の値を指定することはできません (60 未満の値を渡した場合、タイムアウトは 60 (分) に設定されます)。 詳細については、セッションの終了 を参照ください。 |
tls | Boolean | 安全な接続を使用します(*)。 省略時のデフォルトは false です。 可能なかぎり安全な接続を使用することが推奨されます。 |
type | Text | "4D Server" でなければなりません |
(*) tls が true だった場合、以下の条件が満たされていれば、HTTPSプロトコルが使用されます:
- リモートデータストアで HTTPS が有効化されている。
- 指定されたポート番号は、データベース設定で設定されている HTTPS ポートと合致している。
- データベースに有効な証明書と非公開暗号鍵がインストールされている。 条件を満たさない場合、エラー "1610 - ホスト xxx へのリモートリクエストに失敗しました" が生成されます。
例題 1
user / password を指定せずにリモートデータストアに接続します:
var $connectTo : Object
var $remoteDS : cs.DataStore
$connectTo:=New object("type";"4D Server";"hostname";"192.168.18.11:8044")
$remoteDS:=Open datastore($connectTo;"students")
ALERT("このリモートデータストアには "+String($remoteDS.Students.all().length)+" 名の生徒が登録されています")
例題 2
user / password / timeout / tls を指定してリモートデータストアに接続します:
var $connectTo : Object
var $remoteDS : cs.DataStore
$connectTo:=New object("type";"4D Server";"hostname";\"192.168.18.11:4443";\
"user";"marie";"password";$pwd;"idleTimeout";70;"tls";True)
$remoteDS:=Open datastore($connectTo;"students")
ALERT("このリモートデータストアには "+String($remoteDS.Students.all().length)+" 名の生徒が登録されています")
例題 3
複数のリモートデータストアと接続します:
var $connectTo : Object
var $frenchStudents; $foreignStudents : cs.DataStore
$connectTo:=New object("hostname";"192.168.18.11:8044")
$frenchStudents:=Open datastore($connectTo;"french")
$connectTo.hostname:="192.168.18.11:8050"
$foreignStudents:=Open datastore($connectTo;"foreign")
ALERT("フランスの生徒は "+String($frenchStudents.Students.all().length)+" 名です")
ALERT("外国の生徒は "+String($foreignStudents.Students.all().length)+" 名です")
エラー管理
エラーが起きた場合、コマンドは Null を返します。 リモートデータベースにアクセスできなかった場合 (アドレス違い、Webサーバーが開始されていない、http/https が有効化されていない、等)、エラー1610 "ホスト XXX へのリモートリクエストに失敗しました" が生成されます。 このエラーは ON ERR CALL
で実装されたメソッドで割り込み可能です。
.dataclassName
履歴
リリース | 内容 |
---|---|
17 | 追加 |
.dataclassName : 4D.DataClass
説明
データストアの各データクラスは DataStore オブジェクト のプロパティとして利用可能です。 戻り値のオブジェクトには、 データクラスの詳細が格納されています.
例題
var $emp : cs.Employee
var $sel : cs.EmployeeSelection
$emp:=ds.Employee //$emp は Employeeデータクラスを格納します
$sel:=$emp.all() // 全従業員のエンティティセレクションを取得します
// あるいは以下のように直接書くことも可能です:
$sel:=ds.Employee.all()
.cancelTransaction()
履歴
リリース | 内容 |
---|---|
18 | 追加 |
.cancelTransaction()
| 引数 | 型 | | 説明 | | -- | - |::| -------------------------------------------- | | | | | このコマンドは引数を必要としません|
|
説明
.cancelTransaction()
関数は、 トランザクションをキャンセルします 。このトランザクションは、指定データストアのカレントプロセスにおいて、.startTransaction()
によって開かれたものです。
.cancelTransaction()
関数は、トランザクション中におこなわれたデータ変更をすべてキャンセルします。
複数のトランザクションをネストすること (サブトランザクション) が可能です。 メイントランザクションがキャンセルされると、サブトランザクションも (たとえ個々に.validateTransaction()
関数で承認されていても) すべてキャンセルされます。
例題
.startTransaction()
関数の例題を参照ください。
.encryptionStatus()
履歴
リリース | 内容 |
---|---|
17 R5 | 追加 |
.encryptionStatus(): Object
引数 | 型 | 説明 | |
---|---|---|---|
戻り値 | Object | <- | カレントデータストアと、各テーブルの暗号化についての情報 |
|