当前位置: 首页 > news >正文

第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项

文章目录

  • 第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项
  • 设计注意事项

第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项

IRIS 可以在特定事件发生时执行自定义代码。需要两个步骤:

  1. 定义 ^%ZSTART 例程、^%ZSTOP 例程或两者。

    注意:^%ZSTART^%ZSTOP 不包含在 IRIS 中,必须由用户创建。

    在这些例程中,可以定义子例程以在特定活动开始或停止时执行。

    ^%ZSTART^%ZSTOP 必须在 %SYS 命名空间中创建和定义,尽管它们可以映射到非默认数据库。

  2. 使用管理门户配置 IRIS 以调用所需的子程序。

具体来说,如果定义例程 ^%ZSTART^%ZSTOP 并包含具有特定名称的子例程,系统会在活动开始或结束时自动调用这些子例程。子程序名称如下:

  • SYSTEM — 当 IRIS 作为系统启动或停止时执行
  • LOGIN — 当用户使用 %Service_ConsoleService_Telnet 服务执行登录或注销时执行。
  • JOB - 在 JOB 开始或结束时执行
  • CALLIN:— 在外部程序开始或完成 CALLIN 时执行

例如,当用户登录时,系统会自动调用 LOGIN^%ZSTART(如果已定义)并且已使用管理门户启用此子例程。

这些子例程并非旨在进行复杂的计算或长时间运行。长时间的计算或潜在的长时间操作(如网络访问)将延迟活动的完成,直到被调用的例程返回。在这种情况下,用户可能需要很长时间才能登录,或者 JOB 吞吐量可能会因为启动时间太长而减少。

注意:这些子程序作为正常 IRIS 操作的一部分被调用。这意味着异常终止 IRIS 的外部事件(例如电源故障)不会生成对 ^%ZSTOP 的调用。

注意:如果系统实现了 ^%ZSTOP,并且应用程序实现了一个或多个 $HALT 例程,则直到最后一个 $HALTHALT 命令终止时才执行 ^%ZSTOP 代码。 $HALT 例程未能发出其自己的 HALT 命令可能会阻止 ^%ZSTOP 代码运行。

设计注意事项

因为 ^%ZSTART^%ZSTOP 在某种程度上受限的环境中运行,设计者必须记住几件事,即:

  • 例程必须用 ObjectScript 编写。
  • 由于 ^%ZSTART 本质上就像使用无参数的新命令启动一样运行,因此它不能用于执行诸如为用户初始化局部变量之类的任务。
  • 当调用任何例程入口点时,没有值作为参数传递。如果不同的算法适用于各种情况,被调用的入口点必须通过检查例程外部的数据来确定要做什么:全局变量、系统变量等。
  • 确保例程在所有可能的条件下都表现良好。它们应该是防御性的。也就是说,他们应该检查以确保完成任务所需的所有资源都在手边,如果可能的话,在计算开始之前为他们预留这些资源。出现的错误被报告为系统功能的故障,因此从错误控制和处理的角度考虑设计是很重要的。在资源丢失或出现错误的情况下,未能正确考虑恢复会产生各种后果:系统间IRIS可能无法启动;Studio等主要功能可能行为怪异;或者可能发生更微妙和隐蔽的后果,而这些后果没有被立即发现。强烈建议在模拟条件下仔细编写和调试这些例程,然后在投入生产系统之前在模拟环境条件下进行测试。
  • 不应该假设在以前的调用或不同的入口点中发现的条件仍然有效。例如,在对JOB^%ZSTART的连续调用之间,前一个调用使用的文件可能已经在这个调用发生之前被删除了。
  • 每个入口点都应该有效地执行其任务。如果任务的一部分可能需要长时间运行,建议将足够的信息排队以完成任务,供应用程序的另一部分稍后完成。
  • 如果一个入口点希望持久地保存数据,比如出于统计的目的,它必须使用像全局或外部文件这样的东西来保存数据。
  • 例程应该对它们所运行的环境做最少的假设。例如,这些例程的开发人员不能假设程序总是在特定的作业号下执行。设计人员不能假定将以特定顺序调用各个入口点。提出实现 IRIS的多个过程的顺序很少是确定的。
  • 该例程不能假设它在系统启动期间的特定时间点被调用。启动过程中的事件顺序可能会因发布而异,甚至会因重启而改变。
  • 除了少数例外,例程必须让事情保持原样。作为这一原则的一个例证,在子例程中重新赋值$IO而不在进入和退出时保存和恢复它几乎是错误的来源。调用例程无法知道这些内容是否已更改,调用方很难防御执行环境的任何可能更改。因此,不干扰系统处理上下文的负担在于被调用的子例程。
  • 无更改规则的一般例外是允许更改特定于应用程序或安装的进程本地值。例如,SYSTEM^%ZSTART入口点可以设置系统范围的默认值。同样,对于应用程序测试,它可以将日期设置为特定值,以验证月末处理。
  • ^%ZSTOP不能包含对远程数据库中全局变量的引用。在调用它的时候,其中一些可能不再可以访问。
  • 一旦在关闭过程中调用 SYSTEM^%ZSTOP,用户将无法再使用 JOB 命令启动新进程。允许现有流程完成。
  • 如果这些例程映射到与 IRISSYS 不同的数据库,则 IRIS 将尝试从该数据库而不是 IRISSYS 执行它们。当然, IRIS 会事先确保调用例程具有对该数据库的适当访问权限。管理员有责任确保例程可以访问它从该命名空间所需的任何应用程序全局变量和映射。
  • SYSTEM^%ZSTARTSYSTEM^%ZSTOP$USERNAME 设置为 %SYSTEM$ROLES 设置为 %All 的情况下运行。要使用不同的用户名运行代码,请使用 $SYSTEM.Security.Login() 设置所需的名称,然后继续您的自定义代码。如果在 SYSTEM^%ZSTART 代码中使用 JOB 来启动任何其他进程,这些进程将继承与启动进程相同的用户名(和角色)。

