Dynamics NAV 2015 Update Sales Line by Web service : Line already exists
spiky_golden
Member Posts: 44
Hi guys,
I'm building some data synchronization using Dynamics NAV web service. I managed to create Sales Header and Sales Lines, but When I try to update a sales Line I got this message :
from what i understand it seems to be trying to recreate the line instead of doing an update. I'm stuck can you help me?
Here's my test code:
I'm building some data synchronization using Dynamics NAV web service. I managed to create Sales Header and Sales Lines, but When I try to update a sales Line I got this message :
The Sales Lines Exists, Identifiation fields and values: Document Type = 'Order', Document No.='P-20-B',Line No.=10 000
from what i understand it seems to be trying to recreate the line instead of doing an update. I'm stuck can you help me?
Here's my test code:
Private Sub UpdateSalesLine()
Dim _SalesOrder As New wsNAV_SalesHeaderAndLines.wsNAV_SalesHeaderAndLines_Service ' this is the Sales Header Service
Dim salesOrder As New wsNAV_SalesHeaderAndLines.wsNAV_SalesHeaderAndLines ' this is the Sales Header card
_SalesOrder.UseDefaultCredentials = False
_SalesOrder.Credentials = New System.Net.NetworkCredential("username", "password")
Try
salesOrder = _SalesOrder.Read("1", "P-20-B") ' get the Sales Header Card
Dim salesLines(0) As wsNAV_SalesHeaderAndLines.WS_SalesLine ' Create an empty array
If Not salesOrder.WS_SalesLine Is Nothing Then
salesLines = salesOrder.WS_SalesLine
End If
If Not _SalesOrder.IsUpdated(salesOrder.Key) Then ' check if object is still the same
Dim idx As Integer = 0
Dim blnLineFound As Boolean = False
While idx < salesLines.Length
Dim oLine As wsNAV_SalesHeaderAndLines.WS_SalesLine
oLine = DirectCast(salesLines(idx), wsNAV_SalesHeaderAndLines.WS_SalesLine)
If oLine.Line_No = 10000 Then
blnLineFound = True
Exit While
End If
idx = idx + 1
End While
If blnLineFound Then
With DirectCast(salesLines(idx), wsNAV_SalesHeaderAndLines.WS_SalesLine) ' set values
.Bin_Code = Nothing
.Description = "1 - W 24 X 32 x 17 *2"
.Description_2 = Nothing
.Document_No = "P-20-B"
'.Document_Type = wsNAV_SalesHeaderAndLines.Document_Type_1.Order
'.Document_TypeSpecified = True
.Item_Category_Code = "PF"
.Key = Nothing
'.Line_No = 10000
'.Line_NoSpecified = True
.Location_Code = "COATICOOK"
.Type = wsNAV_SalesHeaderAndLines.Type.Item
.TypeSpecified = True
.No = "GCAISSON"
.Product_Group_Code = "CABINETS"
.Quantity = 1
.QuantitySpecified = True
.Unit_Price = 10000
.Unit_PriceSpecified = True
.Variant_Code = Nothing
End With
End If
_SalesOrder.Update(salesOrder) ' update Sales Header Card
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
0
Best Answer
-
Well, I finally create a CodeUnit that manage the modification. I tried first to use the salesLine in the sales Header Card but no luck...5
Answers
-
-
If you create a small project file I can test it for you here.
For now I suggest you to see if writing new lines with a lineno=1000000, +10) works..0 -
I can give you both methods i use to create and update bu you will need to adapt to your Nav environment. is that ok?
0 -
ok0
-
here it is:
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click CreateSalesLine() UpdateSalesLine() End Sub Private Sub CreateSalesLine() Dim _SalesOrder As New wsNAV_SalesHeaderAndLines.wsNAV_SalesHeaderAndLines_Service Dim salesOrder As New wsNAV_SalesHeaderAndLines.wsNAV_SalesHeaderAndLines _SalesOrder.UseDefaultCredentials = False _SalesOrder.Credentials = New System.Net.NetworkCredential("username", "password") Try salesOrder = _SalesOrder.Read("1", "P-20-B") Dim salesLines(0) As wsNAV_SalesHeaderAndLines.WS_SalesLine If Not salesOrder.WS_SalesLine Is Nothing Then salesLines = salesOrder.WS_SalesLine End If If Not _SalesOrder.IsUpdated(salesOrder.Key) Then If salesLines.Length = 0 Then ReDim Preserve salesLines(0) End If Dim newSalesline As New wsNAV_SalesHeaderAndLines.WS_SalesLine() With newSalesline .Bin_Code = Nothing .Description = "1 - W 24 X 32 x 17 *2" .Description_2 = Nothing .Document_No = "P-20-B" .Document_Type = wsNAV_SalesHeaderAndLines.Document_Type_1.Order .Document_TypeSpecified = True .Item_Category_Code = "PF" .Key = Nothing .Line_No = salesLines.Length * 10000 .Line_NoSpecified = True .Location_Code = "COATICOOK" .Type = wsNAV_SalesHeaderAndLines.Type.Item .No = "GCAISSON" .Product_Group_Code = "CABINETS" .Quantity = 10 .QuantitySpecified = True .TypeSpecified = True .Unit_Price = 1000 .Unit_PriceSpecified = True .Variant_Code = Nothing End With salesLines(salesLines.Length - 1) = newSalesline salesOrder.WS_SalesLine = salesLines _SalesOrder.Update(salesOrder) End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub Private Sub UpdateSalesLine() Dim _SalesOrder As New wsNAV_SalesHeaderAndLines.wsNAV_SalesHeaderAndLines_Service Dim salesOrder As New wsNAV_SalesHeaderAndLines.wsNAV_SalesHeaderAndLines _SalesOrder.UseDefaultCredentials = False _SalesOrder.Credentials = New System.Net.NetworkCredential("username", "password") Try salesOrder = _SalesOrder.Read("1", "P-20-B") Dim salesLines(0) As wsNAV_SalesHeaderAndLines.WS_SalesLine If Not salesOrder.WS_SalesLine Is Nothing Then salesLines = salesOrder.WS_SalesLine End If If Not _SalesOrder.IsUpdated(salesOrder.Key) Then Dim idx As Integer = 0 Dim blnLineFound As Boolean = False While idx < salesLines.Length Dim oLine As wsNAV_SalesHeaderAndLines.WS_SalesLine oLine = DirectCast(salesLines(idx), wsNAV_SalesHeaderAndLines.WS_SalesLine) If oLine.Line_No = 10000 Then blnLineFound = True Exit While End If idx = idx + 1 End While If blnLineFound Then With DirectCast(salesLines(idx), wsNAV_SalesHeaderAndLines.WS_SalesLine) .Bin_Code = Nothing .Description = "1 - W 24 X 32 x 17 *2" .Description_2 = Nothing .Document_No = "P-20-B" .Document_Type = wsNAV_SalesHeaderAndLines.Document_Type_1.Order .Document_TypeSpecified = True .Item_Category_Code = "PF" .Key = Nothing .Line_No = 10000 .Line_NoSpecified = True .Location_Code = "COATICOOK" .Type = wsNAV_SalesHeaderAndLines.Type.Item .TypeSpecified = True .No = "GCAISSON" .Product_Group_Code = "CABINETS" .Quantity = 1 .QuantitySpecified = True .Unit_Price = 10000 .Unit_PriceSpecified = True .Variant_Code = Nothing End With End If _SalesOrder.Update(salesOrder) End If Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub0 -
Well, I finally create a CodeUnit that manage the modification. I tried first to use the salesLine in the sales Header Card but no luck...5
Categories
- All Categories
- 75 General
- 75 Announcements
- 66.7K Microsoft Dynamics NAV
- 18.8K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 610 NAV Courses, Exams & Certification
- 1.9K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 251 Dynamics CRM
- 103 Dynamics GP
- 6 Dynamics SL
- 1.5K Other
- 991 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 28 Design Patterns (General & Best Practices)
- Architectural Patterns
- 9 Design Patterns
- 4 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1K General Chat
- 1.6K Website
- 77 Testing
- 1.2K Download section
- 23 How Tos section
- 249 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions