# Builtin - 平台与客户端

## `deleteBk(bk_name)`

声明：function

从用户板块中删除名为bk_name的板块

<!-- tags: 平台与客户端 删除 移除 -->

| 参数      | 类型   | 说明             |
| --------- | ------ | ---------------- |
| `bk_name` | string | 字符串，板块名称 |

返回：boolean

### 示例

```tsl
echo deleteBk("MySector"), "\n";
```

## `deleteTable(table_name)`

声明：function

删除指定的用户数据

<!-- tags: 平台与客户端 删除 移除 -->

| 参数         | 类型   | 说明                           |
| ------------ | ------ | ------------------------------ |
| `table_name` | string | 要删除的用户数据全名称，字符串 |

返回：integer

### 示例

范例01：删除指定目录下的用户数据

```tsl
ret := deleteTable('mydata\\testA');
echo ret, "\n";
// 输出：-1
```

范例02：按名称规则删除用户数据

```tsl
data := listTable();
for i := 0 to length(data) - 1 do
begin
    if pos('mydata\\test', data[i]) > 0 then
    begin
        deleteTable(data[i]);
    end;
end;
echo listTable(), "\n";
```

## `functionName()`

声明：function

当前运行的函数的名称

<!-- tags: 平台与客户端 -->

返回：string

### 示例

范例01：读取当前脚本函数名称

```tsl
echo functionName(), "\n";
```

## `functionType()`

声明：function

当前运行的函数的类型，即返回当前函数是公用函数还是用户函数

<!-- tags: 平台与客户端 -->

返回：integer

### 示例

范例01：读取当前脚本函数类型

```tsl
echo functionType(), "\n";
```

## `functionVer(type, name)`

声明：function

返回函数在服务器中保存的版本号，可用于判断函数是否被修改过，也可与 `saveTable` 和 `loadTable` 配合使用

<!-- tags: 平台与客户端 返回 获取 -->

| 参数   | 类型    | 说明     |
| ------ | ------- | -------- |
| `type` | integer | 函数类型 |
| `name` | string  | 函数名称 |

返回：integer

### 示例

```tsl
version := functionVer(functionType(), functionName());
echo version, "\n";
```

## `hexToString(str)`

声明：function

stm用户数据名称转码(十六进制)

<!-- tags: 平台与客户端 -->

| 参数  | 类型   | 说明                       |
| ----- | ------ | -------------------------- |
| `str` | string | 字符串类型，十六进制字符串 |

返回：string

### 示例

```tsl
// 将用户数据名转化为可读串
str := 'hex_74657374646174613031.stm';
echo hexToString(str), "\n";
// 输出：testdata01
```

## `isbackground()`

声明：function

获取当前运行的模型是否以委托执行的后台模式运行

<!-- tags: 平台与客户端 获取 查询 -->

返回：boolean

### 示例

```tsl
echo isBackGround(), "\n";
```

## `listTable()`

声明：function

返回用户数据的名称列表(一维数组)

<!-- tags: 平台与客户端 返回 获取 -->

返回：array

### 示例

```tsl
echo listTable(), "\n";
```

## `loadTable(name[, table_type])`

声明：function

提取用户数据，装入用户表，从name指定的位置将数据导出，table_type参数可省略，默认为0，0或省略时表示装入当前用户表，1表示装入系统表，即可导入系统账号system的用户数据

<!-- tags: 平台与客户端 读取 获取 -->

| 参数         | 类型   | 说明                               |
| ------------ | ------ | ---------------------------------- |
| `name`       | string | 字符串，数据存储位置的名称         |
| `table_type` | bool   | 可选，布尔类型，数据类型，默认为 0 |

返回：any

### 示例

```tsl
// 提取名为 testA 的当前用户数据
echo loadTable('testA'), "\n";
```

## `loadTableEx(table_name)`

声明：function

加载用户数据table_name，如若table_name非空，则返回table_name数据，否则返回空数组

<!-- tags: 平台与客户端 读取 获取 -->

| 参数         | 类型   | 说明                 |
| ------------ | ------ | -------------------- |
| `table_name` | string | 字符串，数据文件名称 |

返回：array

### 示例

```tsl
echo loadTableEx('repitle'), "\n";
```

## `saveBk(bk_name, bk_dir, sample)`

声明：function

保存用户板块，将品种数组保存到指定板块目录下，保存的板块名为bk_name，保存板块后，用户不能直接在客户端的用户板块中看到该板块，但是可以用getbk模型获取到，用户重新登录后可看到

<!-- tags: 平台与客户端 写入 保存 -->

