Quantcast
Channel: Customized Commerce 13 and earlier versions
Viewing all 9642 articles
Browse latest View live

CatalogEventBroadcaster.CommerceProductUpdated not raised when editing Variation custom properties (Commerce 10.8.0)

$
0
0

We have set up an event listener for the CatalogEventBroadcaster.CommerceProductUpdated Event. We're using this to reindex products when either a product or one of its variations gets updated. I've recently noticed a repeatable issue where this event is not being raised when a variation has a custom property changed. This is verified through logging and debug sessions. The event handler works correctly when we change Keywords, Name and DisplayName. Is there a different way to capture event or is there something I can do to our properties to make sure they are raising the CommerceProductUpdated event?

We're using this with Find, but I do not feel it is Find related.

Below is the event code:

            Event commerceProductUpdatedEvent = Event.Get(CatalogEventBroadcaster.CommerceProductUpdated);
            commerceProductUpdatedEvent.Raised += CatalogEventUpdated;




Question about retrieving Commerce ImageFile meta field path

$
0
0

Hi all,

Episerver Find version 12.6.0 and Episerver Commerce version 11.2.4

We can access most meta fields for search results by defining them in a custom class for our CatalogContentType:

    [CatalogContentType(MetaClassName = "TestProductEntry", DisplayName = "Test Product Entry", Description = "")]
    public class TestProductEntry : ProductContent
    {
        [IncludeValuesInSearchResults]
        [DecimalSettings(18, 2)]
        public virtual decimal TestPercentage { get; set; }
   }

But when it comes to images (field type ImageFile) we have come across a few issues:

  • We have not found a way in documentation or via trial and error for hard typing the image path as a property like the example above
  • We are able to load the MetaFile for the image using MetaObject.Load of the product in question. However AssetUrlResolver requires an IAssetContainer type so we can't use it to retrieve the image path.

How can we retrieve Commerce ImageFile paths?

Thanks!

Performance issues in Commerce Manager 7.5 Version

$
0
0

This is Arjun Katkojwala from CGI. We have Integrated Episerver 7.5 as part of our Applications 3 years back.

We have Integrated Episerver 7.5 as part of our Applications. We are using Commerce Manager as our backend Application and have integrated around 5 front-end Applications (many running two instances on load balanced servers) using the same commerce manager database for managing all the orders.

We’ve seen a great increase in traffic in the last year and have been experiencing a lot of SQL timeout issues. We’ve noticed that when users are using commerce manager that a large number of locks are being created on the database and suspect this is causing all other applications to run into SQL timeouts as well. We especially see these issues when users are using the Commerce manager --> Order Management Modules. We’ve done some analysis and have noticed that during peak times we have approximately 40 users using commerce manager simultaneously – at the same time we are often getting sql timeouts in all of our applications. We also get many complaints about slow the performance of commerce manager.

In SQL server logs we see a lot of deadlocks being caused by the stored procedure [ecf_Search_PurchaseOrder] coming from Commerce Manager

What we want to know:

  • Are there any updates to the related stored procedures that we could make to improve performance
  • Are there any updates to EPI commerce manager dlls that can be made to improve performance
  • Our shipmentlist uses the method OrderContext.Current.FindPurchaseOrders to find orders – are there any special cases / parameters to avoid or alternate methods we should use for fetching the orders
  • Our orderlist uses the Commerce.Orders.DataSources.OrderDataource object to find orders – are there any special cases / parameters to avoid or alternate methods we should use for fetching the orders

 

Awaiting for your reply

Takes longer time to return purchase orders using "OrderContext.Current.FindPurchaseOrders"

$
0
0

Hi,

I am using EPi Commerce 7.5

I am trying to retrieve orders by using  "OrderContext.Current.FindPurchaseOrders" API. But if there are huge date like 4000 records to be retrieved then the system is taking longer time to return the results.

Is there any other way which I can implement to retreive the results quickly.

Thanks,

Manjeera T

Discount with multiple promotion codes

$
0
0

It seems like there is no way to create a discount with multiple promotion codes. Is this true or have I missed something?

We need to generate thousands of promotion codes that each only can be used once. But it seems like the only way to do that with Episerver is to make a discount for each promotion code - as you can imagine this isn't ideal for our customer.

We have plan to make this in some custom hacky way, but perfect it will not be.

