Пример #1
0
        /// <summary>
        /// Create data bindings for record with its inner structure.
        /// </summary>
        /// <param name="bindingStructure"><see cref="SchemaDataBindingStructure"/>.</param>
        /// <param name="recordId">Primary record identifier.</param>
        /// <param name="sysPackageUId">Package UId.</param>
        /// <param name="previousResult">Data binding controller result</param>
        /// <returns></returns>
        protected DataBindingControllerResult GenerateHierarchyBinding(SchemaDataBindingStructure bindingStructure, Guid recordId,
                                                                       Guid sysPackageUId, DataBindingControllerResult previousResult = null)
        {
            if (previousResult == null)
            {
                previousResult = CreateEmptySuccessDataBindingControllerResult();
            }
            if (IsExistInBindedBundleList(bindingStructure))
            {
                return(previousResult);
            }
            var entities = GetEntities(bindingStructure, recordId);

            if (entities.Count == 0)
            {
                return(previousResult);
            }
            var manufacturerParameters = GetManufacturerParameters(bindingStructure, recordId, sysPackageUId);

            previousResult = GenerateInnerStructureCollectionBinding(bindingStructure.DependsStructures, recordId, sysPackageUId, previousResult);
            var bindingResult = Manufacturer.GenerateBinding(entities, manufacturerParameters);

            previousResult.Success = previousResult.Success && bindingResult.Success;
            if (bindingResult.ResultMessages?.Any() == true)
            {
                AddResultMessages(recordId, bindingResult.ResultMessages, ref previousResult);
            }
            if (previousResult.Success)
            {
                AddBindedBundleToList(bindingStructure);
                previousResult = GenerateInnerStructureCollectionBinding(bindingStructure.InnerStructures, recordId, sysPackageUId, previousResult);
            }
            return(previousResult);
        }
Пример #2
0
 private void AddBindedBundleToList(SchemaDataBindingStructure bindingStructure)
 {
     if (bindingStructure.IsBundle)
     {
         _bindedBundles.Add(bindingStructure.EntitySchemaName);
     }
     ;
 }
Пример #3
0
        /// <summary>
        /// Generate name for data binding.
        /// </summary>
        /// <param name="bindingStructure">Binding structure.</param>
        /// <param name="recordId">Primary record identifier.</param>
        /// <returns>Name for binding to be created or updated.</returns>
        private string GetSchemaDataBindingName(SchemaDataBindingStructure bindingStructure, Guid recordId)
        {
            if (bindingStructure.IsBundle)
            {
                return($"{_defaultBindingPrefix}_{bindingStructure.EntitySchemaName}");
            }
            var identifier = recordId.ToString().Replace("-", "");

            return($"{_defaultBindingPrefix}_{bindingStructure.EntitySchemaName}_{identifier}");
        }
Пример #4
0
        /// <summary>
        /// Bind inner record by structure passed.
        /// </summary>
        /// <param name="innerStructure"><see cref="SchemaDataBindingStructure"/>.</param>
        /// <param name="recordId">Primary record identifier.</param>
        /// <param name="sysPackageUId">Package UId.</param>
        /// <param name="previousResult"><see cref="DataBindingControllerResult"/> from parent binding.</param>
        /// <returns><see cref="DataBindingControllerResult"/> combined parent and inner structure binding result.</returns>
        protected DataBindingControllerResult GenerateInnerStructureBinding(SchemaDataBindingStructure innerStructure, Guid recordId, Guid sysPackageUId,
                                                                            DataBindingControllerResult previousResult = null)
        {
            var innerResult = GenerateHierarchyBinding(innerStructure, recordId, sysPackageUId, previousResult);

            if (innerResult != null)
            {
                previousResult.Success = previousResult.Success && innerResult.Success;
                AddResultMessages(recordId, innerResult, ref previousResult);
            }
            return(previousResult);
        }
