ここでは、
Composite コマンドの例を示します。
例 1
この例では、GeneXus で Neighborhood
Transaction オブジェクトの Delete システムイベントを自動的に作成する方法を示します。
Neighborhood
{
NeighborhoodId*
NeighborhoodName
NeighborhoodInfo
}
Event 'Delete'
Composite
WorkWithDevicesNeighborhood.Neighborhood.Detail.Delete(NeighborhoodId)
Return
EndComposite
EndEvent
エンドユーザーが [ Delete ] ボタンをクリックすると、Neighborhood トランザクションの WorkWithDevicesNeighborhood が、関連付けられている Delete 関数を呼び出します。何かの理由で削除が正常に行われなかった場合、次の
Return コマンドは実行されずに (つまり、List に戻らずに)、コントロールはそのビューにとどまります。
例 2
この例では、クライアントのメールの更新を解決し、処理に成功した場合はクライアントに SMS を送信します。ここでは次のトランザクションを使用します。
1. &ClientId と &ClientEMail をパラメーターで受け取るプロシージャーを作成します。その後、メールを更新して、標準の Messages ドメインから &Messages を返します。
For each
where ClientId = &ClientId
ClientEMail = &ClientEmail
when duplicate
&Message.Type = MessageTypes.Error
&Message.Description = "Email duplicated" + str(&ClientId)
&Messages.Add(&Message)
return
EndFor
ClientEmail は候補キー (一意) なので、このプロシージャーで更新する必要があります。「when duplicate」は例外で、Composite は例外のみをチェックするため、別のメールに同じ値が指定されている場合はエラーになり、&Messages 変数で報告します。
2. Client トランザクションに
Work With パターンを適用します。
次のアクションを追加します:
a. 右クリックして [ アクションを挿入 ] を選択し、新しいアクション CheckEMail を追加します。
b. 次に、ボタンの [ Caption ] プロパティを CheckEMail に設定します。
c. このプロシージャーは、パラメーターで &ClientId と &ClientEMail を受け取ります。
3. ここでユーザーイベントのコードを記述します。コンテキストメニューで [ イベントへ移動 ] を選択し、次のコードを記述します。
Event 'UpdateEmail'
Composite
UpdateEMail.Call(ClientId,&ClientEmail,&messages)
Interop.SendMessage("Your Email has been updated successfully in my database",ClientMobilePhone)
EndComposite
EndEvent
ここでは
Composite コマンドというコードブロックを開いています。このコードは、構成と同様に順番に実行されます。
最初の命令で、作成したプロシージャーを呼び出してから、Interop を呼び出して、デバイスに通知を送信します。詳しくは、「
スマートデバイスの Interop の SendMessage メッセージを使用する方法」を参照してください。
UpdateEmail プロシージャーの呼び出しでエラーが発生した場合、コントロールは Interop に進まず、Exit コマンドが実行された場合と同様に返されます。さらに大きな一連のアクションがある場合でも、コントロールは同様に動作します。
記述:
Composite
UpdateEMail.Call(ClientId,&ClientEmail,&Messages)
Interop.SendMessage("Your Email has been updated successfully in my database",ClientMobilePhone)
EndComposite
これは次の記述と同等です。
UpdateEMail.Call(ClientId,&ClientEmail,&Messages)
For &message in &messages
If &message.Type = MessageTypes.Error
msg(&message.Description)
Exit
else
Interop.SendMessage("Your Email has been updated successfully in my database",ClientMobilePhone)
Exit
EndIf
EndFor
注: プロシージャーを呼び出すときに、&Messages 変数に具体的な値を指定する必要はありません。ただし、プロシージャーで OUTPUT として宣言し、その名前をそのまま "Messages" にする必要があります。
Parm(parm1, parm2, …parmn, Out:&Messages);
通常どおり、
Composite コマンド内でバッチモードで
ビジネスコンポーネントを呼び出す場合は、更新などのビジネスコンポーネントに応じた変数で作成します。
Composite
&Cliente.Load(5)
&Cliente.Name = "Wayne, Bruce"
&Cliente.Save()
EndComposite
Events in Mobile Applications