Query组装JSON数组

分享一个M把Query处理为JSON数组对象发方法。在有些时候需要把一个Query的输出数据和别的方法一起以JSON返回。

利用了x命令把字符串当M执行。

/// 调用Query得到JSON数组对象
/// ClassName:类名
/// FuncName:Query名字
/// w ##Class(LIS.WS.DHCLISServiceBase).GetQueryJsonArr()
ClassMethod GetQueryJsonArr(ClassName, FuncName, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions)
{
	s ClassName=$g(ClassName)
	s FuncName=$g(FuncName)
	s P0=$g(P0),P1=$g(P1),P2=$g(P2),P3=$g(P3),P4=$g(P4),P5=$g(P5),P6=$g(P6),P7=$g(P7),P8=$g(P8),P9=$g(P9),P10=$g(P10),P11=$g(P11),P12=$g(P12),P13=$g(P13),Sessions=$g(Sessions)
	s rsetNew=##class(%XML.DataSet).%New()
	s rsetNew.ClassName = ClassName
	s rsetNew.QueryName = FuncName
	s rsetNew.NeedSchema=1
	s rsetNew.DiffGram=0
	s sc=rsetNew.Execute(P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions)
	s colCount=rsetNew.GetColumnCount()
	set retArr=[]
    While (rsetNew.Next()) 
    {
       s OneRow =##class(%DynamicObject).%New()
       f i=1:1:colCount
       {
          s colName=rsetNew.GetColumnName(i)
          s colValue=rsetNew.GetDataByName(colName)
          s CodeStr="(OneRow,colValue) s OneRow."_colName_"=colValue"
          x (CodeStr,.OneRow,colValue)
       }
       d retArr.%Push(OneRow)
    }
    q retArr
}

使用场景类似下面

/// 得到选择工作小组的配置
/// w ##Class(IDP.WS.BLL.DHCIDPResult).GetWGMConfigJSONStream(50)
ClassMethod GetWGMConfigJSONStream(WGMDR, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
	s WGMDR=$g(WGMDR)
    s Sessions=$g(Sessions)
    s UserDR=$p(Sessions,"^",1)
    s WorkGroupDR=$p(Sessions,"^",2)
    s GroupDR=$p(Sessions,"^",4)
    set mianObj =##class(%DynamicObject).%New()
    
    //医嘱组查询分组数据
    s mianObj.TestSetGroup=[]
    
    //组装医嘱组查询分组数据
    s OneGroup =##class(%DynamicObject).%New()
    s OneGroup.RowID=""
    s OneGroup.Code="All"
    s OneGroup.CName="全部医嘱"
    d mianObj.TestSetGroup.%Push(OneGroup)
    i $d(^dbo.BTWorkGroupMachineRuleI("IndexMaster",WGMDR)) d
    .d mianObj.TestSetGroup.%Push(OneGroup)
    .s Code="" f  s Code=$o(^dbo.BTWorkGroupMachineRuleI("IndexMaster",WGMDR,Code)) Q:Code=""  D
    ..s TestSetQueryGroupDR=$o(^dbo.BTWorkGroupMachineRuleI("IndexMaster",WGMDR,Code,""))
    ..S RowID=TestSetQueryGroupDR
    ..S SCode=$lg($g(^dbo.BTWorkGroupMachineRuleD(RowID)),2)
    ..S CName=$lg($g(^dbo.BTWorkGroupMachineRuleD(RowID)),3)
    ..s IsShow=$lg($g(^dbo.BTWorkGroupMachineRuleD(RowID)),5)
    ..i IsShow'=1 q
    ..s OneGroup =##class(%DynamicObject).%New()
    ..s OneGroup.RowID=RowID
    ..s OneGroup.Code=SCode
    ..s OneGroup.CName=CName
    ..d mianObj.TestSetGroup.%Push(OneGroup)
    
    //得到系统参数
    s mianObj.SYSParameters=##Class(LIS.WS.DHCLISServiceBase).GetQueryJsonArr("LIS.WS.BLL.DHCSysParameter","QrySYSParameters",WGMDR,"LABSaveResultNextRow^LABEntryResultNextRow^LABAuditResultNextRow^LABShowConclusion^LabShowMoreInfo^WGReportUndoStatus^LABAuditResultDeleteRow^LABReportImageWeb^LABReportImageFTP^LABIsNeedAuthPasswd^IsCheckEntryUserPassword^IsCheckAuthUserPassword^RepLargeImage^MICUseLisSen^WGMRedoFlag^RedoFlagAuth^MICEntryDrect^MICBicMemo^LabInfoShowModel^AuthDoSave^MICUseLisSensitivity^MICDefResLoad^MCProcessChildModel^FastQryDemoType^SortRule^RegNoAddLength^EntryAllowEdit^SenAddMicRes^SenShowETest^AuthEffectTime","MICDefDrugRule")
    
    //得到颜色配置参数
    s mianObj.ColorParameters=##Class(LIS.WS.DHCLISServiceBase).GetQueryJsonArr("LIS.WS.BLL.DHCColorParameter","QryColorParameters",WGMDR,"ResLowColor^ResHighColor^PanicLowColor^PanicHighColor^UnacceptLowColor^UnacceptHighColor^RegReportColor^EnthReportColor^AuthReportColor^IsPrintedReportColor^NoPrintedReportColor^RepeatReportColor^CancelReportColor^ResultAbnormalColor^ResultNormalColor^SensitiveColor^ResistanceColor^IntermediaryColor","")
    //返回JSON
  	q mianObj.%ToJSON()
}

以前研究重点在C#、js、html那些。8.3之前只学M基础操作,供写业务,那时候还天天吐槽M容易死循环、编辑器难以一堆。8.3才开始学M的tcp,研究检验盒子仪器。8.4才陆续深入M,对进程,死循环,事务,M导入导入,x命令,流,webservice,xml,json,odbc,锁ecp,索引,映射等研究。8.4之后再也不怕踩坑死循环和锁表了,现在我已经是cache库的忠实粉丝了。爱就让他变的更美好,多一点分享-让生态更完美。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小乌鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值