private async Task SetCommerceEntityDetails(CommerceEntity commerceEntity, ImportEntityArgument importEntityArgument, CommercePipelineExecutionContext context)
        {
            if (!importEntityArgument.IsNew)
            {
                if (importEntityArgument.ImportHandler is IEntityMapper mapper)
                {
                    mapper.Map();
                }
                else
                {
                    mapper = await _commerceCommander.Pipeline <IResolveEntityMapperPipeline>()
                             .Run(new ResolveEntityMapperArgument(importEntityArgument, commerceEntity), context)
                             .ConfigureAwait(false);

                    if (mapper == null)
                    {
                        await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Warning, "EntityMapperMissing", null, $"Entity mapper instance for entityType={importEntityArgument.SourceEntityDetail.EntityType} not resolved.");
                    }
                    else
                    {
                        mapper.Map();
                    }
                }
            }
        }
Esempio n. 2
0
        public virtual async Task <CommerceEntity> Process(
            CommerceContext commerceContext,
            SourceEntityDetail sourceEntityDetail)
        {
            CommerceEntity result = null;

            using (CommandActivity.Start(commerceContext, this))
            {
                var importEntityArgument = new ImportEntityArgument(sourceEntityDetail);

                // Create/Update entity, entity components, manage versions and workflow.
                await PerformTransaction(commerceContext, async() => result = await Pipeline <IImportEntityPipeline>().Run(importEntityArgument, commerceContext.PipelineContextOptions));

                if (result != null)
                {
                    // Manage association of sellable item with catalog and categories.
                    await PerformTransaction(commerceContext, async() => await Pipeline <IAssociateParentsPipeline>().Run(importEntityArgument, commerceContext.PipelineContextOptions));

                    // Manage localization values for sellable item
                    var importLocalizeContentArgument =
                        new ImportLocalizeContentArgument(result, importEntityArgument);
                    await PerformTransaction(commerceContext, async() => await Pipeline <IImportLocalizeContentPipeline>().Run(
                                                 importLocalizeContentArgument, commerceContext.PipelineContextOptions));
                }
            }

            return(await Task.FromResult(result));
        }
        public static IEntityImportHandler GetImportHandler(this Mappings mappings, ImportEntityArgument importEntityArgument, CommerceCommander commerceCommander, CommercePipelineExecutionContext context)
        {
            var handlerType = mappings
                              .EntityMappings
                              .FirstOrDefault(x => x.Key.Equals(importEntityArgument.SourceEntityDetail.EntityType, StringComparison.OrdinalIgnoreCase));

            if (handlerType != null)
            {
                var t = Type.GetType(handlerType.ImportHandlerTypeName);

                if (t != null)
                {
                    if (Activator.CreateInstance(t, importEntityArgument.SourceEntityDetail.SerializedEntity,
                                                 commerceCommander, context) is
                        IEntityImportHandler handler)
                    {
                        return(handler);
                    }
                }
            }

            return(null);
        }
