Caché
小乌鱼
java信创jrt coder
展开
-
检验代码生成器完成版
M生成表操作代码原创 2023-08-08 22:22:55 · 297 阅读 · 0 评论 -
M实现的增删改查代码生成器
M代码生成器原创 2023-08-07 17:40:31 · 239 阅读 · 0 评论 -
CentOS安装IRIS
centos安装intersystem的IRIS数据库原创 2023-06-10 10:53:22 · 1037 阅读 · 0 评论 -
检验仪器控制怎么停止的
检验仪器接口停止原创 2023-01-14 13:28:54 · 662 阅读 · 0 评论 -
Cache数据库解决库只读问题
Cache、IRIS库只读问题解决原创 2022-08-30 17:59:31 · 819 阅读 · 0 评论 -
terminal调试linux的M
terminal调试M原创 2022-08-21 18:20:28 · 225 阅读 · 0 评论 -
M代码管理篇
Cache数据库M代码管理原创 2022-08-17 20:18:43 · 466 阅读 · 1 评论 -
M拷贝表行数据
Cache的M实现拷贝行数据原创 2022-08-12 20:33:04 · 273 阅读 · 0 评论 -
M组装JSON
Cache的M语言组装JSON串原创 2022-08-12 20:19:49 · 468 阅读 · 0 评论 -
M写日志到文本
M写日志到文件原创 2022-08-06 10:55:16 · 155 阅读 · 0 评论 -
M对象存储写日志
基础数据修改的日志很重要,常常有重要的基础数据被改了导致问题,然后还无据可查。所以需要所有基础数据修改有日志记录。检验的C#ORM层已经实现了对基础表的增、删、改自动记录日志。增加就记录增加的JSON日志,修改就把修改前面表JSON记录,删除就把删除的JSON记住。如下图:可以做表日志查询由于我们是M库,有些写的基础维护页面有M对象保存、修改和删除的。M层就需要一个存日志的方法,目标就是让表修改可查询。新增需要记录新增的数据是什么。修改需要记录从什么数据修改成什么。删除需要知道删除了什么数据。原创 2022-05-24 17:33:34 · 371 阅读 · 0 评论 -
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,原创 2022-05-21 20:23:06 · 532 阅读 · 0 评论 -
批量处理Cache表代码
最近碰到需要把数据库所有表字符串列加上Exact特性的事。有Exact特性的字段在索引节点是不带空格的。M可以通过代码导出类代码和导入xml类文件,借助此功能实现批量处理表代码。还可以通过导入导出来用SVN管理每个M代码额,解决M代码没有版本管理的痛点。Cache导出的表的xml如下图,xml描述了表结构,那么可以用代码分析这种xml,得到表索引信息、列信息、列类型等信息。那么就能分析和批量处理表结构代码。比如给所有String类型加Exact特性。查询和导出所有M的后台Query QryAllDb原创 2022-04-15 17:33:00 · 389 阅读 · 0 评论 -
栈还可以这样玩
去年和最近有要求批量处理M代码。由于代码太多,几千个类,全是体力活,就不想人工搞了。用C#调M代码导入导出M类,然后用脚本处理M代码可以通过M代码导入和导出类和mac代码,这种导入导出只能到数据库本地额。文件路径是数据库本地路径。/// 导出M/// w ##Class(tt.LISUpGrade).ExportMMTHD("websys.LISUpGrade.cls","C:\Users\zlzxu\Desktop\新建文件夹\DHC-LISDATA\tt.LISUpGrade.xml","")原创 2022-04-15 17:21:59 · 249 阅读 · 0 评论 -
C++之dolerp($p)
M的字符串操作函数是为见过的最简单的。$p就是按指定分割符和位置取字串,非常方便。类似下面:s str="张三^29岁^男^433127199101211234"s name=$p(str,"^",1)s age=$p(str,"^",2)s sex=$p(str,"^",3)为了方便的使用C++操作字符串按此习惯包装系列M操作字符串接口头文件#pragma onece#include <iostream>#include <cstring>using nam原创 2022-03-13 21:41:52 · 945 阅读 · 0 评论 -
Cache数据库ECP梳理
对Cache的ECP,及ECP和小机关系很多人有误区,今天谈谈ECP一些理解。1.改M代码在任意ECP和小机都一样,任意地方改了,其他地方都能及时看到更新,所以开发改M时候可以开任意ECP和小机。2.临时Global不会在ECP之间和小机同步,属于各自服务器的。所以在后台记录调试参数时要确认网站连接的数据库,如果不清楚可以用非临时Global记录参数。否则就存在记录参数没记录到,然后说问题奇怪。所以写临时Global逻辑的死循环会让执行逻辑的ECP的磁盘写满,没执行死循环逻辑的服务器不受影响。3.cs原创 2022-03-12 13:48:48 · 2841 阅读 · 1 评论 -
Cache数据库之ECP改M卡死问题
“Cache数据库之ECP搭建”一篇介绍了ECP搭建,搭建完成测试了M代码查看,terminal输出数据,portal查看globel没问题。但是没试过修改M,后面发现一改M保存ECP和小机的数据库都卡死了。开发发现小机ping不通ecp的网,解决了网之后还是一改M就卡死的现象。把Cache的ECP介绍文档细读了一遍也没相关介绍。小机端和ECP端各种设置都试完了。后面到小机cconsole.log日志后发现ECP是连上小机了,有报错如下*** Recovery started at Sun Mar原创 2022-03-06 12:59:00 · 812 阅读 · 0 评论 -
Cache之ECP磁盘撑满处理
对于M程序出现死循环一直写临时globle把ECP或小机的cachetemp写到磁盘满了。这时候网站和程序的体现有。1.网站报没有空间。2.数据库webservice调用报错,报internal error之类的。也可能是大量业务表操作或者业务存储死循环产生大量 journal日志,日志把磁盘空间撑满了。这类问题很好发现,到windows看看C盘是不是满了或者linux看看cachetemp和 journal的目录是不是满了。如果是cachetemp库撑满磁盘的那么就把数据库停止然后从相同版本的其他机器原创 2022-03-05 12:38:30 · 725 阅读 · 0 评论 -
Cache数据库之ECP搭建
Cache搭建ECP原创 2022-03-05 12:25:39 · 2937 阅读 · 1 评论 -
M计算两个日期时间差
在写定时任务经常有一些需要算当前时间和业务时间差多少分钟就干个什么任务的事。比如30分钟不处理危急值弹消息。微生物5天没审核发提示之类的。还有一些其他业务要算时间差的情况。特意包装了一个算时间差的方法,每次写太麻烦,还有很多写的参差不齐的。比如实现判断超过30分钟发消息,很多人只比时间。这种在跨天是不对的s BllTime=1234s CurTime=$p($h,",",2)s Cha=CurTime-BllTimei Cha>1800 d.//做业务逻辑还有其他算时间差的场景,经常是原创 2022-03-04 17:27:18 · 620 阅读 · 0 评论 -
Cache比对两个数据库的表结构差异
在Cache数据库升级过程中。可以借助Cache的Ecp远程数据库和NameSpace映射实现新老共用业务和基础数据,新老各自用自己的菜单数据和M代码。对项目上的类表可能有人干了表不兼容性修改,如随意加列。那么新老表结构就会有些列数据位置是错的,需要检测出不兼容的列修改。由于表太多,一千张左右,人为比是不太可能的,又不能不比对直接弄,风险大。可以借助sql查询表和列信息然后用M比对表差别。Class Share.TableCompare Extends %RegisteredObject{///原创 2022-03-04 17:13:13 · 365 阅读 · 0 评论 -
Cache数据库webservice去57772
这么些年自己开发一直没配好不带57772访问webservice的环境。项目上都是让找DBA解决。今天深入研究一下csp的webservice在iis的发布,即服务去57772.我们平常安装的Cache数据库一般选开发版,开发版没安装CSPGateway,安装了的话在C:\inetpub\有CSPGateway文件夹没安装的话可以运行安装包点修改,然后把“Web服务器网关选上”补充安装即可这里我试过直接从其他服务器拷贝这个目录放C盘这里然后配置CSPms模块是不行的。因为还要依赖他安装的csp站点配原创 2022-03-02 23:05:34 · 1754 阅读 · 0 评论 -
CentOS安装Cache数据库
linux安装cache原创 2022-03-01 21:24:35 · 2094 阅读 · 12 评论 -
Cache实现HTTP五
之前实现了响应资源文件、HTML嵌入脚本、调用class、ajax等。这次实现简单的webservice。用整个系统对接过去还有点毛病,单独测一个方法没问题了。返回wsdl测试实现主mac/// d StartHttpServer^LIS.WS.Socket/// 开启HTTP服务StartHttpServer //换行符 s oldIO=$IO s rowsp=$c(13,10) s Port=$g(Port) s Port=50008 //网站文件根目录 s ^WWWR原创 2021-11-21 15:16:51 · 293 阅读 · 0 评论 -
Cache爱恨纠葛
Cache库的强大自然不用说,不得不佩服Globle的结构。M的便捷,数据库的性能。然而有以下两大短板:1.M语言容易死循环,最终导致服务器崩溃。2.M事务容易开放性事务。8.4的检验已近从框架层面解决里程序死循环导致库崩溃问题和M开放事务回滚丢数据及锁表问题。那么不从检验框架调用的M部分造成的服务器崩溃就成为主要待解决的问题。包括M定时任务,和非本系统造成的死循环写满磁盘波及。为此设计跨平台磁盘监控功能。本次才有非嵌入式设计,监控模块只负责定时采集磁盘数据,不关注采集的数据是输出屏幕,还是存表。原创 2021-11-20 11:21:32 · 1033 阅读 · 0 评论 -
Cache数据保持
你还在为做的测试数据随着时间过去查看要一天天往前翻困扰吗?你还在为拷贝的测试库时间久了找不到数据看程序吗?你还在为领导经常喊做数据演示程序效果苦恼吗?接着Cache脚本语言的x命令把字符串当代码执行,和@用字符串描述globle就可实现查询整个库所有日期字段,并且增加指定量。这样挂一个定时任务每天执行,就能达到数据保持功能了。解决开发、测试环境数据变悠久问题。前提是表比较规范,能够知道哪些是日期列。/// 供测试库保持数据使用/// 把系统所有表日期列数据加指定天数/// w ##class(S原创 2021-11-18 17:53:53 · 443 阅读 · 1 评论 -
Cache实现HTTP服务四
给大家点学习M动力,再次加强HTTP服务实现,这是实现了从文件加载HTML并且执行嵌入M脚本同时调用M后台驱动webservice查询天气信息,还是由我们欢哥熬夜实现的。D:\httpd\doct下的html文件<html><head> <title>M脚本处理页面</title> <meta charset='utf-8' /> <script type="text/javascript">原创 2021-11-16 17:40:30 · 1164 阅读 · 0 评论 -
Cache实现HTTP服务三
周末搞转换器没时间,为吴玉欢小伙点赞,后面他会实现读取文件的HTML执行里面嵌入的脚本,按之前的思路实现HTML代码嵌入M脚本,实现类似csp效果。这只是练习使用,和实际差别很大额。主服务Mac/// d StartHttpServer^WYH.WS.Socket.StartHttpServer/// 开启HTTP服务StartHttpServer //换行符 s oldIO=$IO s rowsp=$c(13,10) s Port=$g(Port) s Port=50008 zw Po原创 2021-11-15 13:22:29 · 1730 阅读 · 0 评论 -
Cache实现HTTP服务二
在之前雏形上增加支出调用M类方法。小伙子们还是可以的嘛,开个头上路子了,哈哈主mac文件/// d StartHttpServer^WYH.WS.Socket.StartHttpServer/// 开启HTTP服务StartHttpServer //换行符 s rowsp=$c(13,10) s Port=$g(Port) s Port=50008 zw Port s IP=$p($zu(54,13,$zu(54,0)),",") s Device="|TCP|1" s msg="发原创 2021-11-11 18:07:50 · 1046 阅读 · 0 评论 -
Cache实现HTTP服务
之前用C#实现的HTTP服务,Cache提供的有TCP功能,也能实现HTTP服务。基于此基础可以继续开发实现HTML嵌入M脚本达到动态脚本效果,类似CSP。也能处理提交的Soap协议XML,按XML调用M方法返回,实现不依赖csp配置模式的webservice。熬了一夜实现的初版HTTP服务。/// d StartHttpServer^LIS.WS.Socket/// 开启HTTP服务StartHttpServer //换行符 s rowsp=$c(13,10) s Port=$g(Port)原创 2021-11-11 11:37:29 · 2373 阅读 · 0 评论 -
动态调Webservice之M篇
之前说到Webservice实际就是以http协议交互数据,提交符合约定的XML。那么在之前工具基础上生成调用方法的XML模板,在M里面用%Net.HttpRequest去Post数据调用Webservice一样可行。这种方式比Cache代理类灵活,然后更加有目的,Cache代理类经常莫名奇妙不通还看不出原因。首先扩展工具顺带生成调用XML模板,用SOAPUI也是一样的生成的调用模板数据往URL里指定SOAPAction提交Xml格式数据即可调用URL:https://119.255.194.16原创 2021-11-03 17:44:40 · 248 阅读 · 0 评论 -
M通用增删改表
要想富,先修路。要想业务代码简单,先写方便的底层方法。之前写M对象保存数据写吐了,都是些毫无含量的体力劳动。例如下面(都是取参数-往对象赋值保存):/// XXXX/// 表字段/// /// d ##Class(XX.ZZ).SaveQCPatVisEvalResultMTHD(166)ClassMethod SaveQCPatVisEvalResultMTHD(RowID, QCResultDR, TestCodeDR, VisNumber, OldResult, NewResult, De原创 2021-08-16 21:10:00 · 242 阅读 · 1 评论 -
Linux怎么卸载Caché
1.列出实例ccontrol list2.停止要卸载的实例ccontrol stop 3.强行停止实例ccontrol force 4.删除实例ccontrol delete 5.删除安装目录rm -r原创 2021-08-07 13:21:59 · 184 阅读 · 0 评论 -
Cache基于Webservice做跨库执行M
在好些场景需要执行其他Cache库的M逻辑来实现业务功能。总不能每次有要求就部署发布个webservice,然后创建客户端代理类。这样太麻烦了,机依赖已有的webservice封装一个跨库执行M的通道。来实现跨库报告同步、跨库基础数据同步等等。1.包装代码如下/// 到远程数据库执行M返回数据/// w ##class(LIS.WS.DHCLISServiceBase).RemoteGetData("http://172.26.234.12:57772/imedicallis/csp/LIS.WS.D原创 2021-07-01 21:32:02 · 410 阅读 · 0 评论 -
Cache对接外部数据库
为了方便和外部系统对接,获得第三方数据库的数据或者往第三方表更新和插入数据,包装了Cache查询第三方库的公共方法。简化原始操作的麻烦和可能带来的连接释放不当问题。1.到服务器配置好ODBC后配置SqlGetWay2.实现公共接口主要提供三方面接口,一、得到json格式。二、得到xml格式返回。三、得到$LB数组返回。内部用$LB的返回比较方便,JSON和Xml根据需要选择。/// 查询第三方数据库的数据得到json/// w ##class(LIS.WS.DHCLISServiceBase)原创 2021-07-01 21:19:32 · 843 阅读 · 2 评论 -
Cache遍历Xml简化
由于M遍历Xml往对象压数据需要实体类,对变化的节点不合适。转换对象用的比较别扭。为此提供Xml转globle节点的方法,把传输的Xml输出为Globle节点,方便用最常用的遍历取数据。1.M转Globle方法/// 通过xpath得到xml节点值,globle在^TMPXmlGloble("返回主节点"上,业务记得用完k掉/// w ##class(LIS.WS.DHCLISServiceBase).XmlToGlobleNode("<Request><ReportMsg>&原创 2021-07-01 21:05:57 · 266 阅读 · 0 评论 -
Cache请求URL文本
用网口连仪器有部分数据是一个URL的网站连接,里面内容是xml串,需要得到这部分信息解析数据,用的Cache访问HTTP如下。注意点有:1.Server不能简单写全路径完事2.本机用127.0.0.1默认访问不到3.ip后面不能直接拼端口4.取文本串用httprequest.HttpResponse.Data.Read() Set httprequest=##class(%Net.HttpRequest).%New() Set httprequest.Server="localhost" S原创 2021-06-07 17:43:00 · 173 阅读 · 0 评论 -
Caché的M获得IP地址
1.获得访问客户端的IP地址zutil(67,15,zutil(67,15,zutil(67,15,j)2.获得当前M代码执行的服务器的IPp(p(p(zu(54,13,$zu(54,0)),",")原创 2020-10-17 18:09:05 · 151 阅读 · 0 评论 -
Caché托管事务实际使用
在“Cache死循环检测和申明式事务”里面介绍了申明式事务的实现。在实际使用中考虑到对老的兼容性,使用托管事务更实用,这次用实际代码展示写法的差异。老事务写法很大的精力是在失败回滚事务后,用变量标记来防止后面做其他的增删改操作,或者接着执行后续逻辑直到报错。该复杂度随业务复杂和调整变得复杂托管模式之后需要回滚直接抛出异常,方法就返回了,不用担心接着往下执行的问题。多个方法之间调用也不用来回标量协调了,任意方法抛异常后就结束方法,回滚事务了手工计费和退费采用托管模式示例Class LIS.WS.原创 2020-07-05 13:03:37 · 332 阅读 · 0 评论 -
Caché怎么用8个十六进制字符得到32位浮点数
IEEE 754浮点数表示标准处理步骤1.首先把16进制字符转换为二进制的字符。8个十六进制字符得到32个二进制字符2.然后按32位浮点数表示把二进制数据处理成十进制浮点数3.左边第一个二进制是正负位,0正数,1负数4.然后紧接着的八位是阶码、最后二十三位是尾数5.假设阶码的二进制串是E,尾数的是M。转换的十进制的阶码是E10,十进制的位数是M10,正负位按最高位为1或-1,变量约定...原创 2019-12-07 20:23:19 · 829 阅读 · 0 评论