InterSystems 开发者社区汇聚了 17,893 位出色的开发者
InterSystems IRIS 程序员可以在这里学习、分享、了解最新动态、成长,以及收获快乐!

针对新近面向中国推出的InterSystems IRIS医疗版互联互通套件,InterSystems将在9月17日(本周五)举办“InterSystems IRIS医疗版互联互通套件”线上发布会,会议详情如下,欢迎点击“此处”或扫描下方二维码报名。此次会议为邀请参会制,收到您的报名信息后,我们会及时与您确认参会资格并发送会议链接。

0 0
0 87
文章
· 九月 22, 2021 阅读大约需 7 分钟
IRIS 2021 技术文档 First Look 9--ADO.NET 和 InterSystems 产品

技术概要:ADO.NET 和 InterSystems 产品

本技术概要(First Look)解释了如何通过 InterSystems ADO.NET Managed Provider 连接到 InterSystems IRIS®数据平台。一旦根据本指南完成操作,就意味着您已经配置了一个 Visual Studio 项目来使用 InterSystems.Data.IRISClient.dll 程序集,建立了到 InterSystems IRIS 的 ADO.NET 连接,从您的 .NET 应用程序运行多个 SQL 语句,并在 InterSystems IRIS 系统管理门户(InterSystems IRIS System Management Portal)中确认这些语句的效果。

0 0
0 160
文章
· 十月 17, 2021 阅读大约需 7 分钟
第四十八章 SQL命令 GRANT(二)

第四十八章 SQL命令 GRANT(二)

GRANT COLUMN-权限

列权限授予用户或角色对指定表或视图上的指定列列表的指定权限。这允许访问某些表列,而不允许访问同一表的其他列。这提供了比GRANT OBJECT-PRIVICATION选项更具体的访问控制,后者定义了整个表或视图的权限。向被授权者授予权限时,应为表授予表级权限或列级权限,但不能同时授予两者。SELECTINSERTUPDATEREFERENCES权限可用于授予对单个列中数据的访问权限。

对具有GRANT OPTION的表具有SELECTINSERTUPDATEREFERENCES对象权限的用户可以向其他用户授予该表的列的相同类型的列权限。

可以指定单个列,也可以指定逗号分隔的列列表。列列表必须用括号括起来。列名可以按任意顺序指定,允许重复。将COLUMN特权授予已具有该特权的列不起作用。

0 0
0 69
文章
· 十一月 2, 2021 阅读大约需 7 分钟
IRIS 2021 技术文档 First Look 13 - InterSystems IRIS Native API for Java

本文档解释了如何使用 InterSystems IRIS Native 功能从 Java 应用程序中访问 InterSystems IRIS®数据平台的 globals。在本文中,您将首先连接到 InterSystems IRIS。然后您将在 InterSystems IRIS 中设置和检索一个 global 节点的值,并在另一个 global 节点上进行迭代。您还将调用 InterSystems IRIS 类方法。所有这些活动都将在 Java 应用程序中执行。
为了让您体验 IRIS Native,而又不陷入细节困境,本次探索特意设计得很简单。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 IRIS Native 引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 IRIS Native 的探索与真实的情况相混淆! 本文档末尾提供的参考资料将使您对在生产中使用 IRIS Native 的情况有一个很好的了解。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。

0 0
0 150
文章
· 十一月 17, 2021 阅读大约需 5 分钟
开发Ensemble REST服务

REF: https://docs.intersystems.com/healthconnectlatest/csp/docbook/Doc.View.c...

REF: https://docs.intersystems.com/healthconnectlatest/csp/docbook/DocBook.UI...

开发REST服务有两个方式, 一个是生生的写代码, 定义接口的标准,被称为"Manually Coding"。第2个方式是目前越来越流行的"Sepcification-first",也就是使用描述性的语言定义接口规范,然后通过这个规范生成接口代码。第2种方式更快捷,但这里我还是从第一种介绍起,对理解里面的代码层次更容易一些,而这是调试一个接口必须的。

从代码开发REST服务

0 0
1 188
文章
· 十一月 25, 2021 阅读大约需 4 分钟
第八十七章 SQL命令 VALUES

第八十七章 SQL命令 VALUES

指定字段中使用的数据值的INSERT/UPDATE子句。

大纲

(field1{,fieldn})
     VALUES (value1{,valuen})

参数

  • field - 字段名或以逗号分隔的字段名列表。
  • value - 值或以逗号分隔的值列表。
    每个值被赋给相应的字段。

描述

VALUES子句用于INSERTUPDATEINSERT or UPDATE语句中,以指定要插入到字段中的数据值。
通常:

0 0
0 52
文章
· 十二月 7, 2021 阅读大约需 4 分钟
第八章 SQL谓词 FOR SOME

第八章 SQL谓词 FOR SOME

确定是否根据字段值的条件测试返回记录。

大纲

FOR SOME (table [AS t-alias]) (fieldcondition)

参数

  • table - Table可以是单个表,也可以是用逗号分隔的表列表。
    括号是必须的。
  • AS t-alias - 可选-前一个表名的别名。
    别名必须是有效的标识符;
    它可以是一个分隔符。

  • fieldcondition - fieldcondition 指定一个或多个引用一个或多个字段的条件表达式。
    字段条件用括号括起来。
    可以使用AND(&)OR(!)逻辑操作符在字段条件中指定多个条件表达式。

0 0
0 81
文章
· 一月 6, 2022 阅读大约需 1 分钟
第十六章 SQL函数 ABS

第十六章 SQL函数 ABS

返回数值表达式的绝对值的数值函数。

大纲

ABS(numeric-expression)

{fn ABS(numeric-expression)}

参数

  • numeric-expression - 要返回其绝对值的数字。

ABS返回与数字表达式相同的数据类型。

描述

ABS返回绝对值,它总是0或正数。
如果数值表达式不是一个数字(例如,字符串'abc',或空字符串''),ABS返回0
当传递null值时,ABS返回<null>

请注意,ABS可以用作ODBC标量函数(带有花括号语法),也可以用作SQL通用函数。

0 0
0 47
文章
· 一月 24, 2022 阅读大约需 1 分钟
第三十三章 SQL函数 COT

第三十三章 SQL函数 COT

标量数值函数,返回角度的余切值(以弧度为单位)。

大纲

{fn COT(numeric-expression)}

参数

  • numeric-expression - 数值表达式。
    这是一个用弧度表示的角。

COT返回NUMERICDOUBLE数据类型。
如果数值表达式是数据类型DOUBLE, COT返回DOUBLE;
否则,返回NUMERIC

0 0
0 50
文章
· 一月 30, 2022 阅读大约需 1 分钟
第三十九章 SQL函数 DATABASE

第三十九章 SQL函数 DATABASE

返回数据库名称限定符的标量字符串函数。

大纲

{fn DATABASE()}

描述

DATABASE返回与连接句柄对应的数据库名称的当前限定符。
在IRIS中,DATABASE总是返回空字符串(")。

0 0
0 72

最新一期“极客聊吧”,InterSystems销售工程师们聊了聊这些话题:为什么有些医院和某些商保之间可以直接结算,有些又不能?医院和保险之间的结算难在哪儿?在InterSystems 2021全球线上峰会中提到的医保结算案例对国内实践有哪些借鉴意义?FHIR又能起到什么关键作用?医疗数据实现互联互通的关键是什么?来听听的答案。

0 0
0 117
文章
· 三月 2, 2022 阅读大约需 3 分钟
密码有多安全?

如何检查密码是否足够强大,使其不会很快被破解? 又如何制作一个强大的密码?

我开发了一个工具,可能对这个问题有帮助。你可以在OpenExchange上找到它。用zpm安装。

zpm "install passwords-tool"

这个模块将只安装一个类 caretdev.Passwords中,其中包含一些有用的方法。

安全密码

要获得一个安全的密码,通常只需使用大写和小写的字母、数字和特殊符号,而且至少要有8个符号的长度。

Generate方法使用的参数:

0 0
0 82
文章
· 三月 10, 2022 阅读大约需 4 分钟
第七十七章 SQL函数 LENGTH

第七十七章 SQL函数 LENGTH

返回字符串表达式中字符数的字符串函数。

大纲

LENGTH(string-expression)

{fn LENGTH(string-expression)}

参数

  • string-expression - 字符串表达式,可以是列名、字符串文字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHARVARCHAR)。

LENGTH 返回 INTEGER 数据类型。

描述

LENGTH 返回一个整数,表示给定字符串表达式的字符数,而不是字节数。字符串表达式可以是字符串(从中删除尾随空格)或数字( IRIS 将其转换为规范形式)。

请注意,LENGTH 可用作 ODBC 标量函数(使用花括号语法)或 SQL 通用函数。

0 0
0 47
文章
· 三月 24, 2022 阅读大约需 3 分钟
创建REST 服务

REST是一种架构风格,而不是一种格式。尽管REST经常使用HTTP来传输消息,使用JSON来传递数据,但你也可以用XML或纯文本来传递数据。REST利用了现有的网络标准,如HTTP、URL、XML和JSON。