Keys Towards The Activity: Proscribing Packers' Significant Performs; Avoiding The Dallas Function

$
0
0

FRISCO, Texas Sooner or later it Friday, and below are my 2 most important keys in direction of deciding who developments in direction of the NFC Championship Match While the Cowboys and Packers deal with off upon Sunday afternoon. Dallas Cowboys Earn If:Once Those people 2 groups satisfied past inside the 12 months, the Packers had been having difficulties toward generate massive performs. People inside of the media were being setting up in direction of surprise if this was the stop of Aaron Rodgers and was his occupation upon the downward change.What I seen in just looking through individuals early year video games, it wasn that Rodgers was enjoying inadequately https://www.cowboysfansapparel.com/Jason_Witten_Jersey, it was that he simply just wasn connecting with Jordy Nelson, Randall Cobb and Davante Adams -- which experienced been these types of a staple of their offensive assault.If there is just one factor that I can reality in direction of for the Packers that incorporates improved for them for the duration of this profitable streak, it that theye previously back again in direction of hitting upon those people performs. For the year, the Packers include experienced 76 performs of 20-additionally yards, with 47 of those people performs coming within the very last 9 game titles. Accurately remaining 7 days inside the wildcard sport in opposition to the Clean York Giants, Rodgers and his teammates strike them for 6 of all those performs which –proved in the direction of be the distinction within the sport.For the Cowboys towards earn this sport, theye likely in the direction of need to have in the direction of do what they comprise all period lower these back again-breaking performs by means of the Packers. They will have to have in direction of be disciplined with their move hurry, complete their tasks within insurance policy and handle as properly as they did Though Those groups fulfilled inside of Oct.If theye in a position toward do all that, then they will acquire towards host the NFC Championship match up coming 7 days. Green Bay Packers Gain If:There was an early position of the period exactly where this Packers security was regarded a electrical power of their squad. As soon as Individuals 2 golf equipment satisfied in just Oct, the Packers ended up the greatest gadget from the operate -- still for the reason that then https://www.cowboysfansapparel.com/Terrance_Williams_Jersey, they include been upon the consistent loss.Upon 43 per cent of their snaps, competition incorporate competently acquired 4 or further more yards upon to start with down. The Packers have been 26th inside of the league as a result of allowing for rivals toward earnings 10-moreover yards within just 228 snaps. Wherever the Packers consist of been very negative is scoring protection https://www.cowboysfansapparel.com/Roger_Staubach_Jersey. Coming into the playoffs, in just their very last 8 game titles, they experienced authorized a league-worst 232 details. The Packers include preserved toward endure because of towards the participate in of their offense, and without having them this employees would be viewing People playoffs versus the sofa at house Dez Bryant Jersey.For the Packers towards get this sport, Eco-friendly Bay defensive coordinator Dom Capers is shifting in the direction of have to have towards determine out how in the direction of conclude this Cowboys offensive assault. His marvel will be: does he make investments towards handling the function with further workforce within just the box or seek the services of all those safeties towards assistance his corners with this sort of Dallas receivers that performed nicely from him prior within just the yr?Capers is within a demanding location whatever course he establishes nevertheless in direction of acquire this activity Jameill Showers Jersey, still I believe that he will comprise in direction of take care of the managing activity. He are unable to pay for toward permit the Cowboys grind the ball and clock upon him. For the Packers in direction of acquire this match, they are heading towards have to have toward choose some defensive helps prevent and area this activity upon the shoulders of Aaron Rodgers in direction of gain.  

Quicksilver (Commerce v.11) targeting Episerver.Find (v12)

$
0
0

Hello

I am trying to change the search index of the "EPiServer.Reference.Commerce.Site"-project in Quicksilver to target Episerver.Find.

Usings:

Latest quicksilver version: https://github.com/episerver/Quicksilver

Commerce v.11.0
Episerver v.10.10
Episerver.Find v.12.5.2.0
Episerver.Find.Commerce v.10.0 (to fill the Find-index with data from Commerce)

Issue/goal: Getting custom Field from the Index, that is not directly on the model I am searching with, but the value from the custom Field should be set to some property/field on the model.

What I have done:
1) Downloaded and unzipped the QuickSilver application and initialized it, so it ran perfectly with the default search provider and indexer.

2) Installed Episerver.Find and Episerver.Find.Commerce

