Exemplo n.º 1
0
        private void Synchronize(SPItemEventProperties properties, IReadOnlyCollection <SyncType> syncTypes, SyncActionType syncActionType)
        {
            switch (syncTypes.Count)
            {
            case 0:
                return;

            case 1:
                this._syncProvider = new SpSyncProvider(syncTypes.FirstOrDefault());
                if (this._syncProvider.Synchronize(properties.ListItem, syncActionType))
                {
                    base.ItemAdded(properties);
                }
                return;

            default:
                bool result = false;
                foreach (SyncType syncType in syncTypes)
                {
                    this._syncProvider = new SpSyncProvider(syncType);
                    result             = this._syncProvider.Synchronize(properties.ListItem, syncActionType);
                }
                if (result)
                {
                    base.ItemAdded(properties);
                }
                break;
            }
        }
        private ViewOverrider(SPList spList, SPQuery spQuery, SPUser currentUser)
        {
            SyncType syncType = SyncType.SpList;

            this._syncProvider = new SpSyncProvider(syncType);
            this._camlXmlQuery = CamlXmlView.TryParse <CamlXmlView>(spQuery.ViewXml);
            this._currentUser  = currentUser;
            this._spList       = spList;

            this._head = new HeadList
            {
                Heads = new List <Head>
                {
                    new Head
                    {
                        Position     = "Top",
                        ColumnGroups = new List <ColumnGroup>
                        {
                            new ColumnGroup
                            {
                                Hide = true
                            }
                        }
                    }
                }
            };

            this._sqlFilterString         = this.BuildSqlFilterString();
            this._settingsAllreadyCreated = true;
        }
        private ViewOverrider(SPView spView, SPUser currentUser, HeadList head = null, string sqlFilterString = null)
        {
            this._spView = spView;

            SyncType syncType = SyncType.SpList;

            this._syncProvider = new SpSyncProvider(syncType);
            this._currentUser  = currentUser;

            if (head != null)
            {
                this._head                    = head;
                this._sqlFilterString         = sqlFilterString;
                this._settingsAllreadyCreated = true;
            }
            else
            {
                this._head = new HeadList
                {
                    Heads = new List <Head>
                    {
                        new Head
                        {
                            Position     = "Top",
                            ColumnGroups = new List <ColumnGroup>
                            {
                                new ColumnGroup
                                {
                                    Hide = true
                                }
                            }
                        }
                    },
                    Options = new OptionList
                    {
                        Options = new List <Option>()
                    },
                    RowDisablingRules = new RowDisablingRulesList
                    {
                        DontShowLikeDisabled = true,
                        Rules = new List <Rule>
                        {
                            new Rule
                            {
                                FieldName  = Constants.ColumnSpPrefix + "ID",
                                FieldType  = "Number",
                                Operator   = "GreaterThen",
                                FieldValue = "0"
                            }
                        }
                    }
                };

                this._camlXmlQuery = CamlXmlView.TryParse <CamlXmlView>(spView.SchemaXml);
            }
        }
        public bool RegisterListToSync(SPList spList, bool ovverideView, bool forceCreating, bool hidden = false)
        {
            this._syncProvider = new SpSyncProvider(SyncType.SpList);

            bool resultFieldAdding =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(FieldAddingName,
                                                                        SPEventReceiverType.FieldAdding, spList, typeof(ListChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultFieldUpdating =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(FieldUpdatingName,
                                                                        SPEventReceiverType.FieldUpdating, spList, typeof(ListChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultFieldDeleting =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(FieldDeletingName,
                                                                        SPEventReceiverType.FieldDeleting, spList, typeof(ListChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultItemAdded =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(ItemAddedName,
                                                                        SPEventReceiverType.ItemAdded, spList, typeof(ItemChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultItemUpdated =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(ItemUpdatedName,
                                                                        SPEventReceiverType.ItemUpdated, spList, typeof(ItemChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultItemDeleting =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(ItemDeletingName,
                                                                        SPEventReceiverType.ItemDeleting, spList, typeof(ItemChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultCreateCachDb = this._syncProvider.CreateDataBaseTable(spList.ParentWeb.Site, spList.RootFolder.ServerRelativeUrl, spList.Fields);

            if (resultFieldAdding && resultFieldUpdating && resultFieldDeleting && resultItemAdded && resultItemUpdated && resultItemDeleting && resultCreateCachDb)
            {
                if (hidden)
                {
                    return(true);
                }

                SettingsProvider.Instance(spList.ParentWeb).SetIsCacheDb(spList, true);
                SettingsProvider.Instance(spList.ParentWeb).SetIsOverrideView(spList, ovverideView);
                SettingsProvider.Instance(spList.ParentWeb).SetForceCreating(spList, forceCreating);
                SettingsProvider.Instance(spList.ParentWeb).SetCacheTypeDb(spList, SyncType.SpList);
                SettingsProvider.Instance(spList.ParentWeb).SetTableName(spList, spList.RootFolder.ServerRelativeUrl);
                return(true);
            }

            // что то упало, удаляем то что получилось создать
            if (resultFieldAdding)
            {
                UtilityEventReceiver.DeleteReciever(FieldAddingName, spList);
            }

            if (resultFieldUpdating)
            {
                UtilityEventReceiver.DeleteReciever(FieldUpdatingName, spList);
            }

            if (resultFieldDeleting)
            {
                UtilityEventReceiver.DeleteReciever(FieldDeletingName, spList);
            }

            if (resultItemAdded)
            {
                UtilityEventReceiver.DeleteReciever(ItemAddedName, spList);
            }

            if (resultItemUpdated)
            {
                UtilityEventReceiver.DeleteReciever(ItemUpdatedName, spList);
            }

            if (resultItemDeleting)
            {
                UtilityEventReceiver.DeleteReciever(ItemDeletingName, spList);
            }

            SettingsProvider.Instance(spList.ParentWeb).SetIsCacheDb(spList, false);
            return(false);
        }
        public bool RegisterCtToSync(SPContentType contentType, bool overrideView, bool forceCreating, bool tableNameAsParentList = true, bool hidden = false)
        {
            this._syncProvider = new SpSyncProvider(SyncType.SpContentType);

            bool resultFieldAdding =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(FieldAddingName,
                                                                        SPEventReceiverType.FieldAdding, contentType, typeof(ListChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultFieldUpdating =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(FieldUpdatingName,
                                                                        SPEventReceiverType.FieldUpdating, contentType, typeof(ListChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultFieldDeleting =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(FieldDeletingName,
                                                                        SPEventReceiverType.FieldDeleting, contentType, typeof(ListChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultItemAdded =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(ItemAddedName,
                                                                        SPEventReceiverType.ItemAdded, contentType, typeof(ItemChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultItemUpdated =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(ItemUpdatedName,
                                                                        SPEventReceiverType.ItemUpdated, contentType, typeof(ItemChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            bool resultItemDeleting =
                UtilityEventReceiver.CreateRecieverWithDeletingPrevious(ItemDeletingName,
                                                                        SPEventReceiverType.ItemDeleting, contentType, typeof(ItemChangeReceiver), 10001, SPEventReceiverSynchronization.Synchronous);

            string tableName          = tableNameAsParentList ? contentType.ParentList.RootFolder.ServerRelativeUrl : contentType.Name;
            bool   resultCreateCachDb = this._syncProvider.CreateDataBaseTable(contentType.ParentWeb.Site, tableName, contentType.Fields);

            if (resultFieldAdding && resultFieldUpdating && resultFieldDeleting && resultItemAdded && resultItemUpdated && resultItemDeleting && resultCreateCachDb)
            {
                if (hidden)
                {
                    return(true);
                }

                IList <SPContentTypeUsage> usages = SPContentTypeUsage.GetUsages(contentType);
                foreach (SPContentTypeUsage usage in usages)
                {
                    if (!usage.IsUrlToList)
                    {
                        continue;
                    }

                    SPList usageList = contentType.ParentWeb.GetList(usage.Url);

                    SettingsProvider.Instance(contentType.ParentWeb).SetIsCacheDb(usageList, true);
                    SettingsProvider.Instance(contentType.ParentWeb).SetIsOverrideView(usageList, overrideView);
                    SettingsProvider.Instance(contentType.ParentWeb).SetForceCreating(usageList, forceCreating);
                    SettingsProvider.Instance(contentType.ParentWeb).SetCacheTypeDb(usageList, SyncType.SpContentType);
                    SettingsProvider.Instance(contentType.ParentWeb).SetTableName(usageList, tableName);
                }

                return(true);
            }

            // что то упало, удаляем то что получилось создать
            if (resultFieldAdding)
            {
                UtilityEventReceiver.DeleteReciever(FieldAddingName, contentType);
            }

            if (resultFieldUpdating)
            {
                UtilityEventReceiver.DeleteReciever(FieldUpdatingName, contentType);
            }

            if (resultFieldDeleting)
            {
                UtilityEventReceiver.DeleteReciever(FieldDeletingName, contentType);
            }

            if (resultItemAdded)
            {
                UtilityEventReceiver.DeleteReciever(ItemAddedName, contentType);
            }

            if (resultItemUpdated)
            {
                UtilityEventReceiver.DeleteReciever(ItemUpdatedName, contentType);
            }

            if (resultItemDeleting)
            {
                UtilityEventReceiver.DeleteReciever(ItemDeletingName, contentType);
            }

            SettingsProvider.Instance(contentType.ParentList.ParentWeb).SetIsCacheDb(contentType.ParentList, false);
            return(false);
        }