Sitefinity 6.1 upgrade - Ecommerce/Products gives error
Hi.
After upgrading to 6.1, when I click on eCommerce / Products, I get an error : Sequence contains no elements
Anybody had the same issue? Anybody knows a fix for this?
Thanks!
Olivier
Hi Olivier,
We will continue troubleshooting this with you in your tickets. For anyone else having this problem the following script seems to resolve it for most projects.
using
System;
using
System.Collections.Generic;
using
System.Globalization;
using
System.Linq;
using
Telerik.OpenAccess;
using
Telerik.Sitefinity.Ecommerce.Catalog.Model;
using
Telerik.Sitefinity.Modules.Ecommerce.Catalog;
using
Telerik.Sitefinity.Services;
namespace
SitefinityWebApp
public
partial
class
WebForm1 : System.Web.UI.Page
protected
void
Page_Load(
object
sender, EventArgs e)
UpdateExistingProductsWithoutLifecycleSupport();
Response.Write(
"All done!"
);
private
void
UpdateExistingProductsWithoutLifecycleSupport()
List<Guid> inactiveProducts = CreateMasterProductsFromLiveOnes();
PublishAllMasterProducts();
UnpublishTheNotActiveProducts(inactiveProducts);
private
void
UnpublishTheNotActiveProducts(List<Guid> inactiveProducts)
using
(var catalogManager = CatalogManager.GetManager())
var products = catalogManager.GetProducts().Where(p => p.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live);
int
skip = 0;
int
take = 100;
int
currentCount = 0;
int
totalCount = products.Count();
while
(currentCount < totalCount)
var chunkedProducts = products.Skip(skip).Take(take);
skip = skip + take;
currentCount = skip;
foreach
(var productLive
in
chunkedProducts)
try
//all inactive old versions should be made invisible.
if
(inactiveProducts.Contains(productLive.OriginalContentId))
var publishedTranslations =
new
List<
string
>(productLive.PublishedTranslations.ToList());
//copy since the collection will be modified by the unpublish durring the loop
if
(publishedTranslations.Count() > 0)
//unpublish for each translation
foreach
(var publishedTranslation
in
publishedTranslations)
catalogManager.Lifecycle.Unpublish(productLive,
new
CultureInfo(publishedTranslation));
catalogManager.Provider.FlushTransaction();
else
//unpublish invariant only
catalogManager.Lifecycle.Unpublish(productLive, SystemManager.CurrentContext.AppSettings.DefaultFrontendLanguage);
catalogManager.Provider.FlushTransaction();
catalogManager.SaveChanges();
catch
(Exception innerEx)
private
void
PublishAllMasterProducts()
using
(var catalogManager = CatalogManager.GetManager())
var products = catalogManager.GetProducts().Where(p => p.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Master);
int
skip = 0;
int
take = 100;
int
currentCount = 0;
int
totalCount = products.Count();
while
(currentCount < totalCount)
var chunkedProducts = products.Skip(skip).Take(take);
skip = skip + take;
currentCount = skip;
foreach
(var productMaster
in
chunkedProducts)
try
var publishedTranslations = productMaster.PublishedTranslations;
if
(publishedTranslations.Count() > 0)
//publish for each translation
foreach
(var publishedTranslation
in
publishedTranslations)
catalogManager.Lifecycle.Publish(productMaster,
new
CultureInfo(publishedTranslation));
catalogManager.Provider.FlushTransaction();
else
//publish for default
catalogManager.Lifecycle.Publish(productMaster, SystemManager.CurrentContext.AppSettings.DefaultFrontendLanguage);
catalogManager.Provider.FlushTransaction();
catalogManager.SaveChanges();
catch
(Exception innerEx)
private
List<Guid> CreateMasterProductsFromLiveOnes()
List<Guid> notActiveProducts =
new
List<Guid>();
Guid currentUserId = Telerik.Sitefinity.Security.SecurityManager.GetCurrentUserId();
using
(var catalogManager = CatalogManager.GetManager())
var products = catalogManager.GetProducts().Where(p => p.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live && p.OriginalContentId ==
null
);
// yes it should be null not Guild.Empty
foreach
(Product productLive
in
products)
productLive.Status = Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Master;
var isActiveLegacy = productLive.FieldValue<
bool
>(
"isActive"
);
//we cannot use reflection because open access has not populated the field yet so (bool)typeof(Product).GetField("isActive", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(productLive) will always return false
if
(!isActiveLegacy)
//TODO use the internal method because the property IsActive now uses lifecycle
notActiveProducts.Add(productLive.Id);
productLive.ApprovalWorkflowState =
"Unpublished"
;
else
productLive.ApprovalWorkflowState =
"Published"
;
if
(currentUserId != Guid.Empty)
productLive.Owner = currentUserId;
productLive.OriginalOwner = currentUserId;
catalogManager.SaveChanges();
return
notActiveProducts;
Thank you Patrick.
I was curious to see if others also had this issue.
I understand we will continue troubleshooting in my own ticket.
Thank you for taking the time to reply anyway! Really appreciated.
Olivier
I have encountered this exact problem upgrading my site from 5.x to the latest 6.2.4910
I ran this script but, it did not fix the problem.
all of the products I had no longer appear on the website and when I click on ecommerce / products I receive the message "Sequence contains no elements."
Any suggestions?
Hi Gaston.
When I faced that problem, I turned out that I had skipped some of the upgrades. You can't go directly from 5.x to 6.2. There are important updates that need to take place in-between.
So, restore your 5.x you backed up before doing the upgrade - you did a backup right??? - and follow the upgrade path described on the following link : http://www.sitefinity.com/documentation/documentationarticles/installation-and-administration-guide/upgrade
It is important you follow each upgrade by complete tests of all the functionality you have installed and use to ensure all is working as it should, or you will have more and more problems.
Good luck!
I know this thread is kind of old but i though i would post my findings. So like every one here i upgrade from 5.4 to 6.1 and got the "Sequence contains no elements". I tried running the script provided and now resolution.
I investigated some more and realized that my product types were not showing either. I looked into the database [sf_ec_product_type] and realized the that the 'title_plural' & 'title' where now 'title_plural_' & 'title_' i updated those columns and set the old ones to NULL. Then i noticed that 'application_name' was looking for '/EcommerceCommon' i updated that column.
After all that i recycled the appPool & modified the web.config and to my surprise there where my Product Types.
I ran that script again and VIOLA!!! My products!!!
I'd like to add one more solution, if anyone comes across this post and the script doesn't work for them. I updated from 5.4 to 7, and I got the popup sequence contains no elements on the Products screen as well.
I changed the application_name field in the sf_ec_product_types table to be '/EcommerceCommon' instead of '/Catalog:'
update
[sf_ec_product_type]
set
[application_name] =
'/EcommerceCommon'
That gave me both product types and products in the admin section. When I then went to create a new product I got an error saying something like Approval workflow could not be found for type Telerik.Sitefinity.DynamicTypes.Model.sf_ec_prdct_generalproduct. The fix for that was easy, I just pasted the following line into my WorkflowConfig.config file (in /App_Data/Sitefinity/Configuration/):
<
add
serviceUrl
=
"~/DefaultWorkflows/ApprovalWorkflow.xamlx"
title
=
"General product <i>(Ecommerce)</i>"
moduleName
=
"Ecommerce"
contentType
=
"Telerik.Sitefinity.DynamicTypes.Model.sf_ec_prdct_generalproduct"
/>
Josh,
I just upgraded from 5.0.2523 (Hotfix 1) to 8.0.5710 and I was getting the same error. I tried Patrick Dunn's script and no luck. I then ran your update script and added the additional entries into the workflowConfig.config file and and now I get a different error message when creating a new product or updating a product. The message that pops up says...
There was an error deserializing the object of type System.String. End element 'root' from namespace '' expected. Found element 'Item' from namespace ''.
I compared the config files and assemblies to a clean installed of Sitefinity 8.0.5710 and I don't see anything that could be causing this issue.
Below is the full error message. Any help would be greatly appreciated.
----------------------------------------
Timestamp: 4/30/2015 8:52:14 PM
Message: HandlingInstanceID: 2245f21b-d7ed-4bac-9ee6-1082dcd2edad
An exception of type 'System.Runtime.Serialization.SerializationException' occurred and was caught.
---------------------------------------------------------------------------------------------------
04/30/2015 16:52:14
Type : System.Runtime.Serialization.SerializationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : There was an error deserializing the object of type System.String. End element 'root' from namespace '' expected. Found element 'Item' from namespace ''.
Source : System.Runtime.Serialization
Help link :
Data : System.Collections.ListDictionaryInternal
TargetSite : System.Object ReadObjectHandleExceptions(System.Runtime.Serialization.XmlReaderDelegator, Boolean, System.Runtime.Serialization.DataContractResolver)
HResult : -2146233076
Stack Trace : at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(XmlDictionaryReader reader, Boolean verifyObjectName)
at System.ServiceModel.Dispatcher.SingleBodyParameterDataContractMessageFormatter.ReadObject(Message message)
at System.ServiceModel.Dispatcher.SingleBodyParameterMessageFormatter.DeserializeRequest(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
Additional Info:
MachineName : XXXXXX
TimeStamp : 4/30/2015 8:52:14 PM
FullName : Telerik.Sitefinity.Utilities, Version=8.0.5710.0, Culture=neutral, PublicKeyToken=b28c218413bdf563
AppDomainName : /LM/W3SVC/5/ROOT-1-130749005972998711
ThreadIdentity :
WindowsIdentity : NT AUTHORITY\NETWORK SERVICE
Inner Exception
---------------
Type : System.Xml.XmlException, System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : End element 'root' from namespace '' expected. Found element 'Item' from namespace ''.
Source : System.Runtime.Serialization
Help link :
LineNumber : 0
LinePosition : 0
SourceUri :
Data : System.Collections.ListDictionaryInternal
TargetSite : Void ThrowXmlException(System.Xml.XmlDictionaryReader, System.String, System.String, System.String, System.String)
HResult : -2146232000
Stack Trace : at System.Xml.XmlExceptionHelper.ThrowXmlException(XmlDictionaryReader reader, String res, String arg1, String arg2, String arg3)
at System.Xml.XmlBaseReader.ReadEndElement()
at System.Xml.XmlBaseReader.ReadElementContentAsString()
at System.Runtime.Serialization.Json.JsonStringDataContract.ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.JsonDataContract.ReadJsonValue(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName)
at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
Category: ErrorLog
Priority: 0
EventId: 90000
Severity: Error
Title:Enterprise Library Exception Handling
Machine: XXXXXX
App Domain: /LM/W3SVC/5/ROOT-1-130749005972998711
ProcessId: 2508
Process Name: c:\windows\system32\inetsrv\w3wp.exe
Thread Name:
Win32 ThreadId:11980
Extended Properties:
----------------------------------------
FYI... I submitted a ticket to Telerik. If I get any answers I will post them back here in the forum.