private void BindDataType() { DataRow dr; DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("key", typeof(string))); dt.Columns.Add(new DataColumn("name", typeof(string))); dt.Columns.Add(new DataColumn("Type", typeof(string))); dt.Columns.Add(new DataColumn("IsSystemDictionary", typeof(bool))); dt.Columns.Add(new DataColumn("AllowNulls", typeof(bool))); dt.Columns.Add(new DataColumn("IsConstant", typeof(bool))); MappingMetaClass mmc = null; MetaDataPlus.Import.Rule mapping = null; string MetaClassName = ddlMetaClass.SelectedValue; string language = ddlLanguage.SelectedValue; switch (ddlTypeData.SelectedValue) { case "Category": CatalogContext.MetaDataContext.UseCurrentUICulture = false; CatalogContext.MetaDataContext.Language = language; if (!String.IsNullOrEmpty(MetaClassName)) { mmc = new CategoryMappingMetaClass(CatalogContext.MetaDataContext, MetaClassName, -1); } else { mmc = new CategoryMappingMetaClass(CatalogContext.MetaDataContext, -1); } CatalogContext.MetaDataContext.UseCurrentUICulture = true; mapping = mmc.CreateClassRule(); mapping.Attribute.Add("TypeName", "Category"); if (!String.IsNullOrEmpty(language)) { mapping.Attribute.Add("Language", language); } break; case "Entry": CatalogContext.MetaDataContext.UseCurrentUICulture = false; CatalogContext.MetaDataContext.Language = language; if (!String.IsNullOrEmpty(MetaClassName)) { mmc = new EntryMappingMetaClass(CatalogContext.MetaDataContext, MetaClassName, -1); } else { mmc = new EntryMappingMetaClass(CatalogContext.MetaDataContext, -1); } CatalogContext.MetaDataContext.UseCurrentUICulture = true; mapping = mmc.CreateClassRule(); mapping.Attribute.Add("TypeName", "Entry"); if (!String.IsNullOrEmpty(language)) { mapping.Attribute.Add("Language", language); } break; case "EntryRelation": mmc = new EntryRelationMappingMetaClass(CatalogContext.MetaDataContext, -1); mapping = mmc.CreateClassRule(); mapping.Attribute.Add("TypeName", "EntryRelation"); break; case "EntryAssociation": mmc = new EntryAssociationMappingMetaClass(CatalogContext.MetaDataContext, -1); mapping = mmc.CreateClassRule(); mapping.Attribute.Add("TypeName", "EntryAssociation"); break; case "Variation": mmc = new VariationMappingMetaClass(CatalogContext.MetaDataContext, -1); mapping = mmc.CreateClassRule(); mapping.Attribute.Add("TypeName", "Variation"); break; case "SalePrice": mmc = new PricingMappingMetaClass(CatalogContext.MetaDataContext, -1); mapping = mmc.CreateClassRule(); mapping.Attribute.Add("TypeName", "SalePrice"); break; default: return; } mapping.Attribute.Add("Delimiter", this.ddlDelimiter.SelectedValue); mapping.Attribute.Add("TextQualifier", this.ddlTextQualifier.SelectedValue); foreach (ColumnInfo ci in mmc.ColumnInfos) { dr = dt.NewRow(); if (ci.Field.IsSystem) { dr["key"] = ci.FieldName; dr["name"] = (ci.FieldFriendlyName != null) ? ci.FieldFriendlyName : ci.FieldName; } else { dr["key"] = ci.FieldName; dr["name"] = ci.FieldFriendlyName; } if (ci.Field.MultiLanguageValue && !String.IsNullOrEmpty(language)) { dr["name"] += String.Format(" ({0})", language); } dr["Type"] = ci.Field.DataType.ToString(); dr["IsSystemDictionary"] = ci.IsSystemDictionary; dr["AllowNulls"] = ci.Field.AllowNulls; dr["IsConstant"] = false; dt.Rows.Add(dr); mapping.Add(new RuleItem(ci.Field, MetaDataPlus.Import.FillType.NotUse)); } grdFields.Columns[0].HeaderText = RM.GetString("IMPORT_MAPPING_TITLE_FIELDS"); grdFields.Columns[1].HeaderText = RM.GetString("IMPORT_MAPPING_TITLE_COLUMN_HEADERS"); grdFields.Columns[2].HeaderText = "Custom values"; grdFields.DataSource = dt; grdFields.DataBind(); this.ClassRule = mapping; if (ddlDataFiles.SelectedIndex > 0) { IIncomingDataParser parser = null; DataSet rawData = null; try { char chTextQualifier = (this.ddlTextQualifier.SelectedValue == "") ? '\0' : char.Parse(this.ddlTextQualifier.SelectedValue); parser = new CsvIncomingDataParser(SourcePath, true, char.Parse(this.ddlDelimiter.SelectedValue), chTextQualifier, true, GetEncoding(this.ddlEncoding.SelectedValue)); rawData = parser.Parse(ddlDataFiles.SelectedItem.Text, null); } catch (Exception ex) { DisplayErrorMessage(ex.Message); return; } DataTable dtSource = rawData.Tables[0]; DataTable dtColumns = new DataTable(); dtColumns.Columns.Add(new DataColumn("Text", typeof(string))); dtColumns.Columns.Add(new DataColumn("Value", typeof(string))); foreach (DataColumn dc in dtSource.Columns) { dr = dtColumns.NewRow(); dr["Text"] = "Column " + (dc.Ordinal + 1) + " - " + dc.ColumnName; dr["Value"] = dc.ColumnName; dtColumns.Rows.Add(dr); } foreach (DataGridItem dgi in grdFields.Items) { DropDownList ddl = (DropDownList)dgi.FindControl("ddlFields"); TextBox tbCustomValue = (TextBox)dgi.FindControl("tbCustomValue"); DropDownList ddlValues = (DropDownList)dgi.FindControl("ddlValues"); string sKey = dgi.Cells[3].Text; string sType = dgi.Cells[4].Text; bool sIsSystemDictionary = bool.Parse(dgi.Cells[5].Text); bool allowNulls = bool.Parse(dgi.Cells[6].Text); bool IsConstant = bool.Parse(dgi.Cells[7].Text); bool useDictionaryControl = GetUseDictionaryFlag(dgi); if (!IsConstant) { if (ddl != null) { ddl.DataSource = dtColumns; ddl.DataTextField = "Text"; ddl.DataValueField = "Value"; ddl.DataBind(); if (sIsSystemDictionary) { ddl.Items.Insert(0, new ListItem("<" + RM.GetString("IMPORT_TYPE_VALUES_DICTIONARY_VALUE") + ">", "CustomValue")); } else { ddl.Items.Insert(0, new ListItem("<" + RM.GetString("IMPORT_TYPE_VALUES_CUSTOM_VALUE") + ">", "CustomValue")); } if (allowNulls) { ddl.Items.Insert(0, new ListItem("", "")); } else { ddl.Items.Insert(0, new ListItem("<" + RM.GetString("IMPORT_TYPE_VALUES_NOT_SET") + ">", "NotSet")); } string customControlID = useDictionaryControl ? ddlValues.ClientID : tbCustomValue.ClientID; string jsDllOnChange = String.Format("ddlOnChange(this, 'CustomValue', '{0}')", customControlID); ddl.Attributes.Add("OnChange", jsDllOnChange); } } //fill custom or dictionary controls ddlValues.Visible = useDictionaryControl; tbCustomValue.Visible = !ddlValues.Visible; if (sType.Equals(MetaDataType.Boolean.ToString()) || sType.Equals(MetaDataType.Bit.ToString())) { ddlValues.Items.Clear(); ddlValues.Items.Add("True"); ddlValues.Items.Add("False"); } if (sKey.Equals("sys_RowAction")) { ddlValues.Items.Clear(); ddlValues.Items.Add(RowAction.Default.ToString()); ddlValues.Items.Add(RowAction.Insert.ToString()); ddlValues.Items.Add(RowAction.Update.ToString()); ddlValues.Items.Add(RowAction.Delete.ToString()); } switch (ddlTypeData.SelectedValue) { case "Category": if (sKey == "TemplateName") { TemplateDto templates = DictionaryManager.GetTemplateDto(); if (templates.main_Templates.Count > 0) { DataView view = templates.main_Templates.DefaultView; view.RowFilter = "TemplateType = 'node'"; ddlValues.DataTextField = "FriendlyName"; ddlValues.DataValueField = "Name"; ddlValues.DataSource = view; ddlValues.DataBind(); } } break; case "Entry": if (sKey == "ClassTypeId") { ddlValues.Items.Clear(); ddlValues.Items.Add(new ListItem("Product", EntryType.Product)); ddlValues.Items.Add(new ListItem("Variation/Sku", EntryType.Variation)); ddlValues.Items.Add(new ListItem("Package", EntryType.Package)); ddlValues.Items.Add(new ListItem("Bundle", EntryType.Bundle)); ddlValues.Items.Add(new ListItem("Dynamic Package", EntryType.DynamicPackage)); } if (sKey == "TemplateName") { TemplateDto templates = DictionaryManager.GetTemplateDto(); if (templates.main_Templates.Count > 0) { DataView view = templates.main_Templates.DefaultView; view.RowFilter = "TemplateType = 'entry'"; ddlValues.DataTextField = "FriendlyName"; ddlValues.DataValueField = "Name"; ddlValues.DataSource = view; ddlValues.DataBind(); } } break; case "EntryAssociation": if (sKey == "AssociationType") { ddlValues.Items.Clear(); CatalogAssociationDto dto = CatalogContext.Current.GetCatalogAssociationDto(0); if (dto.AssociationType.Count > 0) { ddlValues.DataTextField = "Description"; ddlValues.DataValueField = "AssociationTypeId"; ddlValues.DataSource = dto.AssociationType; ddlValues.DataBind(); } } break; case "Variation": if (sKey == "TaxCategoryId") { CatalogTaxDto taxes = CatalogTaxManager.GetTaxCategories(); if (taxes.TaxCategory != null) { ddlValues.DataTextField = "Name"; ddlValues.DataValueField = "TaxCategoryId"; ddlValues.DataSource = taxes.TaxCategory.Rows; ddlValues.DataBind(); } } if (sKey == "MerchantId") { CatalogEntryDto merchants = CatalogContext.Current.GetMerchantsDto(); if (merchants.Merchant != null) { ddlValues.DataTextField = "Name"; ddlValues.DataValueField = "MerchantId"; ddlValues.DataSource = merchants.Merchant.Rows; ddlValues.DataBind(); } } if (sKey == "WarehouseId") { WarehouseDto warehouses = WarehouseManager.GetWarehouseDto(); if (warehouses.Warehouse != null) { ddlValues.DataTextField = "Name"; ddlValues.DataValueField = "WarehouseId"; ddlValues.DataSource = warehouses.Warehouse.Rows; ddlValues.DataBind(); } } if (sKey == "PackageId") { ShippingMethodDto shippingDto = ShippingManager.GetShippingPackages(); if (shippingDto.Package != null) { ddlValues.DataTextField = "Name"; ddlValues.DataValueField = "PackageId"; ddlValues.DataSource = shippingDto.Package.Rows; ddlValues.DataBind(); } } break; case "SalePrice": if (sKey == "SaleType") { ddlValues.Items.Clear(); foreach (SalePriceTypeDefinition element in CatalogConfiguration.Instance.SalePriceTypes) { ListItem li = new ListItem(UtilHelper.GetResFileString(element.Description), element.Value.ToString()); ddlValues.Items.Add(li); } } if (sKey == "Currency") { CurrencyDto dto = CatalogContext.Current.GetCurrencyDto(); ddlValues.DataTextField = "Name"; ddlValues.DataValueField = "CurrencyCode"; ddlValues.DataSource = dto.Currency; ddlValues.DataBind(); } break; default: break; } } } }
/// <summary> /// Processes the import button event. /// </summary> protected void DoImport(Guid appId) { AppContext.Current.ApplicationId = appId; try { string filePath = SelectedFilePath; string mappingFilePath = SelectedMappingFilePath; if (String.IsNullOrEmpty(filePath)) { throw new Exception("No selected file."); } if (!String.IsNullOrEmpty(mappingFilePath)) { MetaDataPlus.Import.Rule mapping = MetaDataPlus.Import.Rule.XmlDeserialize(CatalogContext.MetaDataContext, mappingFilePath); char chTextQualifier = '\0'; if (mapping.Attribute["TextQualifier"].ToString() != "") { chTextQualifier = char.Parse(mapping.Attribute["TextQualifier"]); } string sEncoding = "Default"; try { sEncoding = mapping.Attribute["Encoding"]; } catch { } IIncomingDataParser parser = null; DataSet rawData = null; try { parser = new CsvIncomingDataParser(SourcePath, true, char.Parse(mapping.Attribute["Delimiter"].ToString()), chTextQualifier, true, GetEncoding(sEncoding)); rawData = parser.Parse(Path.GetFileName(filePath), null); } catch (Exception ex) { throw ex; } DataTable dtSource = rawData.Tables[0]; MappingMetaClass mc = null; try { int CatalogId = 0; FillResult fr = null; switch (mapping.Attribute["TypeName"]) { case "Category": if (!String.IsNullOrEmpty(ListCatalogs.SelectedValue)) { CatalogId = Int32.Parse(ListCatalogs.SelectedValue); } CatalogContext.MetaDataContext.UseCurrentUICulture = false; CatalogContext.MetaDataContext.Language = mapping.Attribute["Language"]; mc = new CategoryMappingMetaClass(CatalogContext.MetaDataContext, mapping.ClassName, CatalogId); fr = ((CategoryMappingMetaClass)mc).FillData(FillDataMode.All, dtSource, mapping, -1, DateTime.UtcNow); CatalogContext.MetaDataContext.UseCurrentUICulture = true; break; case "Entry": if (!String.IsNullOrEmpty(ListCatalogs.SelectedValue)) { CatalogId = Int32.Parse(ListCatalogs.SelectedValue); } CatalogContext.MetaDataContext.UseCurrentUICulture = false; CatalogContext.MetaDataContext.Language = mapping.Attribute["Language"]; mc = new EntryMappingMetaClass(CatalogContext.MetaDataContext, mapping.ClassName, CatalogId); fr = ((EntryMappingMetaClass)mc).FillData(FillDataMode.All, dtSource, mapping, -1, DateTime.UtcNow); CatalogContext.MetaDataContext.UseCurrentUICulture = true; break; case "EntryRelation": mc = new EntryRelationMappingMetaClass(CatalogContext.MetaDataContext, CatalogId); fr = ((EntryRelationMappingMetaClass)mc).FillData(FillDataMode.All, dtSource, mapping, -1, DateTime.UtcNow); break; case "EntryAssociation": mc = new EntryAssociationMappingMetaClass(CatalogContext.MetaDataContext, CatalogId); fr = ((EntryAssociationMappingMetaClass)mc).FillData(FillDataMode.All, dtSource, mapping, -1, DateTime.UtcNow); break; case "Variation": mc = new VariationMappingMetaClass(CatalogContext.MetaDataContext, CatalogId); fr = ((VariationMappingMetaClass)mc).FillData(FillDataMode.All, dtSource, mapping, -1, DateTime.UtcNow); break; case "SalePrice": mc = new PricingMappingMetaClass(CatalogContext.MetaDataContext, CatalogId); fr = ((PricingMappingMetaClass)mc).FillData(FillDataMode.All, dtSource, mapping, -1, DateTime.UtcNow); break; } if (fr != null) { if (fr.ErrorRows > 0) { foreach (Exception expt in fr.Exceptions) { string exMessage = expt.Message; if (expt is MDPImportException) { MDPImportException mdpEx = (MDPImportException)expt; if (mdpEx.RowIndex > -1) { exMessage = String.Format("Import error. Line {0}: {1}", mdpEx.RowIndex + 1, exMessage); } } ProgressControl1.AddProgressMessageText(exMessage, true, 0); } } if (fr.Warnings.Length > 0) { foreach (MDPImportWarning MDPWarn in fr.Warnings) { ProgressControl1.AddProgressMessageText(String.Format("Line {0}: {1}", MDPWarn.RowIndex + 1, MDPWarn.Message), false, 0); } } string msgSuccessful = RM.GetString("IMPORT_MSG_SUCCESSFUL") + ". " + string.Format(RM.GetString("IMPORT_MSG_RESULT"), fr.SuccessfulRows.ToString(), fr.TotalRows.ToString()); ProgressControl1.AddProgressMessageText(msgSuccessful, false, 100); } } catch (Exception ex) { throw ex; } } } catch (Exception ex) { ProgressControl1.AddProgressMessageText(ex.Message, true, 100); } finally { } }