ビジネスコンポーネントとして定義されている次の
Transaction オブジェクトがあるとします。

以降の例では、特定のオブジェクト (
Web Panel オブジェクト、
Panel オブジェクト、
Procedure オブジェクトなど) で Attraction データタイプに基づいて &Attraction 変数を定義する必要があるとします。その後、以下に示すサンプルのコードを対応するオブジェクトのセクション (Web Panel オブジェクトのイベント、Panel オブジェクトのイベント、Procedure オブジェクトのソースなど) に記述できます。
新しい観光名所を挿入するとします。
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 トランザクションをドラッグし、次のようにデータを入力します:

[ Source ] に Attraction トランザクションをドラッグしたため、データプロバイダーの
[ Output ] プロパティは自動的に (「Attraction」と) 入力されます。
複数の観光名所を返すように指定するため、
[ Collection ] プロパティを True に設定します。
データプロバイダーを定義したら、オブジェクト (Panel、Web Panel、Procedure など) 内で変数を (&Attractions などの名前で) 定義し、次の画像に示すように [ Is Collection ] チェックボックスを選択してコレクションとして設定します:

次に、自分がいるコンテキスト (たとえば 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.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 トランザクションをドラッグし、次のようにデータを入力します:

[ Source ] に Attraction トランザクションをドラッグしたため、データプロバイダーの
[ Output ] プロパティは自動的に (「Attraction」と) 入力されます。
複数の観光名所を返すように指定するため、
[ Collection ] プロパティを True に設定します。
データプロバイダーを定義したら、オブジェクト (Panel、Web Panel、Procedure など) 内で変数を (&Attractions などの名前で) 定義し、次の画像に示すように [ Is Collection ] チェックボックスを選択してコレクションとして設定します:

次に、自分がいるコンテキスト (たとえば 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.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
ビジネスコンポーネントの InsertOrUpdate メソッドの記事を参照してください。複数の例を挙げています。
ビジネスコンポーネントの Add メソッドの記事を参照してください。例を挙げて説明しています。
ビジネスコンポーネントとして設定された次の 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
ビジネスコンポーネントとして設定された次の 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
ビジネスコンポーネント - Web サービスとして公開の記事を参照してください。例を挙げて説明しています。