InterSystems极客俱乐部线上直播课“Health Connect系统运维培训”回放已准备好,欢迎您点击报名,扫码看回放!
第一章 类定义
描述类定义的结构。
介绍
一个类可以包含熟悉的类元素,如属性、方法和参数(在其他类语言中称为常量)。它还可以包含通常不在类中定义的项,包括触发器、查询和索引。
详细
类定义具有以下结构:
Import import_ppackage_list
Include include_code
IncludeGenerator include_generator_code
/// description
Class package.shortclassname Extends superclass_list [ class_keyword_list ]
{
Class_members
}
import_package_list(可选)指定类从中导入的任何包的名称。会影响编译器解析短类名的方式。
如果指定了此选项,则它可以是单个包的名称,也可以是多个包的逗号分隔列表,用括号括起来。
如果import_package_list为空,则不要在类定义的开头添加import行。
注意:如果一个类导入任何包,该类不会自动导入用户包。
导入的包继承自所有超类。如果一个子类指定了一个或多个导入包,这些导入包将被添加到由超类定义的任何导入包中。
include_code(可选)指定include (.inc)。编译此类时使用的文件。
第七章 将文件内容复制到另外文件
示例
本例显示了一个使用本文前面介绍的几个%Library.File方法的样例类。
在示例类Demo.FileDemo中,ProcessFile()方法接受输入文件和输出文件,并调用SetUpInputFile()和SetUpOutputFile()打开文件,一个用于读取,另一个用于写入。然后,它逐行读取输入文件,并调用ProcessLine()对每行的内容执行一个或多个替换,将每行的新内容写入输出文件。
/// 设置输入文件
/// 1. 创建文件对象
/// 2. 打开文件阅读
/// 3. 返回文件对象的句柄
ClassMethod SetUpInputFile(filename As %String) As %File
{
Set fileObj = ##class(%File).%New(filename)
Set status = fileObj.Open("RU")
if $$$ISERR(status) {
do $system.Status.DisplayError(status)
quit $$$NULLOREF
}
quit fileObj
}
/// 设置输出文件
/// 1. 为文件创建目录结构
/// 2. 创建文件对象
/// 3. 第六章 使用%File对象
如果想要操作文件本身,需要使用%Library.File的%New()方法实例化%File对象。该类还提供了允许使用该文件的实例方法。
注意:本节提供了几个使用%File对象的示例,以供说明。
对于简单的文件读写,使用%Stream.FileCharacter和%Stream.FileBinary。因为它们提供了额外的功能,例如,以正确的模式自动打开文件。
创建%File对象的实例
要使用文件,需要使用%New()方法实例化表示该文件的%File对象。该文件可能已经存在,也可能不存在于磁盘上。
以下示例在默认目录中为文件export.xml实例化一个%File对象。
set fileObj = ##class(%File).%New("export.xml")
打开和关闭文件
实例化%File对象后,需要使用open()方法打开文件,以读取或写入该文件:
USER>set status = fileObj.Open()
USER>write status
1
使用Close()方法关闭文件:
USER>do fileObj.Close()
检查%File对象的属性
一旦实例化了文件,就可以直接检查文件的属性。
USER>write fileObj.Name
export.xml
USER>write fileObj. 第五章 使用文件
使用文件
%Library.File类提供了几个类方法,允许对文件执行各种操作。
复制文件
若要复制文件,请使用CopyFile()方法,该方法返回一个布尔值来指示成功或失败。
此方法采用四个参数:
- from 从—指定源文件的名称。
- to至—指定目标文件的名称。
- pDeleteBeforeCopy —指定在执行复制之前是否删除目标文件(如果存在)。默认值为0。
- return 返回—输出参数。如果为负,则包含操作系统返回的错误代码,以防方法失败
下面的第一个示例将目录e:\temp中的文件old.txt复制到new.txt。第二个示例将相同的文件复制到默认目录中的new.txt。
DHC-APP>write ##class(%File).CopyFile("e:\temp\old.txt", "e:\temp\new.txt", 0, .return)
1
DHC-APP>write ##class(%File).CopyFile("e:\temp\old.txt", "new.txt", 0, .return)
1
最后一个示例失败,Windows错误代码为2,或“找不到文件”
DHC-APP>write ##class(%File).CopyFile("foo.txt", "new.txt", 0, . 第四章 使用目录
使用目录
%Library。File类提供了几个类方法,允许对目录执行各种操作。
创建目录
若要创建目录,请使用CreateDirectory()方法,该方法返回一个布尔值来指示成功或失败。这个方法需要两个参数。第一个参数是要创建的目录的名称。第二个参数是输出参数。如果为负,它包含操作系统返回的错误代码,以防方法失败。
如果e:\temp已经存在,以下命令将失败,并显示Windows系统错误代码183,这意味着“当文件已经存在时,无法创建该文件。”
DHC-APP>write ##class(%File).CreateDirectory("e:\temp", .return)
0
DHC-APP>w return
-183
如果e:\temp已经存在,但e:\temp\test不存在,则以下命令会失败,因为CreateDirectory()最多创建给定目录路径中的最后一个目录。所以返回的Windows系统错误代码是3,或者“系统找不到指定的路径。”
DHC-APP>write ##class(%File).CreateDirectory("e:\temp\test\this", .return)
0
DHC-APP>w return
-183
以下示例使用Windows系统代码0或“操作成功完成”成功完成
DHC-APP>write ##class(%File).大家好,我想请教一个问题,如何在Health Connect实现访问共享文件夹的文件 (对文件进行读取或者写入操作,非本地文件)
刚才好像发了一遍没成功
试用IRIS,关闭了workspace之后;再打开、没有project. 只能从打开最近的workspace中找,怎么回事噢?哈哈哈哈哈
第三章 处理文件和目录名
%Library.File类提供了几个可用于处理文件名和目录名的类方法。在大多数情况下,文件和目录不需要存在即可使用这些方法。
获取文件名和目录名
%Library.File类提供可用于获取部分文件名和目录名的类方法。
在给定完整路径名的情况下,使用GetDirectory()和GetFilename()分别获取目录和短文件名。对于此方法,不允许使用部分目录名。
DHC-APP>set filename = "e:\temp\config.txt"
DHC-APP>write ##class(%File).GetDirectory(filename)
E:\temp\
DHC-APP>write ##class(%File).GetFilename(filename)
config.txt
在给定文件名的情况下,使用CanonicalFilename()从根目录获取完整路径:
DHC-APP>set filename = "cache.dat"
DHC-APP>write ##class(%File).CanonicalFilename(filename)
e:\dthealth\db\dthis\data\cache.dat
DHC-APP>write ##class(%File).CanonicalFilename("foo. 第二章 使用文件和目录属性和属性
%Library.File类还提供了许多类方法,可以使用这些方法来获取有关文件和目录的信息,或者查看或设置它们的属性和属性。
检查文件和目录是否存在
要确定给定文件是否存在,请使用Existes()方法并指定文件名作为参数。例如:
DHC-APP>write ##class(%File).Exists("e:\temp\")
1
同样,要找出给定目录是否存在,请使用DirectoryExists()方法,并将该目录指定为参数。例如:
DHC-APP>write ##class(%File).DirectoryExists("e:\temp")
1
如前所述,这些方法在Unix上将文件或目录名视为区分大小写,但在Windows上不区分大小写。此外,如果指定部分文件名或目录名,则该方法引用的文件或目录相对于包含正在使用的命名空间的默认全局数据库的目录。例如:
DHC-APP>write ##class(%File).Exists("cache.dat")
1
查看和设置文件和目录权限
%Library.File类提供了许多类方法,可以使用这些方法查看或设置文件或目录的权限。
查看文件或目录是只读的还是可写的
给定文件或目录名,如果文件或目录是只读的,ReadOnly()方法返回1,否则返回0:
DHC-APP>write ##class(%File).亲爱的社区开发者们,大家好!
欢迎积极参与新一轮InterSystems开发者竞赛!
🏆InterSystems 编程大赛:人工智能与机器学习 🏆
竞赛时间: 2021年6月28日 - 7月25日
奖金总额: $8,750
与Windows上默认安装为服务随机自启动不同,我们在Linux上安装完InterSystems IRIS后,默认是没有配置系统服务的,需要做手动配置。本文提供使用systemd方式来配置InterSystems IRIS服务随机自启动的简单示例,供大家参考。
假设我们已经安装了InterSystems IRIS产品,安装完成后您可以通过iris list来来查看实例信息,包括安装路径,如:"/intersystems/iris"
[root@RHEL8-64-001 ~]# iris list
Configuration 'IRIS' (default)
directory: /intersystems/iris
versionid: 2021.2.0L.546.0
datadir: /intersystems/iris
conf file: iris.cpf (SuperServer port = 51773, WebServer = 52773)
status: running, since Mon May 31 05:03:09 2021
state: ok
product: InterSystems IRIS在安装完成后,用以下方式搜索不到iris.
第一章 查询目录和驱动器
%Library.File(简称%File)为处理文件和目录提供了广泛的API。本文将介绍该API的主要功能。有关属性、方法和查询的规范列表,请参见类参考。
注意:如果指定了部分文件名或目录名,这些方法中的大多数都引用的项相对于包含正在使用的命名空间的默认全局数据库的目录。该目录在本文中称为“默认目录”。这条规则的任何例外都在文章中注明。
此外,仅当基础操作系统将文件名和目录名视为区分大小写时,这些方法才会将文件名或目录名视为区分大小写。也就是说,文件或目录名在Unix上区分大小写,但在Windows上不区分大小写。
查询目录和驱动器
列出目录的内容
FileSet类查询列出目录的内容。此查询按顺序接受以下参数:
directory— 指定要检查的目录的名称。wildcards通配符 — 指定要匹配的文件名模式(如果有)。sortby排序依据 — 指定如何对结果进行排序。使用以下值之一:
Name名称—文件的名称(默认)Type类型—项目类型DateCreated创建日期—创建文件的日期和时间DateModified日期修改—文件上次修改的日期和时间Size大小—文件大小
includedirs—指定如何处理给定目录中的目录。如果此参数为真(1),查询将返回任何文件之前的所有目录,并且目录名忽略通配符参数。
嗨,开发者们,
你准备好迎接新的挑战了吗? 我们很高兴地宣布第一届InterSystems技术文章写作比赛:
从2021年7月15日至8月15日,写一篇与InterSystems技术有关的任何主题的文章!
每个人都有奖品: 在此期间,每个在DC上发表文章的人都将获得一个特别的奖品包!
大奖: Apple iPad
参加我们的新比赛,你的内容将被超过55K的月度读者看到! 详情如下。
Caché XML
第一章 InterSystems XML工具简介☆☆☆☆
第二章 从对象写入XML输出☆☆☆☆☆
第三章 指定输出的字符集☆☆☆☆☆
第四章 添加命名空间声明☆☆☆☆☆
第五章 生成XML元素☆☆☆☆☆
第六章 控制名称空间的使用☆☆☆☆☆
第七章 控制命名空间分配的外观☆☆☆☆☆
第八章 Other Options of the Writer☆☆☆☆☆
第九章 将XML导入到对象中☆☆☆☆☆
第十章 XML元素和属性☆☆☆☆☆
第十一章 重新定义读取器处理相关对象的方式☆☆☆☆☆
第十二章 XML其他示例☆☆☆☆☆
第十三章 将XML文档表示为DOM☆☆☆☆☆
第十四章 XML获取当前节点信息☆☆☆☆☆
第十五章 XML检查属性☆☆☆☆☆
第十六章 创建或编辑DOM☆☆☆☆☆
第十七章 加密XML文档☆☆☆
第十八章 签署XML文档☆☆☆
第十九章 使用%XML.TextReader☆☆☆☆☆
第二十一章 使用%XML.
第三十二章 XML基础知识概念
attribute
以下形式的名值对:
ID="QD5690"
属性位于元素中,如下所示,一个元素可以有任意数量的属性。
<Patient ID="QD5690">Cromley,Marcia N.</Patient>
CDATA区域
表示不应该验证的文本,如下所示:
<myelementname><![CDATA[
Non-validated data goes here.
You can even have stray "<" or ">" symbols in it.
]]></myelementname>
一个CDATA(字符数据)区段不能包含字符串]]>,因为这个字符串标志着区段的结束。
这也意味着CDATA区段不能嵌套。
注意,CDATA部分的内容必须符合为XML文档指定的编码,XML文档的其余部分也是如此。
comment
不是XML文档主数据的一部分的插入说明。 注释是这样的:
<!--Output for the class: GXML.PersonNS7-->
content model
对XML元素的可能内容的抽象描述。
第三十一章 检查命名空间和类
类%XML.Namespaces提供了两个类方法,可用于检查XML命名空间及其包含的类:
GetNextClass()
classmethod GetNextClass(namespace As %String,
class As %String) as %String
返回给定XML命名空间中给定类之后的下一个类(按字母顺序)。当没有更多的类时,此方法返回NULL。
GetNextNamespace()
classmethod GetNextNamespace(namespace As %String) as %String
返回给定命名空间之后的下一个命名空间(按字母顺序)。当没有更多的命名空间时,此方法返回NULL。
在这两种情况下,只考虑当前的InterSystems IRIS命名空间。此外,映射的类也会被忽略。
例如,以下方法列出当前InterSystems IRIS命名空间的XML命名空间及其类:
ClassMethod WriteNamespacesAndClasses()
{
Set ns=""
Set ns=##class(%XML.Namespaces).GetNextNamespace(ns)
While ns '=""
{
Write !2021年7月9日-11日,2021(16th) 中国卫生信息技术/健康医疗大数据应用交流大会暨软硬件与健康医疗产品展览会(CHITEC)在武汉国际博览中心(湖北省武汉市汉阳区鹦鹉大道619号)盛大召开,欢迎莅临InterSystems展位A6-16,了解备受瞩目的InterSystems IRIS医疗版互联互通套件。
第三十章 从类生成XML架构
本章介绍如何使用%XML.Schema从启用了XML的类生成XML架构。
概述
要生成为同一XML命名空间中的多个类定义类型的完整架构,请使用%XML.Schema构建架构,然后使用%XML.Writer为其生成输出。
从多个类构建架构
要构建XML架构,请执行以下操作:
- 创建
%XML.Schema实例。 - 可以选择设置实例的属性:
- 若要为任何其他未分配的类型指定命名空间,请指定
DefaultNamespace属性。默认值为NULL。 - 默认情况下,类及其属性的类文档包含在模式的
元素中。 要禁用此功能,请将IncludeDocumentation属性指定为0。
注意:必须在调用AddSchemaType()方法之前设置这些属性。
- 调用实例的
AddSchemaType()方法。
第二十九章 从XML架构生成类
Studio提供了一个向导,该向导读取XML模式(从文件或URL),并生成一组支持XML的类,这些类对应于模式中定义的类型。
所有的类都扩展%XML.Adaptor。
指定一个包来包含类,以及控制类定义细节的各种选项。
向导还可以作为类方法使用,也可以使用该类方法。 在内部,SOAP向导在读取WSDL文档并生成web客户端或web服务时使用此方法;
注意:使用的任何XML文档的XML声明都应该指明该文档的字符编码,并且文档应该按照声明的方式进行编码。如果未声明字符编码,InterSystems IRIS将使用本书前面的“输入和输出的字符编码”中描述的默认值。如果这些默认值不正确,请修改XML声明,使其指定实际使用的字符集。
使用向导
要使用XML架构向导,请执行以下操作:
- 选择 Tools > Add-Ins > XML Schema Wizard.

- 在第一个屏幕上,指定要使用的XML模式。 做以下其中一项:
- 对于模式文件Schema File,选择Browse 以选择XML模式文件。
- 对于URL,指定模式的URL。

- 选择Next。
下一个屏幕显示模式,以便可以验证选择了正确的模式。

- 可选择以下选项:
- 保留空类Keep Empty Classes,它指定是否保留没有属性的未使用的类。 如果选择此选项,则不会在向导结束时删除此类; 否则,将删除它们。
.png)



