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 ) |
.startRequestLog() .startRequestLog( file : 4D.File ) .startRequestLog( reqNum : Integer ) クライアント側で ORDAリクエストのログを開始します |
.startTransaction() 対象データストアに対応するデータベース上で、カレントプロセス内のトランザクションを開始します |
.stopRequestLog() クライアント側の ORDAリクエストのログをすべて停止します |
.validateTransaction() トランザクションを受け入れます |
ds
履歴
バージョン | 内容 |
---|---|
v18 | localID パラメーターをサポート |
v17 | 追加 |
ds { ( localID : Text ) } : cs.DataStore
参照 | タイプ | 説明 | |
---|---|---|---|
localID | テキスト | -> | 参照を取得したいリモートデータストアのローカル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
履歴
バージョン | 内容 |
---|---|
v18 | 追加 |
Open datastore( connectionInfo : Object ; localID : Text ) : cs.DataStore
参照 | タイプ | 説明 | |
---|---|---|---|
connectionInfo | オブジェクト | -> | リモートデータストアへの接続に使用する接続プロパティ |
localID | テキスト | -> | ローカルアプリケーション内で、開かれたデータストアに対して割り当てる 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 | テキスト | リモートデータストアの名前または IPアドレス + ":" + ポート番号 (ポート番号は必須) |
user | テキスト | ユーザー名 |
password | テキスト | ユーザーパスワード |
idleTimeout | 倍長整数 | アクティビティがなかった場合に、セッションがタイムアウトするまでの時間 (分単位)。この時間を過ぎると、4D によって自動的にセッションが閉じられます。 省略時のデフォルトは 60 (1時間) です。 60 (分) 未満の値を指定することはできません (60 未満の値を渡した場合、タイムアウトは 60 (分) に設定されます)。 詳細については、セッションの終了 を参照ください。 |
tls | ブール | 安全な接続を使用します(*)。 省略時のデフォルトは false です。 可能なかぎり安全な接続を使用することが推奨されます。 |
type | テキスト | "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
履歴
バージョン | 内容 |
---|---|
v17 | 追加 |
.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()
履歴
バージョン | 内容 |
---|---|
v18 | 追加 |
.cancelTransaction() | 参照 | タイプ | | 説明 | | -- | --- |::| ----------------- | | | | | このコマンドは引数を必要としません |
説明
.cancelTransaction()
関数は、指定データストアのカレントプロセスにおいて、.startTransaction()
によって開かれた トランザクションをキャンセルします 。
.cancelTransaction()
関数は、トランザクション中におこなわれたデータ変更をすべてキャンセルします。
複数のトランザクションをネストすること (サブトランザクション) が可能です。 メイントランザクションがキャンセルされると、サブトランザクションも (たとえ個々に.validateTransaction()
関数で承認されていても) すべてキャンセルされます。
例題
.startTransaction()
関数の例題を参照ください。
.encryptionStatus()
履歴
バージョン | 内容 |
---|---|
v17 R5 | 追加 |
.encryptionStatus(): Object
参照 | タイプ | 説明 | |
---|---|---|---|
戻り値 | オブジェクト | <- | カレントデータストアと、各テーブルの暗号化についての情報 |
説明
.encryptionStatus()
関数は、 カレントデータファイルの暗号化状態を示すオブジェクトを返します 。カレントデータファイルとはつまり、ds
データストアのデータファイルです。 各テーブルの状態も提供されます。
その他のデータファイルの暗号化状態を調べるには、
Data file encryption status
コマンドを使います。
戻り値
戻り値のオブジェクトには、以下のプロパティが格納されています:
プロパティ | タイプ | 説明 | ||
---|---|---|---|---|
isEncrypted | ブール | データファイルが暗号化されていれば true | ||
keyProvided | ブール | 暗号化されたデータファイルに合致する暗号化キーが提供されていれば true (*) | ||
tables | オブジェクト | 暗号化可能および暗号化されたテーブルと同じ数のプロパティを持つオブジェクト | ||
tableName | オブジェクト | 暗号化可能または暗号化されたテーブル | ||
name | テキスト | テーブル名 | ||
num | 数値 | テーブル番号 | ||
isEncryptable | ブール | ストラクチャーファイルにおいて、テーブルが暗号化可能と宣言されていれば true | ||
isEncrypted | ブール | データファイルにおいて、テーブルのレコードが暗号化されていれば true |
(*) 暗号化キーは、以下の手段のいずれかで提供されます:
.provideDataKey()
コマンド- データストアを開く前に接続されていたデバイスのルート
Discover data key
コマンド
例題
カレントデータファイル内で暗号化されているテーブルの数を知りたい場合:
var $status : Object
$status:=dataStore.encryptionStatus()
If($status.isEncrypted) // データベースが暗号化されていれば
C_LONGINT($vcount)
C_TEXT($tabName)
For each($tabName;$status.tables)
If($status.tables[$tabName].isEncrypted)
$vcount:=$vcount+1
End if
End for each
ALERT("データベースには "+String($vcount)+" 件の暗号化されたテーブルが存在しています。")
Else
ALERT("このデータベースは暗号化されていません。")
End if
.getInfo()
履歴
バージョン | 内容 |
---|---|
v17 | 追加 |
.getInfo(): Object
参照 | タイプ | 説明 | |
---|---|---|---|
戻り値 | オブジェクト | <- | データストアのプロパティ |
説明
.getInfo()
関数は、 データストアの情報を提供するオブジェクトを返します。 このメソッドは汎用的なコードを書くのに有用です。
返されるオブジェクト
プロパティ | タイプ | 説明 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
type | string | ||||||||||||||||
networked | boolean | ||||||||||||||||
localID | text | マシン上のデータストアID。 これは、Open datastore コマンドで返される localId 文字列です。 メインデータストアの場合は空の文字列 ("") です。 | |||||||||||||||
connection | object | リモートデータストア接続の情報を格納したオブジェクト (メインデータストアの場合は返されません)。 次のプロパティを含みます:
|
.getInfo()
関数が、4D Server またはシングルユーザー版 4D 上で実行された場合、networked
は false となります。.getInfo()
関数が、リモート版 4D 上で実行された場合、networked
は true となります。
例題 1
var $info : Object
$info:=ds.getInfo() // 4D Server または 4D 上で実行した場合
//{"type":"4D","networked":false,"localID":""}
$info:=ds.getInfo() // リモート版4D 上で実行した場合
//{"type":"4D","networked":true,"localID":""}
例題 2
リモートデータストアの場合:
var $remoteDS : cs.DataStore
var $info; $connectTo : Object
$connectTo:=New object("hostname";"111.222.33.44:8044";"user";"marie";"password";"aaaa")
$remoteDS:=Open datastore($connectTo;"students")
$info:=$remoteDS.getInfo()
//{"type":"4D Server",
//"localID":"students",
//"networked":true,
//"connection":{hostname:"111.222.33.44:8044","tls":false,"idleTimeout":2880,"user":"marie"}}
.getRequestLog()
履歴
バージョン | 内容 |
---|---|
v17 R6 | 追加 |
.getRequestLog() : Collection
参照 | タイプ | 説明 | |
---|---|---|---|
戻り値 | コレクション | <- | オブジェクトのコレクション (要素毎に一つのリクエストを記述します) |
説明
.getRequestLog()
関数は、 クライアント側のメモリに記録されている ORDAリクエストを返します。 ORDAリクエストのログが、.startRequestLog()
関数によって事前に有効化されている必要があります。
このメソッドはリモートの 4D で呼び出す必要があり、そうでない場合には空のコレクションを返します。 これはクライアント/サーバー環境でのデバッグを想定して設計されています。
戻り値
スタックされたリクエストオブジェクトのコレクションが返されます。 直近のリクエストにはインデックス 0 が振られています。
ORDAリクエストログのフォーマットの詳細は、ORDAクライアントリクエスト の章を参照ください。
例題
.startRequestLog()
の例題2を参照ください。
.isAdminProtected()
履歴
バージョン | 内容 |
---|---|
v18 R6 | 追加 |
.isAdminProtected() : Boolean
参照 | タイプ | 説明 | |
---|---|---|---|
戻り値 | ブール | <- | データエクスプローラーへのアクセスが無効に設定されているの場合は true、有効の場合は false (デフォルト) |
説明
.isAdminProtected()
関数は、 現在のセッションにおいて データエクスプローラー へのアクセスが無効に設定されているの場合は true
を返します。
webAdmin
セッションにおいて、データエクスプローラーへのアクセスはデフォルトで有効となっていますが、管理者によるデータアクセスを禁止するため無効にすることもできます (.setAdminProtection()
関数参照)。
参照
.makeSelectionsAlterable()
履歴
バージョン | 内容 |
---|---|
v18 R5 | 追加 |
.makeSelectionsAlterable() | 参照 | タイプ | | 説明 | | -- | --- |::| ----------------- | | | | | このコマンドは引数を必要としません |
説明
.makeSelectionsAlterable()
関数は、 カレントアプリケーションのデータストアにおいて、すべての新規エンティティセレクションをデフォルトで追加可能に設定します (リモートデータストア を含む)。 これはたとえば On Startup
データベースメソッドなどで、一度だけ使用することが想定されています。
このメソッドが呼ばれてない場合、新規エンティティセレクションはそれぞれの "親" の性質や作成方法に応じて、共有可能に設定される場合もあります (共有可能/追加可能なエンティティセレクション 参照)。
この関数は、
OB Copy
または.copy()
にck shared
オプションを明示的に使用して作成されたエンティティセレクションには適用されません。
互換性に関する注記: このメソッドは 4D v18 R5 より前のバージョンから変換されたプロジェクトで、.add() の呼び出しを使用しているものにおいてのみ使用してください。 このコンテキストにおいては、
.makeSelectionsAlterable()
を使用することで、既存プロジェクト内で以前の 4D のふるまいを再現し、時間を節約できます。 逆に、4D v18 R5 以降のバージョンで作成された新規プロジェクトにおいては、この関数の使用は 推奨されていません。エンティティセレクションを共有可能にできないため、パフォーマンスとスケーラビリティの観点で妨げになるからです。
.provideDataKey()
履歴
バージョン | 内容 |
---|---|
v17 R5 | 追加 |
.provideDataKey( curPassPhrase : Text ) : Object
.provideDataKey( curDataKey : Object ) : Object
参照 | タイプ | 説明 | |
---|---|---|---|
curPassPhrase | テキスト | -> | カレントのパスフレーズ |
curDataKey | オブジェクト | -> | カレントのデータ暗号化キー |
戻り値 | オブジェクト | <- | 暗号化キーのチェックの結果 |
説明
.provideDataKey()
関数は、 データストアのカレントデータファイルのデータ暗号化キーを受け取り、暗号化されたデータと合致するかどうかチェックします。 この関数は、暗号化されたデータベースを開くときや、データファイルの再暗号化など暗号化キーが必要となる暗号化オペレーションを実行する際に使用します。
- The
.provideDataKey()
function must be called in an encrypted database. If it is called in a non-encrypted database, the error 2003 (the encryption key does not match the data.) is returned. Use theData file encryption status
command to determine if the database is encrypted.- The
.provideDataKey()
function cannot be called from a remote 4D or an encrypted remote datastore.
If you use the curPassPhrase parameter, pass the string used to generate the data encryption key. When you use this parameter, an encryption key is generated.
If you use the curDataKey parameter, pass an object (with encodedKey property) that contains the data encryption key. This key may have been generated with the New data key
command.
If a valid data encryption key is provided, it is added to the keyChain in memory and the encryption mode is enabled:
- all data modifications in encryptable tables are encrypted on disk (.4DD, .journal. 4Dindx files)
- all data loaded from encryptable tables is decrypted in memory
戻り値
The result of the command is described in the returned object:
プロパティ | タイプ | 説明 | |
---|---|---|---|
success | ブール | True if the provided encryption key matches the encrypted data, False otherwise | |
Properties below are returned only if success is FALSE | |||
status | 数値 | Error code (4 if the provided encryption key is wrong) | |
statusText | テキスト | Error message | |
errors | コレクション | Stack of errors. The first error has the highest index | |
[ ].componentSignature | テキスト | Internal component name | |
[ ].errCode | 数値 | Error number | |
[ ].message | テキスト | Error message |
If no curPassphrase or curDataKey is given, .provideDataKey()
returns null (no error is generated).
例題
var $keyStatus : Object
var $passphrase : Text
$passphrase:=Request("Enter the passphrase")
If(OK=1)
$keyStatus:=ds.provideDataKey($passphrase)
If($keyStatus.success)
ALERT("You have provided a valid encryption key")
Else
ALERT("You have provided an invalid encryption key, you will not be able to work with encrypted data")
End if
End if
.setAdminProtection()
履歴
バージョン | 内容 |
---|---|
v18 R6 | 追加 |
.setAdminProtection( status : Boolean )
参照 | タイプ | 説明 | |
---|---|---|---|
status | ブール | -> | webAdmin ポート上で、データエクスプローラーによるデータアクセスを無効にするには true、アクセスを有効にするには false (デフォルト) |
説明
.setAdminProtection()
関数は、 WebAdmin
セッションにおける データエクスプローラー 含め、Web管理ポート上でのデータアクセスを無効に設定することができます。
By default when the function is not called, access to data is always granted on the web administration port for a session with WebAdmin
privilege using the Data Explorer. In some configurations, for example when the application server is hosted on a third-party machine, you might not want the administrator to be able to view your data, although they can edit the server configuration, including the access key settings.
In this case, you can call this function to disable the data access from Data Explorer on the web admin port of the machine, even if the user session has the WebAdmin
privilege. When this function is executed, the data file is immediately protected and the status is stored on disk: the data file will be protected even if the application is restarted.
例題
You create a protectDataFile project method to call before deployments for example:
ds.setAdminProtection(True) //Disables the Data Explorer data access
参照
.startRequestLog()
履歴
バージョン | 内容 |
---|---|
v17 R6 | 追加 |
.startRequestLog()
.startRequestLog( file : 4D.File )
.startRequestLog( reqNum : Integer )
参照 | タイプ | 説明 | |
---|---|---|---|
file | 4D.File | -> | File object |
reqNum | 整数 | -> | メモリ内に保管するリクエストの数 |
説明
.startRequestLog()
関数は、 クライアント側で ORDAリクエストのログを開始します。
This function must be called on a remote 4D, otherwise it does nothing. これはクライアント/サーバー環境でのデバッグを想定して設計されています。
The ORDA request log can be sent to a file or to memory, depending on the parameter type:
- If you passed a file object created with the
File
command, the log data is written in this file as a collection of objects (JSON format). Each object represents a request.
If the file does not already exist, it is created. Otherwise if the file already exists, the new log data is appended to it. If.startRequestLog( )
is called with a file while a logging was previously started in memory, the memory log is stopped and emptied.
A ] character must be manually appended at the end of the file to perform a JSON validation
If you passed a reqNum integer, the log in memory is emptied (if any) and a new log is initialized. It will keep reqNum requests in memory until the number is reached, in which case the oldest entries are emptied (FIFO stack).
If.startRequestLog()
is called with a reqNum while a logging was previously started in a file, the file logging is stopped.If you did not pass any parameter, the log is started in memory. If
.startRequestLog()
was previously called with a reqNum (before a.stopRequestLog()
), the log data is stacked in memory until the next time the log is emptied or.stopRequestLog()
is called.
ORDAリクエストログのフォーマットの詳細は、ORDAクライアントリクエスト の章を参照ください。
例題 1
You want to log ORDA client requests in a file and use the log sequence number:
var $file : 4D.File
var $e : cs.PersonsEntity
$file:=File("/LOGS/ORDARequests.txt") //logs folder
SET DATABASE PARAMETER(Client Log Recording;1) //to trigger the global log sequence number
ds.startRequestLog($file)
$e:=ds.Persons.get(30001) //send a request
ds.stopRequestLog()
SET DATABASE PARAMETER(Client Log Recording;0)
例題 2
You want to log ORDA client requests in memory:
var $es : cs.PersonsSelection
var $log : Collection
ds.startRequestLog(3) //keep 3 requests in memory
$es:=ds.Persons.query("name=:1";"Marie")
$es:=ds.Persons.query("name IN :1";New collection("Marie"))
$es:=ds.Persons.query("name=:1";"So@")
$log:=ds.getRequestLog()
ALERT("The longest request lasted: "+String($log.max("duration"))+" ms")
.startTransaction()
履歴
バージョン | 内容 |
---|---|
v18 | 追加 |
.startTransaction() | 参照 | タイプ | | 説明 | | -- | --- | | ----------------- | | | | | このコマンドは引数を必要としません |
説明
.startTransaction()
関数は、 対象データストアに対応するデータベース上で、カレントプロセス内のトランザクションを開始します。 Any changes made to the datastore's entities in the transaction's process are temporarily stored until the transaction is either validated or cancelled.
If this method is called on the main datastore (i.e. the datastore returned by the
ds
command), the transaction is applied to all operations performed on the main datastore and on the underlying database, thus including ORDA and classic languages.
複数のトランザクションをネストすること (サブトランザクション) が可能です。 Each transaction or sub-transaction must eventually be cancelled or validated. Note that if the main transaction is cancelled, all of its sub-transactions are also cancelled even if they were validated individually using the .validateTransaction()
function.
例題
var $connect; $status : Object
var $person : cs.PersonsEntity
var $ds : cs.DataStore
var $choice : Text
var $error : Boolean
Case of
:($choice="local")
$ds:=ds
:($choice="remote")
$connect:=New object("hostname";"111.222.3.4:8044")
$ds:=Open datastore($connect;"myRemoteDS")
End case
$ds.startTransaction()
$person:=$ds.Persons.query("lastname=:1";"Peters").first()
If($person#Null)
$person.lastname:="Smith"
$status:=$person.save()
End if
...
...
If($error)
$ds.cancelTransaction()
Else
$ds.validateTransaction()
End if
.stopRequestLog()
履歴
バージョン | 内容 |
---|---|
v17 R6 | 追加 |
.stopRequestLog()
| 参照 | タイプ | | 説明 |
| -- | --- | | ----------------- |
| | | | このコマンドは引数を必要としません |
説明
.stopRequestLog()
関数は、 クライアント側の ORDAリクエストのログをすべて停止します (ファイル・メモリとも)。 It is particularly useful when logging in a file, since it actually closes the opened document on disk.
This function must be called on a remote 4D, otherwise it does nothing. これはクライアント/サーバー環境でのデバッグを想定して設計されています。
例題
.startRequestLog()
の例題を参照ください。
.validateTransaction()
履歴
バージョン | 内容 |
---|---|
v18 | 追加 |
.validateTransaction()
| 参照 | タイプ | | 説明 |
| -- | --- | | ----------------- |
| | | | このコマンドは引数を必要としません |
説明
.validateTransaction()
関数は、対象データストアの対応するレベルで .startTransaction()
で開始された トランザクションを受け入れます 。
The function saves the changes to the data on the datastore that occurred during the transaction.
複数のトランザクションをネストすること (サブトランザクション) が可能です。 If the main transaction is cancelled, all of its sub-transactions are also cancelled, even if they were validated individually using this function.
例題
.startTransaction()
の例題を参照ください。