C# 使用GP webservice传递多行项目
下面是我正在使用的代码,通过GP Web服务传递多个行项目以创建销售订单。我可以毫无问题地传递单行项目,但当我传递多个项目时,它只接受最后一个项目。这个数组大约有5个项目ID,我将固定数量传递为15个,需要使两者都是动态的。但出于测试目的,我试着这样做。我知道一些web服务对象的创建/初始化问题。作为所有事情的新手,我找不到确切的问题 C#代码C# 使用GP webservice传递多行项目,c#,arrays,web-services,dynamics-crm-2011,gp,C#,Arrays,Web Services,Dynamics Crm 2011,Gp,下面是我正在使用的代码,通过GP Web服务传递多个行项目以创建销售订单。我可以毫无问题地传递单行项目,但当我传递多个项目时,它只接受最后一个项目。这个数组大约有5个项目ID,我将固定数量传递为15个,需要使两者都是动态的。但出于测试目的,我试着这样做。我知道一些web服务对象的创建/初始化问题。作为所有事情的新手,我找不到确切的问题 C#代码 CompanyKey CompanyKey; 语境; 销售订单销售订单; SalesDocumentType键salesOrderType; Custo
CompanyKey CompanyKey;
语境;
销售订单销售订单;
SalesDocumentType键salesOrderType;
CustomerKey CustomerKey;
BatchKey BatchKey;
//销售订单行销售订单行;
ItemKey orderedItem;
订购数量和数量;
策略salesOrderCreatePolicy;
DynamicsGPClient wsDynamicsGP=新的DynamicsGPClient();
wsDynamicsGP.ClientCredentials.Windows.ClientCredential.UserName=“Admin”;
wsDynamicsGP.ClientCredentials.Windows.ClientCredential.Password=“pass”;
wsDynamicsGP.ClientCredentials.Windows.ClientCredential.Domain=“Gp”;
System.ServiceModel.WSHttpBinding绑定;
binding=new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
上下文=新上下文();
companyKey=新companyKey();
companyKey.Id=(1);
context.OrganizationKey=(OrganizationKey)companyKey;
salesOrder=新的salesOrder();
salesOrderType=新的SalesDocumentTypeKey();
salesOrderType.Type=SalesDocumentType.Order;
salesOrder.DocumentTypeKey=salesOrderType;
customerKey=新customerKey();
customerKey.Id=“121001”;
salesOrder.CustomerKey=CustomerKey;
batchKey=新的batchKey();
batchKey.Id=“RMS”;
salesOrder.BatchKey=BatchKey;
//SalesOrderLine[]订单=新的SalesOrderLine[6];
SalesOrderLine[]行={};
对于(int i=1;i<5;i++)
{
SalesOrderLine SalesOrderLine=新的SalesOrderLine();
orderedItem=newitemkey();
orderedItem.Id=Arr[i].ToString();
salesOrderLine.ItemKey=orderedItem;
orderedAmount=新数量();
orderedAmount.Value=15;
salesOrderLine.Quantity=orderedAmount;
lines=新的SalesOrderLine[]{SalesOrderLine};
Show(lines.Count().ToString());
}
salesOrder.Lines=行;
//salesOrder.Lines=订单;
salesOrderCreatePolicy=wsDynamicsGP.GetPolicyByOperation(“CreateSalesOrder”,上下文);
CreateSalesOrder(salesOrder、上下文、salesOrderCreatePolicy);
if(wsDynamicsGP.State!=CommunicationState.Faulted)
{
wsDynamicsGP.Close();
}
MessageBox.Show(“成功”);
lines=新的SalesOrderLine[]{SalesOrderLine}
每次都会重新创建行
数组对象,这意味着您丢失了以前添加的任何对象。实际上,只有循环中的最后一个对象被实际添加
尝试使用列表
,如下所示:
SalesOrderLine[]行={}代码>变为列表行=新列表()代码>
lines=newSalesOrderLine[]{SalesOrderLine}代码>变成:行。添加(salesOrderLine)代码>
如果重要的是,最终以数组作为输入:
salesforder.Lines=行代码>变成:salesforder.Lines=Lines.ToArray()代码>lines=新的SalesOrderLine[]{SalesOrderLine};我认为每次运行循环时,这一行将替换现有的行值。非常感谢您,詹姆斯先生:)
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");