예제 #1
0
        /// <summary>
        /// Set default environment
        /// </summary>
        /// <returns></returns>
        private async Task InitializeEnvironment()
        {
            var commerceEnvironment = await _getEnvironmentCommand.Process(this.CurrentContext, ENV_NAME) ??
                                      this.CurrentContext.Environment;

            this.CurrentContext.Environment = commerceEnvironment;
            this.CurrentContext.PipelineContextOptions.CommerceContext.Environment = commerceEnvironment;
        }
예제 #2
0
        private async Task ProcessMessagesAsync(Message message, CancellationToken token)
        {
            var messageString = Encoding.UTF8.GetString(message.Body);

            _logger.LogInformation($"Received Message: {messageString}");

            if (message != null &&
                message.UserProperties.ContainsKey("target_id") &&
                message.UserProperties.ContainsKey("target_definition") &&
                message.UserProperties.ContainsKey("target_definition"))
            {
                var targetId         = (string)message.UserProperties["target_id"];
                var targetDefinition = (string)message.UserProperties["target_definition"];
                var instanceName     = (string)message.UserProperties["instance_name"];
                if (!string.IsNullOrEmpty(targetId) && !string.IsNullOrEmpty(targetDefinition) && !string.IsNullOrEmpty(instanceName))
                {
                    var context     = GetCommerceContext();
                    var environment = await _getEnvironmentCommand.Process(context, "HabitatAuthoring").ConfigureAwait(false);

                    context.PipelineContextOptions.CommerceContext.Environment = environment;

                    var mappingPolicy        = context.GetPolicy <SellableItemMappingPolicy>();
                    var mappingConfiguration = mappingPolicy?.MappingConfigurations?.FirstOrDefault(c => c.EntityType.Equals(targetDefinition, StringComparison.OrdinalIgnoreCase) &&
                                                                                                    c.SourceName.Equals(instanceName, StringComparison.OrdinalIgnoreCase));

                    ImportCatalogEntityArgument result = null;
                    if (mappingConfiguration != null)
                    {
                        result = await TryProcessSellableItem(targetId, targetDefinition, mappingConfiguration, context).ConfigureAwait(false);
                    }
                    else
                    {
                        var categoryMappingPolicy = context.GetPolicy <CategoryMappingPolicy>();
                        mappingConfiguration = categoryMappingPolicy?.MappingConfigurations?.FirstOrDefault(c => c.EntityType.Equals(targetDefinition, StringComparison.OrdinalIgnoreCase) &&
                                                                                                            c.SourceName.Equals(instanceName, StringComparison.OrdinalIgnoreCase));
                        result = await TryProcessCategory(targetId, targetDefinition, mappingConfiguration, context).ConfigureAwait(false);
                    }
                    if (result == null)
                    {
                        _logger.LogError($"Cannot process Service Bus message. Mapping configuration not found for EntityType=={targetDefinition} and SourceName=={instanceName}");
                    }
                }
            }
            else
            {
                _logger.LogError($"Cannot process Service Bus message. UserProperties: {string.Join(Environment.NewLine, message.UserProperties)}. Message: {messageString}");
            }

            await _queueClient.CompleteAsync(message.SystemProperties.LockToken);
        }
예제 #3
0
        private CommerceContext GetCommerceContext()
        {
            var _nodeContext = _serviceProvider.GetService <NodeContext>();
            ITrackActivityPipeline service         = _serviceProvider.GetService <ITrackActivityPipeline>();
            CommerceContext        commerceContext = new CommerceContext(_logger, new Microsoft.ApplicationInsights.TelemetryClient());

            commerceContext.GlobalEnvironment           = _globalEnvironment;
            commerceContext.ConnectionId                = Guid.NewGuid().ToString("N", (IFormatProvider)CultureInfo.InvariantCulture);
            commerceContext.CorrelationId               = Guid.NewGuid().ToString("N", (IFormatProvider)CultureInfo.InvariantCulture);
            commerceContext.TrackActivityPipeline       = service;
            commerceContext.PipelineTraceLoggingEnabled = _nodeContext != null && _nodeContext.PipelineTraceLoggingEnabled;

            commerceContext.Headers = new HeaderDictionary
            {
                { "Roles", @"sitecore\Commerce Administrator|sitecore\Customer Service Representative Administrator|sitecore\Customer Service Representative|sitecore\Commerce Business User|sitecore\Pricer Manager|sitecore\Pricer|sitecore\Promotioner Manager|sitecore\Promotioner|sitecore\Merchandiser|sitecore\Relationship Administrator" }
            };

            commerceContext.Environment = this._nodeContext?.GetEntity <CommerceEnvironment>((Func <CommerceEnvironment, bool>)(e => e.Name.Equals(_defaultCommerceEnvironment, StringComparison.OrdinalIgnoreCase)))
                                          ?? Task.Run <CommerceEnvironment>((Func <Task <CommerceEnvironment> >)(() => _getEnvironmentCommand?.Process(commerceContext, _defaultCommerceEnvironment))).Result;
            if (commerceContext.Environment == null)
            {
                commerceContext.Environment = _globalEnvironment;
            }
            return(commerceContext);
        }