C# 使用GP webservice传递多行项目

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

下面是我正在使用的代码,通过GP Web服务传递多个行项目以创建销售订单。我可以毫无问题地传递单行项目,但当我传递多个项目时,它只接受最后一个项目。这个数组大约有5个项目ID,我将固定数量传递为15个,需要使两者都是动态的。但出于测试目的,我试着这样做。我知道一些web服务对象的创建/初始化问题。作为所有事情的新手,我找不到确切的问题

C#代码

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");