同步操作将从 Gitee 极速下载/tooljet 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
id | title |
---|---|
creating-a-plugin | 创建插件 |
ToolJet 在构建时考虑到了可扩展性。插件允许开发人员使用 JavaScript 扩展 ToolJet 的功能。插件此时只能是连接器。例如,将 PostgreSQL、MySQL、Twilio、Stripe 等数据源连接器构建为插件。
在本指南中,我们将引导您在 tooljet
cli 的帮助下为 ToolJet 构建插件。
tooljet
cli 是为轻松构建插件而构建的命令行工具。我们将在本指南中为 BigQuery 构建一个简单的插件。
所有插件都位于 /plugins
目录下。插件的结构如下所示:
my-awesome-plugin/
package.json
lib/
icon.svg
index.ts
operations.json
manifest.json
QueryService
。 QueryService
处理查询运行、测试连接、缓存连接等。npm i -g @tooljet/cli
tooljet plugin create bigquery
creating plugin... done
Plugin: bigquery created successfully
└─ plugins
└─ packages
└─ bigquery
tooljet plugin install @google-cloud/bigquery --plugin bigquery
plugins/
package.json
packages/
bigquery/
__tests__
bigquery.test.js
package.json
lib/
icon.svg
index.ts
operations.json
manifest.json
我们的 BigQuery 插件需要 GCP 服务帐户的私钥才能连接到 BigQuery。让我们添加 private_key
作为数据源的属性。
{
"$schema": "https://json-schema.org/",
"$id": "https://tooljet.io/BigQuery.schema.json",
"title": "BigQuery datasource",
"description": "A schema defining BigQuery datasource",
"type": "api",
"source": {
"name": "BigQuery",
"kind": "bigquery",
"exposedVariables": {
"isLoading": false,
"data": {},
"rawData": {}
},
"options": {
"private_key": { "encrypted": true }
}
},
"defaults": {
"private_key": { "value": "" }
},
"properties": {
"private_key": {
"label": "Private key",
"key": "private_key",
"type": "textarea",
"description": "Enter JSON private key for service account"
}
},
"required": ["private_key"]
}
const { BigQuery } = require('@google-cloud/bigquery');
async getConnection(sourceOptions: any, _options?: object): Promise<any> {
const privateKey = JSON.parse(sourceOptions['private_key']);
const client = new BigQuery({
projectId: privateKey['project_id'],
credentials: {
client_email: privateKey['client_email'],
private_key: privateKey['private_key'],
},
});
return client;
}
:::info
注意:每个数据源可能都无法测试连接。如果不适用于您的数据源,您可以通过将 "customTesting": true,
添加到插件的 manifest.json
来禁用测试连接功能。
:::
为操作添加清单条目
在此示例中,让我们为 BigQuery 插件添加两个操作。
我们需要将条目添加到 operations.json
中。 operations.json
现在应该如下所示:
{
"$schema": "https://json-schema.org/",
"$id": "https://tooljet.io/dataqueries/Bigquery.schema.json",
"title": "Dynamodb datasource",
"description": "Operations for BigQuery plugin",
"type": "object",
"defaults": {},
"properties": {
"operation": {
"label": "Operation",
"key": "operation",
"type": "dropdown-component-flip",
"description": "Single select dropdown for operation",
"list": [
{
"value": "list_datasets",
"name": "List Datasets"
},
{
"value": "query",
"name": "Query"
}
]
},
"query": {
"query": {
"label": "Query",
"key": "query",
"type": "codehinter",
"description": "",
"height": "150px"
}
}
}
}
在 index.ts
中处理运行查询的逻辑
QueryService
接收数据源的元数据,包括用于连接的凭据和配置以及运行的查询的参数。在我们的示例中,“sourceOptions”将具有与查询关联的 BigQuery 数据源的private_key
。 queryOptions
将具有特定查询的配置和参数。例如,queryOption.operation
将给出当前操作的 id。
export default class BigQueryQueryService implements QueryService {
async run(sourceOptions: any, queryOptions: any, _dataSourceId: string): Promise<QueryResult> {
const operation = queryOptions.operation;
const client = await this.getConnection(sourceOptions);
let result = {};
try {
switch (operation) {
case 'list_datasets':
result = await client.getDatasets();
break;
}
} catch (error) {
throw new QueryError('Query could not be completed', error.message, {});
}
return {
status: 'ok',
data: result,
};
}
}
由于这是添加处理query
操作逻辑的简单步骤,因此跳过它。
测试文件在创建插件时由cli 生成。您可以使用 jest
来编写测试。
可以使用命令tooljet plugin test --bigquery
运行针对特定插件的测试
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。