最近のアクセス:
ビジネスコンポーネントの例

ビジネスコンポーネントとして定義されている次の Transaction オブジェクトがあるとします。
イメージ:50161.png
以降の例では、特定のオブジェクト (Web Panel オブジェクトPanel オブジェクトProcedure オブジェクトなど) で Attraction データタイプに基づいて &Attraction 変数を定義する必要があるとします。その後、以下に示すサンプルのコードを対応するオブジェクトのセクション (Web Panel オブジェクトのイベント、Panel オブジェクトのイベント、Procedure オブジェクトのソースなど) に記述できます。

1) 挿入のサンプル

新しい観光名所を挿入するとします。
1.1) そのために、次に示すようにビジネスコンポーネントの Save メソッドを使用できます:
&Attraction.AttractionName = "Eiffel Tower"
&Attraction.CountryId = 2                    //フランス
&Attraction.CityId = 1                       //パリ
&Attraction.Save()
If &Attraction.Success()
  commit
  msg("The data has been added")
Else
  rollback
  msg(&Attraction.GetMessages().ToJson()) 
Endif


  • CategoryId は省略されていますが、この外部キーは null を許可するため、レコードを挿入してもエラーは発生しません。
  • AttractionId の [ Autonumber ] プロパティが True に設定されているため、データベースによる自動ナンバリングが行われます。
  • Save() メソッドの実行後、&Attraction.Mode() は Update ("UPD") に設定され、すべての項目属性がインスタンス化されます。

1.2) 次に示すようにビジネスコンポーネントの Insert メソッドを使用できます:
    &Attraction.AttractionName = "Eiffel Tower"
    &Attraction.CategoryId = 2                 //遺跡
    &Attraction.CountryId = 2                  //フランス
    &Attraction.CityId = 1                     //パリ
    &Attraction.Insert()
    If &Attraction.Success()
       Commit
       msg("The data has been added")
    Else
       rollback
       msg(&Attraction.GetMessages().ToJson()) 
    Endif

ビジネスコンポーネント - Save メソッド、Insert メソッド、Update メソッドの相違点を参照してください。

1.3) 次のサンプルは、前のものとほぼ同じです。唯一異なる点は、Insert() メソッドの適用結果が if 文で直接評価される (そのため Success メソッドは使われない) ところです:
   &Attraction.AttractionName = "Eiffel Tower"
   &Attraction.CategoryId = 2                  //遺跡
   &Attraction.CountryId = 2                   //フランス
   &Attraction.CityId = 1                      //パリ
   If &Attraction.Insert()
       Commit
       msg("The data has been added")
   Else
       rollback
       msg(&Attraction.GetMessages().ToJson()) 
   Endif

1.4) Data Provider オブジェクトを使用できます。
そのために、データプロバイダーを (たとえば DPOneAttraction という名前で) 作成します。KB エクスプローラーからデータプロバイダーの [ Source ] に Attraction トランザクションをドラッグし、次のようにデータを入力します:
Attraction
{
    AttractionName = "Eiffel Tower"
    CategoryId = 2
    CountryId = 2
    CityId = 1
}
次に、自分がいるコンテキスト (たとえば Panel オブジェクトまたは Web Panel オブジェクトの [ Events ] エレメント) でデータプロバイダーを呼び出します。
Event 'InsertAttraction'
    &Attraction = DPOneAttraction()
    If &Attraction.Insert()
        commit
        msg("The update has been successfully completed")
    Else
        rollback
        msg("Unable to insert")
    Endif
Endevent

1.5) 次に、複数の観光名所を挿入するとします。そのために、データプロバイダーを (たとえば DPSeveralAttractions という名前で) 定義できます。
まず、KB エクスプローラーからデータプロバイダーの [ Source ] に Attraction トランザクションをドラッグし、次のようにデータを入力します:
イメージ:50162.png
[ Source ] に Attraction トランザクションをドラッグしたため、データプロバイダーの [ Output ] プロパティは自動的に (「Attraction」と) 入力されます。
複数の観光名所を返すように指定するため、[ Collection ] プロパティを True に設定します。
データプロバイダーを定義したら、オブジェクト (Panel、Web Panel、Procedure など) 内で変数を (&Attractions などの名前で) 定義し、次の画像に示すように [ Is Collection ] チェックボックスを選択してコレクションとして設定します:
イメージ:50163.png
次に、自分がいるコンテキスト (たとえば Panel オブジェクトまたは Web Panel オブジェクトの [ Events ] エレメント) でデータプロバイダーを呼び出し、次のようにコードを記述します:
Event 'InsertAttractions'
    &Attractions = DPSeveralAttractions()
    If &Attractions.Insert()
        commit
        msg("The data has been added")
    Else
        rollback
        msg("Unable to insert")
    Endif
Endevent

