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

ビジネスコンポーネント変数に割り当てられたコンテンツをデータベースに挿入します。

構文

&VarBasedOnBC.Insert()

入力値の説明:
&VarBasedOnBC
     ビジネスコンポーネントに基づくスカラー変数またはコレクション変数です。

戻されるタイプ:
Boolean

説明

Insert メソッドが実行されると、参照整合性チェックに失敗せず、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() //ここでは new 演算子を省略できますが、複数の顧客が挿入される場合は、この演算子を使用する必要があります
&Customer.CustomerName = 'Mary'
&Customer.CustomerLastName = 'Brown'
&Customer.CustomerAddress = '767 5th Avenue'
&Customer.CustomerEmail = 'mbrown@gmail.com'
&Customer.Insert()
if &Customer.Success()
   commit   
else   
   msg(&Customer.GetMessages().ToJson(), status)
endif 

2) 次のコードは顧客情報を挿入します。このコードは、プロシージャーの [ Source ] や Web パネルの [ Events ] エレメントなどで定義されます。前述の例とほぼ同じですが、Insert メソッドの適用結果が if 文で直接評価される点が異なります。
&Customer=new() //ここでは new 演算子を省略できますが、複数の顧客が挿入される場合は、この演算子を使用する必要があります
&Customer.CustomerName = 'Mary'
&Customer.CustomerLastName = 'Brown'
&Customer.CustomerAddress = '767 5th Avenue'
&Customer.CustomerEmail = 'mbrown@gmail.com'
if &Customer.Insert()
    commit    
else
    msg(&Customer.GetMessages().ToJson(), status)
endif

3) 次のプロシージャーは複数のオブジェクトから呼び出されます。このプロシージャーは、Customer タイプに基づく &Customer 変数を受け取り、データベースへの追加のみ実行する必要があります。
Procedure: InsertCustomer
   Rules
      parm(in:&Customer)
   Source
      &Customer.Insert()
      if &Customer.Success()
         commit   
      else
         msg(&Customer.GetMessages().ToJson(), status)
      endif

4) 次のトランザクションをビジネスコンポーネントとして定義する ([ Business Component ] プロパティを True に設定する) とします。
Product
{
  ProductId*     
  ProductName
  ProductStock
}
そのため、Product トランザクションのビジネス コンポーネント データ タイプがナレッジベースに自動的に作成され、作成された新しいタイプの変数を任意のオブジェクトで定義できます (コレクションとして設定することもできます)。
そのため、Product タイプに基づいて、特定のオブジェクトで &Products 変数が定義され、コレクションとして設定されます。DPProducts データプロバイダーは、&Products 変数を (Event 内などに) ロードします。次に示すように、ロードされた &Products 変数に Insert メソッドが適用されます:
&Products=DPProducts()
if &Products.Insert()
    Commit
else 
    msg(&Products.GetMessages().ToJson(), status) 
endif
DPProducts データプロバイダーの定義を見てみましょう。
Data Provider: DPProducts
Properties: Output:Product / Collection:True
   
Source:
Product
{
    ProductId = 100
    ProductName = 'X Muscular Pain Medicine'
    ProductStock = 1000
}
Product
{ 
   ProductId = 101
   ProductName = 'J Headache Medicine'
   ProductStock = 1500
}
結論としては、製品のコレクションがロードされ、その後で Insert メソッドがコレクション変数に適用されます。コレクション内の各製品が挿入されます。
リスト内のビジネスコンポーネントにエラーがある場合、以降のビジネスコンポーネントは処理されますか? 
はい。エラーが発生したかどうかに関係なく、リスト内のエレメントはすべて処理されます。その後、エラーに応じて変更内容をコミットするかどうかを判断します。
エラーのあったビジネスコンポーネントを確認したい場合は、リストをスキャンして 1 つずつ確認する必要があります。たとえば Insert メソッドを適用した後、次のコードを記述できます: 
For &Product in &Products
    if &Product.GetMessages().Count > 0
       //msg(...)
    endif
endfor

使用可能バージョン

このメソッドは GeneXus 15 以降のバージョンで使用可能です。
 

参考情報

ビジネスコンポーネント - Save メソッド、Insert メソッド、および Insert メソッドと Update メソッドの違い
ビジネスコンポーネントのエラー処理






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