注意:^%ZSTART^%ZSTOP 中的所有入口点都在系统操作的关键点调用,并且可能对系统操作甚至系统数据产生广泛影响。这些例程的特定用途使得这种高级特权成为必要。因此,必须确保这些入口点可以调用的所有代码都已经过全面测试。此外,不允许通过 XECUTE 或间接运行任何用户指定的代码。

  • 退出(即停止)进程可能会在任何需要分布式缓存集群数据服务器回答的引用上收到 <FUNCTION>错误。

注意:在升级时, IRIS 仅保留映射到 IRISSYS 数据库的 %Z* 例程,如果 .INT.MAC 代码可用,则重新编译它们。在其他数据库中保存例程是站点管理员的责任。

相关文章:

第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项

文章目录第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项设计注意事项第八章 使用 ^%ZSTART 和 ^%ZSTOP 例程自定义启动和停止行为 - 设计注意事项 IRIS 可以在特定事件发生时执行自定义代码。需要两个步骤&#xff1a; 定义 ^%ZSTART 例程、^%ZSTO…...

工作实战之拦截器模式

目录 前言 一、结构中包含的角色 二、拦截器使用 1.拦截器角色 a.自定义拦截器UserValidateInterceptor&#xff0c;UserUpdateInterceptor&#xff0c;UserEditNameInterceptor b.拦截器配置者UserInterceptorChainConfigure&#xff0c;任意组装拦截器顺序 c.拦截器管理者…...

某美颜app sig参数分析

之前转载过该app的文章&#xff0c;今天翻版重新整理下&#xff0c;版本号:576O5Zu56eA56eAYXBwIHY5MDgw (base64 解码)。 上来先抓个包&#xff1a; jadx搜索关键词 "sigTime"&#xff0c;然后定位到这里 看这行代码 cVar.addForm(INoCaptchaComponent.sig, genera…...

Linux - Linux系统优化思路

文章目录影响Linux性能的因素CPU内存磁盘I/O性能网络宽带操作系统相关资源系统安装优化内核参数优化文件系统优化应用程序软件资源系统性能分析工具vmstat命令iostat命令sar命令系统性能分析标准小结影响Linux性能的因素 CPU CPU是操作系统稳定运行的根本&#xff0c;CPU的速…...

2.Elasticsearch入门

