I have got it working using your code line - thanks Mike.
I have another issues elsewhere if you could give me a tip/s please.
I am updating an order using the file watcher / csv import code ( modified from Jiwa file watcher code ).
Question 1
The code works where I need to update the ThisDel field. however using the above method to update the custom field ( snapshot custom field ) , I get the same error - "Object reference not set to an instance of an object."
This is using the Jiwa plugin scheduler service - so I don't have the sales order on screen. code is below.
see towrds the end - the code line given below fails.
salesOrder.SalesOrderHistorys(shSelectedHistoryNo).CustomSettingValues.ItemFromSettingName("ediSOPickDate").Contents = Date.Today.ToString()
Quesion 2 -
also as a phase 2 - that I have not tried yet - I want to be able to update the desired snaphot only. How do I make sure the csv importer code updates the snaphot I require ?
THANks in advance.
- Code: Select all
'calling from
ScheduledExecutionPlugin.OnServiceStart
'as below
CSVSalesOrderWatcher = New JiwaFileWatcher(Plugin, CONST_STRING_FILE_WATCHER_ROOT_FOLDER ) ' "C:\Temp"
AddHandler CSVSalesOrderWatcher.FileImport, AddressOf CSVSalesOrderPickConfirmationImport_ICE
CSVSalesOrderWatcher.ImportAllFilesInWatchFolder()
'the bit of code in the CSVSalesOrderPickConfirmationImport_ICE is
Dim salesOrder As JiwaSales.SalesOrder.SalesOrder = JiwaApplication.Manager.Instance.BusinessLogicFactory.CreateBusinessLogic(Of JiwaSales.SalesOrder.SalesOrder)(Nothing)
Dim sInvNo As String = ""
'--debug code
Dim oLogFileWriter As StreamWriter
If (System.IO.File.Exists("C:\Temp\EDI\Infa\In\log.txt")) Then
System.IO.File.Delete("C:\Temp\EDI\Infa\In\log.txt")
End If
If Not(System.IO.File.Exists("C:\Temp\EDI\Infa\In\log.txt")) Then
oLogFileWriter = New StreamWriter("C:\Temp\EDI\Infa\In\log.txt",True )
oLogFileWriter.WriteLine ("New log started ")
oLogFileWriter.Flush()
End If
Try
'--debug code
oLogFileWriter.WriteLine("before csv parser file name to read is " & FileName.ToString() )
oLogFileWriter.Flush()
Using csvParser As New FileIO.TextFieldParser(FileName)
'--debug code
oLogFileWriter.WriteLine("just after using csv parser " )
oLogFileWriter.Flush()
csvParser.TextFieldType = FileIO.FieldType.Delimited
csvParser.Delimiters = New String() {","}
csvParser.HasFieldsEnclosedInQuotes = False
Dim csvFields As String()
Dim previousOrderNo As String = Nothing
Dim newKey As String = ""
'--debug code
oLogFileWriter.WriteLine("just before debtor and inveory" )
oLogFileWriter.Flush()
Dim debtor As JiwaApplication.Entities.Debtor.Debtor = New JiwaApplication.Entities.Debtor.Debtor
Dim inventory As JiwaApplication.Entities.Inventory.Inventory = New JiwaApplication.Entities.Inventory.Inventory
'--debug code
oLogFileWriter.WriteLine("just after debtor and inv " )
oLogFileWriter.Flush()
Dim bHeaderRead As Boolean = False
Dim bOrderObtained As Boolean = False
Dim shSelectedHistoryNo As Short = 0
'--debug code
oLogFileWriter.WriteLine("just before do while " )
oLogFileWriter.Flush()
Do While Not csvParser.EndOfData
If Not bHeaderRead Then
'--debug code
oLogFileWriter.WriteLine("after bHeaderRead" )
csvFields = csvParser.ReadFields
bHeaderRead = True
End If
'--debug code
oLogFileWriter.WriteLine("before csvParser.ReadFields" )
oLogFileWriter.Flush()
csvFields = csvParser.ReadFields
sInvNo = csvFields(0).ToString().Trim() '-- JiwaInvoiceNo
'--debug code
oLogFileWriter.WriteLine("before history number get " )
oLogFileWriter.Flush()
shSelectedHistoryNo = CShort(csvFields(1).ToString().Trim()) '-- snaphot no
'--debug code
oLogFileWriter.WriteLine("history number is " + shSelectedHistoryNo.ToString())
oLogFileWriter.Flush()
If Not (bOrderObtained) Then
'--debug code
oLogFileWriter.WriteLine(" before order read ")
oLogFileWriter.Flush()
salesOrder.Read(getSalesOrderIdByInvNo (sInvNo))
bOrderObtained = True
'--debug code
oLogFileWriter.WriteLine(" after order read ")
oLogFileWriter.Flush()
salesOrder.HistoryCustomSettings.Read()
If (salesOrder.SalesOrderStatus = JiwaSales.SalesOrder.SalesOrder.SalesOrderStatuses.e_SalesOrderProcessed Or salesOrder.SalesOrderStatus = JiwaSales.SalesOrder.SalesOrder.SalesOrderStatuses.e_SalesOrderClosed ) Then
CSVSalesOrderWatcher.LogToEventLog("Failed to update ICE sales order InvNo: " + sInvNo + " FileName: " + FileName + vbNewLine + " Order may be closed or processed. " + csvFields(6).ToString().Trim() , System.Diagnostics.EventLogEntryType.FailureAudit )
Throw New Exception ( "Editing an order that is closed or processed error. ")
Return
End If
End If
'----------------------------------------------------------------------------
'--- note the Item index can be line number or line id
'if supplying with line number with a variable make sure
'its a int and not long
'---------------------------------------------------------------------------
Dim salesOrderLine As JiwaSales.SalesOrder.SalesOrderLine
Dim sLineId As String = csvFields(3).ToString().Trim()
salesOrderLine = salesOrder.SalesOrderLines.Item(sLineId)
Dim qtyThisDel As Decimal = 0
If Not (Decimal.TryParse(csvFields(6).ToString().Trim() , qtyThisDel )) Then
'---place a Error message On windows log and raise error - exit out
CSVSalesOrderWatcher.LogToEventLog("Failed to update ICE sales order InvNo: " + sInvNo + " FileName: " + FileName + vbNewLine + " Could Not parse quantity del value " + csvFields(6).ToString().Trim() , System.Diagnostics.EventLogEntryType.FailureAudit)
Throw New Exception ( "Quantity to deliver parse error. ")
Return
End If
salesOrderLine.QuantityThisDelivery = qtyThisDel
Loop
If salesOrder.SalesOrderLines.Count > 0 Then
'salesOrder.CustomFieldValues.ItemFromSettingName("ediSOPickDate").Contents = Date.Today.ToString()
'--debug code
oLogFileWriter.WriteLine(" before set custom field value ")
oLogFileWriter.Flush()
' Dim soH As JiwaSales.SalesOrder.SalesOrderHistory
' soH.SalesOrderHistorys.Read()
'salesOrder.HistoryCustomSettings.Read()
salesOrder.SalesOrderHistorys(shSelectedHistoryNo).CustomSettingValues.ItemFromSettingName("ediSOPickDate").Contents = Date.Today.ToString()
'--debug code
oLogFileWriter.WriteLine(" after set custom field value ")
oLogFileWriter.Flush()
salesOrder.Save()
'CSVSalesOrderWatcher.LogToEventLog(String.Format("Updated Sales Order Invoice No. '{0}' from File '{1}'", sInvNo , FileName), System.Diagnostics.EventLogEntryType.SuccessAudit)
CSVSalesOrderWatcher.LogToEventLog("Updated ICE sales order InvNo: " + sInvNo + " FileName: " + FileName , System.Diagnostics.EventLogEntryType.SuccessAudit)
Else
CSVSalesOrderWatcher.LogToEventLog("Cannot update ICE sales order. No Lines in file. InvNo: " + sInvNo + " FileName: " + FileName , System.Diagnostics.EventLogEntryType.FailureAudit)
End If
End Using
Catch ex As Exception
CSVSalesOrderWatcher.LogToEventLog("Error Occured updating ICE sales order InvNo: " + sInvNo + " FileName: " + FileName + vbNewLine + ex.Message , System.Diagnostics.EventLogEntryType.FailureAudit)
End Try