Exemplo n.º 1
0
        private void DoSaveRecordContent(object sender, EventArgs e)
        {
            frmRecord vFrmRecord = sender as frmRecord;

            if (!vFrmRecord.EmrView.IsChanged)
            {
                MessageBoxButtons messButton = MessageBoxButtons.OKCancel;
                DialogResult      dr         = MessageBox.Show("未发生变化,确定要执行保存?", "确认操作", messButton);
                if (dr != DialogResult.OK)
                {
                    return;
                }
            }

            RecordInfo vRecordInfo = vFrmRecord.Tag as RecordInfo;

            if (vFrmRecord.EmrView.Trace)
            {
                FServerInfo.DateTime = DateTime.Now;

                HashSet <SectionArea> vAreas = new HashSet <SectionArea> {
                    SectionArea.saPage
                };
                vFrmRecord.TraverseElement(DoTraverseItem, vAreas, TTravTag.WriteTraceInfo | TTravTag.HideTrace);
            }

            using (MemoryStream vSM = new MemoryStream())
            {
                vFrmRecord.EmrView.SaveToStream(vSM);

                if (vRecordInfo.ID > 0)  // 修改后保存
                {
                    EMRView.emrMSDB.ExecCommandEventHanler vEvent = delegate(SqlCommand sqlComm)
                    {
                        sqlComm.Parameters.AddWithValue("RID", vRecordInfo.ID);
                        sqlComm.Parameters.AddWithValue("LastUserID", UserInfo.ID);
                        sqlComm.Parameters.AddWithValue("content", vSM.GetBuffer());
                    };

                    if (emrMSDB.DB.ExecSql(emrMSDB.Sql_SaveRecordContent, vEvent))
                    {
                        vFrmRecord.EmrView.IsChanged = false;
                        SaveRecordStructure(vRecordInfo.ID, vFrmRecord, false);  // 提取并保存病历结构
                        MessageBox.Show("保存成功!");
                    }
                    else
                    {
                        MessageBox.Show("保存病历失败,请重试!\n" + emrMSDB.DB.ErrMsg);
                    }
                }
                else  // 保存新建的病历
                {
                    EMRView.emrMSDB.ExecCommandEventHanler vEvent = delegate(SqlCommand sqlComm)
                    {
                        sqlComm.CommandType = CommandType.StoredProcedure;
                        sqlComm.CommandText = "CreateInchRecord";
                        sqlComm.Parameters.AddWithValue("PatID", PatientInfo.PatID);
                        sqlComm.Parameters.AddWithValue("VisitID", PatientInfo.VisitID);
                        sqlComm.Parameters.AddWithValue("desid", vRecordInfo.DesID);
                        sqlComm.Parameters.AddWithValue("Name", vRecordInfo.RecName);
                        sqlComm.Parameters.AddWithValue("DT", vRecordInfo.DT);
                        sqlComm.Parameters.AddWithValue("DeptID", PatientInfo.DeptID);
                        sqlComm.Parameters.AddWithValue("CreateUserID", UserInfo.ID);
                        sqlComm.Parameters.AddWithValue("Content", vSM.GetBuffer());

                        //SqlParameter parOutput = sqlComm.Parameters.Add("@RecordID", SqlDbType.Int);
                        //parOutput.Direction = ParameterDirection.Output;
                        SqlParameter parRetrun = new SqlParameter("@RecordID", SqlDbType.Int);
                        parRetrun.Direction = ParameterDirection.ReturnValue;
                        sqlComm.Parameters.Add(parRetrun);

                        sqlComm.ExecuteNonQuery();
                        vRecordInfo.ID = int.Parse(parRetrun.Value.ToString());
                    };

                    if (emrMSDB.DB.ExecStoredProcedure(vEvent))
                    {
                        vFrmRecord.EmrView.IsChanged = false;
                        SaveRecordStructure(vRecordInfo.ID, vFrmRecord, true);  // 提取并保存病历结构
                        GetPatientRecordListUI();
                        MessageBox.Show("保存成功!");
                    }
                    else
                    {
                        MessageBox.Show("保存病历失败,请重试!\n" + emrMSDB.DB.ErrMsg);
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void 新建ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            RecordInfo vRecordInfo = null;
            int        vTemplateID = -1;

            frmTemplateList vFrmTempList = new frmTemplateList();

            vFrmTempList.ShowDialog();
            if (vFrmTempList.DialogResult == System.Windows.Forms.DialogResult.OK)
            {
                vTemplateID = vFrmTempList.TemplateID;

                vRecordInfo         = new RecordInfo();
                vRecordInfo.DesID   = vFrmTempList.DesID;
                vRecordInfo.RecName = vFrmTempList.RecordName;
                vRecordInfo.DT      = vFrmTempList.RecordDateTime;
            }
            else
            {
                return;
            }

            using (MemoryStream vSM = new MemoryStream())
            {
                emrMSDB.DB.GetTemplateContent(vTemplateID, vSM);  // 取模板内容(流)

                TabPage   vPage      = null;
                frmRecord vFrmRecord = null;

                NewPageAndRecord(vRecordInfo, ref vPage, ref vFrmRecord);
                emrMSDB.DB.GetDataSetElement(vRecordInfo.DesID);

                if (vSM.Length > 0)  // 模板内容不为空
                {
                    // 获取当前数据集有哪些数据可以被替换的数据
                    // 放到本地DataTable:FDataElementSetMacro中
                    PrepareSyncData(vRecordInfo.DesID);

                    // 赋值模板加载时替换数据元内容的方法
                    vFrmRecord.EmrView.OnSyncDeItem = DoSyncDeItem;
                    try
                    {
                        vFrmRecord.EmrView.BeginUpdate();
                        try
                        {
                            // 加载模板,加载过程会调用DoSyncDeItem
                            // 给每一个数据元到FDataElementSetMacro中找
                            // 自己要替换为什么内容的机会
                            vFrmRecord.EmrView.LoadFromStream(vSM);

                            // 替换数据组的内容
                            SyncDeGroupByStruct(vFrmRecord.EmrView);
                            vFrmRecord.EmrView.FormatData();
                            vFrmRecord.EmrView.IsChanged = true;
                        }
                        finally
                        {
                            vFrmRecord.EmrView.EndUpdate();
                        }
                    }
                    finally
                    {
                        vFrmRecord.EmrView.OnSyncDeItem = null;
                    }
                }

                tabRecord.SelectedTab = vPage;
            }
        }