Developer forum

Forum » Ecommerce - Standard features » Setting Ecom:Order items

Setting Ecom:Order items

D W
Reply

I am trying to set Ecom:Order.Delivery.Address to an address (as well as the other fields under Ecom:Order (Delivery and Customer) to set the Billing and Shipping data.

I created a new Cart,

var Cart = new Order();

and then started setting what I thought to be the correct fields,

Cart.CustomerAddress = billingAddress.Address1;
      Cart.CustomerCity = billingAddress.City;

and even though it is being set, apparently these are not the Billing object.

I thought setting 

Cart.DeliveryAddress = address

was setting the right values in the right object (for the delivery address), but apparently this in not correct also as 

@GetString("Ecom:Order.Delivery.Address") remains null

Everything I know about DW dictates that Ecom:Order.Delivery.Address === Cart.DeliveryAddress.

How do I set Ecom:Order.Delivery.Address and Ecom:Order.Customer.Address programmatically?

 

 


Replies

 
Nicolai Pedersen
Reply

That depends on where in the checkout process you need to do it.

Can you share your full code related to this - is it a notification subscriber or where do you do it?

BR Nicolai

 
D W
Reply

I am building the cart with data from an existing order.

I would like to set the billing and shipping addresses as well as the incoming shipping method. When I looked at the object structure for var Cart of type Order, I saw what I thought to be the structure intended for this data. 

The data is populating correctly with the code below. The minicart (right-side, top section) shows the Shipping data correctly, but the Billing part is showing no data so it seems that the <Order>.CustomerAddress (and similar properties starting with Customer) may not be the correct location for that data.

Code:

var Cart = new Order();
      Cart.IsCart = true;
      
      //Cart.ShippingMethodID = 

      Cart.CustomerFirstName = billingAddress.FirstName;
      Cart.CustomerSurname = billingAddress.LastName;
      Cart.CustomerName = billingAddress.FirstName + " " + billingAddress.LastName;
      Cart.CustomerAddress = billingAddress.Address1;
      Cart.CustomerCity = billingAddress.City;
      Cart.CustomerZip = billingAddress.Postalcode;
      Cart.CustomerRegion = billingAddress.State;
      Cart.CustomerCountry = billingAddress.Country;

      Cart.DeliveryFirstName = targetAddress.FirstName;
      Cart.DeliverySurname = targetAddress.LastName;
      Cart.DeliveryAddress = address.street;
      Cart.DeliveryCity = address.city;
      Cart.DeliveryRegion = address.state;
      Cart.DeliveryZip = address.postalCode;
      Cart.DeliveryCountry = address.country;
      Cart.DeliveryCountryCode = address.countryCode;
      Cart.DeliveryName = targetAddress.FirstName + " " + targetAddress.LastName;
      
      Cart.Save();

The product data is stored to the cart after this and works as intended presently.

 

Thank you

 
Nicolai Pedersen
Reply

It is the right properties you are using.

I still would like the entire context of your code - is it a notification subscriber and what do you do with the cart object after it has been created? Full code please...

BR Nicolai

 
D W
Reply

Salesforce relays it to an in-site URL and a custom module picks up certain parameters to call the below code (which is contained within a function).

It will create the cart and then redirect you to the Show Cart page. There is an interim page (template - AddQuoteItemsToCart.cshtml) that it is going to, but I am going to have it just send the user to the Show Cart page once we are getting the Cart data correctly handled. The interim page was built when we tried to do this through a form, which we were advised cannot be done due to specific pricing processes that needed to happen.

 

var quote = salesforceProvider.GetQuoteById(quoteId);
      var quoteLines = salesforceProvider.GetQuoteLines(quoteId);
      var settings = salesforceProvider.GetSettingsByQuoteId(quoteId);
      var targetAddress = salesforceProvider.GetContactWithAddress(quote.ContactId);
      var billingAddress = salesforceProvider.GetContactWithAddress(settings.BillingAddressContactId);
      var account = salesforceProvider.GetAccountById(targetAddress.AccountId);
      var address = targetAddress.MailingAddress;
      
      template.SetTag("Salesforce:QuoteHasLines", quoteLines.Any());
      template.SetTag("Salesforce:QuoteIsInternational", quote.IsInternational__cSpecified ? quote.IsInternational__c.Value.ToString() : "");

      if(Context.Cart != null)
      {
        // redirect this to confirm cart deletion
        // but for now
        Context.Cart.Delete();
      }

      var Cart = new Order();
      Cart.IsCart = true;
      
      template.SetTag("Ecom:Order.Customer.Address", billingAddress.Address1__c);
      Cart.CustomerFirstName = billingAddress.FirstName;
      Cart.CustomerSurname = billingAddress.LastName;
      Cart.CustomerName = billingAddress.FirstName + " " + billingAddress.LastName;
      Cart.CustomerAddress = billingAddress.MailingAddress.street;
      Cart.CustomerCity = billingAddress.MailingAddress.city;
      Cart.CustomerZip = billingAddress.MailingAddress.postalCode;
      Cart.CustomerRegion = billingAddress.MailingAddress.state;
      Cart.CustomerCountry = billingAddress.MailingAddress.country;

      Cart.DeliveryFirstName = targetAddress.FirstName;
      Cart.DeliverySurname = targetAddress.LastName;
      Cart.DeliveryAddress = address.street;
      Cart.DeliveryCity = address.city;
      Cart.DeliveryRegion = address.state;
      Cart.DeliveryZip = address.postalCode;
      Cart.DeliveryCountry = address.country;
      Cart.DeliveryCountryCode = address.countryCode;
      Cart.DeliveryName = targetAddress.FirstName + " " + targetAddress.LastName;
      
      Cart.Save();

      foreach (var quoteLineItem in quoteLines)
      {
        if (string.IsNullOrWhiteSpace(quoteLineItem.ConfigID__c))
        {
          continue;
        }
        GuruConfiguration gcon = new GuruConfiguration();
        GuruConfigurationRepository gcrepo = new GuruConfigurationRepository();
        gcon = gcrepo.GetById(quoteLineItem.ConfigID__c);

        var guru = GuruHelpers.ConvertCudToFlatObjects(quoteLineItem.CUD_XML__c);
        var data = Boxx.Web.Shared.Guru.GuruExtensions.GetOrderDataFromCud(quoteLineItem.CUD_XML__c);
        
        Product thisProduct = Product.GetProductByID(gcon.DynamicwebProductId);

        var ol = Cart.CreateOrderLine(thisProduct, (double)quoteLineItem.Quantity);

        Cart.ClearCachedPrices();
        
        if (data.SystemDiscountPrice == 0)
        {          
          ol.SetUnitPrice(data.SystemTotalPrice);
        }
        else
        {
          ol.SetUnitPrice(data.SystemTotalPrice);
        }
        
        ol.SetOrderLineType(OrderLine.OrderLineType.Fixed);

        ol.Order = Cart;

        Cart.ForcePriceRecalculation();
        Cart.Save();
                
      }
      Context.SetCart(Cart);

 
D W
Reply

Update: I have figured out what is going on, but not where or why. Going from the template landing page to the View cart page or the Checkout page, the data is being overwritten somewhere. I have no idea where this is happening at the current time.

 
Nicolai Pedersen
Reply

Hard to tell... It is not always easy to overwrite the cart - there can be contexts etc.

What version of DW is this?

 
D W
Reply

DW8

 
D W
Reply

So the cart/checkout module assigns the Billing Address/Contact information when you go into cart or checkout, which overwrites the data currently held in those places. I've watched the data in the database change. I can surf around the website and the data stays the same. As soon as I go into /cart or /cart/checkout, the data is changed.

 
Imar Spaanjaars Dynamicweb Employee
Imar Spaanjaars
Reply

Hi Scott,

Could that be done by your custom AssignSalesforceDataOnCartCreated subscriber that fires on CartCreated?

 
D W
Reply

It could be, but VS doesn't end up in that code when in debug mode to be able to confirm.

Does that function fire when you go to the view-cart page and the checkout page? It either isn't firing once my code is finished executing, or debug mode isn't catching it. The data is also correct if I navigate from my new template page into the content of the web site. It is when you go to the View Cart and Checkout that the data is actually changed.

Is there a trick to capturing the event subscriber code with the debugger?

 

Thank you

 
Imar Spaanjaars Dynamicweb Employee
Imar Spaanjaars
Reply

>> Is there a trick to capturing the event subscriber code with the debugger?

Is your debugger setup correctly for other code? In other words, can you break on other code in the same VS project? If so, it should just break here as well. If it's a separate project you need to attach the debugger to IIS hosting your project.

>> Does that function fire when you go to the view-cart page and the checkout page? I

It fires when a new cart gets created.

You could watch the Cart from the context in the debugger and see when its values change? I.e. watch a property on Context.Cart and have the debugger break when it changes?

 
D W
Reply

Just discovered that when I create my cart with the above code that it isn't firing the CartCreated event for some reason.

Do I need to manually trigger the Dynamicweb.Notifications.eCommerce.Cart.Created? You can see that the cart has been created and contains all the correct data, but this event isn't firing when the cart is created.

 
D W
Reply

Ok, I figured out how to manually fire the event, passed bad NotificationArgs to it and it kicked out of the AssignSalesforceDataOnCartCreated and STILL changed the address data so it looks like it is not the subscriber that is changing the data on me. 

Back to the hunt.

 

 
Imar Spaanjaars Dynamicweb Employee
Imar Spaanjaars
Reply

I just looked at the source code and it turns out that Cart.Created fires when you add something to the cart and no order exists yet. It doesn't fire when you new up an order in code yourself.

You haven't answered Nicolai's question about where this code runs. As he says, context is important so it would be helpful to know more about your seup: when does this run, where (templates, codes, and which phase and so on), before logging on, while logged on etc.

Cheers,

Imar

 
Imar Spaanjaars Dynamicweb Employee
Imar Spaanjaars
Reply

>>  STILL changed the address data so it looks like it is not the subscriber that is changing the data on me. 

Then I don't know what's going on without having more context.

 
D W
Reply

It runs in the SalesReps custom module. Salesforce redirects to a URL to cause the SalesReps modules Frontend.cs to pick it up. A couple parameters are passed by Salesforce to make the code split where I need the new functionality to occur. It calls a function that contains the code pasted above and once the cart is built and added to the Context, it returns template.Output for the new template page that was created. This template page will be removed from the current flow once this is working as it was built to create a cart via a web form. That path was cancelled when we learned that we cannot set UnitPrices via webform, however, it still outputs this template as the landing page. It is on this template that I can see the cart containing the correct data from Salesforce. I can browse around the website and maintain the correct data until I end up on the View Cart page or the Checkout page. It is when these two pages are hit that Billing data is changed, all fields are cleared out for Billing, and the currently logged in user is injected as the Billing name and Billing email. As this is part of the SalesReps module, there must be a user logged in to get to the page this stops on.

 
D W
Reply

Code as it is currently

This is all of the code that performs the functionality. The only piece not included here is the new template "AddQuoteItemsToCart.cshtml".

namespace Boxx.Web.CustomModules.SalesReps
{
  /// <summary>
  /// Custom module to deal with Guru specific tasks.
  /// </summary>
  [AddInName("SalesReps")]
  public class Frontend : ContentModule
  {
    private User _user;

    internal const string ModuleName = "SalesReps";

    /// <summary>
    /// Returns the HTML for this module.
    /// </summary>
    public override string GetContent()
    {
      switch (RenderMode)
      {
        case RenderMode.SaveConfiguration:
          return SaveConfiguration();
        case RenderMode.ManageConfigurations:
          return ManageConfigurations();
        case RenderMode.ProductList:
          return HandleProductList();
        default:
          throw new Exception(string.Format("Unknown RenderMode: {0}.", RenderMode));
      }
    }

    private string CheckSalesforceParameters()
    {
      var test = Request.QueryString;
      var salesforceProvider = new SalesforceProvider();
      if (!string.IsNullOrEmpty(Request.QueryString["ClearSession"]))
      {
        SalesforceSettings.ClearSession();
        Response.Redirect(string.Format("/Default.aspx?ID={0}&QuoteId={1}&OpportunityId={2}&ContactId={3}", Pageview.ID, Request.QueryString["QuoteId"], Request.QueryString["OpportunityId"], Request.QueryString["ContactId"]));
        return string.Empty;
      }

      var requestedSettings = SalesforceSettings.GetFromQueryString();
      var currentSettings = SalesforceSettings.GetCurrent();

      var existingQuoteId = Request.QueryString["QuoteId"];
      var refreshQuoteId = Request.QueryString["RefreshQuoteId"];

      var template = new Template("null");

      if (!(string.IsNullOrEmpty(refreshQuoteId)))
      {
        template = new Template(string.Format("{0}/{1}", "SalesReps", "AddQuoteItemsToCart.cshtml"));
      }
      else
      {
        template = new Template(string.Format("{0}/{1}", "SalesReps", "SalesforceInfo.cshtml"));
      }
      
      if(requestedSettings == null && !string.IsNullOrEmpty(existingQuoteId) && string.IsNullOrEmpty(refreshQuoteId))
      {
        var result = RedirectToExistingQuote(existingQuoteId, salesforceProvider);
        if (!string.IsNullOrEmpty(result))
        {
          template.SetTag("Salesforce:CantFindQuote", true);
        }
      }
      

      var cartMismatch = requestedSettings != null && requestedSettings.DifferentCartExists() && Dynamicweb.eCommerce.Common.Context.Cart != null;
      var hasValidSettings = currentSettings != null || requestedSettings != null;

      var activeSettings = requestedSettings ?? currentSettings;

      template.SetTag("Salesforce:HasCartMismatch", cartMismatch);
      template.SetTag("Salesforce:HasValidSettings", hasValidSettings);
      template.SetTag("Salesforce:SettingsAreValid", requestedSettings != null && requestedSettings.IsValid);
      template.SetTag("Salesforce:HasOpportunityId", !string.IsNullOrEmpty(Request.QueryString["OpportunityId"]));
      template.SetTag("Salesforce:HasContactId", !string.IsNullOrEmpty(Request.QueryString["ContactId"]));
      template.SetTag("Salesforce:HasAccountId", !string.IsNullOrEmpty(Request.QueryString["AccountId"]));
      template.SetTag("Salesforce:HasBillingAddressId", activeSettings?.HasBillingAddressId.ToString());
      template.SetTag("Salesforce:HasShippingAddressId", activeSettings?.HasShippingAddressId.ToString());

      var quoteId = requestedSettings != null ? requestedSettings.QuoteId : currentSettings?.QuoteId;
      var existingId = Request.QueryString["ExistingConfigurationId"];

      if (!string.IsNullOrEmpty(quoteId) && string.IsNullOrEmpty(existingId) && string.IsNullOrEmpty(refreshQuoteId))
      {
        AddLinesFromSalesforceQuote(salesforceProvider, template, quoteId);
      }else if(!string.IsNullOrEmpty(refreshQuoteId) && string.IsNullOrEmpty(existingId))
      {

        if(!Convert.ToBoolean(Request.QueryString["pass"]))
        {
          var settings = salesforceProvider.GetSettingsByQuoteId(refreshQuoteId);
          var url = string.Format("/Default.aspx?ID={0}&OpportunityId={1}&AccountId={2}&ContactId={3}&BillingAddressAccountId={4}&ShippingAddressAccountId={5}&QuoteId={6}&BillingAddressContactId={7}&ShippingAddressContactId={8}&RefreshQuoteId={9}&RefreshAddresses=true&addtocart=true&pass=true", Request.QueryString["ID"], settings.OpportunityId, settings.AccountId, settings.ContactId, settings.BillingAddressAccountId, settings.ShippingAddressAccountId, settings.QuoteId, settings.BillingAddressContactId, settings.ShippingAddressContactId, settings.QuoteId);
          Response.Redirect(url, true);
        }
        else
        {
          AddItemsFromSalesforceQuoteToShoppingCart(template, salesforceProvider, refreshQuoteId);
        }
        
      }

      if (!cartMismatch && requestedSettings != null && requestedSettings.IsValid)
      {
        SalesforceSettings.StoreInSession(requestedSettings);
      }

      if (!cartMismatch)
      {
        // There's an existing configuration ID which means we can send the user to the configuration page directly.
        if (!string.IsNullOrEmpty(existingId))
        {
          var repo = new GuruConfigurationRepository();
          CloneAndRedirect(repo, existingId);
          return string.Empty;
        }
      }
      salesforceProvider.Dispose();
      return template.Output();
    }

private static void AddItemsFromSalesforceQuoteToShoppingCart(Template template, SalesforceProvider salesforceProvider, string quoteId)
    {
      var quote = salesforceProvider.GetQuoteById(quoteId);
      var quoteLines = salesforceProvider.GetQuoteLines(quoteId);
      var settings = salesforceProvider.GetSettingsByQuoteId(quoteId);
      var targetAddress = salesforceProvider.GetContactWithAddress(quote.ContactId);
      var billingAddress = salesforceProvider.GetContactWithAddress(settings.BillingAddressContactId);
      var account = salesforceProvider.GetAccountById(targetAddress.AccountId);
      var address = targetAddress.MailingAddress;

      template.SetTag("Salesforce:QuoteHasLines", quoteLines.Any());
      template.SetTag("Salesforce:QuoteIsInternational", quote.IsInternational__cSpecified ? quote.IsInternational__c.Value.ToString() : "");

      if (Context.Cart != null)
      {
        // redirect this to confirm cart deletion
        // but for now
        Context.Cart.Delete();
      }

      var Cart = new Order();
      Cart.IsCart = true;

      template.SetTag("Ecom:Order.Customer.Address", billingAddress.MailingAddress.street);
      template.SetTag("Ecom:Order.Customer.City", billingAddress.MailingAddress.city);
      template.SetTag("Ecom:Order.Customer.Region", billingAddress.MailingAddress.state);
      template.SetTag("Ecom:Order.Customer.Zip", billingAddress.MailingAddress.postalCode);

      Cart.CustomerFirstName = billingAddress.FirstName;
      Cart.CustomerSurname = billingAddress.LastName;
      Cart.CustomerName = billingAddress.FirstName + " " + billingAddress.LastName;
      Cart.CustomerAddress = billingAddress.MailingAddress.street;
      Cart.CustomerCity = billingAddress.MailingAddress.city;
      Cart.CustomerZip = billingAddress.MailingAddress.postalCode;
      Cart.CustomerRegion = billingAddress.MailingAddress.state;
      Cart.CustomerCountry = billingAddress.MailingAddress.country;

      Cart.DeliveryFirstName = targetAddress.FirstName;
      Cart.DeliverySurname = targetAddress.LastName;
      Cart.DeliveryAddress = address.street;
      Cart.DeliveryCity = address.city;
      Cart.DeliveryRegion = address.state;
      Cart.DeliveryZip = address.postalCode;
      Cart.DeliveryCountry = address.country;
      Cart.DeliveryCountryCode = address.countryCode;
      Cart.DeliveryName = targetAddress.FirstName + " " + targetAddress.LastName;

      //Cart.OrderFields["QuoteId"] = Convert.ToInt32(quoteId);
      var quoteIdField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "QuoteId");
      quoteIdField.Value = quoteId;
      var opportunityIdField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "OpportunityId");
      opportunityIdField.Value = settings.OpportunityId;
      var shippingAddressIdField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "ShippingAddressId");
      shippingAddressIdField.Value = settings.ShippingAddressAccountId;
      var billingAddressIdField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "BillingAddressId");
      billingAddressIdField.Value = settings.BillingAddressAccountId;
      var shippingAddressIdContactField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "ShippingAddressIdContact");
      shippingAddressIdContactField.Value = settings.ShippingAddressContactId;
      var billingAddressIdContactField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "BillingAddressIdContact");
      billingAddressIdContactField.Value = settings.BillingAddressContactId;
      var contactIdField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "ContactId");
      contactIdField.Value = settings.ContactId;
      var accountIdField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "AccountId");
      accountIdField.Value = settings.AccountId;
      var quoteNameField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "QuoteName");
      quoteNameField.Value = quote.Name;
      var shippingIdField = Cart.OrderFieldValues.FirstOrDefault(x => x.OrderField.SystemName == "SelectedShippingProvider");
      //shippingIdField.Value = quote.;

      Cart.Save();

      foreach (var quoteLineItem in quoteLines)
      {
        if (string.IsNullOrWhiteSpace(quoteLineItem.ConfigID__c))
        {
          continue;
        }
        GuruConfiguration gcon = new GuruConfiguration();
        GuruConfigurationRepository gcrepo = new GuruConfigurationRepository();
        gcon = gcrepo.GetById(quoteLineItem.ConfigID__c);

        var guru = GuruHelpers.ConvertCudToFlatObjects(quoteLineItem.CUD_XML__c);
        var data = Boxx.Web.Shared.Guru.GuruExtensions.GetOrderDataFromCud(quoteLineItem.CUD_XML__c);

        Product thisProduct = Product.GetProductByID(gcon.DynamicwebProductId);
        var guruSessionIdField = thisProduct.OrderLineFields.FirstOrDefault(g => g.SystemName == "GuruSessionId");

        var ol = Cart.CreateOrderLine(thisProduct, (double)quoteLineItem.Quantity);

        OrderLineFieldValueCollection olfv = ol.OrderLineFieldValues;

        OrderLineFieldValue confgname = new OrderLineFieldValue("ConfigurationName", quote.Name);
        olfv.Add(confgname);

        OrderLineFieldValue gurudiscval = new OrderLineFieldValue("GuruDiscountValue", null);
        olfv.Add(gurudiscval);

        OrderLineFieldValue gsi = new OrderLineFieldValue("GuruSessionId", quoteLineItem.ConfigID__c);
        olfv.Add(gsi);

        OrderLineFieldValue mngrappr = new OrderLineFieldValue("HasManagerApprovedQuote", null);
        olfv.Add(mngrappr);

        OrderLineFieldValue specinst = new OrderLineFieldValue("SpecialInstructions", null);
        olfv.Add(specinst);

        Cart.ClearCachedPrices();

        if (data.SystemDiscountPrice == 0)
        {
          ol.SetUnitPrice(data.SystemTotalPrice);
        }
        else
        {
          ol.SetUnitPrice(data.SystemTotalPrice);
        }

        ol.SetOrderLineType(OrderLine.OrderLineType.Fixed);

        ol.Order = Cart;

        Cart.ForcePriceRecalculation();
        Cart.Save();

      }
      Context.SetCart(Cart);
      Dynamicweb.Notifications.eCommerce.Cart.LoadedArgs args = new Dynamicweb.Notifications.eCommerce.Cart.LoadedArgs(Cart);
      NotificationManager.Notify(Dynamicweb.Notifications.eCommerce.Cart.Created, args);
    }

 
