Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

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—
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()
  }
}
FeedbackOpens in a new tab