Передача нескольких позиций с помощью веб-сервиса GP
Ниже приведен код, с которым я работаю, чтобы передать несколько позиций для создания заказа на продажу через веб-службу GP. Я могу без проблем передать один элемент строки, но когда я пропускаю несколько элементов, он принимает только последний элемент. Массив имеет около 5 идентификаторов элементов, и я передаю фиксированное количество как 15, необходимо сделать оба динамических. Но для целей тестирования я пытаюсь вот так. Я знаю проблему с созданием / инициализацией некоторых объектов веб-сервиса. Как новичок во всем наборе вещей, я не смог найти точную проблему.
Код C#
CompanyKey companyKey;
Context context;
SalesOrder salesOrder;
SalesDocumentTypeKey salesOrderType;
CustomerKey customerKey;
BatchKey batchKey;
// SalesOrderLine salesOrderLine;
ItemKey orderedItem;
Quantity orderedAmount;
Policy salesOrderCreatePolicy;
DynamicsGPClient wsDynamicsGP = new DynamicsGPClient();
wsDynamicsGP.ClientCredentials.Windows.ClientCredential.UserName = "Admin";
wsDynamicsGP.ClientCredentials.Windows.ClientCredential.Password = "pass";
wsDynamicsGP.ClientCredentials.Windows.ClientCredential.Domain = "Gp";
System.ServiceModel.WSHttpBinding binding;
binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
context = new Context();
companyKey = new CompanyKey();
companyKey.Id = (1);
context.OrganizationKey = (OrganizationKey)companyKey;
salesOrder = new SalesOrder();
salesOrderType = new SalesDocumentTypeKey();
salesOrderType.Type = SalesDocumentType.Order;
salesOrder.DocumentTypeKey = salesOrderType;
customerKey = new CustomerKey();
customerKey.Id = "121001";
salesOrder.CustomerKey = customerKey;
batchKey = new BatchKey();
batchKey.Id = "RMS";
salesOrder.BatchKey = batchKey;
// SalesOrderLine[] orders = new SalesOrderLine[6];
SalesOrderLine[] lines = { };
for (int i = 1; i < 5; i++)
{
SalesOrderLine salesOrderLine = new SalesOrderLine();
orderedItem = new ItemKey();
orderedItem.Id = Arr[i].ToString();
salesOrderLine.ItemKey = orderedItem;
orderedAmount = new Quantity();
orderedAmount.Value = 15;
salesOrderLine.Quantity = orderedAmount;
lines = new SalesOrderLine[] { salesOrderLine };
MessageBox.Show(lines.Count().ToString());
}
salesOrder.Lines = lines;
//salesOrder.Lines = orders;
salesOrderCreatePolicy = wsDynamicsGP.GetPolicyByOperation("CreateSalesOrder", context);
wsDynamicsGP.CreateSalesOrder(salesOrder, context, salesOrderCreatePolicy);
if (wsDynamicsGP.State != CommunicationState.Faulted)
{
wsDynamicsGP.Close();
}
MessageBox.Show("Success");
1 ответ
lines = new SalesOrderLine[] { salesOrderLine };
воссоздаст lines
каждый раз массив объектов означает, что вы потеряете все ранее добавленные объекты. Фактически добавляется только последний объект в цикле.
Попробуйте использовать List<T>
вот так:
SalesOrderLine[] lines = { };
становится List<SalesOrderLine> lines = new List<SalesOrderLine>();
lines = new SalesOrderLine[] { salesOrderLine };
становится: lines.Add(salesOrderLine);
Если это важно, вы получите массив в качестве входных данных:
salesOrder.Lines = lines;
становится: salesOrder.Lines = lines.ToArray();