void _clientSession_CMoveStoreSubOperation ( object sender, CMoveStoreSubOperationEventArgs e ) { if (null != MoveDataSet) { try { MoveDataSetEventArgs args = new MoveDataSetEventArgs(e.MovedDataset); args.Remaining = e.Remaining; MoveDataSet(this, args); e.Handled = true; } finally { if (e.MovedDataset != null) { e.MovedDataset.Dispose( ); } } } }
internal DicomCommandStatusType OnMoveDataSet(MoveDataSetEventArgs e) { if (MoveDataSet != null) { MoveDataSet(this, e); return(e.Status); } return(DicomCommandStatusType.Success); }
/// <summary> /// Moves the images. /// </summary> /// <param name="addin">The addin.</param> /// <param name="level">The level.</param> /// <param name="affectedClass">The affected class.</param> /// <param name="connection">The connection.</param> /// <param name="ds">The ds.</param> /// <returns></returns> internal static DicomCommandStatusType MoveImages(MoveAddIn addin, string level, string affectedClass, string connection, DicomDataSet ds) { string filter = string.Empty; string countFilter = string.Empty; string queryFilter = string.Empty; string sTemp = string.Empty; object count = null; SqlCeDataReader reader; MoveDataSetEventArgs move = new MoveDataSetEventArgs(); if (affectedClass == DicomUidType.PatientRootQueryMove || affectedClass == DicomUidType.PatientRootQueryGet) { filter += " AND "; filter += AddParen("p.PatientID = '" + ds.GetValue <string>(DicomTag.PatientID, string.Empty) + "'"); } if (level == "STUDY" || level == "SERIES" || level == "IMAGE") { filter += " AND "; if (level == "STUDY") { filter += AddParen("s.StudyInstanceUID = '" + ds.GetValue <string>(DicomTag.StudyInstanceUID, string.Empty) + "'"); } else { List <string> instances = ds.GetValue <List <string> >(DicomTag.StudyInstanceUID, new List <string>()); sTemp = string.Empty; foreach (string instance in instances) { sTemp += "s.StudyInstanceUID ='" + instance + "'"; if (instances.IndexOf(instance) < instances.Count - 1) { sTemp += " AND "; } } filter += AddParen(sTemp); } } if (level == "SERIES" || level == "IMAGE") { filter += " AND "; if (level != "SERIES") { filter += AddParen("r.SeriesInstanceUID = '" + ds.GetValue <string>(DicomTag.SeriesInstanceUID, string.Empty) + "'"); } else { List <string> instances = ds.GetValue <List <string> >(DicomTag.SeriesInstanceUID, new List <string>()); sTemp = string.Empty; foreach (string instance in instances) { sTemp += "r.SeriesInstanceUID ='" + instance + "'"; if (instances.IndexOf(instance) < instances.Count - 1) { sTemp += " AND "; } } filter += AddParen(sTemp); } } if (level == "IMAGE") { List <string> instances = ds.GetValue <List <string> >(DicomTag.SOPInstanceUID, new List <string>()); if (instances.Count > 0) { filter += " AND "; } sTemp = string.Empty; foreach (string instance in instances) { sTemp += "i.SOPInstanceUID ='" + instance + "'"; if (instances.IndexOf(instance) < instances.Count - 1) { sTemp += " AND "; } } filter += AddParen(sTemp); } //countFilter = "SELECT COUNT(*) FROM IMAGES WHERE " + filter; //filter = "SELECT * FROM IMAGES WHERE " + filter; countFilter = "SELECT COUNT(*) " + "FROM Patients p, Studies s, Series r, Images i " + "WHERE (p.PatientID = s.PatientID) AND (s.StudyInstanceUID = r.StudyInstanceUID) AND (r.SeriesInstanceUID = i.SeriesInstanceUID) " + filter; queryFilter = "SELECT i.* " + "FROM Patients p, Studies s, Series r, Images i " + "WHERE (p.PatientID = s.PatientID) AND (s.StudyInstanceUID = r.StudyInstanceUID) AND (r.SeriesInstanceUID = i.SeriesInstanceUID) " + filter; count = SqlCeHelper.ExecuteScalar(connection, countFilter); if (count == null || Convert.ToInt32(count) == 0) { return(DicomCommandStatusType.Success); } move.Remaining = Convert.ToInt32(count); reader = SqlCeHelper.ExecuteReader(connection, queryFilter); while (reader.Read()) { try { DicomCommandStatusType status; using (DicomDataSet dicom = new DicomDataSet()) { dicom.Load(reader["ReferencedFile"].ToString(), DicomDataSetLoadFlags.LoadAndClose); //move.StoreFileName = reader["ReferencedFile"].ToString(); move.StoreDataSet = dicom; move.Remaining--; status = addin.OnMoveDataSet(move); if (status != DicomCommandStatusType.Success || addin.Cancel) { reader.Close(); if (addin.Cancel) { if (addin.BreakType == BreakType.Cancel) { status = DicomCommandStatusType.Cancel; } else { status = DicomCommandStatusType.Failure; } } return(status); } } } catch { } } return(DicomCommandStatusType.Success); }