# Context上下文

## 概述

上下文相关函数。上下文表示在执行过程中的环境参数


## userId

返回当前操作的用户ID

```javascript
Context.userId()
```

**返回值**

类型 `String`
当前的操作用户

**示例**

```javascript
Context.userId() //ek5veueb6c9zg
```

::: tip 提示
上下文用户只有在由用户发起的操作时才会有值，例如在`定时任务执行`、`API`访问时操作用户是`null`
:::

## appId

返回当前的应用ID

```javascript
Context.appId()
```

**返回值**

类型 `String`
当前应用ID

**示例**

```javascript
Context.appId() 
```


## appEnvProp

返回当前应用的环境变量

```javascript
Context.appEnvProp(propKey)
```

| 参数      | 类型     | 描述       |
|---------|--------|----------|
| propKey | `String` | 环境变量的key |

**返回值**

类型 `String`
环境变量的值

**示例**

假设应用中设置的换将变量如下

| 环境  | 变量标识符  | 变量值                     |
|-----|--------|-------------------------|
| dev | payURL | http://dev-demo.com/pay |
| prd | payURL | http://prd-demo.com/pay |

```javascript
//在dev环境调用时
Context.appEnvProp('payURL')//http://dev-demo.com/pay 
```

::: warning 注意事项
`客户端`使用时仅可访问设置了允许客户端访问的环境变量。`服务端`则无该限制
:::

## httpHeaders

返回当前操作的http header

```javascript
Context.httpHeaders()
```


**返回值**

类型 `Object`
http header的值

**示例**
:::: tabs
::: tab "调用"
```javascript
Context.httpHeaders()
```
:::

::: tab "返回值"
```json
{
    "host" : "uat2.informat.cn", 
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36", 
    "sec-fetch-dest" : "empty"
} 
```
:::
::::

::: tip
如果操作不是由用户触发（例如：定时任务，事件处理器），httpHeaders返回`{}`
:::

## clipboardType

返回当前应用剪切板中的存储的数据类型

```javascript
Context.clipboardType()
```

**返回值**

类型 `String`
应用剪切板存储的数据类型

**示例**

```javascript
Context.clipboardType() //test
```

::: tip 应用剪切板需要通过以下操作进行设值
- 自动化步骤`设置应用剪切板`
- 控件 `设置应用剪切板数据`
:::


## clipboardData

返回当前应用剪切板中的存储的数据

```javascript
Context.clipboardData()
```

**返回值**

类型 `Object`
应用剪切板存储的数据


## weworkAccessToken

返回企业微信AccessToken

```javascript
Context.weworkAccessToken()
```

**返回值**

类型 `String`
企业微信AccessToken

## dingtalkAccessToken

返回钉钉AccessToken

```javascript
Context.dingtalkAccessToken()
```

**返回值**

类型 `String`
钉钉AccessToken

## feishuAccessToken

返回飞书应用AccessToken

```javascript
Context.feishuAccessToken()
```

**返回值**

类型 `String`
飞书应用AccessToken

## feishuTenantAccessToken

返回飞书租户AccessToken

```javascript
Context.feishuTenantAccessToken()
```

## requestIp

返回当前请求的IP信息

```javascript
Context.requestIp()
```

**返回值**

类型 `String`
返回当前请求的IP信息

## hasAppPerm

判断当前用户是否有标识符为 permKey 的应用权限

```javascript
Context.hasAppPerm(permKey)
```

|参数| 类型       | 描述                                                     |
|----|----------|--------------------------------------------------------|
|permKey| `String` | 权限标识符 |

**返回值**

类型 `Boolean`
是否具有应用权限

## hasModulePerm

判断当前用户是否有模块标识符为 moduleKey 且权限标识符为 permKey 的模块权限

```javascript
Context.hasModulePerm(moduleKey, permKey);
```

|参数| 类型       | 描述                                                     |
|----|----------|--------------------------------------------------------|
|moduleKey| `String` | 模块标识符 |
|permKey| `String` | 权限标识符 |


**返回值**

类型 `Boolean`
是否具有模块权限

## getModuleIdByKey

根据模块标识符获取模块ID

```javascript
Context.getModuleIdByKey(moduleKey)
```

| 参数       | 类型       | 描述      |
|----------|----------|---------|
| moduleKey | `String` | 模块标识符 |

**返回值**

类型 `String`
模块ID，如果模块不存在则返回 `null`

**示例**

```javascript
Context.getModuleIdByKey('order') // "m1234567890"
```

## getModuleKeyById

根据模块ID获取模块标识符

```javascript
Context.getModuleKeyById(moduleId)
```

| 参数       | 类型       | 描述    |
|----------|----------|-------|
| moduleId | `String` | 模块ID |

**返回值**

类型 `String`
模块标识符，如果模块不存在则返回 `null`

**示例**

```javascript
Context.getModuleKeyById('m1234567890') // "order"
```

