Qiao Peng · 八月 8, 2024 转到文章

进入管理门户,点击菜单“系统资源管理器“>"类">"导入"。注意改命名空间为你的目标命名空间

Qiao Peng · 三月 19, 2024 转到文章

这是级别2的错误,是后台写进程的一个告警。如果是发生在生产系统上,应该找技术支持WRC团队确定问题。
社区里有不少Cache', IRIS文章,另外,最左边这个线上学习网站(Learning)有大量主题可选的免费课程,欢迎注册。

Qiao Peng · 三月 14, 2024 转到文章

IRIS 2024.1发布了矢量查询和矢量索引。现在IRIS上,可以无需将自己的数据转移到别的矢量数据库上,就可以借助语言矢量化模型(例如all-MiniLM-L12-v2)和大语言内容生成模型(例如llama2),在本地构建自己的基于大语言模型和检索增强生成的解决方案了。

Qiao Peng · 二月 1, 2024 转到文章

建议考虑使用IRIS production, 通过开箱即用的Kafka适配器连接Kafka。production会自动管理与Kafka的连接,适配器会自动保持连接,并在连接异常时自动重试。

Qiao Peng · 十二月 2, 2022 转到文章

是的,2010里是无法导出OBJ的。在2012之后才有这个能力。
如果要迁移2010里的code,需要导出INT或CLS代码,然后在目标环境上导入并编译。

Qiao Peng · 十月 21, 2022 转到文章

还可以考虑用iknow(现在叫InterSystems NLP)实现全文检索

Qiao Peng · 十月 6, 2022 转到文章

带Z是UTC时间,使用下面的方法会将其转换为本地时间。

s x="2022-09-30T07:24:57.899Z"
w $Replace($ZDT($ZDTH(x,3,8),3,1),"-","/")
返回:2022/09/30 15:24:57

Qiao Peng · 九月 1, 2022 转到文章
最新docker引擎做了变化,运行IRIS的2022.2之前的版本,要增加一个参数--check-caps false,例如:
docker run --name test2 --publish 1972:1972 --publish 52773:52773 docker.iscinternal.com/intersystems/irishealth:2021.1.0.215.0 --check-caps false --key <keyfile-path>
Qiao Peng · 六月 16, 2022 转到文章
SAMPLES>s cls=##class(%Dictionary.ClassDefinition).%OpenId("Sample.Person")
SAMPLES>s cls2=cls.%ConstructClone(cls)
SAMPLES>s cls2.Name="User.Person"
SAMPLES>w cls2.%Save()
Qiao Peng · 六月 6, 2022 转到文章

应该是没开启SOAP测试页能力。搜一下三级等保文章,里面有介绍

Qiao Peng · 十二月 27, 2021 转到文章

可以封装一个REST服务用于前端api调用,这个REST服务根据不同api操作和路径,在后台调用不同服务器上的REST API或SQL操作。
或者也可以考虑使用InterSystems API管理器做这个事。

Qiao Peng · 十二月 24, 2021 转到文章

IRIS的镜像(Mirroring)支持多个报告类型(Reporting Asyncs)的异步成员,这些异步成员可以用于查询、报表运行、BI等多种场景。

Qiao Peng · 五月 24, 2021 转到文章

你是要遍历XML DOM树?可以如下使用:

