# 元数据

# 导入

通过如下方式导入元数据api

import metadata from "svr-api/metadata";

# 方法

/**
 * 元数据相关API
 */


import { File } from "./fs";

export type MetaFileContentType = JSONObject | Reader | InputStream | number[] | File | Blob | string;

/**
 * 返回系统所有的元数据项目 
 */
export function getAllProjects(): Array<MetaProjectInfo>;

/**
 * 创建新的元数据项目,如果项目存在则抛出异常,提示已存在同名项目。
 * 
 * @return 返回新建的项目信息
 */
export function createProject(args: { name: string, desc?: string }): MetaProjectInfo;

/**
 * 删除元数据项目,如果项目不存在则抛出异常。
 */
export function deleteProject(name: string): void;

/**
 * 返回指定的元数据文件。
 *
 * @param idOrPath 元数据路径或者id,若是路径,可以是如下形式:
 *  1. 完整的绝对路径,如`/ProjectName/data/path/to/yourfile.tbl`
 *  2. 相对路径,相对于当前执行的脚本文件,如
 *     `yourfile.tbl`、`../folder/yourfile.tbl`
 *  3. 资源id
 * @param throwIfNotExist 不存在时是否抛出异常,默认为`false`。
 * @returns 返回文件或文件夹信息,不存在时返回`null` 。
 */
export function getFile(idOrPath: string, throwIfNotExist?: boolean): MetaFileInfo;

/**
 * 查找满足匹配模式的文件,如:
 *
 * 1. `getFiles("/DEMO/data/**\/*.tbl")`  可以递归获取`/DEMO/data`目录下的所有tbl文件。
 * 2. `getFiles("/DEMO/data/**\/aaa.tbl")`  可以递归搜索`/DEMO/data`目录下的名称为`aaa.tbl`的文件。
 * 3. `getFiles("/DEMO/data/*\/aaa.tbl")`  可以搜索`/DEMO/data`目录的下一级目录(不递归)中的名称为
 *    `aaa.tbl`的文件。
 *
 * @see https://stackoverflow.com/questions/2952196/ant-path-style-patterns
 * @param pathPattern 匹配模式,/开头。
 * @returns 返回文件信息数组,如果找不到,返回空数组。
 */
export function getFiles(pathPattern: string): Array<MetaFileInfo>;

/**
 * 返回指定的元数据文件夹。
 *
 * @param idOrPath 元数据路径或者id,若是路径,可以是如下形式:
 *  1. 完整的绝对路径,如`/ProjectName/data/path/to/yourfile.tbl`
 *  2. 相对路径,相对于当前执行的脚本文件,如
 *     `yourfile.tbl`、`../folder/yourfile.tbl`
 *  3. 资源id
 * @param throwIfNotExist 不存在时是否抛出异常,默认为`false`。
 * @returns 返回文件或文件夹信息,不存在时(也包括存在文件但不是文件夹)返回
 *     `null`。
 */
export function getFolder(idOrPath: string, throwIfNotExist?: boolean): MetaFileInfo;

/**
 * 返回指定的元数据文件的内容。
 * 
 * 注意:本文件是元数据内部的缓存文件,外部不能修改、删除,否则会出现非预期错误。
 * 
 * @param idOrPath 元数据路径或者id,若是路径,可以是如下形式:
 *  1. 完整的绝对路径,如`/ProjectName/data/path/to/yourfile.tbl`
 *  2. 相对路径,相对于当前执行的脚本文件,如
 *     `yourfile.tbl`、`../folder/yourfile.tbl`
 *  3. 资源id
 * @param throwIfNotExist 不存在时是否抛出异常,默认为`false`。
 * @returns 假如是文件,返回元数据文件的内容文件;假如是文件夹,返回`null`。
 */
export function getFileContent(idOrPath: string, throwIfNotExist?: boolean): File;

/**
 * 读取一个json文件,并返回json对象。
 *
 * @param path 元数据路径,可以是如下形式:
 *  1. 完整的绝对路径,如`/ProjectName/data/path/to/yourfile.tbl`
 *  2. 相对路径,相对于当前执行的脚本文件,如
 *     `yourfile.tbl`、`../folder/yourfile.tbl`
 *  3. 资源id
 * @param throwIfNotExist 不存在时是否抛出异常,默认为`false`。
 * @returns 返回文件的json信息,不存在时返回`null`。
 */
export function getJSON(path: string, throwIfNotExist?: boolean): JSONObject;

/**
 * 读取一个文件,并返回文件内容字符串。
 * 
 * @param path 元数据路径,可以是如下形式:
 *  1. 完整的绝对路径,如`/ProjectName/data/path/to/yourfile.tbl`
 *  2. 相对路径,相对于当前执行的脚本文件,如 `yourfile.tbl`、`../folder/yourfile.tbl`
 * 	3. 资源id
 * @param encoding 文件内容编码,可选,默认编码`UTF-8`。
 * @param throwIfNotExist 不存在时是否抛出异常,默认为`false`。
 * @returns 以字符串形式返回文件内容,不存在时返回`null`。
 */