| 参数      | 类型   | 说明                                     |
| --------- | ------ | ---------------------------------------- |
| `bk_name` | string | 字符串，板块名称                         |
| `bk_dir`  | string | 字符串，板块保存的目录                   |
| `sample`  | array  | 一维数组，可以是股票、基金等品种代码列表 |

返回：boolean

### 示例

```tsl
stocks := array("SZ000001", "SZ000002");
echo saveBk("MySector", "我的一级分类\\我的二级分类", stocks), "\n";
```

## `saveTable(name, value[, stream_type])`

声明：function

保存用户数据到服务器，服务器为每一位用户保留一块存储区域，可以把自有数据保存进去，以备分析时使用

<!-- tags: 平台与客户端 写入 保存 -->

| 参数          | 类型    | 说明                                                                                                                                        |
| ------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`        | string  | 存储位置的名称, 字符串类型                                                                                                                  |
| `value`       | any     | 各种类型的数据，如 integer、string、array                                                                                                   |
| `stream_type` | boolean | 新流格式，可缺省，缺省时根据前端的版本（2020年6月前的版本为旧版本，之后的为新版本）决定是否存储为新流格式，0指定原始流格式，1强制为新流格式 |

返回：integer

### 示例

范例01：直接保存到根目录

```tsl
r := rand(10, 10);
echo saveTable('testA', r), "\n";
// 输出：-1
```

范例02：保存到指定目录

```tsl
r := rand(10, 10);
echo saveTable('mydata\\testA', r), "\n";
// 输出：-1
```

范例03：比较新旧流格式

```tsl
data := array(1, 2, 3);
r1 := saveTable("TestSTData01", data);
r2 := saveTable("TestSTData02", data, 0);
r3 := saveTable("TestSTData03", data, 1);
echo array(r1, r2, r3), "\n";
```

## `sendToClient(cmd_type, cmd_text, cmd_param, cmd_data[, time_out])`

声明：function

发送命令到客户端执行

<!-- tags: 平台与客户端 发送 提交 -->

| 参数        | 类型    | 说明                       |
| ----------- | ------- | -------------------------- |
| `cmd_type`  | string  | 命令类型                   |
| `cmd_text`  | string  | 命令串                     |
| `cmd_param` | any     | 命令参数                   |
| `cmd_data`  | any     | 命令数据                   |
| `time_out`  | integer | 超时的秒数，默认是300s超时 |

cmd_type 取值

- `Echo`：显示信息
- `Import`：导入数据
- `Export`：导出数据
- `Rdo`：远程调用
- `Rdo2`：远程调用并返回
- `Do`：远程执行命令串
- `Getdo`：远程执行命令串并返回

返回：any

### 示例

范例01：在客户端计算表达式并返回结果

```tsl
echo sendToClient("getdo", "return 100 + 1;", nil, nil), "\n";
// 输出：101
```

范例02：传递系统参数并设置超时秒数

```tsl
params := array("a": 10, "b": 30);
echo sendToClient(
    "getdo", "return getSysParam('a') + getSysParam('b');",
    nil, params, 30), "\n";