虽然它可以使用XML来描述数据,但它更常使用JSON,这是一个轻量级的数据封装器。

InterSystems REST服务

InterSystems REST服务由以下组件组成:

规范类(%REST.Spec的一个子类):这个类包含了REST服务的OpenAPI 2.0规范(Swagger)。InterSystems支持几个扩展属性,你可以在规范中使用。

调度类(%CSP.REST的一个子类):这个类负责接收HTTP请求并在实现类中调用合适的方法。

0 0
0 96
文章
· 四月 7, 2022 阅读大约需 1 分钟
第105章 SQL函数 %OID

第105章 SQL函数 %OID

返回 ID 字段的 OID 的标量函数。

大纲

%OID(id_field)

参数

  • id_field - ID 字段或引用字段的字段名称。

描述

%OID 采用字段名称并返回对象的完整 OID(对象 ID)。该字段必须是 ID 字段或引用字段(外键字段)。在 id_field 中指定任何其他类型的字段会生成 SQLCODE -1 错误。

示例

以下示例显示了与引用字段一起使用的 %OID

0 0
0 47
文章
· 四月 13, 2022 阅读大约需 7 分钟
用Globals 作为图数据库来存储和抽取图结构数据

image

这篇文章是对我的  iris-globals-graphDB 应用的介绍。
在这篇文章中,我将演示如何在Python Flask Web 框架和PYVIS交互式网络可视化库的帮助下,将图形数据保存和抽取到InterSystems Globals中。

建议

 

第一步 : 通过使用Python 原生SDK建立与IRIS Globals的链接

 #create and establish connection
  if not self.iris_connection:
         self.iris_connection = irisnative.createConnection("localhost", 1972, "USER", "superuser", "SYS")
                                     
  # Create an iris object
  self.iris_native = irisnative.createIris(self.iris_connection)
  return self.iris_native

 

第二步 : 使用 iris_native.set( ) 功能把数据保存到Globals 里     

#import nodes data from csv file
isdefined = self.iris_native.isDefined("^g1nodes")
if isdefined == 0:
    with open("/opt/irisapp/misc/g1nodes.csv", newline='') as csvfile:

 reader = csv.DictReader(csvfile)
 for row in reader:
    self.iris_native.set(row["name"], "^g1nodes", row["id"])

 #import edges data from csv file
 isdefined = self.iris_native.isDefined("^g1edges")
 if isdefined == 0:
    with open("/opt/irisapp/misc/g1edges.csv", newline='') as csvfile:
 reader = csv.DictReader(csvfile)
 counter = 0                
 for row in reader:
    counter = counter + 1
    #Save data to globals
    self.iris_native.set(row["source"]+'-'+row["target"], "^g1edges", counter)  

 

第三步: 使用iris_native.get() 功能把节点和边缘数据从Globals传递给PYVIS

 #Get nodes data for basic graph    
  def get_g1nodes(self):
        iris = self.get_iris_native()
        leverl1_subscript_iter = iris.iterator("^g1nodes")
        result = []
        # Iterate over all nodes forwards
        for level1_subscript, level1_value in leverl1_subscript_iter:
            #Get data from globals
            val = iris.get("^g1nodes",level1_subscript)
            element = {"id": level1_subscript, "label": val, "shape":"circle"}
            result.append(element)            
        return result

    #Get edges data for basic graph  
    def get_g1edges(self):
        iris = self.get_iris_native()
        leverl1_subscript_iter = iris.iterator("^g1edges")
        result = []
        # Iterate over all nodes forwards
        for level1_subscript, level1_value in leverl1_subscript_iter:
            #Get data from globals
            val = iris.get("^g1edges",level1_subscript)
            element = {"from": int(val.rpartition('-')[0]), "to": int(val.rpartition('-')[2])}
            result.append(element)            
        return result

 

Step4: Use PYVIS Javascript to generate graph data