Esempio n. 4
0
        protected override async Task ImportVariantsInventory(CommerceEntity commerceEntity, ImportEntityArgument importEntityArgument, CommercePipelineExecutionContext context)
        {
            var sellableItemInventory = importEntityArgument.ImportHandler.GetSourceEntity() as SellableItemInventory;

            if (sellableItemInventory == null)
            {
                return;
            }

            var inventorySetName = sellableItemInventory.InventorySetName;

            if (!string.IsNullOrEmpty(inventorySetName))
            {
                var inventorySetId = await GetInventorySetName(context, inventorySetName)
                                     .ConfigureAwait(false);

                if (!string.IsNullOrEmpty(inventorySetId))
                {
                    var inventoryDetail = sellableItemInventory
                                          .InventoryDetail;

                    await ImportInventoryInformation(context, commerceEntity, inventorySetId, sellableItemInventory.VariantId, inventoryDetail).ConfigureAwait(false);
                }
            }
        }
        private async Task SetCommerceEntityComponents(CommerceEntity commerceEntity, ImportEntityArgument importEntityArgument, CommercePipelineExecutionContext context)
        {
            if (importEntityArgument.SourceEntityDetail.Components != null && importEntityArgument.SourceEntityDetail.Components.Any())
            {
                foreach (var componentName in importEntityArgument.SourceEntityDetail.Components)
                {
                    var mapper = await _commerceCommander.Pipeline <IResolveComponentMapperPipeline>()
                                 .Run(new ResolveComponentMapperArgument(importEntityArgument, commerceEntity, componentName), context)
                                 .ConfigureAwait(false);

                    if (mapper == null)
                    {
                        await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Warning, "EntityComponentMapperMissing", null, $"Entity component mapper instance for entityType={importEntityArgument.SourceEntityDetail.EntityType} and component={componentName} not resolved.");
                    }
                    else
                    {
                        var component = mapper.Execute();
                        component.SetComponentMetadataPolicy(componentName);
                    }
                }
            }
        }
        public static IComponentMapper GetEntityComponentMapper(this Mappings mappings, CommerceEntity targetEntity, ImportEntityArgument importEntityArgument, string componentMappingKey, CommerceCommander commerceCommander, CommercePipelineExecutionContext context)
        {
            var mapperType = mappings
                             .EntityComponentMappings
                             .FirstOrDefault(x => x.Key.Equals(componentMappingKey, StringComparison.OrdinalIgnoreCase));

            if (mapperType != null)
            {
                var t = Type.GetType(mapperType.FullTypeName);

                if (t != null)
                {
                    if (Activator.CreateInstance(t, importEntityArgument.SourceEntity, targetEntity, commerceCommander, context) is
                        IComponentMapper mapper)
                    {
                        return(mapper);
                    }
                }
            }

            return(null);
        }
        public static IEntityLocalizationMapper GetEntityLocalizationMapper(this Mappings mappings, ILanguageEntity languageEntity, ImportEntityArgument importEntityArgument, CommerceCommander commerceCommander, CommercePipelineExecutionContext context)
        {
            var mapperType = mappings
                             .EntityMappings
                             .FirstOrDefault(x => x.Key.Equals(importEntityArgument.SourceEntityDetail.EntityType, StringComparison.OrdinalIgnoreCase));

            if (mapperType != null)
            {
                var t = Type.GetType(mapperType.ImportHandlerTypeName ?? mapperType.FullTypeName ?? mapperType.LocalizationFullTypeName);

                if (t != null)
                {
                    if (Activator.CreateInstance(t, languageEntity.GetEntity(), commerceCommander, context) is
                        IEntityLocalizationMapper mapper)
                    {
                        return(mapper);
                    }
                }
            }

            return(null);
        }
        public static IRelationshipMapper GetRelationshipMapper(this Mappings mappings, ImportEntityArgument importEntityArgument, string relationshipName, CommerceCommander commerceCommander, CommercePipelineExecutionContext context)
        {
            var mapperType = mappings
                             .RelationshipMappings
                             .FirstOrDefault(x => x.Key.Equals(relationshipName, StringComparison.OrdinalIgnoreCase));

            if (mapperType != null)
            {
                var t = Type.GetType(mapperType.FullTypeName);

                if (t != null)
                {
                    if (Activator.CreateInstance(t, commerceCommander,
                                                 context) is IRelationshipMapper mapper)
                    {
                        return(mapper);
                    }
                }
            }

            return(null);
        }
        public static IComponentMapper GetItemVariationComponentMapper(this Mappings mappings, CommerceEntity targetEntity, Component parentComponent, ImportEntityArgument importEntityArgument, object sourceComponent, CommerceCommander commerceCommander, CommercePipelineExecutionContext context)
        {
            var mapperType = mappings
                             .ItemVariationMappings
                             .FirstOrDefault();

            if (mapperType != null)
            {
                var t = Type.GetType(mapperType.FullTypeName);

                if (t != null)
                {
                    if (Activator.CreateInstance(t, importEntityArgument.SourceEntity, sourceComponent, targetEntity, parentComponent,
                                                 commerceCommander, context) is IComponentMapper mapper)
                    {
                        return(mapper);
                    }
                }
            }

            return(null);
        }
        private async Task ImportVariants(CommerceEntity commerceEntity, ImportEntityArgument importEntityArgument, CommercePipelineExecutionContext context)
        {
            var orphanVariants = new List <ItemVariationComponent>();
            ItemVariationsComponent itemVariationsComponent = null;
            var sourceEntityHasVariants = importEntityArgument.ImportHandler.HasVariants();

            if (!sourceEntityHasVariants &&
                commerceEntity.HasComponent <ItemVariationsComponent>())
            {
                itemVariationsComponent = commerceEntity.GetComponent <ItemVariationsComponent>();
                if (itemVariationsComponent.Variations != null &&
                    itemVariationsComponent.Variations.Any())
                {
                    orphanVariants = itemVariationsComponent.Variations;
                }
            }

            if (sourceEntityHasVariants)
            {
                itemVariationsComponent =
                    commerceEntity.GetComponent <ItemVariationsComponent>();

                var variants = importEntityArgument.ImportHandler.GetVariants();

                foreach (var variant in variants)
                {
                    var itemVariantMapper = await _commerceCommander.Pipeline <IResolveComponentMapperPipeline>()
                                            .Run(
                        new ResolveComponentMapperArgument(importEntityArgument, commerceEntity,
                                                           itemVariationsComponent, variant, string.Empty), context).ConfigureAwait(false);

                    if (itemVariantMapper == null)
                    {
                        await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Warning, "ItemVariationMapperMissing", null, $"Item variation mapper instance for variantId={variant.Id} not resolved.");

                        continue;
                    }

                    var       action = itemVariantMapper.GetComponentAction();
                    Component itemVariationComponent = itemVariantMapper.Execute(action);

                    if (action != ComponentAction.Remove &&
                        importEntityArgument.SourceEntityDetail.VariantComponents != null &&
                        importEntityArgument.SourceEntityDetail.VariantComponents.Any())
                    {
                        foreach (var variantComponentName in importEntityArgument.SourceEntityDetail.VariantComponents)
                        {
                            var itemVariantChildComponentMapper = await _commerceCommander
                                                                  .Pipeline <IResolveComponentMapperPipeline>().Run(new
                                                                                                                    ResolveComponentMapperArgument(importEntityArgument, commerceEntity,
                                                                                                                                                   itemVariationComponent, variant, variantComponentName), context)
                                                                  .ConfigureAwait(false);

                            if (itemVariantChildComponentMapper != null)
                            {
                                var childComponent = itemVariantChildComponentMapper.Execute();
                                childComponent.SetComponentMetadataPolicy(variantComponentName);
                            }
                            else
                            {
                                await context.CommerceContext.AddMessage(context.GetPolicy <KnownResultCodes>().Warning, "ComponentChildComponentMapperMissing", null, $"Component's child component mapper instance for entityType={importEntityArgument.SourceEntityDetail.EntityType} and key={variantComponentName} not resolved.");
                            }
                        }
                    }
                }

                orphanVariants = (from n in itemVariationsComponent.Variations
                                  join o in variants on n.Id equals o.Id into p
                                  where !p.Any()
                                  select n).ToList();
            }

            if (itemVariationsComponent != null &&
                orphanVariants != null &&
                orphanVariants.Any())
            {
                foreach (var orphanVariant in orphanVariants)
                {
                    if (importEntityArgument.CatalogImportPolicy.DeleteOrphanVariant)
                    {
                        itemVariationsComponent.ChildComponents.Remove(orphanVariant);
                    }
                    else
                    {
                        orphanVariant.Disabled = true;
                    }
                }
            }
        }
Esempio n. 11
0
        protected override async Task ImportVariantsInventory(CommerceEntity commerceEntity, ImportEntityArgument importEntityArgument, CommercePipelineExecutionContext context)
        {
            var sourceEntityHasVariants = importEntityArgument.ImportHandler.HasVariants();

            if (sourceEntityHasVariants)
            {
                var inventorySetName = importEntityArgument.ImportHandler
                                       .GetPropertyValueFromSource <InventorySetNameAttribute, string>();

                if (!string.IsNullOrEmpty(inventorySetName))
                {
                    var inventorySetId = await GetInventorySetName(context, inventorySetName)
                                         .ConfigureAwait(false);

                    if (!string.IsNullOrEmpty(inventorySetId))
                    {
                        var variants = importEntityArgument.ImportHandler.GetVariants();

                        foreach (var variant in variants)
                        {
                            var inventoryDetail = variant.GetType()
                                                  .GetPropertyValueWithAttribute <InventoryDetailAttribute, InventoryDetail>(variant);

                            await ImportInventoryInformation(context, commerceEntity, inventorySetId,
                                                             variant.Id, inventoryDetail).ConfigureAwait(false);
                        }
                    }
                }
            }
        }