Я активно прорабатываю материалы курса I210 по контрактному API.Я выполняю упражнения на самой последней версии 2018 R2, поэтому я предполагаю, что могут быть некоторые различия, которые могут быть причиной этой проблемы.
Первый пример, который возвращает проблему, приведен в Пример 4.1.2 Когда код достигает этой строки SalesOrderDetail orderLine = order.Details.Single(...
Свойство details имеет значение null, что, в свою очередь, вызывает «Ссылку на объект, не установленную для экземпляра объекта».исключение.Многие другие примеры после этого также вызывают SalesOrder.Details, который также возвращает то же исключение.
Любая помощь, указывающая мне правильное направление при работе над версией 2018 R2, будет принята с благодарностью.Заранее спасибо.Роберт
// Updating the detail lines of a sales order
public static void UpdateSO(DefaultSoapClient soapClient)
{
Console.WriteLine("Updating a sales order...");
//Sales order data
string orderType = "SO";
string customerOrder = "SO248-563-06";
// A unique value that
// identifies a sales order
string firstItemInventoryID = "CONTABLE1";
string firstItemWarehouse = "MAIN";
string secondItemInventoryID = "AALEGO500";
string secondItemWarehouse = "MAIN";
decimal secondItemQuantity = 4;
// Find the sales order to be updated
SalesOrder soToBeFound = new SalesOrder
{
OrderType = new StringSearch { Value = orderType },
CustomerOrder = new StringSearch { Value = customerOrder },
};
SalesOrder order = (SalesOrder)soapClient.Get(soToBeFound);
// Find the line to be deleted and mark it for deletion
// The Single method makes the program find
// the only SalesOrderDetail of order.Details
// that has the specified InventoryID and WarehouseID
SalesOrderDetail orderLine = order.Details.Single(orderLineToBeDeleted =>
orderLineToBeDeleted.InventoryID.Value == firstItemInventoryID &&
orderLineToBeDeleted.WarehouseID.Value == firstItemWarehouse);
orderLine.Delete = true;
// Find the line to be updated and update the quantity in it
orderLine = order.Details.Single(orderLineToBeUpdated => orderLineToBeUpdated.InventoryID.Value == secondItemInventoryID &&
orderLineToBeUpdated.WarehouseID.Value == secondItemWarehouse);
orderLine.Quantity = new DecimalValue { Value = secondItemQuantity };
// Clear the Hold check box
order.Hold = new BooleanValue { Value = false };
// Update the sales order
order = (SalesOrder)soapClient.Put(order);
// Display the summary of the updated record
Console.WriteLine("Order type: " + order.OrderType.Value);
Console.WriteLine("Order number: " + order.OrderNbr.Value);
Console.WriteLine("Ordered quantity: " + order.OrderedQty.Value);
Console.WriteLine("Order total: " + order.OrderTotal.Value);
Console.WriteLine();
Console.WriteLine("Press any key to continue");
Console.ReadLine();
}