ここまでに、データプロバイダー内で観光名所のデータをロードしました。そしてデータプロバイダーを呼び出し、コレクションとして設定した変数にデータを返しました。最後に、データがデータベースに挿入されます。

1.6) 今度は、ビジネスコンポーネントとして設定された次の 2 レベルトランザクションについて考えます:
Attraction
{ 
   AttractionId*       ( [ Autonumber ]  プロパティ = Yes)
   AttractionName
   CategoryId
   CategoryName
   CountryId
   CountryName
   CityId
   CityName
   Ticket
   {
      AttractionTicketId*
      AttractionTicketDescription
      AttractionTicketPrice
   }
}
最初のレベルは上の例で使用した Attraction トランザクションの構造と正確に一致します。また、ネストされたレベルを含んでいます。
2 つの行 (2 つのチケット) がある新しい観光名所を挿入するとします。
そのために、データプロバイダーを (たとえば DPAttractionWithTickets という名前で) 作成します。
次に、KB エクスプローラーからデータプロバイダーの [ Source ] に Attraction トランザクションをドラッグし、次のようにデータを入力します:
Attraction
{
   AttractionName = "Eiffel Tower"
   CategoryId = 2
   CountryId = 2
   CityId = 1
   Ticket
   {
      AttractionTicketId = 1
      AttractionTicketDescription = "Popular"
      AttractionTicketPrice = 100 
   }
   Ticket
   { 
      AttractionTicketId = 2
      AttractionTicketDescription = "Vip"
      AttractionTicketPrice = 300 
   }
}  

[ Source ] に Attraction トランザクションをドラッグしたため、データプロバイダーの [ Output ] プロパティは自動的に (「Attraction」と) 入力されます。
データプロバイダーを定義したら、オブジェクト (Panel、Web Panel、Procedure など) 内で Attraction ビジネス コンポーネント データ タイプに基づいて変数を (&AttractionWithTickets などの名前で) 定義します。最後に、自分がいるコンテキスト (たとえば Panel オブジェクトまたは Web Panel オブジェクトの [ Events ] エレメント) でデータプロバイダーを呼び出し、次のようにコードを記述します:
Event 'InsertAttractionWithTickets'
    &AttractionWithTickets = DPAttractionWithTickets()
    If &AttractionWithTickets.Insert()
        commit
        msg("The data has been added")
    Else
        rollback
        msg("Unable to insert")
    Endif
Endevent

ここまでに、データプロバイダー内で 2 つのチケットのデータがある観光名所をロードしました。そしてデータプロバイダーを呼び出し、変数にデータを返しました。最後に、データがデータベースに挿入されます。

2) 更新のサンプル

観光名所のデータ (この例ではカテゴリ) を更新するとします。
2.1) 次のコードに示すようにビジネスコンポーネントの Save メソッドを使用できます:
   &Attraction.Load(1)
   &Attraction.CategoryId = 1      //遺跡
   &Customer.Save()
   If &Attraction.Success()
      commit
      msg("The data has been updated")
   Else 
      rollback
      msg(&Attraction.GetMessages().ToJson()) 
   Endif

2.2) 次に示すようにビジネスコンポーネントの Update メソッドを使用できます:
&Attraction = new()
&Attraction.AttractionId = 20
&Attraction.CategoryId = 2     //遺跡
If &Attraction.Update()
   Commit
   msg("The update has been successfully completed")
Else
   rollback
   msg(&Attraction.GetMessages().ToJson())
Endif

ビジネスコンポーネント - Save メソッド、Insert メソッド、Update メソッドの相違点を参照してください。
2.3) Data Provider オブジェクトを使用できます。
そのために、データプロバイダーを (たとえば DPOneAttraction という名前で) 作成します。KB エクスプローラーからデータプロバイダーの [ Source ] に Attraction トランザクションをドラッグし、次のようにデータを入力します:
Attraction
{
    AttractionId = 1 
    CategoryId = 1
}
それから、自分がいるコンテキスト (たとえば Panel オブジェクトまたは Web Panel オブジェクトの [ Events ] エレメント) でデータプロバイダーを呼び出します。
Event 'UpdateAttraction'
    &Attraction = DPOneAttraction()
    If &Attraction.Update()
        commit
        msg("The update has been successfully completed")
    Else
        rollback
        msg(&Attraction.GetMessages().ToJson())
    Endif
Endevent

