private void AddCommitItem(DicomDataSet ds, long tag, StorageCommit.StorageCommit commit) { DicomElement rppss = null; DicomElement element; rppss = ds.FindFirstElement(null, tag, true); // If SameStudy goes to false, it is false for the entire commit if (commit.SameStudy) { commit.SameStudy = rppss != null; } commit.TransactionUID = ds.GetValue <string>(DicomTag.TransactionUID, string.Empty); element = ds.GetChildElement(rppss, false); while (element != null) { DicomElement child = ds.GetChildElement(element, true); if (child != null) { StorageCommitItem item = new StorageCommitItem(); item.SOPClassUID = ds.GetValue <string>(child, true, DicomTag.ReferencedSOPClassUID, string.Empty); item.SOPInstanceUID = ds.GetValue <string>(child, true, DicomTag.ReferencedSOPInstanceUID, string.Empty); commit.Items.Add(item); } element = ds.GetNextElement(element, true, true); } }
private DicomDataSet BuildDataset(DicomClient client, StorageCommit.StorageCommit commit, string serverAE) { DicomDataSet ds = new DicomDataSet(null); DicomElement success = null; DicomElement failed = null; ds.Initialize(DicomClassType.Undefined, DicomDataSetInitializeType.ExplicitVRLittleEndian); ds.InsertElementAndSetValue(DicomTag.TransactionUID, commit.TransactionUID); ds.InsertElementAndSetValue(DicomTag.RetrieveAETitle, serverAE); if (commit.SameStudy && !commit.IsSameStudy()) { Logger.Global.Error("Storage Commit AddIn", "N-EVENT-REPORT: Referenced SOP Sequence does not have same StudyInstanceUID"); foreach (StorageCommitItem item in commit.Items) { item.Status = DicomCommandStatusType.ProcessingFailure; } } if (commit.SuccessCount > 0) { success = ds.InsertElement(null, true, DicomTag.ReferencedSOPSequence, DicomVRType.SQ, true, 0); } if (commit.FailedCount > 0) { failed = ds.InsertElement(null, true, DicomTag.FailedSOPSequence, DicomVRType.SQ, true, 0); } foreach (StorageCommitItem item in commit.Items) { DicomElement sequence = null; DicomElement sequenceItem = null; if (item.Status == DicomCommandStatusType.Success) { sequence = success; } else { sequence = failed; } sequenceItem = ds.InsertElement(sequence, true, DicomTag.Item, DicomVRType.SQ, false, -1); ds.InsertElementAndSetValue(sequenceItem, true, DicomTag.ReferencedSOPClassUID, item.SOPClassUID); ds.InsertElementAndSetValue(sequenceItem, true, DicomTag.ReferencedSOPInstanceUID, item.SOPInstanceUID); if (sequence == failed) { ds.InsertElementAndSetValue(sequenceItem, true, DicomTag.FailureReason, Convert.ToInt16(item.Status)); } } return(ds); }