private void FindImportEntityDuplicate(EntitySchemaQuery esq, List <Entity> entities, ImportParameters parameters,
                                               IEnumerable <ImportColumn> keyColumns, Func <ColumnExpression, object> columnValueAction)
        {
            var mainFilterGroup = new EntitySchemaQueryFilterCollection(esq, LogicalOperationStrict.Or);

            esq.Filters.Add(mainFilterGroup);
            var importColumns   = keyColumns.ToList();
            var keyColumnsCount = importColumns.Count();

            foreach (var importEntity in parameters.Entities)
            {
                var columnsExpressions = GetKeyColumnsValues(parameters, importEntity, importColumns);
                if (!columnsExpressions.Any())
                {
                    continue;
                }
                var filters = GetKeyColumnsFilters(esq, columnsExpressions,
                                                   columnValueAction);
                mainFilterGroup.Add(filters);
                var parametersCount = mainFilterGroup.Count * keyColumnsCount;
                if (parametersCount >= MaxQueryParametersCount)
                {
                    AddEntitiesRange(esq, entities);
                    esq.ResetSelectQuery();
                    mainFilterGroup.Clear();
                }
            }
            if (mainFilterGroup.Any())
            {
                AddEntitiesRange(esq, entities);
            }
        }
Beispiel #2
0
        private void AddExportFiltersBySettings(SyncContext context, EntitySchemaQuery esq)
        {
            UserConnection userConnection = context.UserConnection;

            esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, "CreatedBy",
                                                           userConnection.CurrentUser.ContactId));
            if (UserSettings.ExportContactsAll)
            {
                return;
            }
            var contactTypeFilters = new EntitySchemaQueryFilterCollection(esq, LogicalOperationStrict.Or);

            if (UserSettings.ExportContactsEmployers)
            {
                contactTypeFilters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, "Type",
                                                                      ExchangeConsts.ContactEmployeeTypeId));
            }
            if (UserSettings.ExportContactsCustomers)
            {
                contactTypeFilters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, "Type",
                                                                      ExchangeConsts.ContactCustomerTypeId));
            }
            if (UserSettings.ExportContactsOwner)
            {
                contactTypeFilters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false, "Owner",
                                                                      userConnection.CurrentUser.ContactId));
            }
            if (UserSettings.ExportContactsFromGroups)
            {
                AddContactsDynamicGroupFilters(UserSettings.LocalFolderUIds, userConnection, contactTypeFilters);
            }
            if (!contactTypeFilters.Any())
            {
                esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, false,
                                                               esq.RootSchema.PrimaryColumn.Name, Guid.Empty));
                return;
            }
            esq.Filters.Add(contactTypeFilters);
        }