export function getString(path: string, encoding?: string, throwIfNotExist?: boolean): string;

/**
 * 读取一个文件,并返回XML文档。
 *
 * @param path 元数据路径,可以是如下形式:
 *  1. 完整的绝对路径,如`/ProjectName/data/path/to/yourfile.tbl`
 *  2. 相对路径,相对于当前执行的脚本文件,如
 *     `yourfile.tbl`、`../folder/yourfile.tbl`
 *  3. 资源id
 * @param throwIfNotExist 不存在时是否抛出异常,默认为`false`。
 * @returns 以XML文档对象形式返回文件内容,不存在时返回`null`。
 */
export function getXML(path: string, throwIfNotExist?: boolean): XMLDocument;

/**
 * 获取文件内容的通用方法。
 * 
 * 根据文件内容返回相应格式的内容,例如对于`tbl`、`dash`文件,返回`JSON`对象,支持如下格式:
 * 1. tbl
 * 2. dash
 * 2. json
 * 3. xml
 * 4. 其它文件返回字符串
 *
 * @param path 元数据路径,可以是如下形式:
 *  1. 完整的绝对路径,如`/ProjectName/data/path/to/yourfile.tbl`
 *  2. 相对路径,相对于当前执行的脚本文件,如
 *     `yourfile.tbl`、`../folder/yourfile.tbl`
 *  3. 资源id
 * @param throwIfNotExist 不存在时是否抛出异常,默认为false。
 * @returns 根据文件的类型返回对应的对象,不存在时返回`null`。
 */
export function getObject(path: string, throwIfNotExist?: boolean): JSONObject | XMLDocument | string;

/**
 * 创建文件,并保存文件内容。
 *
 * 如果文件已存在,那么抛出异常,父文件夹不存在时将自动创建父文件夹。
 *
 * @param pathOrFileInfo 可以是:
 *  1. 文件路径,完整的绝对路径,或相对于当前脚本文件的相对路径
 *  2. `MetaFile`文件信息,可以传递
 *     `name`、`desc`、`icon`、`type`、`parentDir`、`path`、`content`属性。
 * @param content 当`pathOrFileInfo`传递路径时,可以通过此参数传递文件内容,可传
 *     递`JSONObject|Reader|InputStream|byte[]|File|Blob|string`对象,不传递时写入空内容。
 * @param encoding 文件内容编码,可选,默认编码`UTF-8`。
 * @returns 返回新建的文件的文件信息,创建失败时跑出异常。
 */
export function createFile(pathOrFileInfo: string | MetaFileModifyInfo, content?: MetaFileContentType, encoding?: string): MetaFileInfo;

/**
 * 写入文件内容,文件不存在时将自动创建,存在时将改写文件内容,父文件夹不存在时将自动创建父文件夹。
 * 
 * @param path 文件路径,完整的绝对路径,或相对于当前脚本的相对路径
 * @param content 文件内容,可传递`JSONObject|Reader|InputStream|byte[]|File|Blob|string`对象,不传递时写入空内容
 * @param encoding 文件内容编码,可选,默认编码`UTF-8`。
 */
export function writeFile(path: string, content?: MetaFileContentType, encoding?: string): void;

/**
 * 创建或更新一个元数据文件内容,并能同时设置文件的属性,如描述,父文件夹不存在时将自动创建父文件夹。
 * 
 * @param args 设置文件信息,包括路径、内容、描述等。
 */
export function writeFile(args: MetaFileModifyInfo): void;

/**
 * 创建文件夹,如果文件夹已存在,那么什么也不做。
 *
 * @param pathOrFileInfo 可以是:
 *  1. 文件路径,完整的绝对路径,或相对于当前脚本文件的相对路径
 *  2. `MetaFile`文件信息,可以传递
 *     `name`、`desc`、`icon`、`type`、`parentDir`、`path`属性。
 */
export function mkdirs(pathOrFileInfo: string | MetaFileModifyInfo): void;

/**
 * 更新文件信息,如果文件不存在,那么抛出异常。
 *
 * @param resIdOrpath 要更新的文件夹路径或者元数据id,完整的绝对路径,或相对于当
 *     前脚本的相对路径
 * @param info 更新信息,可以传递
 *     `name`、`desc`、`icon`、`type`、`parentDir`、`path`、`content`属性。
 */
export function modifyFile(resIdOrpath: string, info: MetaFileModifyInfo): void;

/**
 * 删除元数据文件,如果文件不存在则什么都不做。
 * 
 * @param path 要删除文件的`path`或`path`数组
 */
export function removeFiles(...path: string[]): void;