2.Elasticsearch入门[toc]1.Elasticsearch简介Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。 能够达到实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速&#xff0c;安装使用方便。客户端支持Java、.NET&#xff08;C#&#xff09;、PHP、Pyth…...

RK3399平台开发系列讲解(应用开发篇)断言的使用

🚀返回专栏总目录 文章目录 一、什么是断言二、静态断言三、运行时断言沉淀、分享、成长,让自己和他人都能有所收获!😄 📢断言为我们提供了一种可以静态或动态地检查程序在目标平台上整体状态的能力,与它相关的接口由头文件 assert.h 提供。 一、什么是断言 在编程中…...

云原生系列之使用prometheus监控nginx

前言 大家好&#xff0c;又见面了&#xff0c;我是沐风晓月&#xff0c;本文主要讲解云原生系列之使用prometheus监控nginx 文章收录到 csdn 我是沐风晓月的博客【prometheus监控系列】专栏&#xff0c;此专栏是沐风晓月对云原生prometheus的的总结&#xff0c;希望能够加深自…...

第六届省赛——8移动距离(总结规律)

题目&#xff1a;X星球居民小区的楼房全是一样的&#xff0c;并且按矩阵样式排列。其楼房的编号为1,2,3...当排满一行时&#xff0c;从下一行相邻的楼往反方向排号。比如&#xff1a;当小区排号宽度为6时&#xff0c;开始情形如下&#xff1a;1 2 3 4 5 612 11 10 9 8 713 14 1…...

C++vector 简单实现

一。概述 vector是我们经常用的一个容器&#xff0c;其本质是一个线性数组。通过对动态内存的管理&#xff0c;增删改查数据&#xff0c;达到方便使用的目的。 作为一个线性表&#xff0c;控制元素个数&#xff0c;容量&#xff0c;开始位置的指针分别是&#xff1a; start …...

通用缓存存储设计实践

目录介绍 01.整体概述说明 1.1 项目背景介绍1.2 遇到问题记录1.3 基础概念介绍1.4 设计目标1.5 产生收益分析 02.市面存储方案 2.1 缓存存储有哪些2.2 缓存策略有哪些2.3 常见存储方案2.4 市面存储方案说明2.5 存储方案的不足 03.存储方案原理 3.1 Sp存储原理分析3.2 MMKV存储…...

sheng的学习笔记Eureka Ribbon

Eureka-注册中心Eureka简介官方网址&#xff1a;https://spring.io/projects/spring-cloud-netflixEureka介绍Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务注册和发现(请对比Zookeeper)。Zooleeper nacos.Eureka 采用了 C-S 的设计架构。Eureka Server 作为服…...

零代码工具我推荐Oracle APEX

云原生时代零代码工具我推荐Oracle APEX 国内的低码开发平台我也看了很多&#xff0c;感觉还是不太适合我这个被WEB抛弃的老炮。自从看了Oracle APEX就不打算看其它的了。太强大了&#xff0c;WEB服务器都省了&#xff0c;直接数据库到WEB页面。功能很强大&#xff0c;震撼到我…...

InstructGPT方法简读

InstructGPT方法简读 引言 仅仅通过增大模型规模和数据规模来训练更大的模型并不能使得大模型更好地理解用户意图。由于数据的噪声极大&#xff0c;并且现在的大多数大型语言模型均为基于深度学习的“黑箱模型”&#xff0c;几乎不具有可解释性和可控性&#xff0c;因此&…...

SpringCloud-5_模块集群化

避免一台Server挂掉&#xff0c;影响整个服务&#xff0c;搭建server集群创建e-commerce-eureka-server-9002微服务模块【作为注册中心】创建步骤参考e-commerce-eureka-server-9001修改pom.xml,加入依赖同9001创建resources/application.yml9002的ymlserver: # 修改端口号por…...

AQS底层源码深度剖析-BlockingQueue

目录 AQS底层源码深度剖析-BlockingQueue BlockingQueue定义 队列类型 队列数据结构 ArrayBlockingQueue LinkedBlockingQueue DelayQueue BlockingQueue API 添加元素 检索(取出)元素 BlockingQueue应用队列总览图 AQS底层源码深度剖析-BlockingQueue【重点中的重…...

