ChangeQuantity メソッド 3
ここでは、ブラウザに JavaScript コードの 1 行を返送することで、注文フォームの TotalCharge フィールドの値を更新します。このために、メソッド内に &js<> 指示文を使用します。クラスをコンパイルすると、&js<> のコンテンツが適切なシーケンスの Write コマンドに変換され、JavaScript がブラウザに返されます。
合計値を 2 桁でフォーマットする $FN 関数を使用します。次に、QuoteJS メソッドを使用して、フォーマットした値を JavaScript 文字列として引用します(これがない場合、値は JavaScript 文字列として直接扱われ、$FN によって適用されるフォーマットが失われます)。
変更した TicketOrder オブジェクトを、データベースに保存する必要があることに注意してください。QuoteJS は %CSP.PageOpens in a new tab クラスに含まれるクラス・メソッドです。Cinema.UtilsOpens in a new tab 内のメソッドを呼び出すために、##class(PackageName.ClassName).MethodName() 構文を使用する必要があります。
Utils.ChangeQuantity
ClassMethod ChangeQuantity(
ItemNum As %Integer,
TicketType As %Integer,
NewQuantity As %Integer)
{
If $data(%session.Data("Order"))
{
// Open the current order object
Set ord = ##class(Cinema.TicketOrder).%OpenId(%session.Data("Order"))
// Update quantity
Set itm=ord.Items.GetAt(ItemNum)
// Determine if we are changing
// adult or child tickets
If ( TicketType = 1)
{
// Adjust the total price
Set ord.Total = ord.Total +
((NewQuantity - itm.AdultTickets) * itm.Show.Theater.AdultPrice)
// Update the number of tickets
Set itm.AdultTickets = NewQuantity
}
Else
{
Set ord.Total = ord.Total +
((NewQuantity - itm.ChildTickets) * itm.Show.Theater.ChildPrice)
Set itm.ChildTickets = NewQuantity
}
&js<parent.Order.document.OrderTickets.TotalCharge.value=
#(##class(%CSP.Page).QuoteJS($FN(ord.Total,"",2)))#;>
// Save incomplete order.
Do ord.%Save()
}
}