# 系统
# 导入
通过如下方式导入系统api
import sys from "svr-api/sys";
# 方法
/**
* 系统相关API,包括产品的、jvm的和操作系统的
*/
/**
* 根据访问本系统的URL 获取第三方系统在于本系统URL在同一个局域网中的地址或者代理地址
*/
export function getIntranetUrlMapping(extranet: string): string;
/**
* 获取产品的系统设置中用户所配置的信息。
* 说明,大部分的属性值是字符串,但是有些属性的值是一个Map,比如sys.messages.email.deliveries
*/
export function getSysSetting(propertyName: string): any;
/**
* 设置产品的系统设置中的某个属性。注意,本方法只设置一个属性,并且这个属性的值就是简单类型,不是json
* eg:
* `
* sys.setSysSetting("sys.basic.name", "test");
* `
* 调用之后setting.json变成:
* `
* {
* "sys.basic.name":"test"
* }
* `
* 目前系统设置中还保存有单点登录、邮箱等配置,这些配置项很复杂,不通过本方法修改它们(后期考虑为它们增加专门的set方法,比如setSsoSetting)。
* @param propertyName 属性名
* @param propertyValue 属性值
*/
export function setSysSetting(propertyName: string, propertyValue: string | number | boolean): void;
/**判断当前服务器是否为集群 */
export function isCluster(): boolean;
/**判断当前服务器是否为集群主节点,如果当前系统不是集群配置,那么总是返回true */
export function isMasterClusterNode(): boolean;
/**返回当前集群节点的名称 */
export function getClusterNodeName(): string;
/**
* 发送一个或一批消息队列消息
*
* @param serverName 消息队列的服务器名称
* @param message 消息体,一个或一个消息的数组
*/
export function sendMQMessage(serverName: string, message: MQMessage | MQMessage[]): void;
/**发送消息,如邮件、企业微信消息、邮件, 由于设计需要,这个方法不能用来发送短信消息,发送短信请调用 {sendSMS()} */
export function sendMessage(message: {
/** 表明消息类型, wework-企业微信消息,pm-私信,email-邮件 */
type: string;
/** 谁发起订阅操作,订阅者USER_NAME */
sender?: string;
/** 消息主题 */
subject?: string;
/** 消息主体内容,支持html */
message: string;
/** 消息接收者,
*
* 说明:
* - 对于发送消息的方式为邮件时,支持传入邮箱地址,
* - 其余方式仅支持传入用户id
*/
receivers: Array<string>;
/** 分享或订阅推送出去的消息所关联元数据文件链接 */
url?: string;
/** 对分享或订阅的链接的说明文本 */
urlDesc?: string;
/** 查看链接内容所需要的密码 */
urlPassword?: string;
/** 分享获取订阅推送出去的消息中的图片的id,仅支持一张图片 */
pictureId?: string;
/** 需要分享的dashboard名 ,如dashboard对应的文件名为'总览.dash',则取picName为'总览' */
picName?: string;
/** 消息投递最大次数,超过该次数则将消息移除队列, 0代表没有次数限制 */
maxFailTimes?: number;
/** 消息有效截止时间 ,超过有效期将被移除消息队列,0代表没有有效期限制 */
validEndTime?: number;
}): void;
/**设置一个脚本定时执行 */
export function schedule(args: {
/**
* 执行的脚本有两种情况,一种是持久化了的脚本文件,另一种是一段字符串形式的脚本
* 持久化的脚本文件执行外部脚本支持相对于当前脚本的相对路径
* 而字符串形式的脚本没有路径可言,执行外部脚本只支持传入绝对路径
*/
path?: string;
/**执行脚本中的哪个函数,不传递时执行`main` */
method?: string;
/**传递给脚本函数的参数,不传递表示无参数,以调用`main`为例:
* 1. 传递`1`,则执行:`main(1)`
* 1. 传递`[1,2]`,则执行:`main(1,2)`
* 1. 传递`[[1,2]`,则执行:`main([1,2])`
**/
args?: any;
/**传递此参数表示等多少毫秒之后执行脚本 */
delay?: number;
/**传递此参数表示在date指定的日期和时间执行脚本,可传递日期对象或时间戳毫秒 */
date?: Date | number;
/**传递此参数表示循环执行脚本,每次间隔period毫秒,如果没有传递period,那么只执行一次脚本 */
period?: number;
}): void;
/**
* 发送短信消息,不同于验证码消息(见security模块`sendVerificationCode`函数),`sendSMS`只是一个通知消息。
*
* @param messageInfo : 有些短信服务商要求用仅能使用模板的形式发送消息(比如阿里云短信服务), 这里的json
* - 系统支持的阿里云短信服务,需要调用者指定如下参数才能正常发送消息:
* {
* signName: string; // 签名名称, 如果不传,则将使用系统中配置的默认签名,如果没有配置默认也没有传,则默认发送失败,并打印控制台日志(error日志)
* templateCode: string; // 模板ID,如果不传,将使用系统设置中配置的默认模板,如果没有配置默认也没有传,则默认发送失败,并打印控制台日志(error日志)
* [p: string]: any; // 其他参数将作为模板中的变量传递给阿里云平台
* }
* 比如阿里云的模板:`证码为:{1},您正在登录,若非本人操作,请勿泄露。`
* 调用发送短信: `sys.sendSMS(["13111111111"], messageInfo: {"1": "99999"})`
* - 系统支持的腾讯云短信服务,需要调用者指定如下参数才能正常发送消息:
* {
* signName: string; // 签名名称, 如果不传,则将使用系统中配置的默认签名,如果没有配置默认也没有传,则默认发送失败,并打印控制台日志(error日志)
* templateCode: string; // 模板ID,如果不传,将使用系统设置中配置的默认模板,如果没有配置默认也没有传,则默认发送失败,并打印控制台日志(error日志)
* params: string[]; // 传递个腾讯云的参数列表
* }
* 比如腾讯云模板 :`证码为:{1},您正在登录,若非本人操作,请勿泄露。`
* 调用发送短信: `sys.sendSMS(["13111111111"], messageInfo: {params: ["99999"]})`
* @param phones 接收短信的手机号,支持传递多个号码
*/
export function sendSMS(phones: string[], messageInfo: string | JSONObject): void;
/**
* 发送站内信
*/
export function sendStationMessage(args: {
/**
* 消息发送者,如果不传,则使用当前登录的用户ID
*/
sender?: string;
/** 消息接收者 */
receivers: string[];
/**
* 类型:
1. `announcement-公告`: 系统公告,由管理员发出,通常发向每个用户。
2. `notice-通知`: 针对业务变化而变化,比如审批未通过,通知提交审批的用户。
3. `urge-催办`
4. `todo-待办`
5. `pm-私信`
6. `warning-警告`:比如系统警告:服务器磁盘快满了,通知管理员处理。
*/
type: SMessageType
/** 标题 */
subject?: string;
/** 内容主体 */
content?: string;
/** 导航地址链接 */
link?: string;
/** 业务标签 */
labels?: string[];
}): void;
/**
* 发送邮件
* @param args
*/
export function sendEmail(args: {
/**
* 主题
*/
subject: string;
/**
* 发件人,如果设置了将会将发件邮箱的名称设置为这个用户的昵称
*
* 不填,则默认为 no-reply
*/
sender?: string;
/**
* 收件人
*
* 可以填入用户id,也可以填入邮箱好
*/
receivers: Array<string>;
/**
* 抄送人
*
* 可以填入用户id,也可以填入邮箱好
*/
cc?: Array<string>;
/**
* 邮件主体内容
*
* 可以支持html,样式写到html标签上
*/
body: string;
/**
* 附件
*/
attachments?: Array<{
// 附件在操作系统中的文件路径,如果对应的文件不存在,则会忽略掉这个附件的发送
path: string;
// 附件的名称, 如果不指定,则直接取文件的名称
name?: string;
}>
}): void;
/**
* 触发事件。脚本可以调用本方法记录服务器端日志。
* @param e
*/
export function fireEvent(event: string | ServerEvent, log?: string): void;
/**
* 配置一个系统日志事件。
*
* 如果{@link event#name}不是系统的已有的事件,那么会创建一个事件在系统中,如果是已有的事件,那么会将传入的事件对应的日志级别,详细SQL日志级别覆盖
* 到系统中。
*
* 警告:
*
* 此方法在定制开发中不要频繁调用,在系统启动之后调用一次即可。
*
* @param event
*/
export function defineEvent(event: ServerEventConf | ServerEventConf[]): void
/**
* 自定义事件的配置信息。
*/
export interface ServerEventConf {
/**
* 事件名称。
*/
name: string;
/**
* 事件级别,默认是INFO
* OFF 服务器断开产生的日志,这个是最严重的错误,直接导致服务器宕机的日志
* FATAL 灾难性的日志,例如系统设置错误后导致系统无法正常运行的灾难性的日志
* ERROR 错误类型的日志,例如报表计算错误,表单提交错误等,对系统的运行不产生影响的错误日志
* IMPT 比较重要的操作,例如登录,备份恢复等
* INFO 详细日志,重要性相对important相对要小一级别,但又不是可有可无的日志
* VERB 冗余的不重要的日志,可以忽略不计的日志
* ALL 所有级别:所有的日志都会记录
*/
logLevel?: string;
/**
* 详细日志级别,确定哪些SQL日志会在LOG_SYS的detail_info字段中记录,默认是IMPT
* IMPT 比较重要的操作,例如清空数据库数据,删除物理表
* INFO 详细日志,重要性相对IMPT相对要小一级别,但又不是可有可无的日志,如更新数据
* VERB 冗余的不重要的日志,可以忽略不计的日志,如查询数据
*/
detailLogLevel?: string;
}
/**
* 服务器事件对象。对应服务器端的`com.succez.metadata.service.event.Event`接口。
*/
export interface ServerEvent {
/**
* 事件名称
*/
name: string,
/**
* 事件级别,默认是info
* OFF 服务器断开产生的日志,这个是最严重的错误,直接导致服务器宕机的日志
* FATAL 灾难性的日志,例如系统设置错误后导致系统无法正常运行的灾难性的日志
* ERROR 错误类型的日志,例如报表计算错误,表单提交错误等,对系统的运行不产生影响的错误日志
* IMPT 比较重要的操作,例如登录,备份恢复等
* INFO 详细日志,重要性相对important相对要小一级别,但又不是可有可无的日志
* VERB 冗余的不重要的日志,可以忽略不计的日志
* ALL 所有级别:所有的日志都会记录
*/
logLevel?: string,
/**
* 详细日志级别,确定哪些SQL日志会在LOG_SYS的detail_info字段中记录,默认是IMPT
* IMPT 比较重要的操作,例如清空数据库数据,删除物理表
* INFO 详细日志,重要性相对IMPT相对要小一级别,但又不是可有可无的日志,如更新数据
* VERB 冗余的不重要的日志,可以忽略不计的日志,如查询数据
*/
detailLogLevel?: string;
/**
* 元数据文件信息,应该是一个绝对路径,/开头的包含项目名的。
*/
resPath?: string,
/**
* 操作结果,默认是成功的,如果是成功的操作,可以不用设置。
* `exception`不为空时会自动设置为`EventOperationState#EXCPT`
*/
operationState?: EventOperationState,
/**
* 操作开始时间,如果不指定则为调用时的时间
*/
startTime?: number,
/**
* 操作结束时间,如果不指定则为空
*/
endTime?: number,
/**
* 异常。如果有异常,那么`operationState`会自动设置为`EventOperationState#EXCPT`
*/
exception?: Error,
/**
* 日志的详细信息,例如报表计算的计算参数等,是一个json对象,会直接当作json序列化到系统日志表的clob字段中。
*/
detailInfo?: JSONObject,
/**
* 一系列的进度日志条目。系统中有些操作是会产生一些进度日志的,比如用到了{@link ProgressMonitor},如果需要记录进度日志可以指定本参数
*/
logs?: Array<any>,
/**
* 提供2个VARCHAR类型的附加字段,用于记录日志的一些个性化信息。
*/
option1?: string,
option2?: string,
/**
* 触发事件的用户ID
*/
userId?: string,
/**
* 用户登录的sessionId
*/
sessionId?: string
}
/**
* 事件的状态:0成功,1异常,2错误
*/
export enum EventOperationState {
/**
* "成功完成"状态,如计划任务成功执行完毕,用户登录成功等
*/
OK = 0,
/**
* "失败状态"状态,如用户登录失败等
*/
FAIL = 1,
/**
* "异常状态"状态,如执行计算时表不存在
*/
EXCPT = 2,
/**
* "错误状态"状态,服务器级别的比较严重的错误结果,这个很少遇到,但是遇到后会对服务器运行产生影响
*/
ERROR = 3
}
/**
* 返回产品的工作目录路径,不带最后的`/`或`\`
*
* @param subPath 传递`subPath`时将返回 相对于工作目录的 `subPath`的绝对路径
*/
export function getWorkDir(subPath?: string): string;
/**返回用于存放临时文件的目录,不带最后的`/`或`\` */
export function getTempDir(): string;
/**返回用于存放缓存文件的目录,不带最后的`/`或`\` */
export function getCacheDir(): string;
/**返回在集群上每个节点都可以访问的一个跨集群共享的目录,不带最后的`/`或`\` */
export function getClusterShareDir(): string;
/**获取系统环境变量JAVA_HOME的值 */
export function getJavaHome(): string;
/**获取用户文件夹的路径,即Java环境变量user.home的值 */
export function getUserHome(): string;
/**获取tomcat的web根目录 */
export function getWebRootDir(): string;
/**获取Java虚拟机的版本号 */
export function getJavaVersion(): string;
/**返回jvm的空闲内存,单位字节*/
export function getJvmFreeMemeory(): number;
/**返回jvm已分配的内存,单位字节 */
export function getJvmTotalMemeory(): number;
/**返回jvm最大可用内存,单位字节 */
export function getJvmMaxMemeory(): number;
/**返回jvm的进程id */
export function getJvmProcessID(): number;
/**返回逻辑cpu数目,多核的每核算一个cpu */
export function getAvailableProcessors(): number;
/**
* 执行指定的外部程序,并等待其执行完毕后返回标准输出信息、错误信息等
* @param file 外部程序的绝对路径,如果是`\`分隔符,需要写成`'\\'`
* @param args 可选,传递给外部程序的执行参数数组
*/
export function exe(file: string, args?: Array<string>): { stdout: string, stderr: string; errorcode: number };
/**
* 异步执行指定的外部程序,不等待其执行完毕
* @param file 外部程序的绝对路径,如果是`\`分隔符,需要写成`'\\'`
* @param args 可选,传递给外部程序的执行参数数组
*/
export function exea(file: string, args?: Array<string>): void;
/**
* 查找满足条件的进程信息。
*
* @param name 返回进程名称包含指定的name的进程
* @param cmd 返回进程命令行包含指定的cmd的进程,可选
*/
export function findProcess(name: string, cmd?: string): Array<{
/**进程id */
pid: number;
/**父进程id */
ppid?: number;
/**文件名 */
name: string;
/**命令行内容 */
cmd: string;
}>;
/**返回所有当前进程的所有OS环境变量 */
export function getOSEnvironments(): { [envName: string]: string };
/**
* 返回操作系统的名称,如:
* 1. Linux
* 1. Mac OS
* 1. Mac OS X
* 1. Windows 2000
* 1. Windows XP
* 1. Windows 2003
* 1. Windows CE
* 1. OS/2
* 1. Solaris
* 1. SunOS
* 1. MPE/iX
* 1. HP-UX
* 1. AIX
* 1. OS/390
* 1. FreeBSD
* 1. Irix
* 1. Digital Unix
* 1. NetWare 4.11
* 1. OSF1
* 1. OpenVMS
*
* 更多信息参考:<http://lopica.sourceforge.net/os.html>
*/
export function getOSName(): string;
/**
* 返回操作系统的版本号,如:
* 1. 10.2.6
* 1. 6.3
*/
export function getOSVersion(): string;
/**
* 返回操作系统的架构信息,如:
* 1. x86_64
* 1. x86
* 1. Power
* 1. ppc
*/
export function getOSArch(): string;
/**
* 对应Thread.sleep()方法
* @param sleepTime
*/
export function sleep(sleepTime: number): void;
/**
* 对应System.currentTimeMills()方法
*/
export function getTimeMills(): number;
/**
* 判断一个应用是否有权限访问某一项
* @param appId
* @param appSecret
* @param apiPath api路径,如api/oauth2/verifyUser
*/
export function checkAppPermission(appId: string, appSecret: string, apiPath: string): { result: boolean, errorCode?: string, message?: string };
/**
* 根据appId获取app的信息,不存在返回null或抛出异常
* @param appId
* @param throwException 不存在对应appId的信息是否抛出异常。默认为false
*/
export function getAppInfo(appId: string, throwException?: boolean): TrustedAppInfo;
/**
* 获取当前脚本所在线程绑定的进度条对象。
*
* 常用于脚本输出自己的相关上下文日志,并最终返回给用户查看,如:
* 1. 数据加工中的脚本节点输出自己的日志,日志会最终和加工本身的日志在一起输出给用户。
* 2. 脚本中通过${@link ScriptThreadPoolImpl#submit(Map)}启用的多线程脚本可以通过此对象输出相关日志。
*
* 注意:这里输出的日志和通过`print`函数输出的不同,print函数常用于开发者自己调试脚本使用,而使用`ProgressMonitor`输出的日志
* 是给具体终端用户查看日志用的。
*
* @return 若当前线程没有绑定的进度条对象,则会创建一个新的返回并设置给当前线程。
*/
export function getThreadProcessMonitor(): ProgressMonitor;
/**
* 获得一个线程池,不存在则创建
* @param options
* @returns 返回一个线程池对象,用于提交线程任务
*/
export function getThreadPool(options: {
/**线程池名称 */
name: string,
/**核心线程数,默认大小为3 */
corePoolSize?: number,
/**线程池最大线程数,默认大小为5 */
maximumPoolSize?: number,
/**线程空闲时间,当线程空闲时间达到keepAliveTime,线程会退出 ,默认大小为30000*/
keepAliveTime?: number
}): ThreadPool;
# 对象
/**定义系统核心的类型 */
declare interface OutputStream {
/** 写出字节码 */
write(bytes: number[]): void;
/**
* 写出字节码
* @param bytes
* @param off 开始写出的起始位置the start offset in the data.
* @param len 写出字节长度长度
*/
write(bytes: number[], off: number, len: number): void;
/** 写出一个字节 */
write(byte: number): void
/**
* 刷新输出流,强制将所有缓存区的数据写出
*/
flush(): void;
/** 关闭流 */
close(): void;
}
declare interface InputStream {
/**
* 读取一个字节
* @returns 如果流已经读取结束,则返回-1
*/
read(): number;
/**
* 从流中特定长度的字节数存入bytes 数组中,流中的数据不够bytes数组长度时,也不会补足数据
* @param bytes
* @returns 从流中读取出来的字节数,如果已经读取完成,返回-1
*/
read(bytes: number[]): number;
/**
* 从流中特定长度的字节数存入bytes 数组中,流中的数据不够bytes数组长度时,也不会补足数据
* @param bytes
* @param off bytes数组中的第一个被写入字节的偏移位置
* @param len 最大读取长度
* @returns 从流中读取出来的字节数,如果已经读取完成,返回-1
*/
read(bytes: number[], off: number, len: number): number;
/** 关闭流 */
close(): void;
}
declare interface Writer {
/** write a string or number */
write(c: string): Writer;
/** Appends the specified string to this writer. */
append(c: string): Writer;
/**
* Flushes the stream. If the stream has saved any characters from the
* various write() methods in a buffer, write them immediately to their
* intended destination. Then, if that destination is another character or
* byte stream, flush it. Thus one flush() invocation will flush all the
* buffers in a chain of Writers and OutputStreams.
*/
flush(): void;
/** close the stream */
close(): void;
}
/**
* 对应的是{@link java.io.BufferedReader}
*/
declare interface Reader extends InputStream {
/**
* 从输入流中读取一行作为字符串
* @param ignoreLF 默认false, 是否忽略下一个 `\n`
*/
readLine(ignoreLF?: boolean): string;
}
/**
* 让后端的数组对象好用点,js原生的比较晦涩。
*
* Copy from global.d.ts
*/
interface Array<T> {
/**
* 将`arr`中的元素挨个push到自己内部。
*
* @returns 返回自己
*/
pushAll(arr: T[]): T[];
/**
* 添加其不存在的条目
* @param arr 准备加入的数组
* @returns 返回自己
*/
distinctPushAll(arr: T[]): T[];
/**
* 添加其不存在的元素
* @param obj 准备加入的元素
* @returns 返回自己
*/
distinctPush(obj: T): T[];
/**
* 比较本数组和另外一个数组arr是否内容相同
*/
equals(arr: T[]): boolean;
/**
* 返回去掉重复项的一个新数组
*/
distinct(): T[];
/**
* 从数组中删除一个元素
*/
remove(obj: number | T): T;
/**
* 从数组中删除多个元素
*/
removeAll(objs: number[] | T[]): T;
}
/**
* 消息队列的消息结构
*/
declare interface MQMessage {
/**消息的主题,用于订阅消息的时候区分消息 */
topic: string,
/**消息的标签,用于订阅消息的时候区分消息*/
tag: string,
/**消息体,可以是一个数组 */
message: any
}
/**
* 默认的print声明不支持参数,这里重新声明下
* @param log
*/
declare function print(log: any): void
/**
* `Java.type("java.util.Locale")` 等价于 `java.util.Locale`
* @see https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/nashorn/api.html
*/
declare const Java: {
type(fullClassPath: string): any;
};
/** 通过java可以引用java开头的类,如`java.util.Locale` */
declare const java: any;
/** 通过com可以引用com开头的类,如`com.succsoft.bi.Xxxxx` */
declare const com: any;
/**
* getThreadPool()创建的线程池对象
*/
declare interface ThreadPool {
/**获取线程池中正在执行的任务数量 */
getActiveCount(): number;
/**
* 关闭线程池
* 默认等待关闭的时间为10秒,超过该时间会强行终止正在执行的线程
*/
shutDown(): void;
/**
* 提交一个任务到线程池执行,该任务是某段脚本的export的方法
* @param args
*/
submit(args: {
/**
* 要执行的脚本的路径
* 可以是绝对路径或者相对路径,不传递默认为当前文件路径
*/
path?: string,
/**执行的脚本的方法 */
method: string,
/**方法执行的参数 */
params?: Array<any>,
/**
* 给线程设置进度条对象,可以使线程池中线程共享一个进度条对象
* 这个方法一般是通过主线程创建createSubProgress,
* @param progress
*/
progress?: ProgressMonitor
}): Task;
/**
* 等待任务完成
* @param tasks 待完成的任务,可以是一个Task,可以是一个Task数组
* @param waitTime 等待完成时间,单位为ms
* @param throwErrorIfTimeout 超过最大等待时间是否抛出异常,默认为true
*/
waitFinish(tasks: any, waitTime: number, throwErrorIfTimeout?: boolean): boolean;
}
declare interface Task {
/**获取任务执行的结果 */
get(): any;
}
/**
* 线程的进度对象
*/
declare interface ProgressMonitor {
/**设置进度的最小值,不设置默认为0 */
setMinimum(value: number): void,
/**设置进度条的最大值,一般情况需要进行设置 */
setMaximum(value: number): void,
/**设置进度条的位置 */
setProgress(value: number): void,
/**获取进度条的位置 */
getProgress(): number,
/**
* 进度条增加value的值
* @param value 不传递默认加1
*/
step(value?: number): void,
/**
* 创建子进度对象,可以将主进度的一部分切分给子对象。
*
* 一个复杂的业务流程(以系统的启动初始化过程为例)往往内部会执行很多子业务逻辑(如创建系统表、还原demo数据……),父业务流程需要有一个完整的进度信息呈现给用户,
* 父业务流程调用内部的子业务逻辑时也需要传递一个`ProgressMonitor`给它(比如系统初始化业务逻辑调用创建系统表的子业务逻辑),此时子业务逻辑只能走总的进度条的
* 一部分,为了让子业务逻辑好开发,就还是给它一个完整的进度条信息,让他可以“以为”它能走到100%,这样好开发些。
*
* @param totalProgress 子进度条站总的任务条的多少进度
* @param acceptSubMessage 子进度条的{@link #setMessage(String)}是否反应给父进度条
* @param acceptSubLogs 子进度条的{@link #addLog(String)}是否反应给父进度条
* @return
*/
createSubProgress(totalProgress: number, acceptSubMessage: boolean, acceptSubLogs: boolean): ProgressMonitor
/**
* 添加一条普通的表示详细信息的log
* @param log
*/
addLog(log: string): void;
/**
* 前台界面显示sql日志的规则:如果是SQL的日志,该日志应该以<sql>xxx</sql>包裹起来的,需要对SQL日志进行格式化并高亮显示。
* 后台在生成sql日志时,需要满足以上规则。本方法用于当日志为sql语句时,为该语句提供格式化包装,然后再添加到日志中。
* 例如sql描述信息为"开始查询:",sql语句为select * from ajxx,则sql日志为 开始查询:<sql>select * from ajxx</sql>
* @param sqlInfo sql描述信息
* @param sql sql语句
*/
addSql(sqlInfo: string, sql: string): void;
/**
* 修改最后一条添加的日志,如果没有一条日志,那么添加一条<br />
* 此方法一个比较常见的应用场景就是,一行日志中显示百分比,可以看到数字不停地闪动,而不是数字变化一次就生成新的日志行
*/
setLastLog(log: string): void;
/**
* 获取包含所有日志的字符串,通常用于刷新日志显示界面
*/
getLogs(): string[];
/**
* 获取已经存在的日志条数
*/
getLogCount(): number;
}
/**
* 脚本所在的文件的元数据路径,以.action结尾(会自动去掉.ts后缀),如`/sysdata/public/test.action`。
*/
declare const __filename: string;
/**
* 脚本所在文件夹元数据路径,如`/sysdata/public`。
*/
declare const __dirname: string;
/**
* 脚本执行器对象。
*/
declare const _script_runner: any;
0条评论
评论