<script type="text/javascript">
    // initialize global variables.
    var edges;
    var nodes;
    var network;
    var container;
    var options, data;
  
    // This method is responsible for drawing the graph, returns the drawn network
    function drawGraph() {
        var container = document.getElementById('mynetwork');
        let node = JSON.parse('{{ nodes | tojson }}');
        let edge = JSON.parse('{{ edges | tojson }}');
     
        // parsing and collecting nodes and edges from the python
        nodes = new vis.DataSet(node);
        edges = new vis.DataSet(edge);

        // adding nodes and edges to the graph
        data = {nodes: nodes, edges: edges};

        var options = {
            "configure": {
                "enabled": true,
                "filter": [
                "physics","nodes"
            ]
            },
            "nodes": {
                "color": {
                  "border": "rgba(233,180,56,1)",
                  "background": "rgba(252,175,41,1)",
                  "highlight": {
                    "border": "rgba(38,137,233,1)",
                    "background": "rgba(40,138,255,1)"
                  },
                  "hover": {
                    "border": "rgba(42,127,233,1)",
                    "background": "rgba(42,126,255,1)"
                 }
                },

                "font": {
                  "color": "rgba(255,255,255,1)"
                }
              },
            "edges": {
                "color": {
                    "inherit": true
                },
                "smooth": {
                    "enabled": false,
                    "type": "continuous"
                }
            },
            "interaction": {
                "dragNodes": true,
                "hideEdgesOnDrag": false,
                "hideNodesOnDrag": false,
                "navigationButtons": true,
                "hover": true
            },

            "physics": {
                "barnesHut": {
                    "avoidOverlap": 0,
                    "centralGravity": 0.3,
                    "damping": 0.09,
                    "gravitationalConstant": -80000,
                    "springConstant": 0.001,
                    "springLength": 250
                },

                "enabled": true,
                "stabilization": {
                    "enabled": true,
                    "fit": true,
                    "iterations": 1000,
                    "onlyDynamicEdges": false,
                    "updateInterval": 50
                }
            }
        }
        // if this network requires displaying the configure window,
        // put it in its div
        options.configure["container"] = document.getElementById("config");
        network = new vis.Network(container, data, options);
        return network;
    }
    drawGraph();
</script>

 

第五步: 从app.py 主文件调用上面的代码

#Mian route. (index)
@app.route("/")
def index():
    #Establish connection and import data to globals
    irisglobal = IRISGLOBAL()
    irisglobal.import_g1_nodes_edges()
    irisglobal.import_g2_nodes_edges()

    #getting nodes data from globals
    nodes = irisglobal.get_g1nodes()
    #getting edges data from globals
    edges = irisglobal.get_g1edges()

    #To display graph with configuration
    pyvis = True
    return render_template('index.html', nodes = nodes,edges=edges,pyvis=pyvis)    

下面是关于此项目的 介绍视频:

0 0
0 161
文章
· 四月 19, 2022 阅读大约需 1 分钟
第117章 SQL函数 REPLICATE

第117章 SQL函数 REPLICATE

将字符串重复指定次数的字符串函数。

大纲

REPLICATE(expression,repeat-count)

参数

  • expression - 要重复的字符串表达式。
  • repeat-count - 重复的次数,以整数表示。

描述

注意:REPLICATE 函数是 REPEAT 函数的别名。提供 REPLICATE 是为了与 TSQL 兼容。有关详细信息,请参阅重复。

0 0
0 48

在HIMSS 2022的一次讨论中,小组成员讨论了长期执行登陆火星任务的健康挑战,以及新的交互如何保证宇航员的安全。

将人类送上火星的任务是一项艰巨的任务。但是在这些开创性的旅程中,对宇航员健康主要风险相关的关注却小得令人吃惊。

"你会认为太空飞行真的很复杂,但我们把它归结为五个方面,"美国宇航局总部NASA的首席科学家和科技利用经理朱莉-罗宾逊在HIMSS22的一个小组讨论会上说。

"而且我们在地球上以及在当前和计划中的太空任务中模拟了未来的火星任务。我们利用我们所做的每一次任务来推进我们对如何在未来任务中保持船员安全和健康的理解。"

载人航天飞行期间的这五个主要危险包括:辐射;隔离和禁闭,如长期与相同的人困在一个狭小的空间里的行为和社会心理影响;远离地球,因为你不能离开或迅速与家乡的其他人沟通;失重;以及不友好和封闭的环境,因为宇航员不断重复使用水和重新呼吸相同的空气。

但是美国宇航局可以在地球上和国际空间站上模拟其中一些健康风险,为前往火星的长期任务做准备。这也是将人类送回月球的Artemis计划的一个目标。

Artemis计划将对这些重力、辐射、环境和隔离风险提供一个更好的模拟。当然,月球比火星离家近得多,通信延迟将短得多。

0 0
0 64

所有人现在可以在 https://evaluation.intersystems.com下载IRIS和IRIS for Health社区和企业版 。

客户以及潜在客户都可以尝试我们最新最强的功能,包括一些还没有发布的新特性。

如何访问:

对于潜在客户,只要选择名称中带有"(预览)"的选项,就可以下载预览软件。

对于客户和InterSystems员工--只需拨动预览复选框,这将包括可用版本菜单下拉中的预览软件:

0 0
0 134