Kotlin协程:Flow的异常处理

示例代码如下&#xff1a;launch(Dispatchers.Main) {// 第一部分flow {emit(1)throw NullPointerException("e")}.catch {Log.d("liduo", "onCreate1: $it")}.collect {Log.d("liudo", "onCreate2: $it")}// 第二部分flow …...

qt下ffmpeg录制mp4经验分享,支持音视频(h264、h265,AAC,G711 aLaw, G711muLaw)

前言 MP4&#xff0c;是最常见的国际通用格式&#xff0c;在常见的播放软件中都可以使用和播放&#xff0c;磁盘空间占地小&#xff0c;画质一般清晰&#xff0c;它本身是支持h264、AAC的编码格式&#xff0c;对于其他编码的话&#xff0c;需要进行额外处理。本文提供了ffmpeg录…...

C#读取Excel解析入门-1仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在

业务中也是同样的功能点实现。只是多扩展了很多代码&#xff0c;构成了项目的其他部分&#xff0c;枝干所在。但是有用的枝干&#xff0c;仅仅不超过三个主要的&#xff01;所以您仅仅围绕三个主要的为阵地&#xff0c;进行重点解析&#xff0c;就是最理性的应对上法所在了 str…...

一起Talk Android吧(第五百一十八回:在Android中使用MQTT通信五)

文章目录 知识回顾问题描述解决过程经验分享各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信五",本章回内容与前后章节内容无关联。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 我们在前面章回中介绍了如何使用MQTT通信,包含它…...

100种思维模型之混沌与秩序思维模型-027

人类崇尚秩序与连续性&#xff0c;我们习惯于我们的日常世界&#xff0c;它以线性方式运作&#xff0c;没有不连续或突跳。 为此&#xff0c;我们学会了期望各种过程以连续方式运行&#xff0c;我们的内心为了让我们更有安全感&#xff0c;把很多事物的结果归于秩序&#xff0c…...

Java开发 - Redis初体验

前言 es我们已经在前文中有所了解&#xff0c;和es有相似功能的是Redis&#xff0c;他们都不是纯粹的数据库。两者使用场景也是存在一定的差异的&#xff0c;本文目的并不重点说明他们之间的差异&#xff0c;但会简要说明&#xff0c;重点还是在对Redis的了解和学习上。学完本…...

Python - 使用 pymysql 操作 MySQL 详解

目录创建连接 pymsql.connect() 方法的可传参数连接对象 conn pymsql.connect() 方法游标对象 cursor() 方法使用示例创建数据库表插入数据操作数据查询操作数据更新操作数据删除操作SQL中使用变量封装使用简单使用&#xff1a; import pymysqldb pymysql.connect(host,user…...

机器学习-卷积神经网络CNN中的单通道和多通道图片差异

背景 最近在使用CNN的场景中&#xff0c;既有单通道的图片输入需求&#xff0c;也有多通道的图片输入需求&#xff0c;因此又整理回顾了一下单通道或者多通道卷积的差别&#xff0c;这里记录一下探索过程。 结论 直接给出结论&#xff0c;单通道图片和多通道图片在经历了第一…...

考研复试——计算机组成原理

文章目录计算机组成原理1. 计算机系统由哪两部分组成&#xff1f;计算机系统性能取决于什么&#xff1f;2. 冯诺依曼机的主要特点&#xff1f;3. 主存储器由什么组成&#xff0c;各部分有什么作用&#xff1f;4. 什么是存储单元、存储字、存储字长、存储体&#xff1f;5. 计算机…...

硬件设计 之摄像头分类(IR摄像头、mono摄像头、RGB摄像头、RGB-D摄像头、鱼眼摄像头)

总结一下在机器人上常用的几种摄像头&#xff0c;最近在组装机器人时&#xff0c;傻傻分不清摄像头的种类。由于本人知识有限&#xff0c;以下资料都是在网上搜索而来&#xff0c;按照摄像头的分类整理一下&#xff0c;供大家参考&#xff1a; 1.IR摄像头&#xff1a; IRinfr…...

PTA:C课程设计(2)

