---
navTitle: dataTransform
---
# dataTransform - 数据加工组件扩展

SuccApp 数据加工内置了大量常用的加工组件，如汇总、行转列、列加工等，能满足大部分的数据加工需求，一些个性化加工需求也可以通过SQL组件、脚本组件实现，但是SQL组件、脚本组件不方便复用，每个用到的地方都需要再次编写SQL或者脚本。

数据加工组件扩展组件可以做到和产品内置的加工组件一样的复用，由扩展开发者开发好数据加工组件扩展后，使用者可以像使用内置加工组件一样使用扩展组件。

本文讲述如何开发一个 SuccApp 数据加工组件扩展。

## 扩展文件结构

1. [package.json](#packagejson) 定义扩展的配置信息。
2. [main.action](#mainaction) 定义扩展的执行逻辑。

### package.json

每一个扩展都需要在根目录中有一个描述文件`package.json`。

示例如下：

<<< @/../../bi/com.succez.bi/web/static-file/extension/extensions/template-dataTransform-blank/package.json

详细说明：

在`dataTransform`属性中描述扩展组件的配置信息，包括下列属性：

1. `inputDataStreamTypes` 描述扩展组件可以接受哪些输入节点，是一个json字符串数组，可以设置这些类型：
   1. `DbTable` 数据库表或视图
   2. `ModelTable` 模型表
   3. `Stream` 数据流、
   4. `Sql` SQL查询
2. `inputDataStreamCount` 描述此组件可以接受几个输入节点，可以设置如下值：
   1. `Any` 随便是否有输入节点，可以没有也可以有，输入节点只是控制执行顺序，输入节点不能是不落地数据的节点
   2. `MustOne` 必须且只需要一个数据输入节点
   3. `MustTwo` 必须要两个输入节点
   4. `MustMore` 必须需要多个数据输入节点
3. `outputDataStreamType` 描述此组件的输出数据类型，可以设置如下值：
   1. `DbTable` 输出数据在一个数据库表或视图中
   2. `Stream` 输出数据是一个数据流
4. `scriptAction` 加工逻辑所在的后端脚本，默认是`main.action`，脚本中有一个`onProcessExtensionNode`函数。
5. `properties` 描述使用这个加工组件时可以设置测选项
   1. `propertyItems` 选项列表，是一个json数组，每个元素说明一个选项的定义，可以包含如下属性：
      1. `name` 属性名，应该是一个字母组成的标识符，用于在扩展组件运行的时候传递给扩展组件的加工逻辑
      2. `type` 属性类型，描述用户输入此属性时的输入方式，具体见下文
      3. `caption` 属性标题，应该是一个简短的描述，如：每月发放月限量
      4. `desc` 属性描述，可选，一段文字描述如何使用此属性
      5. `items` 可选值列表，可选，当属性类型是combobox时有效

属性类型可以有如下选项：

1. `filter` 过滤条件
2. `number` 数字输入
3. `combobox` 下拉选项输入
4. `checkbox` 勾选框输入
5. `text` 文本输入
6. `date` 日期输入，支持输入相对日期
7. `field` 字段选择下拉框
8. `fields` 字段选择下拉框，可以多选字段

### main.action

`main.action`文件是一个后端脚本文件，定义了数据加工扩展的执行逻辑。

入口函数是`onProcessExtensionNode`，会在如下2个时机被调用：

1. 用户在数据加工界面中选择使用此扩展组件，并进行数据预览时。
2. 定时调度包含了此扩展组件的加工流程时。

可以直接编辑`main.action`文件，也可以在 SuccApp for VS Code 或元数据项目设置中通过脚本编辑器直接编辑
ts语法的脚本文件`main.action.ts`，编辑器会自动编译并生成`main.action`。

脚本模版：

<<< @/../../bi/com.succez.bi/web/static-file/extension/extensions/template-dataTransform-blank/main.action.ts

## 示例