Пример #5
0
 /// <summary>
 /// Get parameters for <see cref="SchemaDataBindingManufacturer"/>.
 /// </summary>
 /// <param name="bindingStructure"><see cref="SchemaDataBindingStructure"/>.</param>
 /// <param name="recordId">Primary record identifier.</param>
 /// <param name="sysPackageUId">Package UId.</param>
 /// <returns></returns>
 protected DataBindingManufacturerParameters GetManufacturerParameters(SchemaDataBindingStructure bindingStructure, Guid recordId, Guid sysPackageUId)
 {
     return(new DataBindingManufacturerParameters {
         Name = GetSchemaDataBindingName(bindingStructure, recordId),
         PackageUId = sysPackageUId,
         EntitySchemaName = bindingStructure.EntitySchemaName,
         Columns = bindingStructure.Columns.Select(column => new DataBindingManufacturerColumn {
             Name = column.Name,
             IsForceUpdate = column.IsForceUpdate,
             IsKey = column.IsKey
         })
     });
 }
        /// <summary>
        /// Get default structure for any entity schema.
        /// </summary>
        /// <param name="userConnection">User connection.</param>
        /// <param name="entitySchemaName">Entity schema name.</param>
        /// <returns><see cref="SchemaDataBindingStructure"/></returns>
        public virtual SchemaDataBindingStructure ObtainStructureBySchemaName(UserConnection userConnection, string entitySchemaName)
        {
            var entitySchema = userConnection.EntitySchemaManager.GetInstanceByName(entitySchemaName);
            var structure    = new SchemaDataBindingStructure {
                EntitySchemaName = entitySchemaName,
                Columns          = entitySchema.Columns
                                   .Where(column => !column.IsVirtual && !column.IsSystem)
                                   .Where(column => !_ignoredColumns.Contains(column.Name))
                                   .Select(column => column.Name == entitySchema.PrimaryColumn.Name ?
                                           new SchemaDataBindingStructureColumn(column.Name, false, true) :
                                           new SchemaDataBindingStructureColumn(column.Name))
                                   .ToList(),
                FilterColumnPathes = new string[] { "Id" }
            };

            return(structure);
        }
Пример #7
0
        /// <summary>
        /// Build <see cref="EntitySchemaQuery"/> for record binding.
        /// </summary>
        /// <param name="bindingStructure"><see cref="SchemaDataBindingStructure"/>.</param>
        /// <param name="recordId">Primary record identifier.</param>
        /// <returns><see cref="EntitySchemaQuery"/>.</returns>
        protected EntitySchemaQuery GenerateEsq(SchemaDataBindingStructure bindingStructure, Guid recordId)
        {
            var esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, bindingStructure.EntitySchemaName);

            esq.PrimaryQueryColumn.IsAlwaysSelect = true;
            foreach (var column in bindingStructure.Columns)
            {
                esq.AddColumn(column.Name);
            }
            if (!bindingStructure.IsBundle)
            {
                foreach (string columnPath in bindingStructure.FilterColumnPathes)
                {
                    esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal,
                                                                   columnPath, recordId));
                }
                esq.Filters.LogicalOperation = LogicalOperationStrict.Or;
            }
            return(esq);
        }
Пример #8
0
        /// <summary>
        /// Create bindings for all records passed.
        /// </summary>
        /// <param name="bindingStructure"><see cref="SchemaDataBindingStructure"/>.</param>
        /// <param name="recordIds">Primary record identifiers list.</param>
        /// <param name="sysPackageUId">Package UId.</param>
        protected DataBindingControllerResult GenerateHierarchyBindings(SchemaDataBindingStructure bindingStructure, Guid[] recordIds, Guid sysPackageUId)
        {
            var bindingResult = CreateEmptySuccessDataBindingControllerResult();

            foreach (var recordId in recordIds)
            {
                using (var dbExecutor = UserConnection.EnsureDBConnection()) {
                    DataBindingControllerResult result = null;
                    dbExecutor.StartTransaction();
                    try {
                        result = GenerateHierarchyBinding(bindingStructure, recordId, sysPackageUId);
                    } catch (Exception e) {
                        dbExecutor.RollbackTransaction();
                        ClearBindedBundlesList();
                        bindingResult.Success = false;
                        AddExceptionToResultMessages(recordId, e, ref bindingResult);
                    }
                    if (result == null)
                    {
                        continue;
                    }
                    if (result.Success)
                    {
                        dbExecutor.CommitTransaction();
                    }
                    else
                    {
                        dbExecutor.RollbackTransaction();
                        ClearBindedBundlesList();
                    }
                    bindingResult.Success = bindingResult.Success && result.Success;
                    AddResultMessages(recordId, result, ref bindingResult);
                }
            }
            ClearBindedBundlesList();
            return(bindingResult);
        }
Пример #9
0
        protected EntityCollection GetEntities(SchemaDataBindingStructure bindingStructure, Guid recordId)
        {
            var esq = GenerateEsq(bindingStructure, recordId);

            return(esq.GetEntityCollection(UserConnection));
        }
Пример #10
0
 private bool IsExistInBindedBundleList(SchemaDataBindingStructure bindingStructure)
 {
     return(bindingStructure.IsBundle && _bindedBundles.Contains(bindingStructure.EntitySchemaName));
 }