dotnetdevcsharp
dotnetdevcsharp

Reputation: 3980

How do I add to this array?

I have an object called pushOrderIncQTY. I can insert one item into the array using the I have an overload which accepts multiple items. My question is: how do I resize the array and add a record to it?

Dim pushOrderIncQTY() As infoPushOrderIncQTY

With pushOrderIncQTY
    .costPrice = thisentry.Item("costPrice")
    .externalTimeStamp = DateTime.Now()
    .RootPLU = thisentry.Item("tagbarcode") 'set this to the barcode from the file
    .sizeBit = -666
    .supplierID = cfb.SupplierID
    .orderReference = thisentry.Item("OrderNumber")
    .orderLineReference = ""
    .externalTransaction = ""
    .sourceShop = cfb.SiteId 'set to the GEMINI location ID for this store (you will have to get this from your configuration file
    .destinationShop = cfb.SiteId 'set this to the same as the sourceshop
    .QTY = thisentry.Item("ActQty")
    .whichQty = LiveSales.infoPushOrderIncQTY.Which_OrderQty.delivered 'only available option at present
End With

Edits here Ok So i Can go with a list I tested this code and its putting int 16 records fine but how do I get it to go in batches

    Dim pushOrderInQty As New List(Of infoPushOrderIncQTY)()

    For Each thisentry2 In orderLineData.Rows
        With pushOrderIncQTY

            .costPrice = thisentry2.Item("costPrice")
            .externalTimeStamp = DateTime.Now()
            .RootPLU = thisentry2.Item("tagbarcode") 'set this to the barcode from the file
            .sizeBit = -666
            .supplierID = cfb.SupplierID
            .orderReference = thisentry2.Item("OrderNumber")
            .orderLineReference = ""
            .externalTransaction = ""
            .sourceShop = cfb.SiteId 'set to the GEMINI location ID for this store (you will have to get this from your configuration file
            .destinationShop = cfb.SiteId 'set this to the same as the sourceshop
            .QTY = thisentry2.Item("ActQty")
            .whichQty = LiveSales.infoPushOrderIncQTY.Which_OrderQty.delivered 'only available option at present

        End With
        recordCount = recordCount + 1

        pushOrderInQty.Add(pushOrderIncQTY)
    Next

    CallWebSerivce(wrpPush, request, pushOrderInQty.ToArray())

What I want is the ability to set batch size in cfb.batchsize which is a wrapper for my config file, what I want is say if their is 20 records and batch size is 5 it means the web service should be only called 4 times and not 20 individual times? and the records that get added to list is only 5 till the records set is completed?

Upvotes: 0

Views: 58

Answers (2)

TimG
TimG

Reputation: 602

You have asked two questions. So here is a separate answer to your second question. You simply need to count the reps within your loop. When you hit your batch size, call your web service and empty your list (to start over with a fresh batch). Like this:

Dim pushOrderInQty As New List(Of infoPushOrderIncQTY)()

For Each thisentry2 In orderLineData.Rows
    With pushOrderIncQTY
        .costPrice = thisentry2.Item("costPrice")
        .externalTimeStamp = DateTime.Now()
        '...etc
    End With
    recordCount = recordCount + 1

    pushOrderInQty.Add(pushOrderIncQTY)

    If recordCount >= cfb.BatchSize Then
        CallWebSerivce(wrpPush, request, pushOrderInQty.ToArray())
        pushOrderInQty.Clear()
        recordCount = 0
    End If
Next

'get the last, partial batch
If pushOrderInQty.Count > 0 Then
    CallWebSerivce(wrpPush, request, pushOrderInQty.ToArray())
End If

Upvotes: 2

TimG
TimG

Reputation: 602

You can use ReDim to resize any arry, but it wipes the contents. ReDim Preserve will retain the contents.

ReDim Preserve pushOrderIncQTY(5)

'or just make it one element larger, which is something you DO NOT want to do in a loop

Dim oldSize as integer = UBound(pushOrderIncQTY) 
ReDim Preserve pushOrderIncQTY(oldSize + 1)

Btw, you could also define it as type List(of pushOrderIncQTY) and then after the list is loaded, you could use the .ToArray() method to convert it to an array.

Upvotes: 2

Related Questions