/// <summary> /// Open the observation form and let the user enter data. /// Sets the observe form to the patient of the activity not the global patient. /// </summary> /// <param name="context"></param> protected override void DoWork(CodeActivityContext context) { //Get parameter values bool markReviewed = MarkReviewed.Expression != null?MarkReviewed.Get(context) : false; Guid obdGuid = ObdGuid.Get(context); var parms = new UddWidgetParams { MarkReviewed = markReviewed, UddDataParams = { PatId1 = PatientId.Get(context) }, TabViewObdGuid = obdGuid, Mode = UddWidgetMode.Insert, IsFlowsheetDisplay = true }; var view = ObsDef.GetEntityByObdGuid(obdGuid, PM); var securityEnum = SecurityUtility.ByteArrayToEnum(view.Security_Mask); bool returnResult = ReturnResult.Get(context); if (!returnResult) { // open an instance of the UDD with a distinct instanceid from the standard UDD indstance id var host = new UddWidgetModalHost(parms, securityEnum, null, Strings.FlowsheetFormActivity_UddInstanceId); // Defect 6398 - Clicking OK in error window cause Mosaiq crashed when trigger IQ script (create assessment by QCL task) // if user doesn't have modify rights in Assessment/Labs/Vital signs // Defect 7055: Replace IsHandleCreated with !IsDisposed because the window's handle is never created at this point if (!host.IsDisposed) { var modalDialog = ModalDialog.Get(context); if (modalDialog) { host.ShowDialog(); } else { host.Show(); host.ForceToFront(); } } return; } DialogResult res = UddWidgetModalHost.ShowModal(parms, securityEnum, Strings.FlowsheetFormActivity_UddInstanceId); if (res == System.Windows.Forms.DialogResult.OK) { ObrId.Set(context, parms.UddDataParams.ObrId); } //Record output parameters DialogResult.Set(context, res); }
/// <summary> </summary> public override int GetHashCode() { int hashCode = base.GetHashCode() ^ ObdGuid.GetHashCode() ^ LowerLimit.GetHashCode() ^ UpperLimit.GetHashCode() ^ StringAlgorithm.GetHashCode(); if (DateRange != null) { hashCode ^= DateRange.GetHashCode(); } if (!String.IsNullOrEmpty(StringInput)) { hashCode ^= StringInput.GetHashCode(); } return(hashCode); }
/// <summary> /// Execute the activity and look up the flowsheet value. /// </summary> /// <param name="context"></param> /// <returns></returns> protected override void DoWork(CodeActivityContext context) { //Get Variables Guid obdGuid = ObdGuid.Get(context); int? patId1 = PatId1.Expression != null?PatId1.Get(context) : (int?)null; int?obrId = ObrId.Expression != null?ObrId.Get(context) : (int?)null; FlowsheetLookupMethod lookupMethod = LookupMethod.Expression != null ? LookupMethod.Get(context) : FlowsheetLookupMethod.Earliest; //Lookup entities ObsDef obsDefEntity = ObsDef.GetEntityByObdGuid(obdGuid, PM); ObsDataValueFormat.Set(context, obsDefEntity.ObsDefDataFormat); string queryString; switch (lookupMethod) { case FlowsheetLookupMethod.Earliest: queryString = String.Format(EARLIEST_QUERY, patId1.GetValueOrDefault(0), obsDefEntity.OBD_ID); break; case FlowsheetLookupMethod.Latest: queryString = String.Format(LATEST_QUERY, patId1.GetValueOrDefault(0), obsDefEntity.OBD_ID); break; case FlowsheetLookupMethod.ByObrId: queryString = String.Format(OBR_ID_QUERY, patId1.GetValueOrDefault(0), obsDefEntity.OBD_ID, obrId.GetValueOrDefault(0)); break; default: throw new InvalidOperationException("Invalid Lookup Operation"); } var pQuery = new PassthruRdbQuery(typeof(Observe), queryString); var result = PM.GetEntity <Observe>(pQuery, QueryStrategy.DataSourceOnly); //If we didn't find any observations if (result == result.NullEntity) { ObsResultFound.Set(context, false); return; } //Assign output information. ObsResultFound.Set(context, true); ObsDtTm.Set(context, result.ObsReqTip.Obs_DtTm); ObrIdValue.Set(context, result.OBR_SET_ID); if (result.ObsReqTip.Obs_DtTm != null) { // Recalculating for hours since don't want to mess with day calculation TimeSpan span = DateTime.Now - result.ObsReqTip.Obs_DtTm.Value; AgeInDays.Set(context, span.TotalDays); AgeInHours.Set(context, span.TotalHours); } //Always populate ObsString. Lab interface may populate this even if the ObsDef type is something //different. ObsStringValue.Set(context, result.Obs_String); if (result.ObsDefEntityOnObsChoice != null && !result.ObsDefEntityOnObsChoice.IsNullEntity) { ObsChoiceValue.Set(context, result.ObsDefEntityOnObsChoice.OBD_GUID); } else { ObsChoiceValue.Set(context, null); } //Set the appropriate output value. switch (result.ObsDefEntity.ObsDefDataFormat) { case ObsDefDataFormat.CheckBox: ObsCheckboxValue.Set(context, (result.Obs_Float == 0) ? false : true); break; case ObsDefDataFormat.Date: ObsDateTimeValue.Set(context, ClarionConversions.DateToDateTime(result.Obs_Float)); break; case ObsDefDataFormat.Time: ObsDateTimeValue.Set(context, ClarionConversions.TimeToDateTime(result.Obs_Float)); break; case ObsDefDataFormat.Numeric: ObsNumericValue.Set(context, result.Obs_Float); break; case ObsDefDataFormat.Choice: case ObsDefDataFormat.String: case ObsDefDataFormat.Memo: //Do nothing. Already string and choice already set set above the switch statement break; default: throw new InvalidOperationException( String.Format(Strings.Error_InvalidObsDefDataFormat, result.ObsDefEntity.ObsDefDataFormat)); } }