This script runs from a button on Sales Order DMAIN. The purpose is to update UDF values in SO Detail based on changes made in CI Item.
I have tested the script with message boxes (not shown here) to verify that expected keys, line and Item Master values are pulled and it all looks good. The UDFs are numeric, the user running the script as full rights, external access is enabled.
The piece that I can't figure out is updating the values on SO line. Each of these lines returns "1" but the UDF values do not change even after a grid reload. I also tried updating the line Comment but that would not work either.
vEditKey = oSOLines.GetEditKey(vLineKey)
retVal = oSOLines.EditLine(vEditKey)
retVal = oSOLines.SetValue("UDF_DSPRICE", DSP1)
retVal = oSOLines.SetValue("UDF_DSPRICE2", DSP2)
retVal = oSOLines.Write()
Any suggestions are appreciated.
The full code is here:
If oSession.CompanyCode = "TST" Then 'Test for Company
Dim vSONo, vitemcode, DSP1, DSP2, vItemType, vLineKey, vret, vEditKey
vitemcode = ""
DSP1 = 0
DSP2 = 0
vSONo = ""
vItemType = ""
vLineKey = ""
vret = 0
vEditKey = ""
If Not (IsObject(oSOHeader)) Then
Set oSOHeader = oSession.AsObject(oSession.GetObject("SO_SalesOrder_bus"))
End If
vSONo = SO_SalesOrder_bus_SalesOrderNo
retVal = oSOHeader.SetKey(vSONo)
If Not (IsObject(oSOLines)) Then
Set oSOLines = oSession.AsObject(oSOHeader.Lines)
End If
retVal = oSOLines.movefirst()
Do Until oSOLines.EOF 'look at each line in the object
retVal = oSOLines.GetValue("ItemType$", vItemType) 'get item code
If vItemType = "1" Then 'Check only regular inventory items
retVal = oSOLines.GetValue("SalesOrderNo$", vSONo) 'get item code
retVal = oSOLines.GetValue("ItemCode$", vitemcode) 'get item code
retVal = oSOLines.GetValue("LineKey$", vLineKey) 'get line key
If Not (IsObject(oCI_ItemOb)) Then
Set oCI_ItemOb = oSOLines.AsObject(oSOLines.GetChildHandle("ItemCode"))
End If
retVal = oCI_ItemOb.GetValue("UDF_DSPRICE", DSP1)
retVal = oCI_ItemOb.GetValue("UDF_DSPRICE2", DSP2)
vEditKey = oSOLines.GetEditKey(vLineKey)
retVal = oSOLines.EditLine(vEditKey)
retVal = oSOLines.SetValue("UDF_DSPRICE", DSP1)
retVal = oSOLines.SetValue("UDF_DSPRICE2", DSP2)
retVal = oSOLines.Write()
End If 'Check only regular inventory items
retVal = oSOLines.movenext()
Loop 'look at each line in the object
retVal = oBusObj.PriceRecalculation()
oScript.LinesAdded = 1
myretVal = oScript.LoadGrid("GD_Lines")
myretVal = oUIObj.HandleScriptUI()
End If 'Test for Company