Ejemplo n.º 1
0
        public AppCrmOrderResponse AppCreateOrder(AppCrmOrderRequest orderRequest)
        {
            OrderOperation      oo = new OrderOperation();
            AppCrmOrderResponse rs = oo.AppCreateOrder(orderRequest);

            return(rs);
        }
Ejemplo n.º 2
0
        public AppCrmOrderResponse AppCreateOrder(AppCrmOrderRequest orderRequest)
        {
            CrmUtil cu = new CrmUtil();
            OrganizationServiceProxy organizationProxy = cu.getCrmService();

            try
            {
                string email = orderRequest.email;
                log.Info("order-request:" + email);
                List <AppCrmOrderProduct> prodcutList = orderRequest.product;
                log.Info("order-request product:" + "----" + prodcutList.Count);

                string datetime_now = DateTime.Now.ToString("yyyyMMddHHmmss");

                Entity salesorder = new Entity("salesorder");


                Entity email_account = RetriveAccountByEmail(organizationProxy, email);
                salesorder["customerid"] = new EntityReference("account", email_account.Id);

                salesorder["pricelevelid"] = new EntityReference("pricelevel", new Guid(cu.pricelevelid_value));
                //salesorder["pricelevelid"] = new EntityReference("pricelevel", new Guid("780D3E7B-D6F9-E211-8ABD-984BE17C68D3"));

                //AN000001
                string new_orderno = this.readAppOrderNoFromXML();
                salesorder["name"]            = "AN" + new_orderno;
                salesorder["new_ordernumber"] = "PO" + new_orderno;
                Int32 exit_orderno = Int32.Parse(new_orderno);
                exit_orderno += 1;
                string new_exit_orderno = exit_orderno.ToString().PadLeft(6, '0');
                this.writeAppOrderNoToXML(new_exit_orderno);

                //From Mobile
                OptionSetValue orderfrom = new OptionSetValue(100000001);
                salesorder["new_orderfrom"] = orderfrom;

                //Payment
                OptionSetValue payment = new OptionSetValue(Int32.Parse(orderRequest.payment));
                salesorder["paymenttermscode"] = payment;

                //contact time
                salesorder["new_requestedringback"] = DateTime.Parse(orderRequest.contactTime);


                //OptionSetValue pv = new OptionSetValue(1);
                //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_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;

                Guid orderId = organizationProxy.Create(salesorder);
                log.Info("创建salesorder成功:" + orderId.ToString());


                //2.Add prodcut to Order
                log.Info("ProductList数量:" + 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 = GetCollectionOfEntitiesToCreate2(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 = GetCollectionOfEntitiesToUpdate2(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


                //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("85ACAB90-7248-E411-9212-D89D67639EF0"));
                //    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("3E055750-D6F9-E211-8ABD-984BE17C68D3"));
                //    //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("99596F96-054E-E411-9212-D89D67639EF0"));
                //organizationProxy.Update(isExistOrder);

                AppCrmOrderResponse rs = new AppCrmOrderResponse();
                rs.orderId = orderId.ToString();
                return(rs);
            }
            catch (Exception ex)
            {
                log.Info(ex.Message + "--" + ex.ToString());
            }
            return(null);
        }