// 输出：40
```

## `setUID(uid)`

声明：function

将当前用户设置为指定用户，调用方需要相应权限，设置成功返回真

<!-- tags: 平台与客户端 设置 修改 -->

| 参数  | 类型   | 说明   |
| ----- | ------ | ------ |
| `uid` | string | 用户名 |

返回：bool

### 示例

```tsl
echo setUid(userName()), "\n";
```

## `sudo(uid, exp)`

声明：function

以UID指定的用户执行EXP表达式，该EXP为隐式表达式，例如SUDO("system",DoSomeThing())，如用户需要用显式的表达式，采用SUDO(UID,Eval(Exp))即可，SUDO和User不一样，SUDO需要有权限，而且SUDO是完全以指定用户来执行，访问的数据资源等均以指定的UID来运行，与SetUID不一样的地方是SUDO执行完EXP后用户ID便恢复成原始的ID

<!-- tags: 平台与客户端 UID EXP SUDO ID -->

| 参数  | 类型       | 说明           |
| ----- | ---------- | -------------- |
| `uid` | string     | 字符串，用户名 |
| `exp` | expression | 表达式         |

返回：any

### 示例

范例01：以当前用户计算表达式

```tsl
echo sudo(userName(), 1 + 1), "\n";
```

## `testTable(name[, table_type])`

声明：function

检查数据是否存在，测试是否存在指定name的数据，如果table_type为真则为测试系统数据表，即测试系统账号system是否存在name指定的数据，table_type缺省或为0

<!-- tags: 平台与客户端 -->

| 参数         | 类型    | 说明                                                          |
| ------------ | ------- | ------------------------------------------------------------- |
| `name`       | string  | 字符串，数据存储位置的名称                                    |
| `table_type` | boolean | 可选，bool 类型，为假或者省略时装入当前用户表，否则装入系统表 |

返回：boolean

### 示例

```tsl
echo testTable("testA"), "\n";
```

## `transFileName(dir, if_tanscode)`

声明：function

获取本地用户数据列表(仅用于自动存储在本地的STM数据)

<!-- tags: 平台与客户端 获取 查询 STM -->

| 参数          | 类型    | 说明                   |
| ------------- | ------- | ---------------------- |
| `dir`         | string  | 字符串类型，路径       |
| `if_tanscode` | integer | 整型，用户名称是否转码 |

返回：array

### 示例

```tsl
// 获取本地用户数据列表
dir := 'C:\\Users\\xxxx\\Tinysoft\\Analyse.NET\\D254A848\\xxx\\UserDB';
echo transFileName(dir, 0), "\n";
```

## `ts_moduleInfo([n])`

声明：function

返回进程以及 TSLInterp.dll 的时间和大小信息，`n` 省略或为 0 时返回当前进程以及 TSLInterp.dll 的信息，`n` 为 1 时，在具备相应权限的情况下返回所有模块的信息

<!-- tags: 平台与客户端 返回 获取 -->

| 参数 | 类型    | 说明                                                    |
| ---- | ------- | ------------------------------------------------------- |
| `n`  | integer | 可选，信息类型，省略或为 0 返回进程信息，1 返回模块信息 |

返回：array

### 示例

```tsl
echo length(tsModuleInfo()), "\n";
```

## `tsAppServer()`

声明：function

获取当前运行的模型所在的运算服务器的标识

<!-- tags: 平台与客户端 获取 查询 -->

返回：string

### 示例

```tsl
echo tsAppServer(), "\n";
```

## `tsAppServerName()`

声明：function

返回平台设置的名字，如果没有设置，默认是ip:进程路径

<!-- tags: 平台与客户端 返回 获取 -->

返回：string

### 示例

```tsl
echo tsAppServerName(), "\n";
```

## `tsCanGrid()`

声明：function

获取当前用户是否具备网格计算的权限

<!-- tags: 平台与客户端 获取 查询 -->

返回：boolean

### 示例

```tsl
echo tsCanGrid(), "\n";
```

## `user(name)`

声明：function

获取指定用户的函数对象，调用方必须拥有该用户的授权，返回对象后可通过成员函数名继续调用

<!-- tags: 平台与客户端 获取 查询 -->

| 参数   | 类型   | 说明   |
| ------ | ------ | ------ |
| `name` | string | 用户名 |

返回：any

### 示例

```tsl
echo length(user(userName()).FunctionName) > 0, "\n";
```

## `userConfig(section, ret_type)`

声明：function

返回用户的配置信息，section为配置名，ret_type用于指定返回的类型，0为字符串，1为数字，2为日期类型，注：此函数为特殊用途

<!-- tags: 平台与客户端 返回 获取 -->

| 参数       | 类型    | 说明           |
| ---------- | ------- | -------------- |
| `section`  | string  | 字符串，配置名 |
| `ret_type` | integer | 整数，返回类型 |

返回：real|string|tdatetime

### 示例

范例01：读取平台用户配置

```tsl
// section 必须替换为平台中已配置的名称
echo userConfig("example", 0), "\n";
```

## `userDataUpLoad(filedir, if_tanscode)`

声明：function

上传用户数据，输入本地用户数据的路径及名称，通过该函数可上传至服务器

<!-- tags: 平台与客户端 -->

| 参数          | 类型    | 说明                           |
| ------------- | ------- | ------------------------------ |
| `filedir`     | string  | 字符串类型，用户数据路径及名称 |
| `if_tanscode` | integer | 整型，用户名称是否转码         |

返回：string

### 示例

```tsl
// filedir 为用户本地用户数据的存储路径
filedir := 'C:\\Users\\xxxx\\Tinysoft\\Analyse.NET\\D254A848\\xxx\\UserDB\\'
    $ 'hex_74657374646174613031.stm';
echo userDataUpLoad(filedir, 1), "\n";
```

## `userName()`

声明：function

返回当前的用户

<!-- tags: 平台与客户端 返回 获取 -->

返回：string

### 示例

范例01：读取当前平台用户

```tsl
echo userName(), "\n";
```
