首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intersystems caché-以编程方式创建新类

Intersystems caché-以编程方式创建新类
EN

Stack Overflow用户
提问于 2015-02-19 13:16:58
回答 2查看 1.1K关注 0票数 2

是否可以编写ObjectScript方法,该方法将在命名空间中创建新类并进行编译?我的意思是以编程方式创建新类并存储它。如果是这样的话,我以后可以使用ObjectScript编辑这个类(并重新编译)吗?

原因:我在string变量中定义了类结构,我需要根据这个字符串向命名空间添加新的类。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-19 14:09:09

没有什么不可能。Caché中的所有内容都可以通过编程方式创建。而且,类不是一种执行。至少有两种方法可以做到:

  • 简单的SQL查询创建表,将创建一个类。
  • 正如您已经提到的,ObjectScript代码可以做到这一点。

定义在其他类中的任何类的所有定义。你可以在包%字典里找到。

在%Diction.ClassDefinition中定义的类本身。它们具有一些属性,用于定义类的任何部分。所以,这是一个简单的代码,它用一个属性创建一些类。

代码语言:javascript
复制
set clsDef=##class(%Dictionary.ClassDefinition).%New()
set clsDef.Name="package.classname"
set clsDef.Super="%Persistent"

set propDef=##class(%Dictionary.PropertyDefinition).%New()
set propDef.Name="SomeProperty"
set propDef.Type="%String"

do clsDef.Properties.Insert(propDef)

do clsDef.%Save()

在最新版本中,还有一种创建/更改类的方法。如果您有类的文本,您可以在Studio中看到它。然后,您可以使用类%Compiler.UDL.TextServices在Caché中加载它。

票数 3
EN

Stack Overflow用户

发布于 2015-02-19 13:58:13

是的,是这样的。您可能希望使用%Dictionary.ClassDefinition和相关的%Dictionary.*Definition类(特别是%Dictionary.PropertyDefinition%Dictionary.MethodDefinition%Dictionary.IndexDefinition)来创建和/或修改类。如果您的字符串包含一些合理的数据表示,您应该能够以这种方式创建该类。

实际的类文档可以在http://docs.intersystems.com/cache20141/csp/documatic/%25CSP.Documatic.cls?CLASSNAME=%25Dictionary.ClassDefinition上获得。

然后,可以通过调用$system.OBJ.Compile("YourPackage.YourClass","ck")来编译该类。

(注意:如果字符串包含类的导出XML定义,还可以将XML表示写入流中,然后调用$system.OBJ.LoadStream()导入XML定义。我只建议您首先使用导出的类定义。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28607416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档