public MWLQueryCriteriaItem(DPath dcmPath, GWDataDBField gwField) { DPath = dcmPath; GWDataDBField = gwField; base.SourceField = DicomMappingHelper.DPath2DataColumnName(dcmPath); Initialize(); }
public void Refresh() { if (DHelper.IsStringLike(DPath.VR)) { Operator = QueryCriteriaOperator.Like; } SourceField = DicomMappingHelper.DPath2DataColumnName(DPath); }
public MWLQueryCriteriaItem(DPath dcmPath) { DPath = dcmPath; base.SourceField = DicomMappingHelper.DPath2DataColumnName(dcmPath); GWDataDBField = GWDataDBField.Null; Translating.Type = TranslatingType.None; Initialize(); }
public MWLQueryResultItem(DPath dcmPath) { DPath = dcmPath; base.TargetField = DicomMappingHelper.DPath2DataColumnName(dcmPath); GWDataDBField = GWDataDBField.Null; Translating.Type = TranslatingType.FixValue; Translating.ConstValue = ""; }
public StorageItem(DPath dcmPath) { DPath = dcmPath; SourceField = DicomMappingHelper.DPath2DataColumnName(DPath);// DPath.Seperator + dcmPath.Path; GWDataDBField = GWDataDBField.Null; Translating.Type = TranslatingType.None; Translating.ConstValue = ""; }
public IInboundRule[] GetRules() { DicomMappingHelper.CleanQRMappingList <StorageItem>(Program.ConfigMgt.Config.StorageRule.QueryResult.MappingList); AddEventTypeItem(Program.ConfigMgt.Config.StorageRule.QueryResult.MappingList, GWEventType.PACSImageArrival.Code); //14 return(new IInboundRule[] { Program.ConfigMgt.Config.StorageRule }); }
private static void UpdateGUID(DataTable dt, DataColumn dc, string columnName, GWDataDBField field) { if (dc.ColumnName == columnName) { Dictionary <string, string> rpIDs = new Dictionary <string, string>(); foreach (DataRow dr in dt.Rows) { object o = dr[dc]; string rpID = (o == null) ? "" : o.ToString(); if (rpID.Length < 1) // need to generate GUID { string guid = DicomMappingHelper.GetGUID(dr); if (rpIDs.ContainsKey(guid)) { // 20100222 // has already generated GUID in this loop, // for example there are two records with same guid and splitted according to multiple procedure codes // 20100227 // as we move the auto generating STDUID before the procedure code spliting in the class Kodak.GCGateway.DicomAdapter.MWLServer.Dicom.WorklistSCP, // this (different records with the same guid/data_id) will not happen any more. rpID = rpIDs[guid]; } else { rpID = DHelper.GetDicomGUID(Program.DeviceMgt.DeviceDirInfor.Header.ID, Program.ConfigMgt.Config.MaxAutoGeneratedLengthOfSTDUID); rpIDs.Add(guid, rpID); } dr[dc] = rpID; } } if (rpIDs.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (KeyValuePair <string, string> pair in rpIDs) { string tableName = GWDataDB.GetTableName(Program.InterfaceName, GWDataDBTable.Order); string pkName = GWDataDBField.o_DATA_ID.FieldName; string fieldName = field.FieldName; sb.Append("UPDATE ").Append(tableName) .Append(" SET ").Append(fieldName).Append(" = '").Append(pair.Value).Append("'") .Append(" WHERE ").Append(pkName).Append(" = '").Append(pair.Key).Append("';\r\n"); } if (Program.Database.DoQuery(sb.ToString()) == null) { Program.Log.Write(LogType.Error, "Update " + columnName + " into database failed."); } else { Program.Log.Write("Update " + columnName + " into database succeeded."); } } } }
private static void UpdateID(DataTable dt, DataColumn dc, string columnName, GWDataDBField field) { if (dc.ColumnName == columnName) { Dictionary <string, string> rpIDs = new Dictionary <string, string>(); foreach (DataRow dr in dt.Rows) { object o = dr[dc]; string rpID = (o == null) ? "" : o.ToString(); if (rpID.Length < 1) { string guid = DicomMappingHelper.GetGUID(dr); if (rpIDs.ContainsKey(guid)) { // 20100222 // please see the function UpdateGUID() for details rpID = rpIDs[guid]; } else { rpID = GetRandomNumber(Program.ConfigMgt.Config.MaxAutoGeneratedLengthOfRPIDAndSPSID).ToString(); rpIDs.Add(guid, rpID); } dr[dc] = rpID; } } if (rpIDs.Count > 0) { StringBuilder sb = new StringBuilder(); foreach (KeyValuePair <string, string> pair in rpIDs) { string tableName = GWDataDB.GetTableName(Program.InterfaceName, GWDataDBTable.Order); string pkName = GWDataDBField.o_DATA_ID.FieldName; string fieldName = field.FieldName; sb.Append("UPDATE ").Append(tableName) .Append(" SET ").Append(fieldName).Append(" = '").Append(pair.Value).Append("'") .Append(" WHERE ").Append(pkName).Append(" = '").Append(pair.Key).Append("';\r\n"); } //Program.Log.Write(sb.ToString()); if (Program.Database.DoQuery(sb.ToString()) == null) { Program.Log.Write(LogType.Error, "Update " + columnName + " into database failed."); } else { Program.Log.Write("Update " + columnName + " into database succeeded."); } } } }
public IOutboundRule[] GetRules() { DicomMappingHelper.CleanMappingList <MWLQueryCriteriaItem, MWLQueryResultItem>(Program.ConfigMgt.Config.Rule); WorklistSCPHelper.ModifyQCMappingList_CS <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, true); DicomMappingHelper.ModifyQCMappingList_DateTime <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, true); DicomMappingHelper.ModifyQCMappingList_FixValue <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList); DicomMappingHelper.SetDataIDMapping <MWLQueryResultItem>(Program.ConfigMgt.Config.Rule.QueryResult.MappingList); WorklistSCPHelper.SetAdditionalQueryCriteria <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, Program.ConfigMgt.Config.AdditionalQueryCriteria, Program.ConfigMgt.Config.AdditionalQueryCriteriaJoinType); return(new IOutboundRule[] { Program.ConfigMgt.Config.Rule }); }
public bool Load() { try { using (StreamReader sr = File.OpenText(FileName)) { string str = sr.ReadToEnd(); Config = XObjectManager.CreateObject(str, typeof(MWLServerConfig)) as MWLServerConfig; DicomMappingHelper.SetFixValue <MWLQueryCriteriaItem, MWLQueryResultItem>(Config.Rule); return(true); } } catch (Exception e) { Program.Log.Write(e); _lastError = e; return(false); } }
public bool Initialize(string[] arguments) { Program.PreLoading(); Program.Log.Write(Program.AppName + " is running in Adapter.Service host."); if (arguments != null && arguments.Length > 0) { string str = arguments[0]; //Program.Log.Write("GWDataDB connection: " + str); //contains db pw Program.ConfigMgt.Config.GWDataDBConnection = str; } DicomMappingHelper.SQLMatchChar = ""; DicomMappingHelper.PreperatMappingList <StorageItem>(StorageList, Program.ConfigMgt.Config.StorageRule.QueryResult.MappingList); DicomMappingHelper.CleanQRMappingList <StorageItem>(Program.ConfigMgt.Config.StorageRule.QueryResult.MappingList); return(true); }
public bool Initialize(string[] arguments) { Program.PreLoading(); Program.Log.Write(Program.AppName + " is running in Adapter.Service host."); DicomMappingHelper.PersonNameRule = Program.ConfigMgt.Config.PersonNameRule; WorklistSCPHelper.ModifyQCMappingList_CS <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, false); DicomMappingHelper.ModifyQCMappingList_DateTime <MWLQueryCriteriaItem>(Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList, false); DicomMappingHelper.PreperatMappingList <MWLQueryResultItem>(QRList, Program.ConfigMgt.Config.Rule.QueryResult.MappingList); DicomMappingHelper.PreperatMappingList <MWLQueryCriteriaItem>(QCList, Program.ConfigMgt.Config.Rule.QueryCriteria.MappingList); DicomMappingHelper.CleanMappingList <MWLQueryCriteriaItem, MWLQueryResultItem>(Program.ConfigMgt.Config.Rule); return(true); }
public DicomCStoreResponse OnCStoreRequest(DicomCStoreRequest request) { string prefix = "[STORAGESCP] [" + session + "] "; var studyUid = request.Dataset.Get <string>(DicomTag.StudyInstanceUID); var instUid = request.SOPInstanceUID.UID; Program.Log.Write(prefix + "Begin processing c-store request. " + request.SOPClassUID.UID); bool res = true; DElementList iod = new DElementList(request.Dataset); if (Program.ConfigMgt.Config.SOAPEnable) //SOAP communication, 20121017 { string requestDataSet = iod.ToDicomXMLString(); string requestSoap = string.Empty; string responseSoap = string.Empty; string tick = DateTime.Now.Ticks.ToString(); res = _reqTran.TransformString(requestDataSet, ref requestSoap); if (!res) { Program.Log.Write(LogType.Error, "Transforming DICOM message to SOAP failed. "); return(new DicomCStoreResponse(request, DicomStatus.ProcessingFailure)); } res = _SOAPClient.SendMessage(requestSoap, out responseSoap); if (!res) { Program.Log.Write(LogType.Error, "Sending SOAP message failed. "); return(new DicomCStoreResponse(request, DicomStatus.ProcessingFailure)); } } else { if (StorageSCPService.Service == null) { Program.Log.Write(prefix + "[WARNING] SCP is not binded to GC Gateway, dump data to local folder only."); iod.SaveXmlFile("StorageIOD_" + DateTime.Now.Ticks.ToString() + ".xml"); } else { DataSet dsIOD = DicomMappingHelper.CreateQCDataSet <StorageItem>(StorageSCPService.Service.StorageList, request.Dataset); if (dsIOD == null) { Program.Log.Write(prefix + "[WARNING] Process storage IOD failed."); return(new DicomCStoreResponse(request, DicomStatus.ProcessingFailure)); } res = StorageSCPService.Service.SaveData(Program.ConfigMgt.Config.StorageRule, dsIOD); if (!res) { Program.Log.Write(prefix + "[WARNING] Insert GC Gateway database failed."); return(new DicomCStoreResponse(request, DicomStatus.ProcessingFailure)); } } } Program.Log.Write("[STORAGESCP] [" + session + "] Finish processing c-store request. Result:" + res.ToString()); return(new DicomCStoreResponse(request, DicomStatus.Success)); }
public static DElementListWrapper[] CreateQRElementList <TR>(XCollection <TR> qrList, DataSet dsQR) where TR : QueryResultItem, IDicomMappingItem { if (qrList == null || dsQR == null || dsQR.Tables.Count < 1) { return(null); } DataTable dt = dsQR.Tables[0]; string pkColumn = Program.ConfigMgt.Config.PrimaryKeyColumnName; if (!dt.Columns.Contains(pkColumn)) { return(null); } Dictionary <string, List <DataRow> > drDict = new Dictionary <string, List <DataRow> >(); foreach (DataRow dr in dt.Rows) { string key = null; string pkValue = dr[pkColumn] as string; //if (pkValue != null || pkValue.Length > 0) if (pkValue != null && pkValue.Length > 0) { key = pkValue; } else { key = "_" + dt.Rows.IndexOf(dr).ToString(); } if (drDict.ContainsKey(key)) { drDict[key].Add(dr); } else { List <DataRow> drList = new List <DataRow>(); drDict.Add(key, drList); drList.Add(dr); } } List <DElementListWrapper> dcmResult = new List <DElementListWrapper>(); foreach (KeyValuePair <string, List <DataRow> > pair in drDict) { int count = qrList.Count; DicomDataset dcmEleList = new DicomDataset(); for (int index = 0; index < count; index++) { IDicomMappingItem qr = qrList[index] as IDicomMappingItem; if (!qr.DPath.Enable) { continue; } //int tag = qr.DPath.GetTag(0); List <string> tagList = qr.DPath.GetTagGE(0); ushort uGroup = DHelper.HexString2ushort(tagList[0]); ushort uElement = DHelper.HexString2ushort(tagList[1]); DicomTag tag = new DicomTag(uGroup, uElement); FillElement <TR>(dcmEleList, tag, qr.DPath.VR, ref index, 0, qrList, pair.Value.ToArray()); //dcmEleList.Add(ele); } DElementListWrapper w = new DElementListWrapper(dcmEleList); foreach (DataRow dr in pair.Value) { w.GUIDs.Add(DicomMappingHelper.GetGUID(dr)); } dcmResult.Add(w); } return(dcmResult.ToArray()); }
public static WorklistIOD Create(bool isResult) { WorklistIOD iod = new WorklistIOD(); //Scheduled Procedure Step if (isResult) { iod.Add(getScheduledProcedureStepSequence( getScheduledProcedureStepSequenceItem( getScheduledProtocolCodeSequenceItem( getProtocolContextSequenceItem()) ) ) ); } else { iod.Add(getScheduledProcedureStepSequence( getScheduledProcedureStepSequenceItem( getScheduledProtocolCodeSequenceItem() ) ) ); } DicomMappingHelper.SetCatagory(iod, "Scheduled Procedure Step"); //Request Procedure iod.Add(getRequestProcedureID()); iod.Add(getRequestProcedureDescription()); iod.Add(getRequestProcedureCodeSequence(getRequestProcedureCodeSequenceItem())); iod.Add(getStudyInstanceUID()); iod.Add(getReferencedStudySequence(getReferencedStudySequenceItem())); iod.Add(getReasonForTheRequestedProcedure()); iod.Add(getRequestedProcedurePriority()); iod.Add(getPatientTransportArrangements()); iod.Add(getRequestedProcedureLocation()); //DV CR DicomMappingHelper.SetCatagory(iod, "Request Procedure"); //Image Service Request iod.Add(getAccessionNumber()); iod.Add(getRequestingPhysician()); iod.Add(getReferringPhysiciansName()); iod.Add(getRequestingService()); //DV CR DicomMappingHelper.SetCatagory(iod, "Image Service Request"); //Visit iod.Add(getAdmissionID()); iod.Add(getCurrentPatientLocation()); iod.Add(getReferencedPatientSequence(getReferencedPatientSequenceItem())); iod.Add(getVisitStatusID()); //DV CR iod.Add(getPatientsInstitutionResidence()); //DV CR DicomMappingHelper.SetCatagory(iod, "Visit"); //Patient iod.Add(getPatientsName()); iod.Add(getPatientID()); iod.Add(getPatientsBirthDate()); iod.Add(getPatientsBirthTime()); //DV CR iod.Add(getOtherPatientIds()); //DV CR iod.Add(getOtherPatientNames()); //DV CR iod.Add(getPatientsSex()); iod.Add(getPatientsWeight()); iod.Add(getConfidentialityConstraintOnPatientData()); iod.Add(getPatientState()); iod.Add(getPregnancyStatus()); iod.Add(getMedicalAlerts()); iod.Add(getContrastAllergies()); iod.Add(getSpecialNeeds()); iod.Add(getPatientsAge()); //DV CR iod.Add(getPatientsSize()); //DV CR iod.Add(getEthnicGroup()); //DV CR iod.Add(getOccupation()); //DV CR iod.Add(getAdditionalPatientsHistory()); //DV CR DicomMappingHelper.SetCatagory(iod, "Patient"); iod.Add(getExposureDoseSequence(getExposureDoseSequenceItem())); return(iod); }
public static DPath[] CreateDPath(bool isResult) { return(DicomMappingHelper.CreateDPath(Create(isResult))); }
public MWLQueryResultItem(DPath dcmPath, GWDataDBField gwField) { DPath = dcmPath; GWDataDBField = gwField; base.TargetField = DicomMappingHelper.DPath2DataColumnName(dcmPath); }
public static StorageIOD Storage() { StorageIOD iod = new StorageIOD(); //Patient iod.Add(getPatientsName()); iod.Add(getPatientID()); iod.Add(getIssuerOfPatientID()); //Patient Module iod.Add(getPatientsBirthDate()); iod.Add(getPatientsBirthTime()); //DV CR iod.Add(getOtherPatientIds()); //DV CR iod.Add(getOtherPatientNames()); //DV CR iod.Add(getPatientsSex()); iod.Add(getPatientsWeight()); iod.Add(getPatientComments()); //Patient Module iod.Add(getPatientState()); iod.Add(getPregnancyStatus()); iod.Add(getMedicalAlerts()); iod.Add(getContrastAllergies()); iod.Add(getSpecialNeeds()); iod.Add(getPatientsAge()); //DV CR iod.Add(getPatientsSize()); //DV CR iod.Add(getEthnicGroup()); //DV CR iod.Add(getOccupation()); //DV CR iod.Add(getAdditionalPatientsHistory()); //DV CR DicomMappingHelper.SetCatagory(iod, "Patient"); //Study iod.Add(getStudyInstanceUID()); iod.Add(getStudyDate()); iod.Add(getStudyTime()); iod.Add(getReferringPhysiciansName()); iod.Add(getReferringPhysiciansTelephoneNumber()); iod.Add(getStudyID()); iod.Add(getAccessionNumber()); iod.Add(getStudyDesciption()); iod.Add(getNameOfPhysiciansReadingStudy()); iod.Add(getAdmittingDiagnosisDescription()); iod.Add(getStudyPriorityID()); iod.Add(getOrderCallbackPhoneNumber()); DicomMappingHelper.SetCatagory(iod, "Study"); //Series iod.Add(getModality()); iod.Add(getSeriesInstanceUID()); iod.Add(getSeriesNumber()); iod.Add(getLaterality()); iod.Add(getSeriesDate()); iod.Add(getSeriesTime()); iod.Add(getPerformingPhysiciansName()); iod.Add(getProtocolName()); iod.Add(getSeriesDesciption()); iod.Add(getOperatorsName()); iod.Add(getBodyPartExamined()); iod.Add(getPatientPosition()); DicomMappingHelper.SetCatagory(iod, "Series"); //Equipment iod.Add(getManufacturer()); iod.Add(getInstitutionName()); iod.Add(getInstitutionAddress()); iod.Add(getStationName()); iod.Add(getInstitutionalDepartmentName()); iod.Add(getManufacturesModelName()); iod.Add(getDeviceSerialNumber()); iod.Add(getSoftwareVersions()); iod.Add(getSpatialResolution()); iod.Add(getDateOfLastCalibration()); iod.Add(getTimeOfLastCalibration()); iod.Add(getAcqusitionDeviceProcessingDescription()); iod.Add(getViewPosition()); iod.Add(getPixelPaddingValue()); DicomMappingHelper.SetCatagory(iod, "Equipment"); //Image iod.Add(getInstanceNumber()); iod.Add(getPatientOrientation()); iod.Add(getContentDate()); iod.Add(getContentTime()); iod.Add(getImageType()); iod.Add(getAcquisitionNumber()); iod.Add(getAcquisitionDate()); iod.Add(getAcquisitionTime()); iod.Add(getAcquisitionDateTime()); iod.Add(getImagesInAcquisition()); iod.Add(getImageComments()); iod.Add(getSamplesPerPixel()); iod.Add(getPhotometricInterpertation()); iod.Add(getRows()); iod.Add(getColumns()); iod.Add(getPixelSpacing()); iod.Add(getBitsAllocated()); iod.Add(getBitsStored()); iod.Add(getHighBit()); iod.Add(getPixcelRepresentation()); iod.Add(getQualityControlImage()); iod.Add(getWindowCenter()); iod.Add(getWindowWidth()); iod.Add(getBurnedInAnnotation()); iod.Add(getLossyImageCompression()); iod.Add(getLossyImageCompressionRatio()); iod.Add(getLossyImageCompressionMethod()); iod.Add(getPresentationLUTShape()); DicomMappingHelper.SetCatagory(iod, "Image"); //SOP Common iod.Add(getSOPClassUID()); iod.Add(getSOPInstanceUID()); iod.Add(getSpecificCharacterSet()); iod.Add(getInstanceCreationDate()); iod.Add(getInstanceCreationTime()); iod.Add(getInstanceCreatorUID()); iod.Add(getSOPInstanceStatus()); iod.Add(getSOPAuthorizationDateAndTime()); iod.Add(getSOPAuthorizationComment()); iod.Add(getAuthorizationEquipmentCertificationNumber()); DicomMappingHelper.SetCatagory(iod, "SOP Common"); return(iod); }
public IEnumerable <DicomCFindResponse> OnCFindRequest(DicomCFindRequest request) { string prefix = "[WorklistSCP] [" + session + "] "; Program.Log.Write(prefix + "Begin processing c-find request."); List <DicomCFindResponse> responses = new List <DicomCFindResponse>(); if (request.Level == DicomQueryRetrieveLevel.Worklist || request.Level == DicomQueryRetrieveLevel.Patient) { DataSet dsQC = DicomMappingHelper.CreateQCDataSet <MWLQueryCriteriaItem>(WorkListSCPService.Service.QCList, request.Dataset); WorklistSCPHelper.ModifyQCDataSet(WorkListSCPService.Service.QCList, dsQC); if (dsQC == null) { Program.Log.Write(prefix + "[WARNING] Process query criteria failed."); responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess)); return(responses); } DataSet dsQR = WorkListSCPService.Service.RequestData(Program.ConfigMgt.Config.Rule, dsQC); if (dsQR == null) { Program.Log.Write(prefix + "[WARNING] Query GC Gateway database failed."); responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess)); return(responses); } WorklistSCPHelper.GenerateRequestedProcedureID(dsQR, session); if (WorklistSCPHelper.SplitDataRow(dsQR)) { Program.Log.Write(prefix + "[INFORMATION] Found multiple values in code value and performed splitting."); } //fname = path + "\\DataSet_QR_2_SPLIT_" + DateTime.Now.Ticks.ToString() + ".xml"; //dsQR.WriteXml(fname); DElementListWrapper[] resultList = null; if (Program.ConfigMgt.Config.MergeElementList) { resultList = WorklistSCPHelper.CreateQRElementList <MWLQueryResultItem>(WorkListSCPService.Service.QRList, dsQR); } else { resultList = DicomMappingHelper.CreateQRElementList <MWLQueryResultItem>(WorkListSCPService.Service.QRList, dsQR); } if (resultList == null) { Program.Log.Write(prefix + "[WARNING] Process query result failed."); responses.Add(new DicomCFindResponse(request, DicomStatus.QueryRetrieveUnableToProcess)); return(responses); } int count = resultList.Length; if (count < 1) { Program.Log.Write(prefix + "[WARNING] No query result."); } else { int index = 1; foreach (DElementListWrapper eleList in resultList) { Program.Log.Write(prefix + "Sending query result " + (index++).ToString() + "/" + count.ToString()); DicomDataset result = new DicomDataset(); if (Program.ConfigMgt.Config.SendCharacterSetTag) { //eleList.List.Add(DHelper.CharacterSet); if (DHelper.iCharacterSet != null) { for (int i = 0; i < DHelper.iCharacterSet.Length; i++) { eleList.List.Add <string>(DicomTag.SpecificCharacterSet, DHelper.iCharacterSet[i]); } } } eleList.List.Add <string>(new DicomTag(0x0000, 0x0002), "1.2.840.10008.5.1.4.31"); DicomCFindResponse response = new DicomCFindResponse(request, DicomStatus.Pending); response.Dataset = eleList.List; responses.Add(response); } } } responses.Add(new DicomCFindResponse(request, DicomStatus.Success)); return(responses); }
public static DPath[] StorageDPath() { return(DicomMappingHelper.CreateDPath(Storage())); }
public void Refresh() { SourceField = DicomMappingHelper.DPath2DataColumnName(DPath); }
public StorageItem(DPath dcmPath, GWDataDBField gwField) { DPath = dcmPath; GWDataDBField = gwField; SourceField = DicomMappingHelper.DPath2DataColumnName(DPath); // DPath.Seperator + dcmPath.Path; }
public static void ModifyQCMappingList_CS <TC>(XCollection <TC> qcList, bool withBracket) where TC : QueryCriteriaItem, IDicomMappingItem, new() { if (qcList == null) { return; } bool found = true; while (found) { found = false; int count = qcList.Count; for (int index = 0; index < count; index++) { TC item = qcList[index]; IDicomMappingItem dcmItem = item as IDicomMappingItem; if (dcmItem == null) { continue; } if (dcmItem.DPath != null && dcmItem.DPath.VR == DVR.CS && dcmItem.DPath.Path == DicomMappingHelper.DataColumnName2DPath(item.SourceField)) { qcList.Remove(item); if (withBracket) // for GetRule() { qcList.Insert(index, DicomMappingHelper.GetRightBracket <TC>()); } for (int i = Program.ConfigMgt.Config.CSDivisionMAXCount - 1; i >= 0; i--) // for GetRule() and for NT Service to create QC DataSet { QueryCriteriaItem itemSub = dcmItem.Clone() as QueryCriteriaItem; itemSub.SourceField = itemSub.SourceField + "_" + i.ToString(); itemSub.Operator = QueryCriteriaOperator.Like; if (i == 0) { itemSub.Type = QueryCriteriaType.None; } else { itemSub.Type = QueryCriteriaType.Or; } qcList.Insert(index, itemSub); } if (withBracket) // for GetRule() { TC itemAnd = DicomMappingHelper.GetLeftBracket <TC>(); itemAnd.Type = QueryCriteriaType.And; qcList.Insert(index, itemAnd); } found = true; break; } } } }