Я получаю сообщение об ошибке при попытке создать новую итерацию с помощью Client SDK:
Значение не может быть нулевым. Имя параметра: nodeName
В качестве теста я попытался создать его с помощью Postman и REST API - как было предложено здесь - и это удалось.
Я уже довольно давно пользуюсь этим, чтобы избавиться от иерархии спринтов на год. Это первое подобное появление этой ошибки - прошлогодние прогоны прошли без сбоев. Я ничего не изменил (насколько мне известно) с прошлогоднего успешного забега.
Как мы видим, свойство итерации Name
устанавливается правильно. Я пробовал Overloads
вместо Shadows
, но это не помогло.
Как я могу устранить эту неполадку, чтобы узнать, что такое nodeName
и как его заполнить с помощью Client SDK?
Вот мой код:
Module Main()
Private Sub AddYear(Year As Integer, Client As WorkItemTrackingHttpClient)
Dim oIterationYear As Classifications.Iteration
Dim dFinishDate As Date
Dim dStartDate As Date
Console.WriteLine($"Year:{vbTab}{vbTab}{Year}")
dFinishDate = New Date(Year, 12, 31)
dStartDate = New Date(Year, 1, 1)
oIterationYear = New Classifications.Iteration(Client, TeamProject, Year, dStartDate, dFinishDate)
oIterationYear.Save()
...
End Sub
End Module
Public Class Iteration
Inherits Base
Public Sub New(Client As WorkItemTrackingHttpClient, TeamProject As TeamProjects, Name As String, StartDate As Date, FinishDate As Date)
Me.New(Client, TeamProject, Name, StartDate, FinishDate, Nothing)
End Sub
Public Sub New(Client As WorkItemTrackingHttpClient, TeamProject As TeamProjects, Name As String, StartDate As Date, FinishDate As Date, Parent As Iteration)
MyBase.New(Client, TeamProject, Parent)
Me.StructureType = TreeNodeStructureType.Iteration
Me.FinishDate = FinishDate
Me.StartDate = StartDate
Me.Name = Name
End Sub
...
End Class
Public MustInherit Class Base
Inherits WorkItemClassificationNode
Public Sub New(Client As WorkItemTrackingHttpClient, TeamProject As TeamProjects, Parent As Base)
Me.ProjectName = TeamProject.ToDescription
Me.Parent = Parent
Me.Client = Client
End Sub
Public Sub Save()
If Me.Parent.IsNothing Then
Me.Node = Me.Client.CreateOrUpdateClassificationNodeAsync(Me, Me.ProjectName, Me.StructureType).Result <-- Error
Else
Me.Node = Me.Client.CreateOrUpdateClassificationNodeAsync(Me, Me.ProjectName, Me.StructureType, path:=Me.Path).Result
End If
End Sub
...
Public Shadows Property Name As String
Get
If Me.Node.IsNothing Then
Name = Me._Name
Else
Name = Me.Node.Name
End If
End Get
Set(Value As String)
Me._Name = Value
End Set
End Property
Private _Name As String
End Class
Примечание: это вопрос, не зависящий от языка, поэтому я намеренно опустил тег VB.NET
. Ответ может прийти либо на VB.NET, либо на C # - меня устраивает любой из них.
- ИЗМЕНИТЬ -
Основываясь на предложениях по дизайну, содержащихся в принятом ответе, я придумал это решение, которое работает:
Public MustInherit Class Base
Public Sub New(Client As WorkItemTrackingHttpClient, TeamProject As TeamProjects, Parent As Base)
Me.Node = New WorkItemClassificationNode With {
.StructureType = StructureType,
.Name = Name
}
Me.ProjectName = TeamProject.ToDescription
Me.Parent = Parent
Me.Client = Client
Me.Name = Name
End Sub
Public Sub Save()
If Me.Parent.IsNothing Then
Me.Node = Me.Client.CreateOrUpdateClassificationNodeAsync(Me.Node, Me.ProjectName, Me.StructureType).Result
Else
Me.Node = Me.Client.CreateOrUpdateClassificationNodeAsync(Me.Node, Me.ProjectName, Me.StructureType, path:=Me.Path).Result
End If
End Sub
...
Public Property Name As String
Get
Return Me.Node.Name
End Get
Private Set(Value As String)
Me.Node.Name = Value
End Set
End Property
End Class
По сути, все, что я сделал, - это удалил наследование базового класса от WorkItemClassificationNode
и во всех случаях сохранил внутреннюю ссылку на узел. Я также упростил реализацию свойства Name
.
Что касается того, почему он внезапно перестал работать без каких-либо изменений в моем коде, единственное, что я могу придумать, - это удаленная возможность того, что произошло изменение в компиляторе, которое повлияло на то, как SDK оценивает ключевые слова Shadows
и Overloads
. Я знаю, что это долгий путь, но в остальном я полностью растерялся.
Итог, теперь он работает.