Std数据M的荣光

2023-05-16

对检验的上线,实施和开发的大部分时间都用在做基础数据和联设备对通道这些。对相同的仪器每次都有做项目数据,对通道那些我一直深有感触,一直在构思怎么减少仪器对通道这些做数据的工作量。奈何以前只是浅显的使用M,最开始几年用cache都是主要用C#加sql操作数据库。最近对M感悟深入了可以实现此目标了。

首先需要知道的是M里的move命令,把GLOBAL拷贝到一个新节点。然后知道怎么查出所有的表。再结合拼串的模式访问GLOBAL。这样就能用上面技术快速把一个库的所有基础数据表构造得到一个Std的GLOBAL。然后基于这个Std实现逻辑做大颗粒度的数据导入功能。

按下面代码得到和正式数据同结构的Std数据,这就是咱们的标准数据

/// 把当前库(数据标准的库)的基础数据生成标准数据globle,然后把生成的globle当基准数据供界面选择要哪些仪器或者医嘱的数据
/// w ##Class(OTH.DHCStdData).MakeStdGloble()
ClassMethod MakeStdGloble()
{
	w !,"是否用当前库数据生成标准数据(Y/N)?"
	r *R
	w !,"R:",$C(R)
	s R=$zcvt($C(R),"U")
	i R'="Y" q
	//删除老数据
	k ^LisDboStd
	s rset = ##class(%ResultSet).%New()
	d rset.Prepare("select TABLE_NAME  from information_schema.TABLES WHERE TABLE_SCHEMA='dbo' and TABLE_TYPE ='BASE TABLE'")
	s exeret=rset.Execute()
	s colCount=rset.GetColumnCount()
	s dealNum=0
    While(rset.Next())
    {
        s colField=rset.GetColumnName(1)
        s ColValue=rset.GetDataByName(colField)
        //替换下划线
        s tableName=$tr(ColValue,"_")
        s MaxRowID=0
        i $d(@("^dbo."_tableName_"D")) d
        .s MaxRowID=(@("^dbo."_tableName_"D"))
        //大于20000的不认为是基础数据
        i (MaxRowID>20000) continue
        //大数据表
        i (MaxRowID>2000) d
        .zw MaxRowID
        .zw tableName
        x ("m ^LisDboStd("""_tableName_"D"")=^dbo."_tableName_"D")
        x ("m ^LisDboStd("""_tableName_"I"")=^dbo."_tableName_"I")
    }
    q "构造完成,请导出:^LisDboStd"
}

然后基于Std结构实现拷贝导入的逻辑

/// 导入仪器数据,前台界面调用此方法导入仪器相关数据。包括仪器、仪器关联项目、通道等各种和仪器相关数据、项目参考范围、项目选项
/// RowIDS:源数据主键
/// WGMDR:目标工作小组
/// w ##Class(OTH.DHCStdData).InportMachDataMTHD(106,"","","","","","","","","","","","","","8280^1^0^16^1")
ClassMethod InportMachDataMTHD(RowIDS As %String(MAXLEN=99999999), WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
	s RowIDS=$g(RowIDS)
	s WGMDR=$g(WGMDR)
	s NewCode=$g(NewCode)
	//托管事务拷贝医嘱相关数据
	q ##Class(LIS.WS.DHCLISServiceBase).DeclarativeTrans("OTH.DHCStdData","InportMachDataDo",RowIDS, WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions)
}

/// 导入医嘱数据,前台界面调研此方法导入医嘱相关数据。包括医嘱、组合套布局、项目、项目范围、鉴定关联、鉴定项目包等各种和医嘱相关的基础数据
/// RowIDS:源数据主键
/// WGMDR:目标工作小组
/// w ##Class(OTH.DHCStdData).InportTestSetDataMTHD(641,"","","","","","","","","","","","","","8280^1^0^16^1")
ClassMethod InportTestSetDataMTHD(RowIDS As %String(MAXLEN=99999999), WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
	s RowIDS=$g(RowIDS)
	s WGMDR=$g(WGMDR)
	s NewCode=$g(NewCode)
	//托管事务拷贝医嘱相关数据
	q ##Class(LIS.WS.DHCLISServiceBase).DeclarativeTrans("OTH.DHCStdData","InportTestSetDataDo",RowIDS, WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions)
	q ""
}

/// 尝试拷贝鉴定过程培项目包数据
/// StdDR:标准数据主键
/// CodeStart:代码是否加前缀,不加就是空
/// Sessions:会话
ClassMethod TryCopyIDPTestCodePak(Sessions)
{
	s FCode="" f  s FCode=$o(^LisDboStd("BTIDPTestCodePakI","IndexCode",FCode)) q:FCode=""  d
	.s RowID="" f  s RowID=$o(^LisDboStd("BTIDPTestCodePakI","IndexCode",FCode,RowID)) q:RowID=""  d
	..d ..TryCopyOneIDPTestCodePak(RowID,"",Sessions)
	q ""
}

