private Article DeserializeArticle(IProductDataSource productDataSource, Models.Configuration.Content definition, DBConnector connector, Context context) { if (productDataSource == null) { return(null); } int id = productDataSource.GetArticleId(); context.TakeIntoAccount(id); var qpContent = _contentService.Read(definition.ContentId); Article article = new Article { Id = id, ContentName = qpContent.NetName, Modified = productDataSource.GetModified(), ContentId = definition.ContentId, ContentDisplayName = qpContent.Name, PublishingMode = definition.PublishingMode, IsReadOnly = definition.IsReadOnly, Visible = true }; foreach (Field fieldInDef in definition.Fields.Where(x => !(x is BaseVirtualField) && !(x is Dictionaries))) { var field = DeserializeField(fieldInDef, _fieldService.Read(fieldInDef.FieldId), productDataSource, connector, context); article.Fields[field.FieldName] = field; } if (definition.LoadAllPlainFields) { var qpFields = _fieldService.List(definition.ContentId); foreach (var plainFieldFromQp in qpFields.Where(x => x.RelationType == RelationType.None && definition.Fields.All(y => y.FieldId != x.Id))) { article.Fields[plainFieldFromQp.Name] = DeserializeField(new PlainField { FieldId = plainFieldFromQp.Id }, plainFieldFromQp, productDataSource, connector, context); } } return(article); }
private ArticleField DeserializeExtensionField(ExtensionField fieldInDef, Quantumart.QP8.BLL.Field qpField, IProductDataSource productDataSource, DBConnector connector, Context context) { var extensionArticleField = new ExtensionArticleField(); string fieldName = string.IsNullOrEmpty(fieldInDef.FieldName) ? qpField.Name : fieldInDef.FieldName; string contentName = productDataSource.GetString(fieldName); if (!string.IsNullOrEmpty(contentName)) { Models.Configuration.Content valueDef = fieldInDef.ContentMapping.Values.FirstOrDefault(x => _contentService.Read(x.ContentId).NetName == contentName); if (valueDef == null) { throw new Exception( $"'{contentName}' value is not found in an available extension content list, id = {fieldInDef.FieldId}"); } extensionArticleField.Value = valueDef.ContentId.ToString(); extensionArticleField.SubContentId = valueDef.ContentId; IProductDataSource extensionDataSource = productDataSource.GetExtensionContainer(fieldName, contentName); extensionArticleField.Item = DeserializeArticle(extensionDataSource, valueDef, connector, context); if (extensionArticleField.Item.Id == productDataSource.GetArticleId()) { var id = GetExtensionId(connector, valueDef.ContentId, fieldInDef.FieldId, extensionArticleField.Item.Id); if (id.HasValue) { extensionArticleField.Item.Id = id.Value; } else { context.AddExtensionArticle(extensionArticleField.Item.Id, extensionArticleField.Item); extensionArticleField.Item.Id = default(int); } } } return(extensionArticleField); }