/// <summary> /// Inserts a WebDeleteStudy request for a specific Study /// </summary> /// <param name="updateContext">The database context to insert under.</param> /// <param name="location">The StudyStorageLocation of the study to delete.</param> /// <param name="requestDescription">A description of the reason for the delete.</param> /// <param name="externalRequest">An optional external request that triggered this deletion</param> /// <returns>The inserted WorkQueue entry</returns> public static WorkQueue InsertDeleteStudyRequest(IUpdateContext updateContext, StudyStorageLocation location, string requestDescription, ExternalRequestQueue externalRequest = null) { var extendedData = new WebDeleteStudyLevelQueueData { Level = DeletionLevel.Study, Reason = requestDescription, UserId = ServerHelper.CurrentUserId, UserName = ServerHelper.CurrentUserName }; var insertParms = new InsertWorkQueueParameters { WorkQueueTypeEnum = WorkQueueTypeEnum.WebDeleteStudy, ServerPartitionKey = location.ServerPartitionKey, StudyStorageKey = location.Key, ScheduledTime = Platform.Time, WorkQueueData = XmlUtils.SerializeAsXmlDoc(extendedData) }; if (externalRequest != null) { insertParms.ExternalRequestQueueKey = externalRequest.Key; } var insertWorkQueue = updateContext.GetBroker <IInsertWorkQueue>(); return(insertWorkQueue.FindOne(insertParms)); }
/// <summary> /// Inserts a WebDeleteStudy request for a specific Study /// </summary> /// <param name="updateContext">The database context to insert under.</param> /// <param name="location">The StudyStorageLocation of the study to delete.</param> /// <param name="requestDescription">A description of the reason for the delete.</param> /// <param name="externalRequest">An optional external request that triggered this deletion</param> /// <returns>The inserted WorkQueue entry</returns> public static WorkQueue InsertDeleteStudyRequest(IUpdateContext updateContext, StudyStorageLocation location, string requestDescription, ExternalRequestQueue externalRequest = null) { var extendedData = new WebDeleteStudyLevelQueueData { Level = DeletionLevel.Study, Reason = requestDescription, UserId = ServerHelper.CurrentUserId, UserName = ServerHelper.CurrentUserName }; var insertParms = new InsertWorkQueueParameters { WorkQueueTypeEnum = WorkQueueTypeEnum.WebDeleteStudy, ServerPartitionKey = location.ServerPartitionKey, StudyStorageKey = location.Key, ScheduledTime = Platform.Time, WorkQueueData = XmlUtils.SerializeAsXmlDoc(extendedData) }; if (externalRequest != null) insertParms.ExternalRequestQueueKey = externalRequest.Key; var insertWorkQueue = updateContext.GetBroker<IInsertWorkQueue>(); return insertWorkQueue.FindOne(insertParms); }
/// <summary> /// Delete a Study. /// </summary> public void DeleteStudy(ServerEntityKey studyKey, string reason) { StudySummary study = StudySummaryAssembler.CreateStudySummary(HttpContextData.Current.ReadContext, Study.Load(HttpContextData.Current.ReadContext, studyKey)); if (study.IsReconcileRequired) { throw new ApplicationException( String.Format("Deleting the study is not allowed at this time : there are items to be reconciled.")); // NOTE: another check will occur when the delete is actually processed } using (IUpdateContext ctx = PersistentStoreRegistry.GetDefaultStore().OpenUpdateContext(UpdateContextSyncMode.Flush)) { LockStudyParameters lockParms = new LockStudyParameters { QueueStudyStateEnum = QueueStudyStateEnum.WebDeleteScheduled, StudyStorageKey = study.TheStudyStorage.Key }; ILockStudy broker = ctx.GetBroker<ILockStudy>(); broker.Execute(lockParms); if (!lockParms.Successful) { throw new ApplicationException(String.Format("Unable to lock the study : {0}", lockParms.FailureReason)); } InsertWorkQueueParameters insertParms = new InsertWorkQueueParameters { WorkQueueTypeEnum = WorkQueueTypeEnum.WebDeleteStudy, ServerPartitionKey = study.ThePartition.Key, StudyStorageKey = study.TheStudyStorage.Key, ScheduledTime = Platform.Time }; WebDeleteStudyLevelQueueData extendedData = new WebDeleteStudyLevelQueueData { Level = DeletionLevel.Study, Reason = reason, UserId = ServerHelper.CurrentUserId, UserName = ServerHelper.CurrentUserName }; insertParms.WorkQueueData = XmlUtils.SerializeAsXmlDoc(extendedData); IInsertWorkQueue insertWorkQueue = ctx.GetBroker<IInsertWorkQueue>(); if (insertWorkQueue.FindOne(insertParms)==null) { throw new ApplicationException("DeleteStudy failed"); } ctx.Commit(); } }