山东大学&#xff08;威海&#xff09;2022级大一下C习题集&#xff08;2&#xff09;2-5-1 字符定位函数&#xff08;程序填空题&#xff09;2-5-2 判断回文&#xff08;程序填空题&#xff09;2-6-1 数字金字塔(函数)2-6-2 使用函数求最大公约数(函数)2-6-3 使用函数求余弦函…...

第四章:面向对象编程

第四章&#xff1a;面向对象编程 4.1&#xff1a;面向过程与面向对象 面向过程(POP)与面向对象(OOP) 二者都是一种思想&#xff0c;面向对象是相对于面向过程而言的。面向过程&#xff0c;强调的是功能行为&#xff0c;以函数为最小单位&#xff0c;考虑怎么做。面向对象&…...

Linux 安装npm yarn pnpm 命令

下载安装包 node 下载地址解压压缩包 tar -Jxf node-v19.7.0-linux-x64.tar.xz -C /root/app echo "export PATH$PATH:/app/node-v16.9.0-linux-x64" >> /etc/profile source /etc/profile ln -sf /app/node-v16.9.0-linux-x64/bin/npm /usr/local/bin/ ln -…...

linux SPI驱动代码追踪

一、Linux SPI 框架概述 linux系统下的spi驱动程序从逻辑上可以分为3个部分: SPI Core&#xff1a;SPI Core 是 Linux 内核用来维护和管理 spi 的核心部分&#xff0c;SPI Core 提供操作接口&#xff0c;允许一个 spi master&#xff0c;spi driver 和 spi device 在 SPI Cor…...

Ls-dyna材料的相关学习笔记

Elastic Linear elastic materials -Isotropic:各向同性材料 -orthotropic 正交各向异性的 -anistropic 各向异性的...

自动生成图片的网站/谷歌是如何运营的

遇到这个 Java Serializable 序列化这个接口&#xff0c;我们可能会有如下的问题a&#xff0c;什么叫序列化和反序列化b&#xff0c;作用。为啥要实现这个 Serializable 接口&#xff0c;也就是为啥要序列化c&#xff0c;serialVersionUID 这个的值到底是在怎么设置的&#xff…...

荣耀手机商城官方网站/优化seo深圳

这两者最简单明了的区别就是&#xff1a; 打造全网web前端全栈资料库&#xff08;总目录&#xff09;看完学的更快&#xff0c;掌握的更加牢固&#xff0c;你值得拥有&#xff08;持续更新&#xff09; 静态页面是不能随时改动的&#xff0c;静态是一次性写好放在服务器上进行浏…...

如何设置网站默认首页/新乡网络推广外包

如何把一个表中的数据插入到另一个表中去 我有两个表&#xff0c;员工&#xff08;编号&#xff0c;姓名&#xff0c;小时工资&#xff09;表和工资&#xff08;编号&#xff0c;姓名&#xff0c;月份&#xff0c;开始时间&#xff0c;结束时间&#xff0c;小时工资&#xff09…...

月夜影院/怎么样优化网站seo

求素数只需要到i*i<x for(int i2; i*i<x i) 1、素数&#xff0c;所以没有1&#xff0c;从2开始。 2、一个数如果不是素数&#xff0c;最大的因子该是小于等于x/2&#xff0c;在大根本没法除。 3、进一步确定到根号x&#xff0c;一个数如果不是素数&#xff0c;意味着一定…...

淘宝客网站怎么做的/市场调研分析报告怎么写

发现美术给过来的资源&#xff0c;集合到unity后&#xff0c;发现用Spine的默认材质Spine/Skeleton有毛边问题。对比demo的图片后发现demo的图片&#xff08;都是png格式&#xff09;没有白色块&#xff0c;而自己的图片有。 原因是Spine工具导出png图片的时候没有选择premulti…...

wordpress 地址插件/seopeixun

1、为什么使用em em也是css中的一种单位&#xff0c;和px类似。很多人会疑惑为什么有了px之后还要使用em&#xff0c;而且em使用起来相对于px来讲比较麻烦。 em主要是应用于弹性布局&#xff0c;下面给出一个小栗子说明em的强大之处 <!DOCTYPE html> <html lang"…...