/// 导入仪器数据,前台界面调用此方法导入仪器相关数据。包括仪器、仪器关联项目、通道等各种和仪器相关数据、项目参考范围、项目选项
/// RowIDS:源数据主键
/// WGMDR:目标工作小组
/// w ##Class(OTH.DHCStdData).InportMachDataMTHD()
ClassMethod InportMachDataDo(RowIDS As %String(MAXLEN=99999999), WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
	s RowIDS=$g(RowIDS)
	s WGMDR=$g(WGMDR)
	s NewCode=$g(NewCode)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	
	s RetMsg=""
	//循环导入每个数据
	f i=1:1:$l(RowIDS,"^") d
	.s RowID=$p(RowIDS,"^",i)
	.s RowData=$g(^LisDboStd("BTMIMachineParameterD",RowID))
	.s Code=$lg(RowData,2)
	.i $l(NewCode) s Code=NewCode
	.s CodeI=##Class(LIS.Util.Common).IndexData(Code)
	.i $d(^dbo.BTMIMachineParameterI("IndexCode",HospitalDR,CodeI)) d  q
	..s RetMsg="当前库已经有代码为:"_Code_"的仪器数据。"
	.s WorkGroupMachineDR=$lg(RowData,6)
	.s NewWGMDR=WGMDR
	.i '$l(NewWGMDR) d
	..//尝试拷贝工作小组,得到拷贝后的主键
	..s NewWGMDR=..TryCopyWGM(WorkGroupMachineDR,"",Sessions)
	.//复制仪器数据
	.s NewMiObj=##Class(dbo.BTMIMachineParameter).%New()
	.s NewMiObj.Code=Code
	.s NewMiObj.CName=$lg(RowData,3)
	.s NewMiObj.HospitalDR=HospitalDR
	.s NewMiObj.LName=$lg(RowData,5)
	.s NewMiObj.WorkGroupMachineDR=NewWGMDR
	.s RoomDR=$lg(RowData,7)
	.i $l(RoomDR) d
	..s RoomDR=..TryCopyRoom(RoomDR,"",Sessions)
	.s NewMiObj.RoomDR=RoomDR
	.s NewMiObj.RegisterDeviceDR=""
	.s NewMiObj.IPAddress=$lg(RowData,9)
	.s NewMiObj.PortNo=$lg(RowData,10)
	.s NewMiObj.CommDirection=$lg(RowData,11)
	.s NewMiObj.DelimiterForTests=$lg(RowData,12)
	.s NewMiObj.DelimiterForResults=$lg(RowData,13)
	.s NewMiObj.DelimiterForAnt=$lg(RowData,14)
	.s NewMiObj.DelimiterForSen=$lg(RowData,15)
	.s NewMiObj.IFProgram=$lg(RowData,16)
	.s NewMiObj.ComPort=$lg(RowData,17)
	.s NewMiObj.BaudRate=$lg(RowData,18)
	.s NewMiObj.DataBits=$lg(RowData,19)
	.s NewMiObj.StopBits=$lg(RowData,20)
	.s NewMiObj.Parity=$lg(RowData,21)
	.s NewMiObj.DeviceCode=$lg(RowData,22)
	.s NewMiObj.Sequence=$lg(RowData,23)
	.s NewMiObj.Active=$lg(RowData,24)
	.s NewMiObj.IsStart=$lg(RowData,25)
	.s NewMiObj.OpMessage=$lg(RowData,26)
	.s NewMiObj.JobID=$lg(RowData,27)
	.s NewMiObj.Serialnumber=$lg(RowData,28)
	.s NewMiObj.LicenseKey=""
	.s NewMiObj.ViewQcMap=$lg(RowData,30)
	.s NewMiObj.IsSendPanic=$lg(RowData,31)
	.s NewMiObj.AutoAcceptUserDR=""
	.s NewMiObj.AutoEntryUserDR=""
	.s NewMiObj.AutoAuthUserDR=""
	.s NewMiObj.IsChgTranEpis=$lg(RowData,35)
	.s NewMiObj.LinkWGMachines=""
	.s NewMiObj.StartWebService=""
	.s NewMiObj.LastStartIP=""
	.s NewMiObj.AutoSendMidReport=$lg(RowData,39)
	.s NewMiObj.IsAllowScanedTC=$lg(RowData,40)
	.s sc=NewMiObj.%Save()
	.i ('$SYSTEM.Status.IsOK(sc)) d
	..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器失败:"_$SYSTEM.Status.GetErrorText(sc))
	.//尝试拷贝仪器项目
	.d ..TryCopyMIMachineTestCode(RowID,NewMiObj.RowID,Sessions)
	.//尝试拷贝仪器项目翻译
	.d ..TryCopyMIMachineTestCodeTrans(RowID,NewMiObj.RowID,Sessions)
	
	.//尝试拷贝仪器关联药敏结果
	.d ..TryCopyMIMachineMicroSens(RowID,NewMiObj.RowID,Sessions)
	.//尝试拷贝仪器关联细菌
	.d ..TryCopyMIMachineMicroBugs(RowID,NewMiObj.RowID,Sessions)
	.//尝试拷贝仪器关联抗生素
	.d ..TryCopyMIMachineMicroAntiBio(RowID,NewMiObj.RowID,Sessions)
	q RetMsg
}

/// 导入医嘱数据
/// RowIDS:源数据主键
/// WGMDR:目标工作小组
/// w ##Class(OTH.DHCStdData).InportTestSetDataMTHD()
ClassMethod InportTestSetDataDo(RowIDS As %String(MAXLEN=99999999), WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
	s RowIDS=$g(RowIDS)
	s WGMDR=$g(WGMDR)
	s NewCode=$g(NewCode)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)

	//循环导入每个数据
	f i=1:1:$l(RowIDS,"^") d
	.s RowID=$p(RowIDS,"^",i)
	.s RowData=$g(^LisDboStd("BTTestSetD",RowID))
	.s Code=$lg(RowData,2)
	.i $l(NewCode) s Code=NewCode
	.s CodeI=##Class(LIS.Util.Common).IndexData(Code)
	.i $d(^dbo.BTTestSetI("IndexCode",HospitalDR,CodeI)) d  q
	..s RetMsg="当前库已经有代码为:"_Code_"的医嘱数据。"
	.s WorkGroupMachineDR=$lg(RowData,13)
	.i '$l(WorkGroupMachineDR) s WorkGroupMachineDR=$o(^LisDboStd("BTTestSetWorkGroupMachineI","IndexMaster",RowID,""))
	.s NewWGMDR=WGMDR
	.i ('$l(NewWGMDR)),$l(WorkGroupMachineDR) d
	..//尝试拷贝工作小组,得到拷贝后的主键
	..s NewWGMDR=..TryCopyWGM(WorkGroupMachineDR,"",Sessions)
	.//没关联小组的医嘱不导入
	.i '$l(NewWGMDR) q
	.s SpeciesDR=$lg(RowData,8)
	.i $l(SpeciesDR) d
	..//尝试拷贝性别数据,得到拷贝后的主键
	..s SpeciesDR=..TryCopySpecies(SpeciesDR,"",Sessions)
	.s SpecimenDR=$lg(RowData,10)
	.i $l(SpecimenDR) d
	..//尝试拷贝性别数据,得到拷贝后的主键
	..s SpecimenDR=..TryCopySpecimen(SpecimenDR,"",Sessions)
	.s ContainerDR=$lg(RowData,11)
	.i $l(ContainerDR) d
	..//尝试拷贝容器数据,得到拷贝后的主键
	..s ContainerDR=..TryCopyContainer(ContainerDR,"",Sessions)
	.s CostItemDR=$lg(RowData,14)
	.i $l(CostItemDR) d
	..//尝试拷贝收费项数据,得到拷贝后的主键
	..s CostItemDR=..TryCopyCostItem(CostItemDR,"",Sessions)
	.//复制医嘱数据
	.s NewTestSetObj=##Class(dbo.BTTestSet).%New()
	.s NewTestSetObj.Code=Code
	.s NewTestSetObj.CName=$lg(RowData,3)
	.s NewTestSetObj.HospitalDR=HospitalDR
	.s NewTestSetObj.EName=$lg(RowData,5)
	.s NewTestSetObj.Description=$lg(RowData,6)
	.s NewTestSetObj.HISCode=$lg(RowData,7)
	.s NewTestSetObj.SpeciesDR=SpeciesDR
	.s NewTestSetObj.Urgent=$lg(RowData,9)
	.s NewTestSetObj.SpecimenDR=SpecimenDR
	.s NewTestSetObj.ContainerDR=ContainerDR
	.s NewTestSetObj.MergeType=$lg(RowData,12)
	.s NewTestSetObj.WorkGroupMachineDR=NewWGMDR
	.s NewTestSetObj.CostItemDR=CostItemDR
	.s NewTestSetObj.Sequence=$lg(RowData,17)
	.s NewTestSetObj.Active=$lg(RowData,18)
	.s NewTestSetObj.ReportType=$lg(RowData,19)
	.s NewTestSetObj.LinkStr=$lg(RowData,20)
	.s NewTestSetObj.LinkType=$lg(RowData,21)
	.s NewTestSetObj.WorkGroupDR=WGDR
	.s NewTestSetObj.ExtraFlag=$lg(RowData,23)
	.s NewTestSetObj.ReportRemark=$lg(RowData,24)
	.s NewTestSetObj.MICDefDrugRule=$lg(RowData,25)
	.s NewTestSetObj.PositiveAlarn=$lg(RowData,26)
	.s NewTestSetObj.WorkRatio=$lg(RowData,27)
	.s NewTestSetObj.ReportShowType=$lg(RowData,28)
	.s NewTestSetObj.ReceivableFee=$lg(RowData,29)
	.s NewTestSetObj.TestContent=$lg(RowData,30)
	.s NewTestSetObj.TestMethod=$lg(RowData,31)
	.s NewTestSetObj.TestConclusion=$lg(RowData,32)
	.s NewTestSetObj.CollectPrompt=$lg(RowData,33)
	.s NewTestSetObj.ReportPrompt=$lg(RowData,34)
	.s NewTestSetObj.EpisRuleName=$lg(RowData,36)
	.s sc=NewTestSetObj.%Save()
	.i ('$SYSTEM.Status.IsOK(sc)) d
	..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝医嘱失败:"_$SYSTEM.Status.GetErrorText(sc))
	.//拷贝医嘱相关的其他数据
	.d ..TryCopyTestSetOtherData(RowID,NewTestSetObj.RowID,NewWGMDR,Sessions)
	q ""
}

/// 尝试拷贝仪器关联抗生素
/// StdMi:标准仪器主键
/// Mi:仪器主键
ClassMethod TryCopyMIMachineMicroAntiBio(StdMi, Mi, Sessions)
{
	s StdMi=$g(StdMi)
	s Mi=$g(Mi)
	s Sessions=$g(Sessions)
	s StdAntibioticsDR="" f  s StdAntibioticsDR=$o(^LisDboStd("BTMIMachineMicroAntiBioI","IndexMaster",StdMi,StdAntibioticsDR)) q:StdAntibioticsDR=""  d
	.s MachineAntiBiotic="" f  s MachineAntiBiotic=$o(^LisDboStd("BTMIMachineMicroAntiBioI","IndexMaster",StdMi,StdAntibioticsDR,MachineAntiBiotic)) q:MachineAntiBiotic=""  d
	..s RowID="" f  s RowID=$o(^LisDboStd("BTMIMachineMicroAntiBioI","IndexMaster",StdMi,StdAntibioticsDR,MachineAntiBiotic,RowID)) q:RowID=""  d
	...s RowData=$g(^LisDboStd("BTMIMachineMicroAntiBioD",RowID))
	...//尝试拷贝抗生素数据
	...s AntibioticsDR=..TryCopyAntibiotics(StdAntibioticsDR,"",Sessions)
	...i '$d(^dbo.BTMIMachineMicroAntiBioI("IndexMaster",Mi,AntibioticsDR,MachineAntiBiotic)) d
	....s NewObj=##Class(dbo.BTMIMachineMicroAntiBio).%New()
	....s NewObj.MachineParameterDR=Mi
	....s NewObj.MachineAntiBiotic=$lg(RowData,3)
	....s NewObj.AntibioticsDR=AntibioticsDR
	....s sc=NewObj.%Save()
	....i ('$SYSTEM.Status.IsOK(sc)) d
	.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器关联抗生素失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 尝试拷贝仪器关联细菌
/// StdMi:标准仪器主键
/// Mi:仪器主键
ClassMethod TryCopyMIMachineMicroBugs(StdMi, Mi, Sessions)
{
	s StdMi=$g(StdMi)
	s Mi=$g(Mi)
	s Sessions=$g(Sessions)
	s StdOrganismDR="" f  s StdOrganismDR=$o(^LisDboStd("BTMIMachineMicroBugsI","IndexMaster",StdMi,StdOrganismDR)) q:StdOrganismDR=""  d
	.s MachineBug="" f  s MachineBug=$o(^LisDboStd("BTMIMachineMicroBugsI","IndexMaster",StdMi,StdOrganismDR,MachineBug)) q:MachineBug=""  d
	..s RowID="" f  s RowID=$o(^LisDboStd("BTMIMachineMicroBugsI","IndexMaster",StdMi,StdOrganismDR,MachineBug,RowID)) q:RowID=""  d
	...s RowData=$g(^LisDboStd("BTMIMachineMicroBugsD",RowID))
	...//尝试拷贝细菌数据
	...s OrganismDR=..TryCopyOrganism(StdOrganismDR,"",Sessions)
	...i '$d(^dbo.BTMIMachineMicroBugsI("IndexMaster",Mi,OrganismDR,MachineBug)) d
	....s NewObj=##Class(dbo.BTMIMachineMicroBugs).%New()
	....s NewObj.MachineParameterDR=Mi
	....s NewObj.MachineBug=$lg(RowData,3)
	....s NewObj.OrganismDR=OrganismDR
	....s sc=NewObj.%Save()
	....i ('$SYSTEM.Status.IsOK(sc)) d
	.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器关联细菌失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 尝试拷贝仪器关联药敏
/// StdMi:标准仪器主键
/// Mi:仪器主键
ClassMethod TryCopyMIMachineMicroSens(StdMi, Mi, Sessions)
{
	s StdMi=$g(StdMi)
	s Mi=$g(Mi)
	s Sessions=$g(Sessions)
	s StdSensitivityDR="" f  s StdSensitivityDR=$o(^LisDboStd("BTMIMachineMicroSensI","IndexMaster",StdMi,StdSensitivityDR)) q:StdSensitivityDR=""  d
	.s MachineSensitivity="" f  s MachineSensitivity=$o(^LisDboStd("BTMIMachineMicroSensI","IndexMaster",StdMi,StdSensitivityDR,MachineSensitivity)) q:MachineSensitivity=""  d
	..s RowID="" f  s RowID=$o(^LisDboStd("BTMIMachineMicroSensI","IndexMaster",StdMi,StdSensitivityDR,MachineSensitivity,RowID)) q:RowID=""  d
	...s RowData=$g(^LisDboStd("BTMIMachineMicroSensD",RowID))
	...//尝试拷贝药敏结果数据
	...s SensitivityDR=..TryCopySensitivity(StdSensitivityDR,"",Sessions)
	...i '$d(^dbo.BTMIMachineMicroSensI("IndexMaster",Mi,SensitivityDR,MachineSensitivity)) d
	....s NewObj=##Class(dbo.BTMIMachineMicroSens).%New()
	....s NewObj.MachineParameterDR=Mi
	....s NewObj.MachineSensitivity=$lg(RowData,3)
	....s NewObj.SensitivityDR=SensitivityDR
	....s sc=NewObj.%Save()
	....i ('$SYSTEM.Status.IsOK(sc)) d
	.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器关联药敏结果失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 尝试拷贝仪器项目稀释倍数
/// StdMiTsDR:标准仪器项目主键
/// MiTsDR:仪器项目主键
ClassMethod TryCopyMIMachineTestCodeDil(StdMiTsDR, MiTsDR, Sessions)
{
	s StdMiTsDR=$g(StdMiTsDR)
	s MiTsDR=$g(MiTsDR)
	s Sessions=$g(Sessions)
	s Result="" f  s Result=$o(^LisDboStd("BTMIMachineTestCodeDilI","IndexMaster",StdMiTsDR,Result)) q:Result=""  d
	.s RowID="" f  s RowID=$o(^LisDboStd("BTMIMachineTestCodeDilI","IndexMaster",StdMiTsDR,Result,RowID)) q:RowID=""  d
	..s RowData=$g(^LisDboStd("BTMIMachineTestCodeDilD",RowID))
	..i '$d(^dbo.BTMIMachineTestCodeDilI("IndexMaster",MiTsDR,Result)) d
	...s NewObj=##Class(dbo.BTMIMachineTestCodeDil).%New()
	...s NewObj.MachineTestCodeDR=MiTsDR
	...s NewObj.DilCode=$lg(RowData,3)
	...s NewObj.DilName=$lg(RowData,4)
	...s sc=NewObj.%Save()
	...i ('$SYSTEM.Status.IsOK(sc)) d
	....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器项目稀释倍数失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 尝试拷贝仪器项目翻译信息
/// StdMi:标准仪器主键
/// Mi:仪器主键
ClassMethod TryCopyMIMachineTestCodeTrans(StdMi, Mi, Sessions)
{
	s StdMi=$g(StdMi)
	s Mi=$g(Mi)
	s Sessions=$g(Sessions)
	s Result="" f  s Result=$o(^LisDboStd("BTMIMachineTestCodeTransI","IndexMaster",StdMi,Result)) q:Result=""  d
	.s RowID="" f  s RowID=$o(^LisDboStd("BTMIMachineTestCodeTransI","IndexMaster",StdMi,Result,RowID)) q:RowID=""  d
	..s RowData=$g(^LisDboStd("BTMIMachineTestCodeTransD",RowID))
	..i '$d(^dbo.BTMIMachineTestCodeTransI("IndexMaster",Mi,Result)) d
	...s NewObj=##Class(dbo.BTMIMachineTestCodeTrans).%New()
	...s NewObj.MachineParameterDR=Mi
	...s NewObj.Result=$lg(RowData,3)
	...s NewObj.NewResult=$lg(RowData,4)
	...s sc=NewObj.%Save()
	...i ('$SYSTEM.Status.IsOK(sc)) d
	....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器项目翻译失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 尝试拷贝仪器项目信息
/// StdMi:标准仪器主键
/// Mi:仪器主键
ClassMethod TryCopyMIMachineTestCode(StdMi, Mi, Sessions)
{
	s StdMi=$g(StdMi)
	s Mi=$g(Mi)
	s Sessions=$g(Sessions)
	s StdTestCodeDR="" f  s StdTestCodeDR=$o(^LisDboStd("BTMIMachineTestCodeI","IndexMaster",StdMi,StdTestCodeDR)) q:StdTestCodeDR=""  d
	.s StdResultChannel="" f  s StdResultChannel=$o(^LisDboStd("BTMIMachineTestCodeI","IndexMaster",StdMi,StdTestCodeDR,StdResultChannel)) q:StdResultChannel=""  d
	..s RowID="" f  s RowID=$o(^LisDboStd("BTMIMachineTestCodeI","IndexMaster",StdMi,StdTestCodeDR,StdResultChannel,RowID)) q:RowID=""  d
	...s RowData=$g(^LisDboStd("BTMIMachineTestCodeD",RowID))
	...s TestCodeDR=..TryCopyTestCode(StdTestCodeDR,"",Sessions)
	...i '$d(^dbo.BTMIMachineTestCodeI("IndexMaster",Mi,TestCodeDR,StdResultChannel)) d
	....s NewObj=##Class(dbo.BTMIMachineTestCode).%New()
	....s NewObj.MachineParameterDR=Mi
	....s NewObj.TestCodeDR=TestCodeDR
	....s NewObj.UPChannel=$lg(RowData,4)
	....s NewObj.ResultChannel=$lg(RowData,5)
	....s NewObj.Scale=$lg(RowData,6)
	....s NewObj.Active=$lg(RowData,7)
	....s NewObj.IsNotQC=$lg(RowData,8)
	....s NewObj.QCType=$lg(RowData,9)
	....s sc=NewObj.%Save()
	....i ('$SYSTEM.Status.IsOK(sc)) d
	.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器项目失败:"_$SYSTEM.Status.GetErrorText(sc))
	....//尝试拷贝仪器项目稀释倍数
	....d ..TryCopyMIMachineTestCodeDil(RowID,NewObj.RowID,Sessions)
	q ""
}

/// 拷贝医嘱相关的其他数据
ClassMethod TryCopyTestSetOtherData(StdTsDR, TsDR, WGMDR, Sessions)
{
	s StdTsDR=$g(StdTsDR)
	s TsDR=$g(TsDR)
	s WGMDR=$g(WGMDR)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	//检测生成医嘱关联工作小组
	i '$d(^dbo.BTTestSetWorkGroupMachineI("IndexMaster",TsDR,WGMDR)) d
	.s NewTsWGMObj=##Class(dbo.BTTestSetWorkGroupMachine).%New()
	.s NewTsWGMObj.Active=1
	.s NewTsWGMObj.AlowedPrint=1
	.s NewTsWGMObj.IsDefault=1
	.s NewTsWGMObj.NoAlowedFormula=""
	.s NewTsWGMObj.Sequence=99
	.s NewTsWGMObj.TestSetDR=TsDR
	.s NewTsWGMObj.WorkGroupMachineDR=WGMDR
	.s sc=NewTsWGMObj.%Save()
	.i ('$SYSTEM.Status.IsOK(sc)) d
	..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^插入医嘱关联工作小组失败:"_$SYSTEM.Status.GetErrorText(sc))
	//做组合套布局数据
	s StdWGDR="" f  s StdWGDR=$o(^LisDboStd("BTTestSetLayoutI","IndexMaster",StdTsDR,StdWGDR)) q:StdWGDR=""  d
	.s StdTestCodeDR="" f  s StdTestCodeDR=$o(^LisDboStd("BTTestSetLayoutI","IndexMaster",StdTsDR,StdWGDR,StdTestCodeDR)) q:StdTestCodeDR=""  d
	..s StdTestCodeRowData=^LisDboStd("BTTestCodeD",StdTestCodeDR)
	..//不激活的不拷贝
	..s Active=$lg(StdTestCodeRowData,25)
	..i Active=0 q
	..//尝试拷贝项目数据,得到拷贝后的主键
	..s TestCodeDR=..TryCopyTestCode(StdTestCodeDR,"",Sessions)
	..s StdLayOutDR="" f  s StdLayOutDR=$o(^LisDboStd("BTTestSetLayoutI","IndexMaster",StdTsDR,StdWGDR,StdTestCodeDR,StdLayOutDR)) q:StdLayOutDR=""  d
	...//拷贝组合套布局
	...d ..TryCopyTestSetLayOut(StdLayOutDR,TsDR,WGDR,TestCodeDR,Sessions)
	//尝试拷贝鉴定过程关联数据
	d ..TryCopyIDPLink(StdTsDR,TsDR,Sessions)
	//拷贝快速鉴定关联项目包数据
	d ..TryCopyIDPFastTestCodePak(StdTsDR,TsDR,Sessions)
	q
}

/// 尝试拷贝医嘱关联鉴定项目包
ClassMethod TryCopyIDPFastTestCodePak(StdTestSetDR, TestSetDR, Sessions)
{
	s StdTestSetDR=$g(StdTestSetDR)
	s TestSetDR=$g(TestSetDR)
	s Sessions=$g(Sessions)
	s StdSpecimenDR="" f  s StdSpecimenDR=$o(^LisDboStd("BTIDPFastTestCodePakI","IndexMaster",StdTestSetDR,StdSpecimenDR)) q:StdSpecimenDR=""  d
	.s SpecimenDR=..TryCopySpecimen(StdSpecimenDR,"",StdSpecimenDR)
	.s StdIDPTestCodePakDR="" f  s StdIDPTestCodePakDR=$o(^LisDboStd("BTIDPFastTestCodePakI","IndexMaster",StdTestSetDR,StdSpecimenDR,StdIDPTestCodePakDR)) q:StdIDPTestCodePakDR=""  d
	..s IDPTestCodePakDR=..TryCopyOneIDPTestCodePak(StdIDPTestCodePakDR,"",Sessions)
	..s RowID="" f  s RowID=$o(^LisDboStd("BTIDPFastTestCodePakI","IndexMaster",StdTestSetDR,StdSpecimenDR,StdIDPTestCodePakDR,RowID)) q:RowID=""  d
	...i '$d(^dbo.BTIDPFastTestCodePakI("IndexMaster",TestSetDR,##Class(LIS.Util.Common).IndexData(SpecimenDR),IDPTestCodePakDR)) d
	....s NewObj=##Class(dbo.BTIDPFastTestCodePak).%New()
	....s NewObj.TestSetDR=TestSetDR
	....s NewObj.SpecimenDR=SpecimenDR
	....s NewObj.IDPTestCodePakDR=IDPTestCodePakDR
	....s sc=NewObj.%Save()
	....i ('$SYSTEM.Status.IsOK(sc)) d
	.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定快速结果失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 尝试拷贝一个鉴定过程项目包
ClassMethod TryCopyOneIDPTestCodePak(StdDR, CodeStart, Sessions)
{
	s StdDR=$g(StdDR)
	i StdDR<0 q ""
	s CodeStart=$g(CodeStart)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	s RowData=$g(^LisDboStd("BTIDPCultureMedPakD",StdDR))
	s Code=CodeStart_$lg(RowData,2)
	s CodeI=##Class(LIS.Util.Common).IndexData(Code)
	s RetDR=""
	i $d(^dbo.BTIDPTestCodePakI("IndexCode",FCode)) d
	.s RetDR=$o(^dbo.BTIDPTestCodePakI("IndexCode",FCode,""))
	e  d
	.s NewObj=##Class(dbo.BTIDPTestCodePak).%New()
	.s NewObj.Code=$lg(RowData,2)
	.s NewObj.CName=$lg(RowData,3)
	.s NewObj.Remark=$lg(RowData,4)
	.s NewObj.Sequence=$lg(RowData,5)
	.s NewObj.Active=$lg(RowData,6)
	.s IDPElementDR=$lg(RowData,7)
	.i $l(IDPElementDR) d
	..s IDPElementDR=..TryCopyIDPElement(IDPElementDR,"",Sessions)
	.s NewObj.IDPElementDR=IDPElementDR
	.s sc=NewObj.%Save()
	.i ('$SYSTEM.Status.IsOK(sc)) d
	..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程项目包数据失败:"_$SYSTEM.Status.GetErrorText(sc))
	.//拷贝元素包细项
	...d ..TryCopyIDPTestCodePakItem(RowID,NewObj.RowID,Sessions)
	.s RetDR=NewObj.RowID
	q RetDR
}

/// 尝试拷贝鉴定过程项目包元素
ClassMethod TryCopyIDPTestCodePakItem(StdPakDR, PakDR, Sessions)
{
	s StdPakDR=$g(StdPakDR)
	s PakDR=$g(PakDR)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	
	s StdTestCodeDR="" f  s StdTestCodeDR=$o(^LisDboStd("BTIDPTestCodePakItemI","IndexTestCodeDR",StdPakDR,StdTestCodeDR)) q:StdTestCodeDR=""  d
	.//尝试拷贝项目
	.s TestCodeDR=..TryCopyTestCode(StdTestCodeDR,"",Sessions)
	.s RowID="" f  s RowID=$o(^LisDboStd("BTIDPTestCodePakItemI","IndexTestCodeDR",StdPakDR,StdTestCodeDR,RowID)) q:RowID=""  d
	..i '$d(^dbo.BTIDPTestCodePakItemI("IndexTestCodeDR",PakDR,TestCodeDR)) d
	...s RowData=$g(^LisDboStd("BTIDPTestCodePakItemD",RowID))
	...s NewObj=##Class(dbo.BTIDPTestCodePakItem).%New()
	...s NewObj.IDPTestCodePakDR=PakDR
	...s NewObj.TestCodeDR=TestCodeDR
	...s NewObj.DefaultResult=$lg(RowData,4)
	...s NewObj.Sequence=$lg(RowData,5)
	...s NewObj.Active=$lg(RowData,6)
	...s sc=NewObj.%Save()
	...i ('$SYSTEM.Status.IsOK(sc)) d
	....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程项目包元素失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 拷贝鉴定过程关联数据
/// StdTestSetDR:标准医嘱主键
/// TestSetDR:医嘱主键
/// 
ClassMethod TryCopyIDPLink(StdTestSetDR, TestSetDR, Sessions)
{
	s StdTestSetDR=$g(StdTestSetDR)
	s TestSetDR=$g(TestSetDR)
	s Sessions=$g(Sessions)
	s RetDR=""
	s StdSpecimenDR="" f  s StdSpecimenDR=$o(^LisDboStd("BTIDPLinkI","IndexTestSetDR",StdTestSetDR,StdSpecimenDR)) q:StdSpecimenDR=""  d
	.s SpecimenDR=..TryCopySpecimen(StdSpecimenDR,"",Sessions)
	.s RowID="" f  s RowID=$o(^LisDboStd("BTIDPLinkI","IndexTestSetDR",StdTestSetDR,StdSpecimenDR,RowID)) q:RowID=""  d
	..s RowData=$g(^LisDboStd("BTIDPLinkD",RowID))
	..i $d(^dbo.BTIDPLinkI("IndexTestSetDR",TestSetDR,##Class(LIS.Util.Common).IndexData(SpecimenDR))) d
	...s RetDR=$o(^dbo.BTIDPLinkI("IndexTestSetDR",TestSetDR,##Class(LIS.Util.Common).IndexData(SpecimenDR),""))
	..e  d
	...s NewObj=##Class(dbo.BTIDPLink).%New()
	...s NewObj.TestSetDR=TestSetDR
	...s NewObj.SpecimenDR=SpecimenDR
	...s IDPPakDR=$lg(RowData,4)
	...i $l(IDPPakDR) d
	....//尝试拷贝鉴定过程包
	....s IDPPakDR=..TryCopyIDPPak(IDPPakDR,"",Sessions)
	...s NewObj.IDPPakDR=IDPPakDR
	...s IDPCultureMedPakDR=$lg(RowData,5)
	...i $l(IDPPakDR) d
	....//尝试拷贝鉴定过程培养基组数据
	....s IDPPakDR=..TryCopyIDPCultureMedPak(IDPPakDR,"",Sessions)
	...s NewObj.IDPCultureMedPakDR=IDPCultureMedPakDR
	...s sc=NewObj.%Save()
	...i ('$SYSTEM.Status.IsOK(sc)) d
	....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程关联数据失败:"_$SYSTEM.Status.GetErrorText(sc))
	...s RetDR=NewObj.RowID
	q RetDR
}

/// 尝试拷贝鉴定过程培养基组数据
/// StdDR:标准数据主键
/// CodeStart:代码是否加前缀,不加就是空
/// Sessions:会话
ClassMethod TryCopyIDPCultureMedPak(StdDR, CodeStart, Sessions)
{
	s StdDR=$g(StdDR)
	i StdDR<0 q ""
	s CodeStart=$g(CodeStart)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	s RowData=$g(^LisDboStd("BTIDPCultureMedPakD",StdDR))
	s Code=CodeStart_$lg(RowData,2)
	s CodeI=##Class(LIS.Util.Common).IndexData(Code)
	s RetDR=""
	//有数据就不插入
	i $d(^dbo.BTIDPCultureMedPakI("IndexCode",CodeI)) d
	.s RetDR=$o(^dbo.BTIDPCultureMedPakI("IndexCode",CodeI,""))
	e  d
	.s NewObj=##Class(dbo.BTIDPCultureMedPak).%New()
	.s NewObj.Code=Code
	.s NewObj.CName=$lg(RowData,3)
	.s NewObj.Type=$lg(RowData,4)
	.s NewObj.Remark=$lg(RowData,5)
	.s NewObj.EntryCode=$lg(RowData,6)
	.s NewObj.Sequence=$lg(RowData,7)
	.s NewObj.PrintNum=$lg(RowData,8)
	.s sc=NewObj.%Save()
	.i ('$SYSTEM.Status.IsOK(sc)) d
	..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝培养基组失败:"_$SYSTEM.Status.GetErrorText(sc))
	.s RetDR=NewObj.RowID
	//尝试拷贝培养基组的培养基
	d ..TryCopyIDPCultureMedPakItem(StdDR,RetDR,Sessions)
	q RetDR
}

/// 尝试拷贝鉴定过程培养基组的培养基
ClassMethod TryCopyIDPCultureMedPakItem(StdPakDR, PakDR, Sessions)
{
	s StdPakDR=$g(StdPakDR)
	s PakDR=$g(PakDR)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	
	s StdSequence="" f  s StdSequence=$o(^LisDboStd("BTIDPCultureMedPakItemI","IndexMaster",StdPakDR,StdSequence)) q:StdSequence=""  d
	.s StdIDPCultureMediumDR="" f  s StdIDPCultureMediumDR=$o(^LisDboStd("BTIDPCultureMedPakItemI","IndexMaster",StdPakDR,StdSequence,StdIDPCultureMediumDR)) q:StdIDPCultureMediumDR=""  d
	..//尝试拷贝培养基数据
	..s IDPCultureMediumDR=..TryCopyIDPCultureMedium(StdIDPCultureMediumDR,"",Sessions)
	..s RowID="" f  s RowID=$o(^LisDboStd("BTIDPCultureMedPakItemI","IndexMaster",StdPakDR,StdSequence,StdIDPCultureMediumDR,RowID)) q:RowID=""  d
	...s RowData=$g(^LisDboStd("BTIDPCultureMedPakItemD",RowID))
	...s NewObj=##Class(dbo.BTIDPCultureMedPakItem).%New()
	...s NewObj.IDPCultureMedPakDR=PakDR
	...s NewObj.IDPCultureMediumDR=IDPCultureMediumDR
	...s NewObj.Sequence=$lg(RowData,4)
	...s NewObj.DefRes=$lg(RowData,5)
	...s IDPPureMediumDR=$lg(RowData,6)
	...i $l(IDPPureMediumDR) d
	....s IDPPureMediumDR=..TryCopyIDPCultureMedium(IDPPureMediumDR,"",Sessions)
	...s NewObj.IDPPureMediumDR=IDPPureMediumDR
	..s sc=NewObj.%Save()
	..i ('$SYSTEM.Status.IsOK(sc)) d
	...THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程包失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 尝试拷贝鉴定过程培养基数据
/// StdDR:标准数据主键
/// CodeStart:代码是否加前缀,不加就是空
/// Sessions:会话
ClassMethod TryCopyIDPCultureMedium(StdDR, CodeStart, Sessions)
{
	s StdDR=$g(StdDR)
	i StdDR<0 q ""
	s CodeStart=$g(CodeStart)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	s RowData=$g(^LisDboStd("BTIDPCultureMediumD",StdDR))
	s Code=CodeStart_$lg(RowData,2)
	s CodeI=##Class(LIS.Util.Common).IndexData(Code)
	s RetDR=""
	//有数据就不插入
	i $d(^dbo.BTIDPCultureMediumI("IndexCode",CodeI)) d
	.s RetDR=$o(^dbo.BTIDPCultureMediumI("IndexCode",CodeI,""))
	e  d
	.s NewObj=##Class(dbo.BTIDPCultureMedium).%New()
	.s NewObj.Code=Code
	.s NewObj.CName=$lg(RowData,3)
	.s NewObj.Condition=$lg(RowData,4)
	.s NewObj.Cycle=$lg(RowData,5)
	.s NewObj.CultureInterval=$lg(RowData,6)
	.s NewObj.BindTestCodeDR=$lg(RowData,7)
	.s NewObj.Remark=$lg(RowData,8)
	.s NewObj.EntryCode=$lg(RowData,9)
	.s NewObj.Sequence=$lg(RowData,10)
	.s NewObj.DefBatchNo=$lg(RowData,11)
	.s NewObj.DefValidityDate=$lg(RowData,12)
	.s NewObj.Weight=$lg(RowData,13)
	.s NewObj.MinCollection=$lg(RowData,14)
	.s sc=NewObj.%Save()
	.i ('$SYSTEM.Status.IsOK(sc)) d
	..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程培养基失败:"_$SYSTEM.Status.GetErrorText(sc))
	.s RetDR=NewObj.RowID
	.//拷贝培养基形态描述
	.d ..TryCopyIDPCultureDesk(StdDR,RetDR,Sessions)
	q RetDR
}

/// 尝试拷贝鉴定过程形态描述数据
/// StdMidDR:标准数据主键
/// MidDR:培养基主键
/// Sessions:会话
ClassMethod TryCopyIDPCultureDesk(StdMidDR, MidDR, Sessions)
{
	s StdMidDR=$g(StdMidDR)
	s MidDR=$g(MidDR)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	s Sequence="" f  s Sequence=$o(^LisDboStd("BTIDPCultureDeskI","IndexMaster",StdMidDR,Sequence)) q:Sequence=""  d
	.s RowID="" f  s RowID=$o(^LisDboStd("BTIDPCultureDeskI","IndexMaster",StdMidDR,Sequence,RowID)) q:RowID=""  d
	..s RowData=$g(^LisDboStd("BTIDPCultureDeskD",RowID))
	..s NewObj=##Class(dbo.BTIDPCultureDesk).%New()
	..s NewObj.IDPCultureMediumDR=MidDR
	..s NewObj.Remark=$lg(RowData,3)
	..s NewObj.IsDefault=$lg(RowData,4)
	..s NewObj.IsPanic=$lg(RowData,5)
	..s NewObj.IsPositive=$lg(RowData,6)
	..s NewObj.Sequence=$lg(RowData,7)
	..s NewObj.IDPMachDR=""
	..s sc=NewObj.%Save()
	..i ('$SYSTEM.Status.IsOK(sc)) d
	...THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程培养基失败:"_$SYSTEM.Status.GetErrorText(sc))
	q ""
}

/// 尝试拷贝鉴定过程包数据
/// StdDR:标准数据主键
/// CodeStart:代码是否加前缀,不加就是空
/// Sessions:会话
ClassMethod TryCopyIDPPak(StdDR, CodeStart, Sessions)
{
	s StdDR=$g(StdDR)
	i StdDR<0 q ""
	s CodeStart=$g(CodeStart)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	s RowData=$g(^LisDboStd("BTIDPPakD",StdDR))
	s Code=CodeStart_$lg(RowData,2)
	s CodeI=##Class(LIS.Util.Common).IndexData(Code)
	s RetDR=""
	//有数据就不插入
	i $d(^dbo.BTIDPPakI("IndexCode",CodeI)) d
	.s RetDR=$o(^dbo.BTIDPPakI("IndexCode",CodeI,""))
	e  d
	.s NewObj=##Class(dbo.BTIDPPak).%New()
	.s NewObj.Code=Code
	.s NewObj.CName=$lg(RowData,3)
	.s NewObj.Remark=$lg(RowData,4)
	.s NewObj.Sequence=$lg(RowData,5)
	.s NewObj.Active=$lg(RowData,6)
	.s sc=NewObj.%Save()
	.i ('$SYSTEM.Status.IsOK(sc)) d
	..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程包失败:"_$SYSTEM.Status.GetErrorText(sc))
	.s RetDR=NewObj.RowID
	.//拷贝元素包的元素
	.d ..TryCopyIDPElementPak(StdDR,RetDR,-100000000000000,-100000000000000,Sessions)
	q RetDR
}

/// 尝试拷贝鉴定过程包元素
ClassMethod TryCopyIDPElementPak(StdPakDR, PakDR, StdParentDR, ParentDR, Sessions)
{
	s StdPakDR=$g(StdPakDR)
	s PakDR=$g(PakDR)
	s StdParentDR=$g(StdParentDR)
	s ParentDR=$g(ParentDR)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	
	s StdSequence="" f  s StdSequence=$o(^LisDboStd("BTIDPElementPakI","IndexSequence",StdPakDR,StdParentDR,StdSequence)) q:StdSequence=""  d
	.s RowID="" f  s RowID=$o(^LisDboStd("BTIDPElementPakI","IndexSequence",StdPakDR,StdParentDR,StdSequence,RowID)) q:RowID=""  d
	..s RowData=$g(^LisDboStd("BTIDPElementPakD",RowID))
	..s StdIDPElementDR=$lg(RowData,3)
	..s IDPElementDR=..TryCopyIDPElement(StdIDPElementDR,"",Sessions)
	..s NewObj=##Class(dbo.BTIDPElementPak).%New()
	..s NewObj.IDPPakDR=PakDR
	..s NewObj.IDPElementDR=IDPElementDR
	..s NewObj.DefaultResult=$lg(RowData,4)
	..s ParentDRVal=""
	..i ParentDR>0 s ParentDRVal=ParentDR
	..s NewObj.ParentDR=ParentDRVal
	..s NewObj.Sequence=$lg(RowData,6)
	..s NewObj.Active=$lg(RowData,7)
	..s sc=NewObj.%Save()
	..i ('$SYSTEM.Status.IsOK(sc)) d
	...THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程包失败:"_$SYSTEM.Status.GetErrorText(sc))
	..//递归拷贝子级
	..d ..TryCopyIDPElementPak(StdPakDR,PakDR,RowID,NewObj.RowID,Sessions)
	q ""
}

/// 尝试拷贝鉴定过程元素
/// StdDR:标准数据主键
/// CodeStart:代码是否加前缀,不加就是空
/// Sessions:会话
ClassMethod TryCopyIDPElement(StdDR, CodeStart, Sessions)
{
	s StdDR=$g(StdDR)
	i StdDR<0 q ""
	s CodeStart=$g(CodeStart)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	s RowData=$g(^LisDboStd("BTIDPElementD",StdDR))
	s Code=CodeStart_$lg(RowData,2)
	s CodeI=##Class(LIS.Util.Common).IndexData(Code)
	s RetDR=""
	//有数据就不插入
	i $d(^dbo.BTIDPElementI("IndexCode",CodeI)) d
	.s RetDR=$o(^dbo.BTIDPElementI("IndexCode",CodeI,""))
	e  d
	.s NewObj=##Class(dbo.BTIDPElement).%New()
	.s NewObj.Code=Code
	.s NewObj.CName=$lg(RowData,3)
	.s NewObj.ElementType=$lg(RowData,4)
	.s NewObj.BindTestCodeDR=""
	.s NewObj.DocterView=$lg(RowData,6)
	.s NewObj.NoPrint=$lg(RowData,7)
	.s NewObj.PrintNum=$lg(RowData,8)
	.s NewObj.Sequence=$lg(RowData,9)
	.s NewObj.Active=$lg(RowData,10)
	.s sc=NewObj.%Save()
	.i ('$SYSTEM.Status.IsOK(sc)) d
	..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程元素失败:"_$SYSTEM.Status.GetErrorText(sc))
	.s RetDR=NewObj.RowID
	//拷贝鉴定过程元素子项
	d ..TryCopyIDPElementItem(StdDR,RetDR,Sessions)
	q RetDR
}

/// 尝试拷贝鉴定过程元素子项
/// StdEleDR:标准数据主键
/// EleDR:新数据主键
/// Sessions:会话
ClassMethod TryCopyIDPElementItem(StdEleDR, EleDR, Sessions)
{
	s StdEleDR=$g(StdEleDR)
	s EleDR=$g(EleDR)
	s Sessions=$g(Sessions)
	s WGDR=$p(Sessions,"^",2)
	s HospitalDR=$p(Sessions,"^",5)
	
	s Code="" f  s Code=$o(^LisDboStd("BTIDPElementItemI","IndexCode",StdEleDR,Code)) q:Code=""  d
	.s RowID="" f  s RowID=$o(^LisDboStd("BTIDPElementItemI","IndexCode",StdEleDR,Code,RowID)) q:RowID=""  d
	..s RowData=$g(^LisDboStd("BTIDPElementItemD",RowID))
	..//有数据就不插入
	..i '$d(^dbo.BTIDPElementItemI("IndexCode",EleDR,Code)) d
	...s NewObj=##Class(dbo.BTIDPElementItem).%New()
	...s NewObj.IDPElementDR=EleDR
	...s NewObj.Code=$lg(RowData,3)
	...s NewObj.CName=$lg(RowData,4)
	...s NewObj.Sequence=$lg(RowData,5)
	...s NewObj.Active=$lg(RowData,6)
	...s sc=NewObj.%Save()
	...i ('$SYSTEM.Status.IsOK(sc)) d
	....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程元素子项失败:"_$SYSTEM.Status.GetErrorText(sc))
	q RetDR
}

后面还有很多拷贝逻辑。。。

最后做个界面实现选择导入
在这里插入图片描述

在这里插入图片描述
这样就可以不断搜集“大漂亮”的数据来得到一个供大家选数据的基础数据,后面上线只要选仪器和医嘱了。然后各种相关的数据细化到组合套布局,项目的参考范围和选项一并入库了,选基础数据多香啊。

GLOBAL结合M还是太强了,从不屑到深爱,充分发挥数据库优势。八年的C#和M的结合,从iis到Linux,从ado到M模拟ado,架构成熟,业务完善,真是可以改名叫yaoyaolis了,哈哈–玩笑 推一下M的写法和做标准数据的思路

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Std数据M的荣光 的相关文章

随机推荐

  • CentOS安装Cache数据库

    适用CentOS7 6 CentOS8上安装Intersystem公司的Cache数据库 xff0c 资料基本是空白 xff0c 分享一下 首先安装解压软件unzip和libicu xff0c 最小化安装的缺 xff0c 全安装的不缺 yu
  • Cache数据库之ECP搭建

    Cache作为非关系数据库 xff0c 其强大毋庸置疑 首先其Globle结构 xff0c 直接暴露的表Globel数据 xff0c 以及提供的M语言操作Globle达到的最优查询速度 ECP xff08 企业缓存协议 xff09 更是提供
  • Sebia电泳绘图

    Sebia这仪器真是个奇葩的存在 自己仪器有图不存文件 xff0c LIS要的话还得自己按数据绘制 还有蛋白电泳 固定电泳 画不画参考线等不同要求 xff08 奇葩的很 xff09 按理这种事不属于lis范围 xff0c 无奈国内lis太卷
  • nginx代理与负载均衡

    随着谷歌浏览器不断的改变https调用websocket和非https资源的策略 xff0c 从谷歌大概70以后不允许https调用非https资源和ws的websocket 后面实现了wss解决谷歌这一策略的影响 随着谷歌到90后版本限制
  • FreeRTOS学习第一篇

    之前在STM32Nano开发板开发是基于裸机开发 xff0c 即自己在main方法写死循环 死循环轮流执行各个任务逻辑的方法 这样做直接简单 xff0c 但是不同任务有不同优先级 xff0c 对CPU响应要求不同 逻辑容易某个任务卡住了 x
  • FreeRTOS之heap4

    操作系统离不开内存管理 FreeRTOS提供了5种内存管理方法 实现在portable MemMang里heap1到heap5 每种管理方案策略不同 我采用的是比较有代表性的heap4管理方案 该模式定义了ucHeap全局数组充当堆内存池
  • FreeRTOSMini

    最近在研究实时操作系统FreeRTOS FreeRTOS作为开源的RTOS xff0c 源码规模不大 xff0c 可以供操作系统学习 xff0c 加上我的STM32 Nano开发板正好可以学习OS 借着五一放假宅家里学习 实现的FreeRT
  • 双master节点+keepalived方式部署K8s 1.18.20

    相关部署方式也挺多 xff0c 自己采用双master节点 43 单node节点方式 xff0c 并且采用keepalived部署1 18 20版本 xff0c 中间也出现过相关小问题 xff0c 但都一一处理 xff0c 记录以给需要的同
  • FreeRTOS之TCB

    FreeRTOSMini实现了最小任务调度 现在分开介绍进程调度重要部分 进程调度的基础首先是定义任务调度的数据结构 xff0c 来保存任务堆栈结构和任务状态所在状态列表 xff0c 然后就是任务的优先级唯一号等 最小Mini内核参照 Fr
  • FreeRTOS任务调度主要变量

    之前介绍的和FreeRTOS任务调度相关的数据结构即内存分配实现 xLIST heap 4 TCB结构体 任务调度就是基于这些结构体实现 这次介绍调度相关的主要变量 代码在FreeRTOSMini c文件签名部分 span class to
  • Base64串介绍

    以前写winform时候没接触过Base64 刚开始接触时候还不知道是个啥 最开始接触Base64串时候是仪器出图 很长一段时间我还真以为Base64就是表示图的 xff0c 很多人也是这么认为的 xff0c 这次介绍一下什么是Base64
  • FreeRTOS创建任务

    CPU有这些寄存器 R0 R12为通用寄存器 R13为栈顶指针 xff0c 在OS时候中断函数的R13使用MSP的指针 xff08 内核态 xff09 非中断里面使用PSP指针 xff08 用户态 xff09 正是有双堆栈指针可以保证OS切
  • FreeRTOS任务调度最后篇

    FreeRTOS开启任务调度 一篇说到启动任务调度最后启动Systick定时器 xff0c 通过SVC中断引导第一个任务执行 然后系统就在Systick的定时中断下调度任务执行 xff0c 这次介绍最后的部分 xff0c Systick和P
  • 从STM32-FreeRTOS到linux

    之前买的STM32的开发板学习裸机开发 了解裸机之后学习FreeRTOS来作为小型操作系统学习 xff0c 理解操作系统调度实现 一直想学习一下linux的内核 xff0c 之前下载源码和初步看了下感觉无从下手 有了RTOS的基础后 xff
  • C#实现图片旋转

    C 绘图正常是不涉及到旋转的 有时候会有旋转画笔的情况 比如条码打印字竖着打印 旋转图片一定角度绘制 或者斜着画水印 这时候就涉及到旋转画笔了 源码地址 通过graphics TranslateTransform Pcenter X Pce
  • C#调C++库返回字符串

    用C 调C 43 43 库函数返回字符串 xff0c 由于C 43 43 本身方法之间调用返回字符串都是一般都是申明void或int返回的方法 xff0c 然后通过char变量带出返回值 在C 43 43 调用这种之前自己先初始化char空
  • Asp.NetCore在CentOS网站卡死

    最近碰到项目的网站在高峰期卡死的现象 刚开始以为是数据库问题导致的卡死 xff0c 就排查和改了数据的设置 然后观察几天发现网站还是会在高峰期卡死 xff0c 然后改了点网站设置 xff0c 准备第二天观察一下 xff0c 星期二竟然又没出
  • 使用IRIS碰到的坑

    最近换新电脑了 xff0c 然后直接不安装cache2016了 xff0c 直接上IRIS啊 然后碰到几个坑 xff0c 一是在win11不知道是兼容性不好还是怎么了 每次重启电脑后数据库就无法启动 xff0c 为此祭出多年保存的方子 xf
  • K8s 配置高可用提示Configuration file ‘/etc/keepalived/keepalived.conf‘ is not a regular non-executable file

    k8s配置keepalived高可用 xff0c systemctl start keepalived提示 检查keepalived配置文件 xff0c 查询配置也正常 从报错提示显示keepalived conf 配置文件是一个非执行的文
  • Std数据M的荣光

    对检验的上线 xff0c 实施和开发的大部分时间都用在做基础数据和联设备对通道这些 对相同的仪器每次都有做项目数据 xff0c 对通道那些我一直深有感触 xff0c 一直在构思怎么减少仪器对通道这些做数据的工作量 奈何以前只是浅显的使用M