/// <summary> /// Deletes the catalog node. /// </summary> /// <param name="catalogNodeId">The catalog node id.</param> /// <param name="catalogId">The catalog id.</param> /// <param name="catalogNodeDto">The catalog node Dto.</param> /// <param name="catalogDto">The catalog Dto.</param> internal static void DeleteNodeRecursive(int catalogNodeId, int catalogId, ref CatalogNodeDto catalogNodeDto, ref CatalogRelationDto catalogRelationDto) { CatalogNodeDto.CatalogNodeRow row = catalogNodeDto.CatalogNode.FindByCatalogNodeId(catalogNodeId); if (row != null) { DataRow[] catalogRelations = catalogRelationDto.CatalogNodeRelation.Select(String.Format("CatalogId = {0} AND ParentNodeId = {1}", catalogId, catalogNodeId)); foreach (DataRow catalogRelation in catalogRelations) { catalogRelation.Delete(); } DataRow[] nodeEntryRelations = catalogRelationDto.NodeEntryRelation.Select(String.Format("CatalogId = {0} AND CatalogNodeId = {1}", catalogId, catalogNodeId)); foreach (DataRow nodeEntryRelation in nodeEntryRelations) { nodeEntryRelation.Delete(); } row.Delete(); DataRow[] catalogNodes = catalogNodeDto.CatalogNode.Select(String.Format("ParentNodeId = {0}", catalogNodeId)); if (catalogNodes.Length > 0) { foreach (DataRow catalogNode in catalogNodes) { DeleteNodeRecursive((int)catalogNode["CatalogNodeId"], catalogId, ref catalogNodeDto, ref catalogRelationDto); } } } }
/// <summary> /// Loads the node. /// </summary> /// <param name="admin">The admin.</param> /// <param name="row">The row.</param> /// <param name="responseGroup">The response group.</param> private static void LoadNode(CatalogNodeAdmin admin, CatalogNodeDto.CatalogNodeRow row, CatalogNodeResponseGroup responseGroup) { if (responseGroup.ContainsGroup(CatalogNodeResponseGroup.ResponseGroup.CatalogNodeFull) || responseGroup.ContainsGroup(CatalogNodeResponseGroup.ResponseGroup.Assets)) { // Load Associations admin.LoadAssets(row.CatalogNodeId); } }
/// <summary> /// Initializes a new instance of the <see cref="CatalogNode"/> class. /// </summary> /// <param name="input">The input.</param> public CatalogNode(CatalogNodeDto.CatalogNodeRow input) { // Populate basic parameters this.ID = input.Code; this.Name = input.Name; this.IsActive = input.IsActive; this.StartDate = input.StartDate; this.EndDate = input.EndDate; this.DisplayTemplate = input.TemplateName; this.ParentNodeId = input.ParentNodeId; this.CatalogId = input.CatalogId; this.CatalogNodeId = input.CatalogNodeId; // Populate attributes this.ItemAttributes = new ItemAttributes(); // Cycle through columns ObjectHelper.CreateAttributes(this.ItemAttributes, input); // Populate SEO CatalogNodeDto.CatalogItemSeoRow[] seoRows = input.GetCatalogItemSeoRows(); if (seoRows.Length > 0) { ArrayList seoList = new ArrayList(); foreach (CatalogNodeDto.CatalogItemSeoRow seoRow in seoRows) { Seo seo = new Seo(); seo.Description = seoRow.IsDescriptionNull() ? "" : seoRow.Description; seo.Keywords = seoRow.IsKeywordsNull() ? "" : seoRow.Keywords; seo.LanguageCode = seoRow.LanguageCode; seo.Title = seoRow.IsTitleNull() ? "" : seoRow.Title; seo.Uri = seoRow.Uri; seoList.Add(seo); } this.SeoInfo = (Seo[])seoList.ToArray(typeof(Seo)); } // Populate Assets CatalogNodeDto.CatalogItemAssetRow[] assetRows = input.GetCatalogItemAssetRows(); if (assetRows.Length > 0) { List <ItemAsset> assets = new List <ItemAsset>(); foreach (CatalogNodeDto.CatalogItemAssetRow assetRow in assetRows) { ItemAsset asset = new ItemAsset(); asset.AssetKey = assetRow.AssetKey; asset.AssetType = assetRow.AssetType; asset.GroupName = assetRow.GroupName; asset.SortOrder = assetRow.SortOrder; assets.Add(asset); } this.Assets = assets.ToArray(); } }
/// <summary> /// Creates a line item. /// Code copied from OrderHelper.cs. /// </summary> /// <param name="random">A Random object seeded from the start of test method.</param> /// <returns></returns> private LineItem createLineItem(Random random, Guid shippingMethod, String shippingMethodName) { CatalogDto catalogs = CatalogContext.Current.GetCatalogDto(); CatalogEntryDto.CatalogEntryRow entry = null; bool found = false; string catalogName = String.Empty; int seed = 0; while (!found) { seed = random.Next(catalogs.Catalog.Count - 1); CatalogDto.CatalogRow catalog = catalogs.Catalog[seed]; catalogName = catalog.Name; // Get Catalog Nodes CatalogNodeDto nodes = CatalogContext.Current.GetCatalogNodesDto(catalogName); // Pick random node if (nodes.CatalogNode.Count > 0) { seed = random.Next(nodes.CatalogNode.Count - 1); CatalogNodeDto.CatalogNodeRow node = nodes.CatalogNode[seed]; CatalogEntryDto entryDto = CatalogContext.Current.GetCatalogEntriesDto(catalogName, node.CatalogNodeId); if (entryDto.CatalogEntry.Count > 0) { seed = random.Next(entryDto.CatalogEntry.Count - 1); entry = entryDto.CatalogEntry[seed]; if (entry.IsActive) { found = true; } } } } LineItem lineItem = new LineItem(); lineItem.DisplayName = entry.Name; lineItem.CatalogEntryId = entry.Code; lineItem.ShippingMethodId = shippingMethod; lineItem.ShippingMethodName = shippingMethodName; lineItem.ShippingAddressId = "Home"; // Choose a random quantity for chosen product. int quantity = random.Next(1, 7); lineItem.Quantity = quantity; lineItem.CatalogNode = catalogName; lineItem.Discounts.Add(OrderHelper.CreateLineItemDiscount()); return(lineItem); }
/// <summary> /// Handles the RowChanged event of the CatalogNode control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.Data.DataRowChangeEventArgs"/> instance containing the event data.</param> void CatalogNode_RowChanged(object sender, DataRowChangeEventArgs e) { CatalogNodeDto.CatalogNodeDataTable table = (CatalogNodeDto.CatalogNodeDataTable)sender; CatalogNodeDto.CatalogNodeRow row = (CatalogNodeDto.CatalogNodeRow)table.Rows[0]; if (row.CatalogNodeId > 0) { MetaDataTab.MetaClassId = row.MetaClassId; MetaDataTab.ObjectId = row.CatalogNodeId; } }
/// <summary> /// Creates the line item. /// </summary> /// <returns></returns> public static LineItem CreateLineItem() { CatalogDto catalogs = CatalogContext.Current.GetCatalogDto(); CatalogEntryDto.CatalogEntryRow entry = null; bool found = false; string catalogName = String.Empty; Random random = new Random(); int seed = 0; while (!found) { seed = random.Next(catalogs.Catalog.Count - 1); CatalogDto.CatalogRow catalog = catalogs.Catalog[seed]; catalogName = catalog.Name; // Get Catalog Nodes CatalogNodeDto nodes = CatalogContext.Current.GetCatalogNodesDto(catalogName); // Pick random node if (nodes.CatalogNode.Count > 0) { seed = random.Next(nodes.CatalogNode.Count - 1); CatalogNodeDto.CatalogNodeRow node = nodes.CatalogNode[seed]; CatalogEntryDto entryDto = CatalogContext.Current.GetCatalogEntriesDto(catalogName, node.CatalogNodeId); if (entryDto.CatalogEntry.Count > 0) { seed = random.Next(entryDto.CatalogEntry.Count - 1); entry = entryDto.CatalogEntry[seed]; if (entry.IsActive) { found = true; } } } } LineItem lineItem = new LineItem(); lineItem.DisplayName = entry.Name; lineItem.CatalogEntryId = entry.Code; lineItem.ShippingMethodId = new Guid("17995798-a2cc-43ad-81e8-bb932f6827e4"); lineItem.ShippingMethodName = "Online Download"; lineItem.ShippingAddressId = "Home"; lineItem.ListPrice = 100; lineItem.Quantity = 2; lineItem.CatalogNode = catalogName; lineItem.Discounts.Add(CreateLineItemDiscount()); return(lineItem); }
/// <summary> /// Handles the RowChanged event of the CatalogNode control. /// </summary> /// <param name="sender">The source of the event.</param> /// <param name="e">The <see cref="System.Data.DataRowChangeEventArgs"/> instance containing the event data.</param> void CatalogNode_RowChanged(object sender, DataRowChangeEventArgs e) { CatalogNodeDto.CatalogNodeDataTable table = (CatalogNodeDto.CatalogNodeDataTable)sender; CatalogNodeDto.CatalogNodeRow row = (CatalogNodeDto.CatalogNodeRow)table.Rows[0]; if (row.CatalogNodeId > 0) { MetaDataTab.MetaClassId = row.MetaClassId; MetaDataTab.ObjectId = row.CatalogNodeId; MetaDataTab.SaveChanges(null); } //throw new Exception("The method or operation is not implemented."); }
public static CatalogNodeDto CreateNode( string code = "NODECODE", bool active = true, string name = "NODENAME", int?parentNodeId = null, string seoUri = "") { var catalogNodeDto = CatalogContext.Current.GetCatalogNodeDto( code, new CatalogNodeResponseGroup(CatalogNodeResponseGroup.ResponseGroup.CatalogNodeInfo)); if (catalogNodeDto.CatalogNode.Count == 0) { var metaClass = MetaClass.Load(CatalogContext.MetaDataContext, "CatalogNodeEx"); CatalogNodeDto.CatalogNodeRow catalogNodeRow = catalogNodeDto.CatalogNode.NewCatalogNodeRow(); catalogNodeRow.CatalogId = RootCatalogId; catalogNodeRow.StartDate = DateTime.Now; catalogNodeRow.EndDate = DateTime.Now.AddYears(2); catalogNodeRow.Name = name; catalogNodeRow.Code = code; catalogNodeRow.ParentNodeId = parentNodeId ?? DefaultCatalogNodeId; catalogNodeRow.IsActive = active; catalogNodeRow.SortOrder = 0; catalogNodeRow.ApplicationId = AppContext.Current.ApplicationId; // hardcoded for now catalogNodeRow.TemplateName = "NodeEntriesTemplate"; catalogNodeRow.MetaClassId = metaClass.Id; catalogNodeDto.CatalogNode.AddCatalogNodeRow(catalogNodeRow); if (!string.IsNullOrEmpty(seoUri)) { var newSeoRow = catalogNodeDto.CatalogItemSeo.NewCatalogItemSeoRow(); newSeoRow.ApplicationId = AppContext.Current.ApplicationId; newSeoRow.CatalogNodeId = catalogNodeDto.CatalogNode[0].CatalogNodeId; newSeoRow.Description = "DESCRIPTION"; newSeoRow.LanguageCode = "en"; newSeoRow.Uri = seoUri; if (newSeoRow.RowState == DataRowState.Detached) { catalogNodeDto.CatalogItemSeo.AddCatalogItemSeoRow(newSeoRow); } } CatalogContext.Current.SaveCatalogNode(catalogNodeDto); } return(catalogNodeDto); }
/// <summary> /// Saves the changes. /// </summary> /// <param name="context">The context.</param> public void SaveChanges(IDictionary context) { CatalogNodeDto dto = (CatalogNodeDto)context["CatalogNodeDto"]; CatalogNodeDto.CatalogNodeRow row = null; if (dto.CatalogNode == null || dto.CatalogNode.Count == 0) { row = dto.CatalogNode.NewCatalogNodeRow(); row.ApplicationId = CatalogConfiguration.Instance.ApplicationId; } else { row = dto.CatalogNode[0]; if (row.MetaClassId != Int32.Parse(MetaClassList.SelectedValue)) { MetaObject.Delete(CatalogContext.MetaDataContext, row.CatalogNodeId, row.MetaClassId); } } row.Name = Name.Text; row.StartDate = AvailableFrom.Value.ToUniversalTime(); row.EndDate = ExpiresOn.Value.ToUniversalTime(); row.Code = CodeText.Text; row.SortOrder = Int32.Parse(SortOrder.Text); row.IsActive = IsCatalogNodeActive.IsSelected; if (ParentCatalogId > 0) { row.CatalogId = ParentCatalogId; if ((ParentCatalogNodeId > 0 && ParentCatalogNodeId != row.CatalogNodeId) || ParentCatalogNodeId == 0) { row.ParentNodeId = ParentCatalogNodeId; } } row.TemplateName = DisplayTemplate.SelectedValue; row.MetaClassId = Int32.Parse(MetaClassList.SelectedValue); if (row.RowState == DataRowState.Detached) { dto.CatalogNode.Rows.Add(row); } dto.CatalogNode.RowChanged += new DataRowChangeEventHandler(CatalogNode_RowChanged); }
public static FindDocumentBuilder.CatalogNodeInfo GetCatalogNode(int catalogNodeId, Dictionary <int, FindDocumentBuilder.CatalogInfo> catalogs, Dictionary <int, FindDocumentBuilder.CatalogNodeInfo> catalogNodes) { FindDocumentBuilder.CatalogNodeInfo catalogNodeInfo; if (!catalogNodes.TryGetValue(catalogNodeId, out catalogNodeInfo)) { CatalogNodeDto.CatalogNodeRow catalogNodeRow = FindDocumentBuilder.CatalogSystem.GetCatalogNodeDto(catalogNodeId).CatalogNode.Single <CatalogNodeDto.CatalogNodeRow>(); catalogNodeInfo = new FindDocumentBuilder.CatalogNodeInfo() { CatalogNodeId = catalogNodeId, CatalogNodeCode = FindDocumentBuilder.FormatStructureElement(catalogNodeRow.Code), Catalog = FindDocumentBuilder.CatalogInfo.GetCatalog(catalogNodeRow.CatalogId, catalogs), ParentCatalogNode = (FindDocumentBuilder.CatalogNodeInfo)null }; catalogNodes.Add(catalogNodeId, catalogNodeInfo); if (catalogNodeRow.ParentNodeId > 0) { catalogNodeInfo.ParentCatalogNode = FindDocumentBuilder.CatalogNodeInfo.GetCatalogNode(catalogNodeRow.ParentNodeId, catalogs, catalogNodes); } } return(catalogNodeInfo); }
/// <summary> /// Loads the node. /// </summary> /// <param name="row">The row.</param> /// <param name="recursive">if set to <c>true</c> [recursive].</param> /// <param name="responseGroup">The response group.</param> /// <returns></returns> internal static CatalogNode LoadNode(/*CatalogNodeDto dto,*/ CatalogNodeDto.CatalogNodeRow row, bool recursive, CatalogNodeResponseGroup responseGroup) { CatalogNode node = null; // Load node if (row != null) { node = new CatalogNode(row); } else { node = new CatalogNode(); } // Populate children if (responseGroup.ContainsGroup(CatalogNodeResponseGroup.ResponseGroup.CatalogNodeFull) || responseGroup.ContainsGroup(CatalogNodeResponseGroup.ResponseGroup.Children)) { CatalogNodeDto childrenDto = GetCatalogNodesDto(row.CatalogId, row.CatalogNodeId, responseGroup); CatalogNodes nodes = LoadNodes(childrenDto, node, recursive, responseGroup); node.Children = nodes; } return(node); }
/// <summary> /// Clones the catalog node. /// </summary> /// <param name="parentCatalogId">The parent catalog id.</param> /// <param name="parentCatalogNodeId">The parent catalog node id.</param> /// <param name="catalogNodeId">The catalog node id.</param> private void CloneCatalogNode(int parentCatalogId, int parentCatalogNodeId, int catalogNodeId) { using (TransactionScope scope = new TransactionScope()) { CatalogNodeDto catalogNodeDto = CatalogContext.Current.GetCatalogNodeDto(catalogNodeId); if (catalogNodeDto.CatalogNode.Count > 0) { CatalogNodeDto newCatalogNodeDto = new CatalogNodeDto(); newCatalogNodeDto.CatalogNode.ImportRow(catalogNodeDto.CatalogNode[0]); newCatalogNodeDto.CatalogNode[0].SetAdded(); newCatalogNodeDto.CatalogNode[0].ParentNodeId = parentCatalogNodeId; newCatalogNodeDto.CatalogNode[0].Code = Guid.NewGuid().ToString(); if (catalogNodeDto.CatalogItemSeo.Count > 0) { foreach (CatalogNodeDto.CatalogItemSeoRow row in catalogNodeDto.CatalogItemSeo.Rows) { newCatalogNodeDto.CatalogItemSeo.ImportRow(row); newCatalogNodeDto.CatalogItemSeo[newCatalogNodeDto.CatalogItemSeo.Count - 1].SetAdded(); newCatalogNodeDto.CatalogItemSeo[newCatalogNodeDto.CatalogItemSeo.Count - 1].Uri = Guid.NewGuid().ToString() + ".aspx"; } } if (newCatalogNodeDto.HasChanges()) { CatalogContext.Current.SaveCatalogNode(newCatalogNodeDto); } if (newCatalogNodeDto.CatalogNode.Count > 0) { CatalogNodeDto.CatalogNodeRow node = newCatalogNodeDto.CatalogNode[0]; int newCatalogNodeId = node.CatalogNodeId; int metaClassId = node.MetaClassId; // load list of MetaFields for MetaClass MetaClass metaClass = MetaClass.Load(CatalogContext.MetaDataContext, metaClassId); MetaFieldCollection metaFields = metaClass.MetaFields; // cycle through each language and get meta objects CatalogContext.MetaDataContext.UseCurrentUICulture = false; string[] languages = GetCatalogLanguages(parentCatalogId); if (languages != null) { foreach (string language in languages) { CatalogContext.MetaDataContext.UseCurrentUICulture = false; CatalogContext.MetaDataContext.Language = language; MetaObject metaObject = MetaObject.Load(CatalogContext.MetaDataContext, catalogNodeDto.CatalogNode[0].CatalogNodeId, metaClassId); MetaObject newMetaObject = MetaObject.NewObject(CatalogContext.MetaDataContext, newCatalogNodeId, metaClassId, FrameworkContext.Current.Profile.UserName); foreach (MetaField metaField in metaFields) { // skip system MetaFields if (!metaField.IsUser) { continue; } switch (metaField.DataType) { case MetaDataType.File: case MetaDataType.Image: case MetaDataType.ImageFile: MetaFile metaFile = (MetaFile)metaObject[metaField]; if (metaFile != null) { newMetaObject[metaField] = new MetaFile(metaFile.Name, metaFile.ContentType, metaFile.Buffer); } break; default: if (metaObject[metaField] != null) { newMetaObject[metaField] = metaObject[metaField]; } break; } } newMetaObject.AcceptChanges(CatalogContext.MetaDataContext); } } CatalogContext.MetaDataContext.UseCurrentUICulture = false; CatalogNodeDto childCatalogNodesDto = CatalogContext.Current.GetCatalogNodesDto(parentCatalogId, catalogNodeId); if (childCatalogNodesDto.CatalogNode.Count > 0) { for (int i = 0; i < childCatalogNodesDto.CatalogNode.Count; i++) { CloneCatalogNode(parentCatalogId, newCatalogNodeDto.CatalogNode[0].CatalogNodeId, childCatalogNodesDto.CatalogNode[i].CatalogNodeId); } } CatalogEntryDto catalogEntriesDto = CatalogContext.Current.GetCatalogEntriesDto(parentCatalogId, catalogNodeDto.CatalogNode[0].CatalogNodeId); if (catalogEntriesDto.CatalogEntry.Count > 0) { for (int i = 0; i < catalogEntriesDto.CatalogEntry.Count; i++) { CloneNodeEntry(parentCatalogId, catalogNodeId, catalogEntriesDto.CatalogEntry[i].CatalogEntryId, parentCatalogId, newCatalogNodeDto.CatalogNode[0].CatalogNodeId); } } } } scope.Complete(); } }
protected override int CreateSystemRow(FillDataMode Mode, int RowIndex, params object[] Item) { int i = 0; object objSysRowAction = Item[i++]; //CatalogNode object objCode = Item[i++]; object objParentCode = Item[i++]; object objName = Item[i++]; object objStartDate = Item[i++]; object objEndDate = Item[i++]; object objTemplateName = Item[i++]; object objIsActive = Item[i++]; object objSortOrder = Item[i++]; //SEO object objSeoTitle = Item[i++]; object objSeoUrl = Item[i++]; object objSeoDescription = Item[i++]; object objSeoKeywords = Item[i++]; CatalogNodeDto.CatalogNodeRow nodeRow = null; try { RowAction sysRowAction = RowAction.Default; if (objSysRowAction != null) { sysRowAction = GetRowActionEnum((string)objSysRowAction); } string Code; if (!String.IsNullOrEmpty((string)objCode)) { Code = (string)objCode; } else { throw new AbsentValue("Code"); } int parentNodeId = 0; if (objParentCode != null) { if (!objParentCode.Equals(String.Empty)) { CatalogNodeDto parentNodeDto = CatalogNodeManager.GetCatalogNodeDto((string)objParentCode, new CatalogNodeResponseGroup(CatalogNodeResponseGroup.ResponseGroup.CatalogNodeInfo)); if (parentNodeDto.CatalogNode.Count > 0) { parentNodeId = parentNodeDto.CatalogNode[0].CatalogNodeId; } } } bool bIsNew = false; CatalogNodeDto catalogNodeDto = CatalogNodeManager.GetCatalogNodeDto(Code, new CatalogNodeResponseGroup(CatalogNodeResponseGroup.ResponseGroup.CatalogNodeFull)); if (catalogNodeDto.CatalogNode.Count > 0) { if (sysRowAction == RowAction.Insert) { throw new MDPImportException(String.Format("The Catalog Node with Code '{0}' already exists.", Code)); } nodeRow = catalogNodeDto.CatalogNode[0]; if (sysRowAction == RowAction.Delete) { CatalogContext.Current.DeleteCatalogNode(nodeRow.CatalogNodeId, nodeRow.CatalogId); return(0); } if (objParentCode != null && parentNodeId > -1) { nodeRow.ParentNodeId = parentNodeId; } } else { if (sysRowAction == RowAction.Update) { throw new MDPImportException(String.Format("The Catalog Node with code '{0}' does not exists.", Code)); } if (sysRowAction == RowAction.Delete) { throw new MDPImportException(String.Format("The Catalog Node with code '{0}' does not exists.", Code)); } nodeRow = catalogNodeDto.CatalogNode.NewCatalogNodeRow(); nodeRow.ApplicationId = CatalogConfiguration.Instance.ApplicationId; nodeRow.CatalogId = _CatalogId; nodeRow.Code = Code; nodeRow.ParentNodeId = parentNodeId; nodeRow.Name = String.Empty; nodeRow.StartDate = DateTime.UtcNow; nodeRow.EndDate = DateTime.UtcNow.AddYears(3); nodeRow.TemplateName = String.Empty; nodeRow.IsActive = false; nodeRow.SortOrder = 0; bIsNew = true; } if (objName != null) { nodeRow.Name = (string)objName; } if (objStartDate != null) { nodeRow.StartDate = ((DateTime)objStartDate).ToUniversalTime(); } if (objEndDate != null) { nodeRow.EndDate = ((DateTime)objEndDate).ToUniversalTime(); } if (objTemplateName != null) { nodeRow.TemplateName = (string)objTemplateName; } if (objIsActive != null) { nodeRow.IsActive = (bool)objIsActive; } if (objSortOrder != null) { nodeRow.SortOrder = (int)objSortOrder; } int oldMetaClassId = 0; if (!_isSystemClass && _metaClassId > 0) { if (!bIsNew) { oldMetaClassId = nodeRow.MetaClassId; } nodeRow.MetaClassId = _metaClassId; } else if (bIsNew) { throw new MDPImportException("The new category cannot be created without metaclass definition."); } if (bIsNew) { catalogNodeDto.CatalogNode.AddCatalogNodeRow(nodeRow); } //SEO CatalogNodeDto.CatalogItemSeoRow catalogItemSeoRow = null; bool bSeoIsNew = false; if (!String.IsNullOrEmpty(this.Context.Language)) { if (catalogNodeDto.CatalogItemSeo.Count > 0) { DataRow[] drs = catalogNodeDto.CatalogItemSeo.Select(String.Format("LanguageCode LIKE '{0}' AND CatalogNodeId = {1}", this.Context.Language, nodeRow.CatalogNodeId)); if (drs.Length > 0) { catalogItemSeoRow = (CatalogNodeDto.CatalogItemSeoRow)drs[0]; } } if (catalogItemSeoRow == null) { catalogItemSeoRow = catalogNodeDto.CatalogItemSeo.NewCatalogItemSeoRow(); catalogItemSeoRow.ApplicationId = CatalogConfiguration.Instance.ApplicationId; catalogItemSeoRow.LanguageCode = this.Context.Language.ToLower(); catalogItemSeoRow.CatalogNodeId = nodeRow.CatalogNodeId; catalogItemSeoRow.Description = String.Empty; catalogItemSeoRow.Keywords = String.Empty; bSeoIsNew = true; } if (objSeoTitle != null) { catalogItemSeoRow.Title = (string)objSeoTitle; } if (objSeoUrl != null) { catalogItemSeoRow.Uri = (string)objSeoUrl; } else if (bSeoIsNew) { // Auto generate the URL if empty string name = catalogNodeDto.CatalogNode[0].Name; string url = String.Format("{0}.aspx", CommerceHelper.CleanUrlField(name)); int index = 1; while (CatalogContext.Current.GetCatalogEntryByUriDto(url, this.Context.Language).CatalogEntry.Count != 0 || CatalogContext.Current.GetCatalogNodeDto(url, this.Context.Language).CatalogNode.Count != 0) { url = String.Format("{0}-{1}.aspx", CommerceHelper.CleanUrlField(name), index.ToString()); index++; } catalogItemSeoRow.Uri = url; } if (objSeoDescription != null) { catalogItemSeoRow.Description = (string)objSeoDescription; } if (objSeoKeywords != null) { catalogItemSeoRow.Keywords = (string)objSeoKeywords; } if (bSeoIsNew) { catalogNodeDto.CatalogItemSeo.AddCatalogItemSeoRow(catalogItemSeoRow); } } using (TransactionScope tx = new TransactionScope()) { // Save modifications if (catalogNodeDto.HasChanges()) { CatalogContext.Current.SaveCatalogNode(catalogNodeDto); } if (!bIsNew && !_isSystemClass && oldMetaClassId != nodeRow.MetaClassId) { MetaObject.Delete(this.Context, nodeRow.CatalogNodeId, oldMetaClassId); MetaObject obj = MetaObject.NewObject(this.Context, nodeRow.CatalogNodeId, nodeRow.MetaClassId); obj.AcceptChanges(this.Context); } tx.Complete(); } } catch (Exception ex) { throw new MDPImportException(ex.Message, null, RowIndex, null, null, Item); } return(nodeRow.CatalogNodeId); }