3) Created a Episerver.Find demo index (https://find.episerver.com/)

4) Added required Find-configurations to the web.config (serviceUrl and defaultIndex)

5) Logged in as admin@example.com > Edit mode > Admin > ran the "EPiServer Find Content Indexing Job

6) Checked the index through the "Find Explorer" (http://localhost:50244/episerver/Find/#overview/explore)

The index looks good. IContent from Commece is within the Find Index, so Episerver.Find.Commerce has done its job.

For instance, a FahsionProduct-object contains these Fields inside the index (they are not properties on the Model itself, nor any inherited property...):

7) Now I thought I would just add a property on the Model I am searching with, and I would get these values from the Find.Index...

Public Virtual string ThumbnailUrl {get;set;}
Public Virtual string ThumbnailUrl { get; }
Public readonly string ThubnailUrl;

The fields/properties are always null, never filled with the value from the Index (same goes for DefaultImageUrl)...

Edit: Not sure if this is related to Commerce or Find, or both... Will create a sample console application with Find only...


Best regards 
NJ

 

Shouldn't expired lineitems be removed form old carts?

$
0
0

Hi!

Let's say that I have created a cart with two items but I never check it out. One of my items in the cart expires after a month and you cannot enter that producrt page for example. I then come back six months later and enter the checkout page to checkout my cart. On that page the CartPrepare workflow is run. Shouldn't the workflow remove the expired item in the cart so my cart should only have one item left? Or do I have to check that manually? As for now I can still buy the item.

Thanks!

/Kristoffer

Episerver Commerce 10.5


Migrated from Membership to Identity, logging in old users now gives Base-64 error

$
0
0

Hello,

I'm migrating our newly updated CMS10/Commerce website from using the old .net Membership references to Episerver's aspnetidentity.

I followed the directions on this page, and all seemed to work well:

http://world.episerver.com/documentation/Items/Developers-Guide/Episerver-CMS/9/Security/episerver-aspnetidentity/

Next, I successfully ran a script that imported all our users from the old membership tables to the new aspnet identity tables.

Whenever I try to log on using an old login I get the following error:

The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. 
Source Error: 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace: 
[FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters. ]
   System.Convert.FromBase64_ComputeResultLength(Char* inputPtr, Int32 inputLength) +12271472
   System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength) +71
   System.Convert.FromBase64String(String s) +42
   Microsoft.AspNet.Identity.Crypto.VerifyHashedPassword(String hashedPassword, String password) +53
   Microsoft.AspNet.Identity.PasswordHasher.VerifyHashedPassword(String hashedPassword, String providedPassword) +11
   Microsoft.AspNet.Identity.d__3e.MoveNext() +292
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   Microsoft.AspNet.Identity.d__17.MoveNext() +257
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   Microsoft.AspNet.Identity.d__12.MoveNext() +448
   System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +92
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +58
   Microsoft.AspNet.Identity.AsyncHelper.RunSync(Func`1 func) +281
   Microsoft.AspNet.Identity.UserManagerExtensions.Find(UserManager`2 manager, String userName, String password) +167
   EPiServer.Cms.UI.AspNetIdentity.ApplicationSignInManager`1.SignIn(String userName, String password, String returnUrl) +117
   EPiServer.Cms.UI.AspNetIdentity.ApplicationUISignInManager`1.SignIn(String providerName, String userName, String password) +44
   EPiServer.UI.WebControls.Login.OnAuthenticate(AuthenticateEventArgs e) +77
   System.Web.UI.WebControls.Login.AttemptLogin() +119
   System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +75
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +37
   System.Web.UI.WebControls.Button.OnCommand(CommandEventArgs e) +114
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +260
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639


After some searching, I tried implementing the following fix: http://sveinaandahl.blogspot.se/2016/03/how-to-validate-old-passwords-when.html

I added a UserManager Class:

