Exemplo n.º 1
0
        /// <summary>
        /// Returns groups of duplicates.
        /// </summary>
        /// <param name="schemaName">Schema name.</param>
        /// <param name="columns">Requested columns.</param>
        /// <param name="offset">Start position for groups.</param>
        /// <returns>Instance <see cref="DuplicatesGroupResponse"/> contains groups of duplicates.</returns>
        public virtual DuplicatesGroupResponse GetDeduplicationResults(string schemaName, string[] columns,
                                                                       int offset)
        {
            offset = offset == 0 ? 1 : offset;
            List <InitialResultItem> initialResults = GetInitialResults(schemaName, offset);
            DuplicatesGroupResponse  result         = new DuplicatesGroupResponse();

            if (initialResults.Any())
            {
                int groupIdMax = initialResults.Max(initialItem => initialItem.GroupId);
                RemoveInappropriateRecordsByRight(schemaName, initialResults);
                EntitySchemaQuery        esqEntityResults = GetEsqForInitialRecords(schemaName, offset, columns);
                EntitySchemaQueryOptions options          = new EntitySchemaQueryOptions {
                    PageableDirection       = PageableSelectDirection.First,
                    PageableRowCount        = RowsPerRequest,
                    PageableConditionValues = new Dictionary <string, object>()
                };
                Core.Entities.EntityCollection entityResults = esqEntityResults.GetEntityCollection(_userConnection, options);
                List <EntityDuplicatesGroup>   entityGroups  = GroupEntityResults(initialResults, entityResults);
                PrepareResults(entityGroups);
                result = ConvertServerEntityToClientEntity(esqEntityResults, entityGroups);
                if (initialResults.Select(group => group.GroupId).Distinct().Count() == GroupsPerRequest)
                {
                    result.NextOffset = groupIdMax;
                    result.NextOffset++;
                }
            }
            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Sets primary address to last created address.
        /// </summary>
        public virtual void SetPrimaryAddress()
        {
            var masterEntityId     = AddressEntity.GetTypedColumnValue <Guid>(AddressReferenceColumnName);
            var nextPrimaryAddress = new EntitySchemaQuery(UserConnection.EntitySchemaManager, AddressEntityName);

            nextPrimaryAddress.Filters.Add(nextPrimaryAddress.CreateFilterWithParameters(FilterComparisonType.Equal,
                                                                                         MasterEntityName, masterEntityId));
            var createdOnColumn = nextPrimaryAddress.AddColumn("CreatedOn");

            nextPrimaryAddress.AddAllSchemaColumns();
            createdOnColumn.OrderByDesc();
            var options = new EntitySchemaQueryOptions {
                PageableDirection       = PageableSelectDirection.First,
                PageableRowCount        = 1,
                PageableConditionValues = new Dictionary <string, object>()
            };
            var collection     = nextPrimaryAddress.GetEntityCollection(UserConnection, options);
            var primaryAddress = collection.Count > 0 ? collection.First() : null;

            if (primaryAddress != null)
            {
                primaryAddress.SetColumnValue("Primary", true);
                primaryAddress.Save();
            }
        }
Exemplo n.º 3
0
        private static void PreparePageableOptions(EntitySchemaQueryOptions pageOptions, Entity lastEntity,
                                                   string primaryColumnName)
        {
            DateTime lastEntityCreatedOn = lastEntity.GetTypedColumnValue <DateTime>("CreatedOn");
            Guid     lastEntityId        = lastEntity.PrimaryColumnValue;

            pageOptions.PageableConditionValues.Clear();
            pageOptions.PageableConditionValues.Add("CreatedOn", lastEntityCreatedOn);
            pageOptions.PageableConditionValues.Add(primaryColumnName, lastEntityId);
        }
Exemplo n.º 4
0
        /// <inheritdoc />
        public IEnumerable <ImportDataChunk <T> > Get(Guid importSessionId)
        {
            var esq      = GetChunkQuery(importSessionId);
            int pageSize = 1;
            EntitySchemaQueryOptions pageOptions = new EntitySchemaQueryOptions {
                PageableDirection       = PageableSelectDirection.First,
                PageableRowCount        = pageSize,
                PageableConditionValues = new Dictionary <string, object>()
            };
            EntityCollection entityCollection = esq.GetEntityCollection(UserConnection, pageOptions);

            if (entityCollection.Count == 0)
            {
                yield break;
            }
            yield return(ConvertToChunk(entityCollection.Last.Value));

            pageOptions.PageableDirection = PageableSelectDirection.Next;
            pageOptions.PageableConditionValues.Clear();

            bool   useOffsetFetchPaging = GlobalAppSettings.UseOffsetFetchPaging;
            int    pageOffset           = entityCollection.Count;
            string primaryColumnName    = esq.PrimaryQueryColumn.Name;

            do
            {
                if (useOffsetFetchPaging)
                {
                    pageOptions.RowsOffset = pageOffset;
                    esq.ResetSelectQuery();
                }
                else
                {
                    PreparePageableOptions(pageOptions, entityCollection.Last.Value, primaryColumnName);
                }
                entityCollection = esq.GetEntityCollection(UserConnection, pageOptions);
                if (entityCollection.Count == 0)
                {
                    yield break;
                }
                yield return(ConvertToChunk(entityCollection.Last.Value));

                pageOffset += entityCollection.Count;
            } while (entityCollection.Count == pageSize);
        }
        public Dictionary <string, string> GetHintList(string subjectName, string hintText)
        {
            subjectName.CheckArgumentNullOrEmpty(nameof(subjectName));

            _hintEntityEntitySchema = UserConnection.EntitySchemaManager.FindInstanceByName(subjectName);
            _hintEntityEntitySchema.CheckArgumentNull(nameof(_hintEntityEntitySchema));

            if (_hintEntityEntitySchema.PrimaryDisplayColumn == null)
            {
                return(null);
            }
            _hintQuery = new EntitySchemaQuery(_hintEntityEntitySchema);

            _hintQuery.PrimaryQueryColumn.IsAlwaysSelect = true;
            _hintQuery.AddColumn(_hintEntityEntitySchema.PrimaryDisplayColumn.Name).OrderByAsc();

            var nameColumn = _hintEntityEntitySchema.Columns.FindByName("Name");

            if (nameColumn != null)
            {
                _hintQuery.AddColumn(nameColumn.Name);
            }

            var typeColumn = GetTypedColumnForHintQuery();

            if (typeColumn != null)
            {
                _hintQuery.AddColumn(typeColumn.Name);
            }

            var folderTypeColumn = _hintEntityEntitySchema.Columns.FindByName("FolderType");

            if (folderTypeColumn != null)
            {
                _hintQuery.AddColumn(folderTypeColumn.Name);
            }

            AddSysWorkspaceFilterToHintQuery();
            AddIsMaxVersionFilterToHintQuery();
            AddIsTagPropertyToHintQuery();
            AddhintTextFilterToHintQuery(hintText);

            var options = new EntitySchemaQueryOptions {
                PageableDirection       = PageableSelectDirection.First,
                PageableRowCount        = 21,
                PageableConditionValues = new Dictionary <string, object>()
            };

            var entityCollection = _hintQuery.GetEntityCollection(UserConnection, options);

            var hintCollection = new Dictionary <string, string>();

            foreach (var entity in entityCollection)
            {
                if (_hintEntityEntitySchema.Name == "VwSysProcess")
                {
                    if (hintCollection.ContainsKey(entity.PrimaryDisplayColumnValue))
                    {
                        hintCollection[entity.PrimaryDisplayColumnValue] = null;
                    }
                    else
                    {
                        hintCollection.Add(entity.PrimaryDisplayColumnValue, entity.GetTypedColumnValue <string>(nameColumn.Name));
                    }
                }
                else
                {
                    string hintData = "";

                    Guid hintId = entity.PrimaryColumnValue;

                    if (typeColumn != null)
                    {
                        var result = new {
                            value  = hintId,
                            typeId = entity.GetTypedColumnValue <string>(typeColumn.ColumnValueName)
                        };

                        hintData = JsonConvert.SerializeObject(result);
                    }
                    else if (folderTypeColumn != null)
                    {
                        var primaryDisplayValue = entity.PrimaryDisplayColumnValue;

                        var result = new {
                            value         = hintId,
                            displayValue  = primaryDisplayValue,
                            sectionFilter = new {
                                value        = hintId,
                                displayValue = primaryDisplayValue,
                                folderType   = new {
                                    value = entity.GetTypedColumnValue <Guid>(folderTypeColumn.ColumnValueName)
                                },
                                folderId = hintId
                            }
                        };

                        hintData = JsonConvert.SerializeObject(result);
                    }
                    else
                    {
                        hintData = hintId.ToString();
                    }

                    hintCollection[entity.PrimaryDisplayColumnValue] = hintData;
                }
            }
            return(hintCollection);
        }
Exemplo n.º 6
0
        public virtual bool SynchronizeContactAddress()
        {
            var  contactId            = Entity.PrimaryColumnValue;
            var  addressTypeId        = Entity.GetTypedColumnValue <Guid>("AddressTypeId");
            var  address              = Entity.GetTypedColumnValue <string>("Address");
            var  cityId               = Entity.GetTypedColumnValue <Guid>("CityId");
            var  regionId             = Entity.GetTypedColumnValue <Guid>("RegionId");
            var  countryId            = Entity.GetTypedColumnValue <Guid>("CountryId");
            var  zip                  = Entity.GetTypedColumnValue <string>("Zip");
            bool isEmptyAddressTypeId = addressTypeId.IsEmpty();
            bool isEmptyAddress       = address.IsNullOrEmpty();
            bool isEmptyCityId        = cityId.IsEmpty();
            bool isEmptyRegionId      = regionId.IsEmpty();
            bool isEmptyCountryId     = countryId.IsEmpty();
            bool isEmptyZip           = zip.IsNullOrEmpty();

            if (isEmptyAddressTypeId && isEmptyAddress && isEmptyCityId && isEmptyRegionId && isEmptyCountryId && isEmptyZip)
            {
                return(true);
            }
            var addressESQ      = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "ContactAddress");
            var createdOnColumn = addressESQ.AddColumn("CreatedOn");

            addressESQ.AddAllSchemaColumns();
            createdOnColumn.OrderByAsc();
            var contactFilter = addressESQ.CreateFilterWithParameters(
                FilterComparisonType.Equal, "Contact", contactId);

            addressESQ.Filters.Add(contactFilter);
            var primaryFilter = addressESQ.CreateFilterWithParameters(
                FilterComparisonType.Equal, "Primary", true);

            addressESQ.Filters.Add(primaryFilter);
            var options = new EntitySchemaQueryOptions {
                PageableDirection       = PageableSelectDirection.First,
                PageableRowCount        = 1,
                PageableConditionValues = new Dictionary <string, object>()
            };
            var addresses = addressESQ.GetEntityCollection(UserConnection, options);

            if (addresses.Count > 0)
            {
                var contactAddress = addresses[0];
                var entityChanged  = false;
                if (!addressTypeId.IsEmpty() && !contactAddress.GetTypedColumnValue <Guid>("AddressTypeId").Equals(addressTypeId))
                {
                    contactAddress.SetColumnValue("AddressTypeId", addressTypeId);
                    entityChanged = true;
                }
                if (!contactAddress.GetTypedColumnValue <string>("Address").Equals(address))
                {
                    contactAddress.SetColumnValue("Address", address);
                    entityChanged = true;
                }
                if (!cityId.IsEmpty() && !contactAddress.GetTypedColumnValue <Guid>("CityId").Equals(cityId))
                {
                    contactAddress.SetColumnValue("CityId", cityId);
                    entityChanged = true;
                }
                if (!regionId.IsEmpty() && !contactAddress.GetTypedColumnValue <Guid>("RegionId").Equals(regionId))
                {
                    contactAddress.SetColumnValue("RegionId", regionId);
                    entityChanged = true;
                }
                if (!countryId.IsEmpty() && !contactAddress.GetTypedColumnValue <Guid>("CountryId").Equals(countryId))
                {
                    contactAddress.SetColumnValue("CountryId", countryId);
                    entityChanged = true;
                }
                if (!contactAddress.GetTypedColumnValue <string>("Zip").Equals(zip))
                {
                    contactAddress.SetColumnValue("Zip", zip);
                    entityChanged = true;
                }
                if (entityChanged)
                {
                    contactAddress.Save();
                }
            }
            else
            {
                var schema        = UserConnection.EntitySchemaManager.GetInstanceByName("ContactAddress");
                var contactEntity = schema.CreateEntity(UserConnection);
                contactEntity.SetDefColumnValues();
                contactEntity.SetColumnValue("ContactId", contactId);
                contactEntity.SetColumnValue("Primary", true);
                if (!isEmptyAddressTypeId)
                {
                    contactEntity.SetColumnValue("AddressTypeId", addressTypeId);
                }
                contactEntity.SetColumnValue("Address", address);
                if (!isEmptyCityId)
                {
                    contactEntity.SetColumnValue("CityId", cityId);
                }
                if (!isEmptyRegionId)
                {
                    contactEntity.SetColumnValue("RegionId", regionId);
                }
                if (!isEmptyCountryId)
                {
                    contactEntity.SetColumnValue("CountryId", countryId);
                }
                contactEntity.SetColumnValue("Zip", zip);
                contactEntity.Save();
            }
            return(true);
        }