Imar Spaanjaars Dynamicweb Employee
Imar Spaanjaars
Reply

Try subscribing to something like Ecommerce.Cart.BeforeCustomerCountryIsSet and see if the debugger breaks there. That may give you a clue as to what is overwriting your cart. Looks like when hitting a page with the Cart module, the cart is set up again with the user's data but I am unclear if that's from built-in code or custom stuff.

 
Imar Spaanjaars Dynamicweb Employee
Imar Spaanjaars
Reply

BTW, not sure if it matters, but when searching the forum I came across a few posts that call Save on the cart in the context after it has been saved:

Context.SetCart(Cart);
Context.Cart.Save();

 

 

 
D W
Reply

Context.Cart.Save() didn't work for the issue. Billing data was still changed.

I don't think either of our carts are custom code. They both are built with the Cart module/template setup that I am used to in DW. 

Another thing is that I can leave the template page it lands on where the cart has the correct data to the home page or any sub page and the cart data remains correct. It doesn't change until you hit the view cart  or checkout page so I know it's somewhere in that code.

One of my thoughts was to try to figure out how I could track it in the Cart view code, but I'm not sure if that code is available to me.

 

 
D W
Reply

I found the issue.

The else block below is where the new functionality is called. Once it returns from that function call, it stored the SF settings globally. 

The issue was that the new functionality was calling out to that SF session data when it hadn't been set yet.

I moved the SF session save to above the new functionality call and now it is maintaining the data properly.

 

 else
        {
          AddItemsFromSalesforceQuoteToShoppingCart(template, salesforceProvider, refreshQuoteId);
        }
        
      }

      if (!cartMismatch && requestedSettings != null && requestedSettings.IsValid)
      {
        SalesforceSettings.StoreInSession(requestedSettings);
      }

 
Imar Spaanjaars Dynamicweb Employee
Imar Spaanjaars
Reply

Great, glad you found it and thanks for the follow up!

 

You must be logged in to post in the forum