/// <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); }
/// <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(); } }
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); }
/// <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); }
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); }