示例#1
0
        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);
            }
        }
示例#2
0
        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);
        }