/**
 * 移动或重命名文件。如果文件不存在或目标文件已存在,那么抛出异常
 * 
 * 目标文件父目录不存在则自动创建。
 * 
 * @param path 要移动的文件路径,完整的绝对路径,或相对于当前脚本的相对路径
 * @param targetPath 要移动到的目标路径,完整的绝对路径,或相对于当前脚本的相对路径
 */
export function move(path: string, targetPath: string): void;

/**
 * 删除文件到回收站。如果文件不存在则什么都不做。
 * 
 * @param path 要删除的文件路径,完整的绝对路径,或相对于当前脚本的相对路径
 */
export function remove(path: string): void;

/**
 * 刷新指定的文件夹或文件的所有缓存对象。
 * 
 * @param path 要刷新的文件路径,完整的绝对路径,或相对于当前脚本的相对路径
 */
export function refresh(path: string): void;

/**
 * 执行程序流,并返回结果。
 *
 * 注意,此方法会将查询结果转成json字符串进行返回,包括查询节点的查询结果,调用者需保证
 * 查询结果不要太大,以免造成oom。
 */
export function runActionFlow(args: {
	path: string;
	/**传递给程序流的参数 */
	params?: { [name: string]: any }
}): JSONObject;

/**
 * 运算一个activeDocx文件,并返回结果文件,无法转换时返回null
 *  
 * 
 * 1. 传递path:将一个activeDocx元数据传入参数执行成指定格式的结果文件
 * 2. 传递localFile:将一个docx磁盘文件转换成指定格式的结果文件,params,cache不会有效果
 */
export function runDocx(args: {
	/**
	 * activeDocx元数据路径
	 * 
	 * 此参数和localFile必须要有一个。
	 */
	path?: string;
	/**
	 * docx磁盘文件路径
	 * 
	 * 使用此参数指定磁盘文件作为转换的源头文件时,不支持params参数,只能将该文件转换成指定的格式。
	 * 
	 * 此参数和path必须要一个。
	 */
	localFile?: string;
	/**如果不传递,默认生成docx */
	export?: "pdf";
	/**传递`false`表示忽略缓存,重新刷新文档(但本次刷新的结果还是会缓存起来供下次使用),默认系统会使用缓存尽量快速的显示文档 */
	cache?: boolean;
	/**传递给docx的计算参数 */
	params?: { [name: string]: string | number }
}): File;

/**
 * 导出报表、仪表板等对象的运行结果。
 * 
 * @param args 
 * @return 返回导出的文件
 */
export function exportContent(args: {
	/**导出到指定的文件夹,如果不传递,那么将自动产生一个临时文件 */
	targetDir?: string,
	/**导出设置 */
	exportParams?: {
		//压缩,可选参数,当resources有多个文件时总是压缩,只有一个文件时默认是false 不压缩
		compress?: boolean,
		/**压缩文件名。默认为`第一个资源名称_多文件。 */
		fileName?: string;
		/**导出资源信息 */
		resources?: ExportContentObjectArgs[];
	}
}): File;

/**
 * 重建制定的资源的引用关系记录。
 *
 * 系统的资源间的引用关系记录是在数据库的,是异步建立的,也可能存在一些数据不一致的问题,调用此函数
 * 可以进行重建。
 *
 * @param args 
 */
export function refreshReferences(args: {
	/**
	 * 要重建的文件路径或资源ID,支持目录,表示整个目录都要重建。
	 */
	files: string | string[],
	/**
	 * 异步还是等待结束,默认true,不等待。设为false时将等待刷新完成。
	 */
	async: boolean,
	/**
	 * 等待刷新超时时间,单位为ms,默认为30000ms。
	 */
	timeout?: number,
}): void;

/**
 * 获取元数据影响关系,会通过元数据缓存机制获取
 *
 * @param resIdOrpath
 */
export function queryReferences(args: {
	files: string | string[],
	downStream?: boolean,
	onlyData?: boolean
}): MetaFileRefInfo[];

/**
 * 返回元数据对应的“BO对象”。
 *
 * 系统常见的元数据如`rpt`、`dash`、`spg`等的元数据格式都是`JSON`,不方便使用,故提供一个接口用于获
 * 取元数据对应的业务对象(有时候也叫BO对象),便于访问相关的属性和方法。
 *
 * @param path 元数据路径,可以是如下形式:
 *  1. 完整的绝对路径,如`/ProjectName/data/path/to/yourfile.tbl`
 *  2. 相对路径,相对于当前执行的脚本文件,如`yourfile.tbl`、`../folder/yourfile.tbl`
 *  3. 资源id
 * @param throwIfNotExist 不存在时是否抛出异常,默认为false。
 * @returns 根据文件的类型返回对应的对象,不存在时返回`null`。
 */
export function getBusinessObject(path: string, throwIfNotExist?: boolean): any;
是否有帮助?
0条评论
评论