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