Ejemplo n.º 1
0
 public void CreateCrmOrder(CreateCrmOrder CreateCrmOrder)
 {
     PDH_CrmService.CrmInterface.OrderOperation orderOp = new PDH_CrmService.CrmInterface.OrderOperation();
     CrmOrderResponse response = orderOp.CreateCrmOrder(CreateCrmOrder);
     //return response;
 }
Ejemplo n.º 2
0
        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);
        }