Создание массива объектов в классическом ASP - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь создать класс в Classic ASP и приближаюсь к тому, что я ищу, но это не совсем так.Мне еще предстоит найти примеры, которые решают мою проблему.

В этом примере мне нужно, чтобы класс LineItem был сохранен в классе Order в виде массива, чтобы в заказе могло быть несколько позиций.В настоящее время это работает, но позволяет только один экземпляр LineItem.Может кто-нибудь дать мне пример, показывающий, как превратить его в массив?Я понимаю, как создать массив объектов, но не как хранить их в родительском объекте.Приношу свои извинения, но прошло уже более 15 лет с тех пор, как я занимался программированием на Classic ASP, и я забыл большую часть того, что знал тогда.

<%
    Class LineItem

    Private LineNumberVar
    Private ItemCostVar
    Private QuantityVar
    Private ItemCodeVar
    Private ItemDescriptionVar

    ' Line Number
    Public Property Get LineNumber()
        LineNumber = LineNumberVar
    End Property

    Public Property Let LineNumber(lineNumberParam)
        LineNumberVar = lineNumberParam
    End Property

    ' Item Cost
    Public Property Get ItemCost()
        ItemCost = ItemCostVar
    End Property

    Public Property Let ItemCost(itemCostParam)
        ItemCostVar = itemCostParam
    End Property

    ' Quantity
    Public Property Get Quantity()
        Quantity = QuantityVar
    End Property

    Public Property Let Quantity(quantityParam)
        QuantityVar = quantityParam
    End Property

    ' Item Code
    Public Property Get ItemCode()
        ItemCode = ItemCodeVar
    End Property

    Public Property Let ItemCode(itemCodeParam)
        ItemCodeVar = itemCodeParam
    End Property

    ' Item Description
    Public Property Get ItemDescription()
        ItemDescription = ItemDescriptionVar
    End Property

    Public Property Let ItemDescription(itemDescriptionParam)
        ItemDescriptionVar = itemDescriptionParam
    End Property
End Class


Class Order

    Private CustomerIDVar
    Private OrderIDVar
    Private EmailVar
    Private ItemsVar 

    'CustomerID
    Public Property Get CustomerID()
        CustomerID = CustomerIDVar
    End Property

    Public Property Let CustomerID(customerIDParam)
        CustomerIDVar = customerIDParam
    End Property

    'OrderID
    Public Property Get OrderID()
        OrderID = OrderIDVar
    End Property

    Public Property Let OrderID(orderIDParam)
        OrderIDVar = orderIDParam
    End Property

    'Email
    Public Property Get Email()
        Email = EmailVar
    End Property

    Public Property Let Email(emailParam)
        EmailVar = emailParam
    End Property

    ' Line Items (needs to be an array of LineItem class objects)
    'Items
    Public Property Get Items()
        Set Items = ItemsVar
    End Property

    ' must use Set for objects
    Public Property Set Items(itemsParam)
        Set ItemsVar = itemsParam
    End Property

    Private Sub Class_Initialize
        ItemsVar = Array() ' initialize to empty dynamic array
    End Sub

    Function AddLineItem(itemArray, item)
        ReDim Preserve itemArray(UBound(itemArray) + 1)
        itemArray(UBound(itemArray)) = items
        AddLineItem = itemArray
    End Function
End Class


    Dim ItemsVar
    Set ItemsVar = new LineItem

    ItemsVar.LineNumber = 1
    ItemsVar.ItemCost = 25.00
    ItemsVar.Quantity = 1
    ItemsVar.ItemCode = "42667"
    ItemsVar.ItemDescription = "Software"

    Dim OrderVar
    Set OrderVar = New Order

    Set OrderVar.Items = ItemsVar

    OrderVar.CustomerID = "0937263"
    OrderVar.OrderID = "2348725"
    OrderVar.Email = "nobody@gmail.com"

    %>

    <%= OrderVar.CustomerID %><br />
    <%= OrderVar.OrderID %><br />
    <%= OrderVar.Email %><br />
    <%= OrderVar.Items.LineNumber %><br />
    <%= OrderVar.Items.ItemCost %><br />
    <%= OrderVar.Items.Quantity %><br />
    <%= OrderVar.Items.ItemCode %><br />
    <%= OrderVar.Items.ItemDescription %><br />

1 Ответ

0 голосов
/ 23 февраля 2019

Поскольку вам нужно только добавить элемент строки в массив, вы можете сделать AddLineItem подпунктом вместо функции.

Class Order

    Private ItemsVar 

    Public Property Get Items()
        Items = ItemsVar
    End Property

    Public Property Set Items(itemsParam)
        Set ItemsVar = itemsParam
    End Property

    Private Sub Class_Initialize
        ItemsVar = Array()
    End Sub

    Sub AddLineItem(newitem)
        ReDim Preserve ItemsVar(UBound(ItemsVar) + 1)
        set ItemsVar(UBound(ItemsVar)) = newitem
    End Sub

End Class

Чтобы добавить новый элемент строки,

Set OrderVar = New Order
Ordervar.AddLineItem(NewItem)

Для циклического перебора элементов строки,

For each ThisLineItem in OrderVar.Items
    Response.write ThisLineItem.ItemDescription & "<br>"
Next
...