public async Task <GetAllDynamicEntityPropertyValuesOutput> GetAllDynamicEntityPropertyValues(GetAllDynamicEntityPropertyValuesInput input)
        {
            var localCacheOfDynamicPropertyValues = new Dictionary <int, List <string> >();

            async Task <List <string> > LocalGetAllValuesOfDynamicProperty(int dynamicPropertyId)
            {
                if (!localCacheOfDynamicPropertyValues.ContainsKey(dynamicPropertyId))
                {
                    localCacheOfDynamicPropertyValues[dynamicPropertyId] = (await _dynamicPropertyValueManager
                                                                            .GetAllValuesOfDynamicPropertyAsync(dynamicPropertyId))
                                                                           .Select(x => x.Value).ToList();
                }

                return(localCacheOfDynamicPropertyValues[dynamicPropertyId]);
            }

            var output = new GetAllDynamicEntityPropertyValuesOutput();
            var dynamicEntityProperties = await _dynamicEntityPropertyManager.GetAllAsync(input.EntityFullName);

            var dynamicEntityPropertySelectedValues = (await _dynamicEntityPropertyValueManager.GetValuesAsync(input.EntityFullName, input.EntityId))
                                                      .GroupBy(value => value.DynamicEntityPropertyId)
                                                      .ToDictionary(
                group => group.Key,
                items => items.ToList().Select(value => value.Value)
                .ToList()
                );

            foreach (var dynamicEntityProperty in dynamicEntityProperties)
            {
                var outputItem = new GetAllDynamicEntityPropertyValuesOutputItem
                {
                    DynamicEntityPropertyId = dynamicEntityProperty.Id,
                    InputType             = _dynamicEntityPropertyDefinitionManager.GetOrNullAllowedInputType(dynamicEntityProperty.DynamicProperty.InputType),
                    PropertyName          = dynamicEntityProperty.DynamicProperty.PropertyName,
                    AllValuesInputTypeHas = await LocalGetAllValuesOfDynamicProperty(dynamicEntityProperty.DynamicProperty.Id),
                    SelectedValues        = dynamicEntityPropertySelectedValues.ContainsKey(dynamicEntityProperty.Id)
                        ? dynamicEntityPropertySelectedValues[dynamicEntityProperty.Id]
                        : new List <string>()
                };

                output.Items.Add(outputItem);
            }

            return(output);
        }
示例#2
0
 public IInputType FindAllowedInputType(string name)
 {
     return(_dynamicEntityPropertyDefinitionManager.GetOrNullAllowedInputType(name));
 }