예제 #1
0
        /// <summary>
        /// Удаление (forced) объекта с заданными типом и идентификатором.
        /// </summary>
        /// <remarks>
        /// Помимо самого удаления выполняется: вызов триггеров "до" и "после", очистка кэша в DomainObjectRegistry, уведомление XSecurityManager
        /// Управление транзакцией внешнее.
        /// </remarks>
        /// <param name="context">Контекcт ядра</param>
        /// <param name="sObjectType">Наименвоание типа объекта</param>
        /// <param name="objectID">Идентификатор</param>
        /// <returns>Реальное количество удаленных объектов</returns>
        public static int Delete(IXExecutionContext context, string sObjectType, Guid objectID)
        {
            DomainObjectData xobj = DomainObjectData.CreateToDelete(context.Connection, sObjectType, objectID);

            // #1: Вызов триггеров Before
            XTriggersController.Instance.FireTriggers(xobj.Context, XTriggerFireTimes.Before, context);

            // #2: Сбросим закэшированные данные объектa
            DomainObjectRegistry.ResetObject(xobj);

            // #3: Удаление объекта
            XDatagramProcessorEx dg_proc = XDatagramProcessorMsSqlEx.Instance;
            int nAffected = dg_proc.Delete(context.Connection, xobj);

            // #5: Сигнализируем Securitymanager, что обновились данные (для очистки кэшей)
            XSecurityManager.Instance.TrackModifiedObjects(xobj.Context);

            // #6: Вызов триггеров After
            XTriggersController.Instance.FireTriggers(xobj.Context, XTriggerFireTimes.After, context);

            return(nAffected);
        }