ビジネスコンポーネント変数に割り当てられたコンテンツをデータベースに更新します。事前に目的のデータを変数に割り当てておく必要があります。
&VarBasedOnBC.
Update()
入力値の説明:
&VarBasedOnBC
ビジネスコンポーネントに基づくスカラー変数またはコレクション変数です。
戻されるタイプ:
Boolean
Update メソッドが実行されると、参照整合性チェックに失敗せず、error ルールが発生しない場合にのみ、データベースが更新されます。
このメソッドは、更新が正常に実行されたかどうかを通知するブール値を常に返します。このブール値は、必要に応じて評価できます。
次のトランザクションをビジネスコンポーネントとして定義する (
[ Business Component ] プロパティを True に設定する) とします:
Customer
{
CustomerId* ( [ Autonumber ] プロパティ = True)
CustomerName
CustomerAddress
CustomerPhone
CustomerEmail
CustomerAddedDate
CustomerTotalMiles
}
Customer ルール:
Default(CustomerAddedDate,&today);
これにより、Customer トランザクションのビジネス コンポーネント データ タイプが
ナレッジベースに自動的に作成され、作成された新しいタイプの変数を任意のオブジェクトで定義できます。これで、任意のオブジェクトで、Customer タイプに基づいて &Customer という名前の変数を定義できます。
1) 次のコードは顧客情報を更新します。このコードは、
プロシージャーの [ Source ] や
Web Panel オブジェクトの [ Events ] エレメントなどで定義されます。
&Customer = new()
&Customer.CustomerId = 8
&Customer.CustomerEmail = 'marybrown@gmail.com'
&Customer.Update()
if &Customer.Success()
commit
else
msg(&Customer.GetMessages().ToJson())
endif
2) 次のコードは顧客情報を更新します。このコードは、プロシージャーの [ Source ] や Web Panel の [ Events ] エレメントなどで定義されます。前述の例とほぼ同じですが、Update メソッドの適用結果が if 文で直接評価される点が異なります。
&Customer = new()
&Customer.CustomerId = 8
&Customer.CustomerEmail = 'marybrown@gmail.com'
if &Customer.Update()
commit
else
msg(&Customer.GetMessages().ToJson())
endif
3) 次のプロシージャーは複数のオブジェクトから呼び出されます。このプロシージャーは、Customer タイプに基づく &Customer 変数を受け取り、データベースの更新のみ実行する必要があります。
Procedure: UpdateCustomer
Rules
parm(in:&Customer)
Source
&Customer.Update()
if &Customer.Success()
commit
else
msg(&Customer.GetMessages().ToJson())
endif
4) 次のトランザクションをビジネスコンポーネントとして定義する (
[ Business Component ] プロパティを True に設定する) とします。
Product
{
ProductId*
ProductName
ProductStock
}
そのため、Product トランザクションのビジネス コンポーネント データ タイプがナレッジベースに自動的に作成され、作成された新しいタイプの変数を任意のオブジェクトで定義できます (コレクションとして設定することもできます)。
そのため、Product タイプに基づいて、特定のオブジェクトで &Products 変数が定義され、コレクションとして設定されます。DPProducts データプロバイダーは、&Products 変数を (Event 内などに) ロードします。次に示すように、ロードされた &Products 変数に Update メソッドが適用されます。
&Products=DPProducts()
&Products.Update()
if &Products.success()
Commit
else
msg(&Products.GetMessages().ToJson(), status)
endif
DPProducts
データプロバイダーの定義を見てみましょう。
Data Provider: DPProducts
Properties: Output:Product / Collection:True
Source:
Product
{
ProductId = 100
ProductStock = 5000
}
Product
{
ProductId = 101
ProductStock = 6000
}
結論としては、製品のコレクションがロードされ、その後で Update メソッドがコレクション変数に適用されます。コレクション内の各製品が更新されます。
リスト内のビジネスコンポーネントにエラーがある場合、以降のビジネスコンポーネントは処理されますか?
はい。エラーが発生したかどうかに関係なく、リスト内のエレメントはすべて処理されます。その後、エラーに応じて変更内容をコミットするかどうかを判断します。
エラーのあったビジネスコンポーネントを確認したい場合は、リストをスキャンして 1 つずつ確認する必要があります。たとえば Update
メソッドを適用した後、次のコードを記述できます:
For &Product in &Products
if &Product.GetMessages().Count > 0
//msg(...)
endif
endfor
使用可能バージョン
このメソッドは
GeneXus 15 以降のバージョンで使用可能です。
参考情報
ビジネスコンポーネント - Save メソッド、Insert メソッド、Update メソッドの違い
ビジネスコンポーネントのエラー処理