コード例 #1
0
        /// <summary>
        /// Ensures an update event is properly represented for a merge
        /// </summary>
        public RegistryStoreResult Merge(ComponentModel.RegistrationEvent mergeEvent, SVC.Core.Services.DataPersistenceMode mode)
        {
            mergeEvent.EventClassifier = RegistrationEventType.Register;
            mergeEvent.Mode            = RegistrationEventType.Replace;

            // A merge must have at least one subjectOf
            var subjectOf = mergeEvent.FindAllComponents(HealthServiceRecordSiteRoleType.SubjectOf);

            if (subjectOf.Count == 0)
            {
                throw new ArgumentException("mergeEvent", "Merge event must have at least one subjectOf component");
            }

            // Each subjectOf shall have a replacement
            foreach (Person cntr in subjectOf)
            {
                var rplc = cntr.FindAllComponents(HealthServiceRecordSiteRoleType.ReplacementOf).OfType <PersonRegistrationRef>();
                if (rplc.Count() == 0)
                {
                    throw new InvalidOperationException("Merge subjectOf has no replacement marker");
                }
            }

            return(this.Update(mergeEvent, mode));
        }
コード例 #2
0
 public RegistryStoreResult UnMerge(ComponentModel.RegistrationEvent evt, SVC.Core.Services.DataPersistenceMode mode)
 {
     throw new NotImplementedException();
 }
コード例 #3
0
        /// <summary>
        /// Update the registration event
        /// </summary>
        public RegistryStoreResult Update(ComponentModel.RegistrationEvent evt, SVC.Core.Services.DataPersistenceMode mode)
        {
            RegistryStoreResult retVal = new RegistryStoreResult();


            try
            {
                // Can't find persistence
                if (this.m_persistenceService == null)
                {
                    retVal.Details.Add(new PersistenceResultDetail(ResultDetailType.Error, "Couldn't locate an implementation of a PersistenceService object, storage is aborted", null));
                    return(null);
                }
                else if (evt == null)
                {
                    retVal.Details.Add(new PersistenceResultDetail(ResultDetailType.Error, "Can't register null health service record data", null));
                    return(null);
                }
                else if (retVal.Details.Count(o => o.Type == ResultDetailType.Error) > 0)
                {
                    retVal.Details.Add(new PersistenceResultDetail(ResultDetailType.Error, "Won't attempt to persist invalid message", null));
                    return(null);
                }

                // Call the dss
                if (this.m_decisionSupportService != null)
                {
                    foreach (var iss in this.m_decisionSupportService.RecordPersisting(evt))
                    {
                        retVal.Details.Add(new DetectedIssueResultDetail(iss.Priority == SVC.Core.Issues.IssuePriorityType.Error ? ResultDetailType.Error : ResultDetailType.Warning, iss.Text, (string)null, iss));
                    }
                }

                // Any errors?
                if (retVal.Details.Count(o => o.Type == ResultDetailType.Error) > 0)
                {
                    retVal.Details.Add(new PersistenceResultDetail(ResultDetailType.Error, "Won't attempt to persist message due to detected issues", null));
                }

                // Persist
                retVal.VersionId = this.m_persistenceService.UpdateContainer(evt, mode);

                retVal.VersionId.UpdateMode = UpdateModeType.Update;

                // Call the dss
                if (this.m_decisionSupportService != null)
                {
                    this.m_decisionSupportService.RecordPersisted(evt);
                }

                // Call sub
                if (this.m_subscriptionService != null)
                {
                    this.m_subscriptionService.PublishContainer(evt);
                }

                // Register the document set if it is a document
                if (retVal != null && this.m_registrationService != null && !this.m_registrationService.RegisterRecord(evt, mode))
                {
                    retVal.Details.Add(new PersistenceResultDetail(ResultDetailType.Warning, "Wasn't able to register event in the event registry, event exists in repository but not in registry. You may not be able to query for this event", null));
                }
            }
            catch (DuplicateNameException ex) // Already persisted stuff
            {
                Trace.TraceError(ex.ToString());
                retVal.Details.Add(new PersistenceResultDetail(ResultDetailType.Error, m_localeService.GetString("DTPE005"), ex));
            }
            catch (MissingPrimaryKeyException ex) // Already persisted stuff
            {
                Trace.TraceError(ex.ToString());
                retVal.Details.Add(new PersistenceResultDetail(ResultDetailType.Error, m_localeService.GetString("DTPE005"), ex));
            }
            catch (ConstraintException ex)
            {
                Trace.TraceError(ex.ToString());
                retVal.Details.Add(new PersistenceResultDetail(ResultDetailType.Error, m_localeService.GetString("DTPE005"), ex));
            }
            catch (Exception ex)
            {
                retVal.Details.Add(new ResultDetail(ResultDetailType.Error, ex.Message, ex));
            }
            return(retVal);
        }