internal string RenderProductInfoXml(List <Product> products, RenderProductInfoSettings settings) { // NotificationManager.Notify(Notifications.LiveIntegration.Orders.OnBeforeRenderOrderXml, new Notifications.LiveIntegration.Orders.OnBeforeRenderOrderXmlArgs(order, settings)); var xmlDocument = BuildXmlDocument(); var tablesNode = CreateAndAppendTablesNode(xmlDocument, settings); tablesNode.AppendChild(BuildProductInfoXml(xmlDocument, tablesNode, products, settings)); // NotificationManager.Notify(Notifications.LiveIntegration.Orders.OnAfterRenderOrderXml, new Notifications.LiveIntegration.Orders.OnAfterRenderOrderXmlArgs(order, xmlDocument)); if (settings.Beautify) { return(xmlDocument.Beautify()); } return(xmlDocument.InnerXml); }
private XmlNode BuildProductInfoXml(XmlDocument xmlDocument, XmlElement tablesNode, List <Product> products, RenderProductInfoSettings settings) { if (products == null || !products.Any()) { return(null); } var currencyCode = Dynamicweb.Ecommerce.Common.Context.Currency.Code; var user = User.GetCurrentExtranetUser(); tablesNode.SetAttribute("ExternalUserId", !string.IsNullOrWhiteSpace(user?.ExternalID) ? user.ExternalID : Settings.Instance.AnonymousUserKey); tablesNode.SetAttribute("AccessUserCustomerNumber", !string.IsNullOrWhiteSpace(user?.CustomerNumber) ? user.CustomerNumber : Settings.Instance.AnonymousUserKey); tablesNode.SetAttribute("type", "filter"); var tableNode = CreateTableNode(xmlDocument, "Products"); foreach (var product in products) { var itemNode = CreateAndAppendItemNode(tableNode, "Products"); if (product != null) { AddChildXmlNode(itemNode, "ProductId", product.Id); AddChildXmlNode(itemNode, "ProductVariantId", "" /* we deactivated the variant id for this implementation because NAV throws errors and we must ignore the variants: product.VariantId*/); AddChildXmlNode(itemNode, "ProductNumber", product.Number); AddChildXmlNode(itemNode, "CurrencyCode", currencyCode); if (settings.AddProductFieldsToRequest && product.ProductFieldValues.Count > 0) { AppendProductFields(product, itemNode); } } } return(tableNode); }