using CMS.Models.ViewModels.Register;
using EPiServer.Cms.UI.AspNetIdentity;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;
namespace CMS.Models
{
    public class CustomUserManager : ApplicationUserManager
    {
        public CustomUserManager() : base(new UserStore(new ApplicationDbContext()))
        {
            this.PasswordHasher = new SQLPasswordHasher();
        }
    }
    public class SQLPasswordHasher : PasswordHasher
    {
        public override string HashPassword(string password)
        {
            return base.HashPassword(password);
        }
        public override PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string providedPassword)
        {
            string[] passwordProperties = hashedPassword.Split('|');
            if (passwordProperties.Length != 3)
            {
                return base.VerifyHashedPassword(hashedPassword, providedPassword);
            }
            else
            {
                string passwordHash = passwordProperties[0];
                int passwordformat = 1;
                string salt = passwordProperties[2];
                if (String.Equals(EncryptPassword(providedPassword, passwordformat, salt), passwordHash, StringComparison.CurrentCultureIgnoreCase))
                {
                    return PasswordVerificationResult.SuccessRehashNeeded;
                }
                else
                {
                    return PasswordVerificationResult.Failed;
                }
            }
        }
        //This is copied from the existing SQL providers and is provided only for back-compat.
        private string EncryptPassword(string pass, int passwordFormat, string salt)
        {
            if (passwordFormat == 0) // MembershipPasswordFormat.Clear
                return pass;
            byte[] bIn = Encoding.Unicode.GetBytes(pass);
            byte[] bSalt = Convert.FromBase64String(salt);
            byte[] bRet = null;
            if (passwordFormat == 1)
            { // MembershipPasswordFormat.Hashed 
                HashAlgorithm hm = HashAlgorithm.Create("HMACSHA512");
                if (hm is KeyedHashAlgorithm)
                {
                    KeyedHashAlgorithm kha = (KeyedHashAlgorithm)hm;
                    if (kha.Key.Length == bSalt.Length)
                    {
                        kha.Key = bSalt;
                    }
                    else if (kha.Key.Length < bSalt.Length)
                    {
                        byte[] bKey = new byte[kha.Key.Length];
                        Buffer.BlockCopy(bSalt, 0, bKey, 0, bKey.Length);
                        kha.Key = bKey;
                    }
                    else
                    {
                        byte[] bKey = new byte[kha.Key.Length];
                        for (int iter = 0; iter < bKey.Length;)
                        {
                            int len = Math.Min(bSalt.Length, bKey.Length - iter);
                            Buffer.BlockCopy(bSalt, 0, bKey, iter, len);
                            iter += len;
                        }
                        kha.Key = bKey;
                    }
                    bRet = kha.ComputeHash(bIn);
                }
                else
                {
                    byte[] bAll = new byte[bSalt.Length + bIn.Length];
                    Buffer.BlockCopy(bSalt, 0, bAll, 0, bSalt.Length);
                    Buffer.BlockCopy(bIn, 0, bAll, bSalt.Length, bIn.Length);
                    bRet = hm.ComputeHash(bAll);
                }
            }
            return Convert.ToBase64String(bRet);
        }
    }
}

And then I modified my StartUp.cs:

using CMS.Models;
using EPiServer.Cms.UI.AspNetIdentity;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Owin;
using System;
[assembly: OwinStartup("customStartup", typeof(CMS.Startup))]
namespace CMS
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Add CMS integration for ASP.NET Identity
            app.AddCmsAspNetIdentity(new ApplicationOptions() { ConnectionStringName = "EcfSqlConnection" });
            // Use cookie authentication
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/util/login.aspx"),
                Provider = new CookieAuthenticationProvider
                {
                    OnValidateIdentity =
                         SecurityStampValidator.OnValidateIdentity<CustomUserManager, SiteUser>(
                             validateInterval: TimeSpan.FromMinutes(30),
                             regenerateIdentity: (manager, user) => manager.GenerateUserIdentityAsync(user))
                }
            });
        }
    }
}

But it appears to have no effect, I still receive the same error every time.  Has anyone dealt with this or fixed this that can help? 

Thanks!

John

Cannot not open purchase order in Commerce Manager

$
0
0

Hi!

All of a sudden there are purchase orders that I cannot open in Commerce Manager. I get the following exception on the following url:

https://xxx:443/Apps/Shell/Pages/ContentFrame.aspx?_a=Order&_v=PurchaseOrder-ObjectView&id=33950&customerid=5a6a2fd1-9fec-46d5-8e8b-5563b9bc1fa4

Exception Details: System.ArgumentOutOfRangeException: ArgumentOutOfRange_Index
Parameter name: index

