最近のアクセス:
ビジネスコンポーネントの Update メソッド

ビジネスコンポーネント変数に割り当てられたコンテンツをデータベースに更新します。事前に目的のデータを変数に割り当てておく必要があります。

構文

&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 メソッドの違い
ビジネスコンポーネントのエラー処理






サブページ
Created: 17/05/30 19:02 by Admin Last update: 23/05/08 21:27 by Admin
カテゴリ
Powered by GXwiki 3.0