美文网首页
第二十一章 调用Callout Library函数 - 使用$Z

第二十一章 调用Callout Library函数 - 使用$Z

作者: Cache技术分享 | 来源:发表于2024-01-11 09:06 被阅读0次

第二十一章 调用Callout Library函数 - 使用$ZF(-6)接口封装库函数

使用$ZF(-6)接口封装库函数

$ZF(-6) 接口编写一个示例非常简单,其工作方式与 $ZF(-5) 接口的示例类似(请参阅前面的“使用 $ZF(-5) 通过系统 ID 访问库”在本章中),但这并不能证明使用 $ZF(-6) 的优点。相反,本节将介绍 ObjectScript 类,这些类允许最终用户执行完全相同的任务,而无需了解有关标注库的内容或位置的任何信息。

$ZF(-5) 示例调用Calloutinputlibrary.dlloutputlibrary.dll 中的函数来处理一些实验数据并生成可用于绘制图形的二维数组。本节中的示例使用以下 ObjectScript 代码执行相同的任务:

  • User.SystemIndex 类 — 封装用于定义系统索引表中条目的文件名和索引号。
  • User.GraphData 类 — 提供封装两个库中函数的方法。
  • 方法 GetGraph() — 是调用 User.GraphData 方法的最终用户程序的一部分。此方法中的代码执行与 $ZF(-5) 示例完全相同的任务,但从不直接调用 $ZF 函数。
    User.SystemIndex类允许使用Callout 库的应用程序创建和访问系统索引条目,而无需硬编码索引号或文件位置:

ObjectScriptUser.SystemIndex

Class User.SystemIndex Extends %Persistent
{
/// Defines system index table entries for the User.GraphData libraries
ClassMethod InitGraphData() As %Status
{
 // For each library, delete any existing system index entry and add a new one
    set sc = $ZF(-4,4,..#InputLibraryID)
    set sc = $ZF(-4,5,..#InputLibraryID,"c:\intersystems\iris\bin\inputlibrary.dll")
    set sc = $ZF(-4,4,..#OutputLibraryID)
    set sc = $ZF(-4,5,..#OutputLibraryID,"c:\intersystems\iris\bin\outputlibrary.dll")
    quit 0
}

Parameter InputLibraryID = 100;
Parameter OutputLibraryID = 200;
}
  • InitGraphData() 方法将 User.GraphData 的库添加到系统索引表中。当 IRIS 实例启动时,它可以被自动调用,使库可供实例内的所有进程使用。
  • InputLibraryIDOutputLibraryID 类参数可用,以便相关应用程序不必对索引值进行硬编码(如以下示例中 User.GraphDataInit() 方法所示)。

User.GraphData 类允许最终用户调用库函数,而无需了解有关实际 Callout 库的任何信息。

ObjectScriptUser.GraphData

Class User.GraphData Extends %Persistent
{
/// Gets library IDs and updates the system index table for both libraries.
Method Init() As %Status
{
    set InLibID = ##class(User.GraphDataIndex).%GetParameter("InputLibraryID")
    set OutLibID = ##class(User.GraphDataIndex).%GetParameter("OutputLibraryID")
    quit ##class(User.SystemIndex).InitGraphData()
}
Property InLibID As %Integer [Private];
Property OutLibID As %Integer [Private];

/// Calls function "FormatData" in library "inputlibrary.dll"
Method FormatData(rawdata As %Double) As %String
{
    quit $ZF(-6,..InLibID,1,rawdata)
}
/// Calls function "RefineData" in library "outputlibrary.dll"
Method RefineData(midvalue As %String) As %String
{
    quit $ZF(-6,..OutLibID,1,midvalue)
}
/// Calls function "PlotGraph" in library "outputlibrary.dll"
Method PlotGraph(datapoint As %String, xvalue As %Integer) As %String
{
    quit $ZF(-6,..OutLibID,2,datapoint,xvalue)
}
/// Unloads both libraries
Method Unload() As %String
{
    set sc = $ZF(-4,4,..InLibID)   // unload "inputlibrary.dll"
    set sc = $ZF(-4,4,..OutLibID)   // unload "outputlibrary.dll"
    quit 0
}
}
  • Init() 方法调用 User.SystemIndex 中的类方法,该方法将设置或更新 inputlibrary.dlloutputlibrary.dll 的系统索引条目。它还获取库 ID 的当前值。此类的开发人员仍然需要了解有关 Callout 库代码的一些信息,但将来对系统索引的更改将是透明的。
  • FormatData()RefineData()PlotGraph() 方法均封装了对一个库函数的调用。由于它们仅包含无条件 ZF 函数调用,因此它们将被优化为与原始ZF 调用一样快地运行。

以下示例演示了最终用户如何使用 User.GraphData 中的方法。 GetGraph() 方法使用 Callout 库执行与 $ZF(-5) 接口示例中的 GraphSomeData() 方法完全相同的任务(请参阅前面的“使用 $ZF(-5) 通过系统 ID访问库”)本章),但它不直接调用任何$ZF` 函数:

相关文章

  • #python入门3#函数

    调用官方函数 函数参考 https://docs.python.org/3/library/functions.h...

  • 《Effective OC》精读笔记(1)—— 熟悉OC

    第一章:熟悉OC 第一条:OC是消息型语言,使用“消息结构”而非“函数调用”。 消息调用与函数的区别: ...

  • RStudio 自行判断安装调用包

    在R中,library() 与 require() 函数都可以调用包。不同之处在于,假设包未安装,library(...

  • Kotlin 函数

    函数声明 Kotlin 中的函数使用 fun 关键字声明: 函数用法 调用函数使用传统的方法: 调用成员函数使用点...

  • swift函数与闭包

    一:声明函数,调用函数: 使用func 来声明一个函数,使用名字和参数来调用函数,使用->来制定函数返回值。形式:...

  • [记录]iOS

    marshingc#调用oc的回掉函数不能用闭包实现 library not founddllimport选项,o...

  • 函数1

    python内置了很多函数,可以直接调用 http://docs.python.org/3/library/fun...

  • Kotlin 小细节记录(7)函数-高阶函数-Lambda

    函数-高阶函数-Lambda 1. 函数调用省略 函数调用省略invoke() 直接使用 (......) 2. ...

  • JavaScript - this与函数的四种调用方式

    在 ES6 之前,函数内部 this 的指向是由该函数的调用方式来决定的 函数调用方式 使用函数调用方式调用函数时...

  • JavaScript面向对象继承

    1、函数的调用方式 既可以使用函数名+()的形式调用,也可以使用函数名+call()的形式调用; 两种调用方式的区...

网友评论

      本文标题:第二十一章 调用Callout Library函数 - 使用$Z

      本文链接:https://www.haomeiwen.com/subject/axltodtx.html