[ArgumentOutOfRangeException: ArgumentOutOfRange_Index
Parameter name: index]
   Mediachase.Commerce.Storage.StorageCollectionBase.System.Collections.IList.get_Item(Int32 index) +266
   Mediachase.Commerce.Storage.MetaStorageCollectionBase`1.get_Item(Int32 index) +31
   Mediachase.Commerce.Manager.Apps.Order.CustomPrimitives.OrderStatus.LoadControlValues(Object Sender) +320
   Mediachase.BusinessFoundation.MetaForm.FormRenderer.stl_ItemCreated(SmartTableLayoutItemEventArgs e) +6093
   Mediachase.BusinessFoundation.SmartTableLayout.OnItemCreated(SmartTableLayoutItemEventArgs e) +33
   Mediachase.BusinessFoundation.SmartTableLayout.CreateItem(Int32 itemIndex, Guid uid, String title, TableCell containerCell, Boolean dataBind, Object dataItem) +172
   Mediachase.BusinessFoundation.SmartTableLayout.CreateControlHierarchy(IEnumerable dataSource, Boolean dataBinding) +3347
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +97
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +165
   System.Web.UI.Control.DataBindChildren() +246
   System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) +193
   Mediachase.BusinessFoundation.TableLayout.CreateItem(Int32 itemIndex, Guid uid, String title, HtmlGenericControl containerDiv, Boolean dataBind, Object dataItem) +190
   Mediachase.BusinessFoundation.TableLayout.CreateControlHierarchy(IEnumerable dataSource, Boolean dataBinding) +4039
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +97
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +165
   Mediachase.BusinessFoundation.MetaForm.FormRenderer.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +1582
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +97
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +165
   Mediachase.Ibn.Web.UI.MetaUI.FormDocumentView.DataBind() +929
   Mediachase.Commerce.Manager.Apps.Order.Modules.OrderView.MakeDataBindColl(ControlCollection coll, Object obj) +190
   Mediachase.Commerce.Manager.Apps.Order.Modules.OrderView.MakeDataBindColl(ControlCollection coll, Object obj) +245
   Mediachase.Commerce.Manager.Apps.Order.Modules.OrderView.MakeDataBindColl(ControlCollection coll, Object obj) +245
   Mediachase.Commerce.Manager.Apps.Order.Modules.OrderView.MakeDataBindColl(ControlCollection coll, Object obj) +245
   Mediachase.Commerce.Manager.Apps.Order.Modules.OrderView.MakeDataBindColl(ControlCollection coll, Object obj) +245
   Mediachase.Commerce.Manager.Apps.Order.Modules.OrderView.MakeDataBindColl(ControlCollection coll, Object obj) +245
   Mediachase.Commerce.Manager.Apps.Order.Modules.OrderView.MakeDataBindColl(ControlCollection coll, Object obj) +245
   Mediachase.BusinessFoundation.XmlFormBuilder.OnInnerDataBind(Object sender, EventArgs e) +43
   Mediachase.BusinessFoundation.XmlFormBuilder.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +75
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +97
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +165
   Mediachase.Commerce.Manager.Apps.Order.Modules.OrderView.Page_Load(Object sender, EventArgs e) +1592
   System.Web.UI.Control.OnLoad(EventArgs e) +103
   System.Web.UI.Control.LoadRecursive() +68
   System.Web.UI.Control.LoadRecursive() +162
   System.Web.UI.Control.LoadRecursive() +162
   System.Web.UI.Control.LoadRecursive() +162
   System.Web.UI.Control.LoadRecursive() +162
   System.Web.UI.Control.LoadRecursive() +162
   System.Web.UI.Control.LoadRecursive() +162
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3811

Some orders work and some don't. Any ideas?

Thanks!

/Kristoffer

Commerce 10.5

Drag and Drop sorting in Catalog or any Sorting of Catalog Products in Commerce > Catalog UI

$
0
0

EPiServer Commerce Version: 9.15 (started from Quicksilver). 

Our Commerce Admins want to be able to change the ordering of the Products displayed within the Node page.

So far, I know we can sort variants within the Product > Variants tab > Edit Variants.

I was trying to figure out how to achieve sorting of Products at the moment.

The product does not seem to allow drag-and-drop. 

I searched for sorting function and found this user guide mentioning "Sorting catalog entries": http://webhelp.episerver.com/latest/commerce/catalog-management/catalog-entry-activities.htm.

However, I can't seem to find the "Sort" button while in the "List" mode under the selected Node.

Is this something supported on Commerce version 9? Do I need to enable something?

(or am I just blind at the moment?)

Quick Silver Product Search Not Working For New Catalog

$
0
0

Hi,

I am using quicksilver for creating a new project I have added new 2 catalogs but after adding those catalog they are not coming in search and in quick silver the find is not integrated.

I am not getting clear why the new catalog add is not working.

Please help.

Deleting MetaClass Not Working (Commerce 11.2.5)

$
0
0

Hi,

I have renamed a load of my classes and change their MetaClassName in code. I have compeltely cleared my catalogue and tried deleting these meta classes that no longer exist and although they say deleted as soon as I restarted IIS they are back. Due to this they are coming up as availible types in the catalogue when trying to add items on the MainCatalog.

Is there some way of actually making these go away?

Size of Catalog in Cache.

$
0
0

Hi,

We have a catalog catalog with approximatly 100.000 products. When browsing the catalog, we see that the memory usage increases a lot. Without having measured the amount of data per variant, I suppose each variant could contain around 5 kb. How much memory would you expect this catalog to use? I see that there are a lot of cache entries containing verisoning information etc. 

What would the typical memory footprint for a site like this be?

Best regards

Thomas

Using GetCatalogEntriesDto to bulk load Entry instances

$
0
0

Hey Everyone,

Stuck on a little bit of a brain teaser. Currently, I get all product variations via their ContentReference.ID and use this to get an Entry instance in a foreach loop.

  if (variationsList != null && variationsList.Count() > 0)
{
foreach (var item in variationsList)
{
var thisEntry = CatalogRef.GetCatalogEntry(item.Target.ID, new CatalogEntryResponseGroup(CatalogEntryResponseGroup.ResponseGroup.Variations));



I'm trying to optimise code (cut down database calls) so that we bulk load in CataLogEntries as Entry instances (Probably store these in a dictionary or List). I'm hoping to use the the GetCatalogEntriesDto method to load Entry instances before entering the foreach loop and then using LINQ get a particular Entry instance based on ContentReference.ID something like:

var thisEntry = entryDto.Variation.Single(x => x.CatalogEntryId == item.Target.ID);



Can anyone advise here please?

Best,

John


Delivering a great digital commerce experience C1

$
0
0

Hey,

So I was reading the "Delivering a great digital commerce experience" release by Epi with a lot of recommendations and other things. One thing I noticed however was this:

Isn't this like... exactly the opposite of what you should do? 3 for 2 entry level -> one item has $0 price. Then apply order promotion 10% off all, now this item has a negative price. Erik Norberg talked about it when he was testing out the new promotions a long time ago as well. Has been brought up several times too as far as I know.

Regards,
Joel Yourstone

Default Membership Provider must be specified error when deleting Contact (Commerce 10.8)

$
0
0

We've been experiencing errors when deleting users since moving to ASP.NET Identity. We are able to delete the user using the UserManager just fine, but cannot delete the contacts. We get the following exception since implementing ASP.NET Identity in the same fashion as described here.

[ProviderException: Default Membership Provider must be specified.]
   System.Web.Security.Membership.InitializeDefaultProvider(Boolean initializeDefaultProvider, MembershipSection settings) +10174203
   System.Web.Security.Membership.Initialize() +455
   System.Web.Security.Membership.get_Provider() +9
   System.Web.Security.Membership.GetUser(String username, Boolean userIsOnline) +41
   Mediachase.Commerce.Customers.CustomerContext.GetUserForContactId(PrimaryKeyId customerContactId) +164
   Mediachase.Commerce.Customers.Handlers.ContactRequestHandler.PreDelete(BusinessContext context) +211
   Mediachase.BusinessFoundation.Data.Business.EntityObjectDefaultRequestHandler.PreExecute(BusinessContext context) +612
   Mediachase.BusinessFoundation.Data.Business.BaseRequestHandler.Mediachase.BusinessFoundation.Data.Business.IRequestHandler.PreExecute(BusinessContext context) +51
   Mediachase.BusinessFoundation.Data.Business.BusinessManager.Execute(Request request) +496
   Mediachase.BusinessFoundation.Data.Business.BusinessManager.Delete(EntityObject entityObject) +72
   EPiServer.Reference.Commerce.Site.Features.Login.Controllers.LoginController.DeleteUsers() in C:\dev\Quicksilver\Sources\EPiServer.Reference.Commerce.Site\Features\Login\Controllers\LoginController.cs:75

The code in question was added to Quicksilver LoginController Index to confirm that it wasn't a configuration issue in my project. The Guid for the contact of a new user I created from the admin area on Quicksilver. Nothing else has been modified from Quicksilver 10.8.

        private void DeleteUsers()
        {
            var myGuid = new Guid("128ED95A-6D32-4745-9930-F3BA8A7CC502");
            var contact = CustomerContext.Current.GetContactById(myGuid);
            if (contact != null)
            {
                BusinessManager.Delete(contact);
            }
        }

Is there a fix for this or anything I should be doing differently? I noticed another post with this error, but during authentication and not deletion. There is no follow up post either with a resolution.

Episerver 10.8.0.0: Is there a way to retrieve the original promotion data for the promotion that is applied for a order.

$
0
0

Hi Can we retrive the promotion data that is saved in CMS.

When you use a promotion on a order, and if it is a percentage discount, we want to retrieve the percentage value. Liek 10% or 40%. The PromotionInformation and PromotionInformationEntry has teh dollar amount only.

Select TOP 100 on Mediachase.BusinessFoundation.Data.dll

$
0
0

I had an issue with my client because some of the Sizes configured are not returning from BusinessManager.List. After some investigation, I found using the SQL Server Profile the queries are executed with TOP 1000.

My client in this moment has 1117 different sizes.

exec sp_executesql N'SELECT TOP 1000 [t01].[SizeId] AS [SizeId], [t01].[SizeName] AS [SizeName], [t01].[SizeCode] AS [SizeCode]
FROM [cls_Size] AS [t01]'

I developed a solution to get the information from this table.

Can I consider this an EpiServer issue?

There is a solution or path to fix this issue?

Clarification on the way how the distribution of "OrderLevelDiscount" works.

$
0
0

Hi,

I am using EPi Commerce 7.5

I need some clarification on the way how the distribution of "OrderLevelDiscount" works.

I have seen that initially we will be deducting the lineitem level discount from the ordersubtotal and we will use the below formula to distribute the orderleveldiscount against the lineitem.

if (record.PromotionReward.AmountType == PromotionRewardAmountType.Percentage)
{
// calculate percentage adjusted by the running amount, so it will be a little less if running amount is less than total
percentageOffTotal = (record.PromotionReward.AmountOff / 100) * (totalAmount / record.AffectedEntriesSet.TotalCost);
//percentageOffTotal = PromotionReward.AmountOff / 100;
discountAmount = totalAmount * record.PromotionReward.AmountOff / 100;
}
else
{
// Calculate percentage off discount price
percentageOffTotal = record.PromotionReward.AmountOff / totalAmount;

// but since CostPerEntry is not an adjusted price, we need to take into account additional discounts already applied
percentageOffTotal = percentageOffTotal * (totalAmount / record.AffectedEntriesSet.TotalCost);

discountAmount = record.PromotionReward.AmountOff;
}

// Now distribute discount amount evenly over all entries taking into account running total
// Special case for shipments, we consider WholeOrder to be a shipment
if (!record.PromotionItem.DataRow.PromotionGroup.Equals(PromotionGroup.GetPromotionGroup(PromotionGroup.PromotionGroupKey.Shipping).Key, StringComparison.OrdinalIgnoreCase))
{
foreach (PromotionEntry entry in record.AffectedEntriesSet.Entries)
{
AddDiscountToLineItem(order, record, entry, 0, (((entry.CostPerEntry * entry.Quantity)/* - entry.Discount*/)) * percentageOffTotal);
}
}

The "totalAmount" here will be the subtotal after deducting lineitemdiscount.

For example we have 2 lineitems in our cart, subtotal is around 1200$.

Now after applying the lineitem discount(200$), order subtotal will be 1000$. This will become our "totalAmount" value in the above code.

Now if we have order level promotion with 10% discount.

I will be considered as

0.10 * (1000/1200) =0.0833

0.0833*quantity*extendedprice will be the orderleveldiscoutn against the lineitem right?

Can you please let me know if my understanding is correct?

Thanks,

Manjeera T

Viewing all 9642 articles
Browse latest View live


Latest Images