ClassMethod Test()
{
    Set x="<?xml version=""1.0"" ?><root xmlns=""test"" xmlns:mc=""test1"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation=""test2""><!--this is a test--><id code=""test3""/></root>"

    try
    {

    $$$ThrowOnError(##class(%XML.XPATH.Document).CreateFromString(x, .doc))
    Set doc.PrefixMappings="s test"
    $$$ThrowOnError(doc.EvaluateExpression("/s:root", ".", .field))
    #dim obj As %XML.XPATH.DOMResult = field.GetAt(1)
    
    while obj.Read() 
    {
      if obj.HasValue 
      {
        write obj.Path,": ",obj.Value,!
      }
      if obj.HasAttributes
      {
          for i=1:1:obj.AttributeCount
          {
            d obj.MoveToAttributeIndex(i)
            w obj.Name,":",obj.Value,!
          }
      }
    }
    
  }catch(ex)
  {
    write "Error ", ex.DisplayString(),!
  }
}

输出:
xmlns:xml:http://www.w3.org/XML/1998/namespace
xmlns:test
xmlns:mc:test1
xmlns:xsi:http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation:test2
root\: this is a test
code:test3

Qiao Peng · 五月 24, 2021 转到文章

你要做哪些JSON操作?太早的版本使用某些JSON操作可能会比较麻烦。

Qiao Peng · 五月 24, 2021 转到文章

查看Cache'的对应服务是否开启,同时检查服务器是否开放了23端口。

Qiao Peng · 四月 24, 2021 转到文章

2016之后的版本,RSAEncrypt可以接收X.509证书或RSA公钥,而2016中RSAEncrypt接收证书参数。
Ensemble2016上使用RSAEncrypt,如果拿不到证书,仅用公钥,请联系InterSystems 销售工程师。

Qiao Peng · 四月 24, 2021 转到文章

返回值是1,说明报错了。确认一下是否OS命令写正确了。
另外,输出不是看返回值,是看输出的文件

Qiao Peng · 四月 24, 2021 转到文章

用$ZF(-1), 可以将OS命令输出保存到文件里。例如:
w $ZF(-1,"wmic CPU get ProcessorID > c:\temp\cpuinfo.txt")

Qiao Peng · 四月 23, 2021 转到文章

SAMPLES>s x=$system.Encryption.SHA1Hash("ensmble")
 
SAMPLES>s hashs="" f i=1:1:$l(x) s hashs=hashs_$zh(+$a($e(x,i)))
 
SAMPLES>w hashs
74BA9A6CBBC92F06D9B4166F9C5B4F7F8251AED

Qiao Peng · 四月 23, 2021 转到文章

是Windows吗?在Windows命令行,执行wmic CPU get ProcessorID,能得到CPU序列号吗?

Qiao Peng · 四月 23, 2021 转到文章

可以调用操作系统的命令来获取CPU序列号。例如在Cache' for Windows上,可以执行:
SAMPLES>s args=3
SAMPLES>s args(1)="CPU"
SAMPLES>s args(2)="get"
SAMPLES>s args(3)="ProcessorID"
SAMPLES>d $ZF(-100,"","wmic",.args)
ProcessorId
0FABFBFF000506EX
0FABFBFF000006EX
0FABFBFF000006EX
0FABFBFF000006EX

Qiao Peng · 四月 23, 2021 转到文章

看起来是Windows系统SSL认证方面的问题。建议先查查Windows日志,另外考虑一下是否Cache'最近做过SSL方面的修改吗?

Qiao Peng · 四月 19, 2021 转到文章

使用%request变量,它有属性CgiEnvs代表Cgi环境变量,然后找REMOTE_ADDR即可。例如: $G(%request.CgiEnvs("REMOTE_ADDR"))

Qiao Peng · 四月 18, 2021 转到文章

如果dll重新编译过,那么是需要重新生成代理类的;其它情况下并不需要。另外,Ensemble 2016里有.net 网关,通过Studio来建立dll代理类。不过它依然需要在dll代码发生变化时重新生成代理类。

这也是后续版本(尤其是InterSystems IRIS)推出动态对象网关的原因:通过动态网关就不用生成代理类了,从而避免因为.net/java端发生代码变更而需要重新生成代理类。
$ZF()对DLL没有特殊要求。

Qiao Peng · 四月 18, 2021 转到文章

在Ensemble 2016中,使用$ZF(-4)来操作DLL是Caché的Callout网关的底层实现之一。这种方式比较通用。
当然,如果这些DLL(ActiveX/COM)注册在Ensemble服务器上(Windows服务器),还有别的调用方式:使用Caché Activate 网关,用Studio来产生这些DLL的代理类,然后您就可以像使用Ensemble/Caché类一样使用这些DLL里的方法了。

Qiao Peng · 四月 18, 2021 转到文章

我想您的问题涉及3个方面:
1. 如何以SQL访问Ensemble的数据:
Ensemble的数据可以通过SQL操作。因此第三方SQL数据库可以直接将Ensemble作为一个SQL数据库,通过XDBC访问Ensemble,并使用SQL获取数据。
同样,Ensemble也可以通过link table直接操作第三方SQL数据库。
2. 如何发现数据在第三方数据库不存在?
这需要一些逻辑,例如通过时间戳、自增的ID等信息判断。
3. 批量快读:
听起来,不是要实时进行数据同步,而是要批量处理。批量处理可以使用多种方式:a. 小批量可以通过SQL输出适配器;b. 大批量可以绕过适配器/Production,直接以link table或其它方式处理,这样不需要产生消息,效率更高。