public void CreateCrmOrder(CreateCrmOrder CreateCrmOrder) { PDH_CrmService.CrmInterface.OrderOperation orderOp = new PDH_CrmService.CrmInterface.OrderOperation(); CrmOrderResponse response = orderOp.CreateCrmOrder(CreateCrmOrder); //return response; }
log4net.ILog log = log4net.LogManager.GetLogger("fileLog");//获取一个日志记录器 public CrmOrderResponse CreateCrmOrder(CreateCrmOrder CreateCrmOrder) { log.Info("Call CreateCrmOrder Interface...."); CrmOrderResponse response = new CrmOrderResponse(); CrmUtil cu = new CrmUtil(); OrganizationServiceProxy organizationProxy = cu.getCrmService(); try { //1.Create order Entity salesorder = new Entity("salesorder"); //if (CreateCrmOrder != null) //{ // log.Info("request is not null"); // log.Info(CreateCrmOrder); // foreach (System.Reflection.PropertyInfo p in CreateCrmOrder.GetType().GetProperties()) // { // log.Info("Name:" + p.Name + "--Value:" + p.GetValue(CreateCrmOrder)); // } //} salesorder["name"] = CreateCrmOrder.OrderName; Entity email_account = RetriveAccountByEmail(organizationProxy, CreateCrmOrder.CustomerId); salesorder["customerid"] = new EntityReference("account", email_account.Id); //salesorder["pricelevelid"] = new EntityReference("pricelevel", new Guid(CreateCrmOrder.PricelevelId)); //salesorder["pricelevelid"] = new EntityReference("pricelevel", new Guid("52CFEDBC-FF7A-E411-80D6-AC162DB4BC5C")); salesorder["pricelevelid"] = new EntityReference("pricelevel", new Guid(cu.pricelevelid_value)); string Po_Numbser = CreateCrmOrder.PoNumbser; if (Po_Numbser != null && Po_Numbser != "" && Po_Numbser.Length > 390) { Po_Numbser = Po_Numbser.Substring(0, 390); } salesorder["new_ordernumber"] = Po_Numbser; OptionSetValue pv = new OptionSetValue(int.Parse(CreateCrmOrder.PaymenttermsCode)); salesorder["paymenttermscode"] = pv; salesorder["billto_name"] = CreateCrmOrder.BilltoName; salesorder["billto_line1"] = CreateCrmOrder.BilltoLine1; salesorder["billto_line2"] = CreateCrmOrder.BilltoLine2; salesorder["billto_city"] = CreateCrmOrder.BilltoCity; salesorder["billto_stateorprovince"] = CreateCrmOrder.BilltoStateOrProvince; salesorder["billto_country"] = CreateCrmOrder.BilltoCountry; salesorder["billto_postalcode"] = CreateCrmOrder.BilltoPostalcode; salesorder["shipto_name"] = CreateCrmOrder.ShiptoName; salesorder["shipto_line1"] = CreateCrmOrder.ShiptoLine1; salesorder["shipto_line2"] = CreateCrmOrder.ShiptoLine2; salesorder["shipto_city"] = CreateCrmOrder.ShiptoCity; salesorder["shipto_stateorprovince"] = CreateCrmOrder.ShiptoStateOrProvince; salesorder["shipto_country"] = CreateCrmOrder.ShiptoCountry; salesorder["shipto_postalcode"] = CreateCrmOrder.ShiptoPostalcode; List <CrmProduct> topProdcutList = CreateCrmOrder.CrmProductList; IEnumerable <IGrouping <string, CrmProduct> > query = topProdcutList.GroupBy(x => x.ManufacturerId); foreach (IGrouping <string, CrmProduct> info in query) { List <CrmProduct> prodcutList = info.ToList <CrmProduct>();//分组后的集合 Entity vendor_account = RetriveAccountByManuFacturer(organizationProxy, prodcutList[0].ManufacturerId); salesorder["new_vendor"] = new EntityReference("account", vendor_account.Id); //Create Order Guid orderId = organizationProxy.Create(salesorder); log.Info("Create salesorder Success:" + orderId.ToString()); //2.Add prodcut to Order log.Info("ProductList Count:" + prodcutList.Count); #region Execute Multiple with Results // Create an ExecuteMultipleRequest object. ExecuteMultipleRequest requestWithResults = new ExecuteMultipleRequest() { // Assign settings that define execution behavior: continue on error, return responses. Settings = new ExecuteMultipleSettings() { ContinueOnError = false, ReturnResponses = true }, // Create an empty organization request collection. Requests = new OrganizationRequestCollection() }; // Create several (local, in memory) entities in a collection. EntityCollection input = GetCollectionOfEntitiesToCreate(prodcutList, orderId, cu.uomid_value, organizationProxy); // Add a CreateRequest for each entity to the request collection. foreach (var entity in input.Entities) { CreateRequest createRequest = new CreateRequest { Target = entity }; requestWithResults.Requests.Add(createRequest); } // Execute all the requests in the request collection using a single web method call. ExecuteMultipleResponse responseWithResults = (ExecuteMultipleResponse)organizationProxy.Execute(requestWithResults); // Display the results returned in the responses. foreach (var responseItem in responseWithResults.Responses) { // A valid response. if (responseItem.Response != null) { OrganizationRequest orq = requestWithResults.Requests[responseItem.RequestIndex]; OrganizationResponse ors = responseItem.Response; } // An error has occurred. else if (responseItem.Fault != null) { OrganizationRequest orq = requestWithResults.Requests[responseItem.RequestIndex]; int idx = responseItem.RequestIndex; OrganizationServiceFault fa = responseItem.Fault; } } #endregion Execute Multiple with Results #region Execute Multiple with No Results ExecuteMultipleRequest requestWithNoResults = new ExecuteMultipleRequest() { // Set the execution behavior to not continue after the first error is received // and to not return responses. Settings = new ExecuteMultipleSettings() { ContinueOnError = false, ReturnResponses = false }, Requests = new OrganizationRequestCollection() }; // Update the entities that were previously created. EntityCollection update = GetCollectionOfEntitiesToUpdate(prodcutList, organizationProxy); foreach (var entity in update.Entities) { UpdateRequest updateRequest = new UpdateRequest { Target = entity }; requestWithNoResults.Requests.Add(updateRequest); } ExecuteMultipleResponse responseWithNoResults = (ExecuteMultipleResponse)organizationProxy.Execute(requestWithNoResults); // There should be no responses unless there was an error. Only the first error // should be returned. That is the behavior defined in the settings. if (responseWithNoResults.Responses.Count > 0) { foreach (var responseItem in responseWithNoResults.Responses) { if (responseItem.Fault != null) { OrganizationRequest orq = requestWithNoResults.Requests[responseItem.RequestIndex]; int ri = responseItem.RequestIndex; OrganizationServiceFault fa = responseItem.Fault; } } } else { Console.WriteLine("All account records have been updated successfully."); } #endregion Execute Multiple with No Results ////2.Add prodcut to Order //log.Info("ProductList数量:"+CreateCrmOrder.CrmProductList.Count); //List<CrmProduct> prodcutList = CreateCrmOrder.CrmProductList; //foreach (CrmProduct prd in prodcutList) //{ // log.Info("Create salesorderdetail Begin:" + prd.ProductName); // Entity salesorderdetail = new Entity("salesorderdetail"); // salesorderdetail["productid"] = new EntityReference("product", new Guid(prd.ProductName)); // salesorderdetail["quantity"] = Decimal.Parse(prd.Quantity); // salesorderdetail["salesorderid"] = new EntityReference("salesorder", orderId); // //salesorderdetail["uomid"] = new EntityReference("uom", new Guid("CCFF5EBE-5407-4214-BD04-60461B7161AA")); // salesorderdetail["uomid"] = new EntityReference("uom", new Guid(cu.uomid_value)); // //salesorderdetail["productid"] = prd.FreightAmount; // //salesorderdetail["productid"] = prd.AmountDiscount; // log.Info("Befor Create...."); // Guid salesorderdetailId = organizationProxy.Create(salesorderdetail); // log.Info("创建salesorderdetail成功:" + salesorderdetailId.ToString()); // //同时修改product的库存,用减法 // Entity product = new Entity("product"); // ColumnSet attributes = new ColumnSet(new string[] { "quantityonhand" }); // product = organizationProxy.Retrieve(product.LogicalName, new Guid(prd.ProductName), attributes); // log.Info("Retrieved quantityonhand: " + product["quantityonhand"]); // decimal nowQuantity = (Decimal)product["quantityonhand"]; // decimal newQuantity = nowQuantity - Decimal.Parse(prd.Quantity); // product["quantityonhand"] = newQuantity; // log.Info("newQuantity: " + newQuantity); // organizationProxy.Update(product); // log.Info("Update product quantity Success:" + prd.ProductName.ToString()); //} //Add Free Shipping 4608DBBF-6E8F-E411-80DA-AC162DB4BC5C Flat Shipping Rate //取消运费功能 //string isFreeShipping = CreateCrmOrder.IsFreeShipping; //if(isFreeShipping.Equals("N"))//不免运费,加上运费的price list item //{ // Entity salesorderdetail = new Entity("salesorderdetail"); // //salesorderdetail["productid"] = new EntityReference("product", new Guid("8698AE03-F994-E411-80E2-AC162DB41AC0")); // salesorderdetail["productid"] = new EntityReference("product", new Guid(cu.freeshipping_product_value)); // salesorderdetail["quantity"] = Decimal.Parse("1"); // salesorderdetail["salesorderid"] = new EntityReference("salesorder", orderId); // //salesorderdetail["uomid"] = new EntityReference("uom", new Guid("CCFF5EBE-5407-4214-BD04-60461B7161AA")); // salesorderdetail["uomid"] = new EntityReference("uom", new Guid(cu.uomid_value)); // //salesorderdetail["productid"] = prd.FreightAmount; // //salesorderdetail["productid"] = prd.AmountDiscount; // Guid salesorderdetailId = organizationProxy.Create(salesorderdetail); // log.Info("创建运费成功:" + salesorderdetailId.ToString()); //} Entity isExistOrder = new Entity("salesorder"); ColumnSet order_attributes = new ColumnSet(new string[] { "myce_taxratingid" }); isExistOrder = organizationProxy.Retrieve(isExistOrder.LogicalName, orderId, order_attributes); isExistOrder["myce_taxratingid"] = new EntityReference("myce_taxrating", new Guid(cu.myce_taxratingid_value)); organizationProxy.Update(isExistOrder); //fullfill salesorder // FulfillSalesOrder(organizationProxy, orderId); //create invoices // CreateInvoice(organizationProxy, orderId); } response.ErrCode = "0"; return(response); } catch (Exception ex) { log.Info(ex.Message + "--" + ex.ToString()); } return(null); }