/// <summary>
        /// Use strategy of multiple linker for connect entities by specified parameters.
        /// </summary>
        /// <param name="entityName">Name of entities.</param>
        /// <param name="recordsId">Identifier of records.</param>
        /// <param name="parameters">Strategy parameters.</param>
        /// <param name="filtersConfig">Filters configuration.</param>
        public virtual void MultiLinkEntity(string entityName, string[] recordsId, string parameters, string filtersConfig = null)
        {
            if (filtersConfig != null)
            {
                recordsId = GetRecordsIdFromFilters(entityName, filtersConfig);
            }
            IMultiOperationStrategy multiLinkStrategy = GetMultiLinkEntityStrategy(parameters);
            MultiOperationProvider  provider          = GetMultiOperationProvider(multiLinkStrategy, entityName, recordsId);

            provider.DoOperation();
        }
        protected virtual MultiOperationProvider GetMultiOperationProvider(IMultiOperationStrategy strategy, string entityName, string[] recordsId)
        {
            List <Guid> recordsGuid = recordsId.Select(Guid.Parse).ToList();
            var         multiOperationProviderArgs = new[] {
                new ConstructorArgument("strategy", strategy),
                new ConstructorArgument("entityName", entityName),
                new ConstructorArgument("recordsId", recordsGuid)
            };
            MultiOperationProvider provider = ClassFactory.Get <MultiOperationProvider>(multiOperationProviderArgs);

            return(provider);
        }
        protected virtual IMultiOperationStrategy GetMultiLinkEntityStrategy(string parameters)
        {
            if (parameters.IsNullOrEmpty())
            {
                throw new ArgumentNullException("parameters");
            }
            var strategyParameters  = Json.Deserialize <Dictionary <string, object> >(parameters);
            var multiLinkEntityArgs = new[] {
                new ConstructorArgument("strategyParameters", strategyParameters)
            };
            IMultiOperationStrategy multiLinkStrategy = ClassFactory.Get <MultiLinkEntity>(multiLinkEntityArgs);

            return(multiLinkStrategy);
        }
Ejemplo n.º 4
0
 public MultiOperationProvider(IMultiOperationStrategy strategy, string entityName, List <Guid> recordsId)
 {
     if (strategy == null)
     {
         throw new ArgumentNullException("Strategy");
     }
     if (string.IsNullOrEmpty(entityName))
     {
         throw new ArgumentNullException("EntityName");
     }
     if (recordsId.IsNullOrEmpty())
     {
         throw new ArgumentNullException("RecordsId");
     }
     _strategy   = strategy;
     _entityName = entityName;
     _recordsId  = recordsId;
 }