2.4) 次に、複数の観光名所を更新するとします。そのために、データプロバイダーを (たとえば DPSeveralAttractions という名前で) 定義できます。
KB エクスプローラーからデータプロバイダーの [ Source ] に Attraction トランザクションをドラッグし、次のようにデータを入力します:
イメージ:50168.png
[ Source ] に Attraction トランザクションをドラッグしたため、データプロバイダーの [ Output ] プロパティは自動的に (「Attraction」と) 入力されます。
複数の観光名所を返すように指定するため、[ Collection ] プロパティを True に設定します。
データプロバイダーを定義したら、オブジェクト (Panel、Web Panel、Procedure など) 内で変数を (&Attractions などの名前で) 定義し、次の画像に示すように [ Is Collection ] チェックボックスを選択してコレクションとして設定します:
イメージ:50163.png
次に、自分がいるコンテキスト (たとえば Panel オブジェクトまたは Web Panel オブジェクトの [ Events ] エレメント) でデータプロバイダーを呼び出し、次のようにコードを記述します:
Event 'UpdateAttractions'
    &Attractions = DPSeveralAttractions()
    If &Attractions.Update()
        commit
        msg("The data has been updated")
    Else
        rollback
        msg("Unable to update")
    Endif
Endevent

ここまでに、データプロバイダー内で観光名所のデータをロードしました。そしてデータプロバイダーを呼び出し、コレクションとして設定した変数にデータを返しました。最後に、データベースでデータが更新されます。
 

3) 削除のサンプル


3.1) たとえば ID が 1 の観光名所を削除するには、次に示すようにビジネスコンポーネントの Delete メソッドを使用します:
   &Attraction.Load(1)
   &Attraction.Delete()
   If &Attraction.success()
      commit
      msg("The update has been successfully completed")
   Else 
      rollback 
      msg(&Attraction.GetMessages().ToJson()) 
   Endif 

3.2) 複数の観光名所を削除する場合、たとえばすべての遺跡 (CategoryId が 2 の観光名所) を削除するには、For Each コマンドを使用して必要な観光名所をスキャンします。次に、ループ内で各観光名所をロードして削除します:
   For each Attraction
       where CategoryId = 2
             &Attraction.Load(AttractionId)
             &Attraction.Delete()
             If &Attraction.success()
                commit
             Else 
                rollback 
             Endif    
   Endfor   
    

4) 挿入または更新のサンプル

ビジネスコンポーネントの InsertOrUpdate メソッドの記事を参照してください。複数の例を挙げています。

 

5) Attraction の行の挿入のサンプル

ビジネスコンポーネントの Add メソッドの記事を参照してください。例を挙げて説明しています。
 

6) Attraction の行の更新のサンプル

ビジネスコンポーネントとして設定された次の 2 レベルトランザクションについて考えます:
Attraction
{ 
   AttractionId*
   AttractionName
   CategoryId
   CategoryName
   CountryId
   CountryName
   CityId
   CityName
   Ticket
   {
      AttractionTicketId*
      AttractionTicketDescription
      AttractionTicketPrice
   }
}

6.1) AttractionId = 6、AttractionTicketId = 3 に対して価格の更新を行う必要があるとします。
ビジネスコンポーネントの GetByKey メソッドの記事を参照してください。その場合の解決法を説明しています。

6.2) ビジネスコンポーネントとして設定された同じ 2 レベルトランザクションで、AttractionId = 6 のチケットの価格を更新し、説明を「Without tour guide」とするとします。
そのためのコードは次のようになります:
  &Attraction.Load(6)
  For &Ticket in &Attraction.Ticket
      If &Ticket.AttractionTicketDescription="Without tour guide"
          &Ticket.AttractionTicketPrice=100
      Endif
  Endfor
  &Attraction.Save()
  If &Attraction.success()
     commit
     msg("The update has been successfully completed")
  Else
     rollback
     msg(&Attraction.GetMessages().ToJson())
  Endif

7) Attraction の行の削除のサンプル

ビジネスコンポーネントとして設定された次の 2 レベルトランザクションについて考えます:
Attraction
{ 
   AttractionId*
   AttractionName
   CategoryId
   CategoryName
   CountryId
   CountryName
   CityId
   CityName
   Ticket
   {
      AttractionTicketId*
      AttractionTicketDescription
      AttractionTicketPrice
   }
}

7.1) AttractionId = 6 に対して、AttractionTicketId=3 の行を削除する必要があるとします。
ビジネスコンポーネントの RemoveByKey メソッドの記事を参照してください。その場合の解決法を説明しています。

7.2) ビジネスコンポーネントとして設定された同じ 2 レベルトランザクションで、AttractionId = 6 の最初のチケットを AttractionTicketId の値に関わらず削除する必要があるとします。
そのためのコードは次のようになります:
  &Attraction.Load(6)
  &Attraction.Ticket.Remove(1)
  &Attraction.Save()
  If &Attraction.success()
     commit
     msg("The line deletion has been successfully completed")
  Else
     rollback
     msg(&Attraction.GetMessages().ToJson())
  Endif 
 

8) ビジネスコンポーネントを Web サービスとして公開するサンプル

ビジネスコンポーネント - Web サービスとして公開の記事を参照してください。例を挙げて説明しています。





サブページ
Created: 15/01/07 22:48 by Admin Last update: 23/04/24 18:05 by Admin
カテゴリ
Powered by GXwiki 3.0