Faasコネクタ-高度なクエリ条件によるフォームインスタンスデータ (サブフォームコンポーネントデータを含む) の取得
注: このopenapiをhttpコネクタとしてフロントエンド・データ・ソースで直接使用することはお勧めしません。このケースを参照してfaasコネクタを構成してから使用してください。そうしないと、systemtokenパラメータが漏洩し、アプリケーションのデータセキュリティを脅かす可能性があります。
1. 使用シーン
この開発言語の例: nodejs
この例では、ホッチキスオープンプラットフォームopenapiを使用して、高度なクエリ条件からフォームインスタンスデータ (サブフォームコンポーネントデータを含む) を取得する方法を紹介します。
2. 機能を実現する
2.1. ホッチキスのオープンプラットフォームの応用証明書とインタフェース権限を申請する
申請した場合、この手順は無視できます。
宜搭自定义连接器鉴权凭证申请及接口权限申请 | 钉钉宜搭·帮助中心
2.2. Faasコネクタの作成と構成
2.2.1. Faasコネクタの作成

2.2.2. コネクタの基本情報と開発言語の設定

2.2.3. コネクタの設定アクションの実行



Bodyを解析し、成功フラグビットを設定することに注意してください。
{
"appType" : "String",
"formUuid" : "String",
"pageNumber" : "Integer",
"pageSize" : "Integer",
"originatorId" : "String",
"searchCondition" : "String",
"orderConfigJson" : "String",
"modifiedToTimeGMT" : "String",
"modifiedFromTimeGMT" : "String",
"createToTimeGMT" : "String",
"createFromTimeGMT" : "String"
}
{
"success": true,
"content": "",
"error": ""
}
2.3. Faasコネクタの開発
2.3.1. クラウドideの開発に行き、Dingopenapiutil.jsファイルにコードを追加します

追加が完了したら保存する必要があります。
Windows: ctrl + s Mac:Command + s

次のコードをコピーして、上の図のタグの「searchformdatasecondgeneration」全体を置き換えます。
searchFormDataSecondGeneration: async function (searchFormDataSecondGenerationInputs) {
let client = createClient();
let searchFormDataSecondGenerationHeaders = new $dingtalkyida_1_0.SearchFormDataSecondGenerationHeaders({});
searchFormDataSecondGenerationHeaders.xAcsDingtalkAccessToken = innerGetAccessToken();
let searchFormDataSecondGenerationRequest = new $dingtalkyida_1_0.SearchFormDataSecondGenerationRequest(searchFormDataSecondGenerationInputs);
try {
const result = await client.searchFormDataSecondGenerationWithOptions(searchFormDataSecondGenerationRequest, searchFormDataSecondGenerationHeaders, new $Util.RuntimeOptions({}));
return result.body;
} catch (err) {
if (!Util.empty(err.code) && !Util.empty(err.message)) {
// err 中含有 code 和 message 属性,可帮助开发定位问题
}
throw err;
}
return null;
},
2.3.2. Faasentry.jsファイルのコードを完全に置き換えます
状況に応じて固定パラメータを変更することに注意してください。
Appkey、appsecretは2.1が申請したアプリケーション証明書です。
Systemtokenは、適切なアプリケーション設定-導入運送次元で直接見つけることができます。

const { openApi: OpenAPIUtil, yidaConnector: YidaConnectorUtil, httpUtil: HttpUtil } = require('./utils');
const { ConnectorTypeEnum } = YidaConnectorUtil;
// 注意:涉及数据安全的参数(如:appKey、appSecret、systemToken)一定要在服务端发送,不可在前端数据源里传入。
const appKey = 'XXXXXXXXXXXXXXXXXXXX';
const appSecret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const systemToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
module.exports = async function (faasInputs, context) {
// 这里的 inputs 跟你配置连接器时的 Body 参数及字段格式保持一致
const { inputs = {}, yidaContext = {} } = faasInputs || {};
const userId = yidaContext ? yidaContext['userId'] : ''; // 从连接器上下文获取调用人的 userId
const corpId = yidaContext ? yidaContext['corpId'] : ''; // 从连接器上下文获取调用组织的 corpId
const accessToken = yidaContext ? yidaContext['accessToken'] : '';
const consumeCode = yidaContext ? yidaContext['consumeCode'] : '';
OpenAPIUtil.setAccessToken(accessToken);
await OpenAPIUtil.getCustomAccessTokenThenCache(appKey, appSecret); // 获取调用连接器的 accessToken
YidaConnectorUtil.setConsumeCode(consumeCode);
inputs['systemToken'] = systemToken;
inputs['userId'] = userId;
return await searchFormDataSecondGeneration(inputs).then((result) => {
return {
success: true,
content: result,
error: null,
};
}).catch((error) => {
return {
success: false,
content: null,
error: error,
};
});
};
async function searchFormDataSecondGeneration(inputs) {
return await OpenAPIUtil.searchFormDataSecondGeneration(inputs);
}
2.4. Faasコネクタの導入
追加したコードを保存することに注意してください。

ヒントコードの導入が成功すると、faasコネクタクラウドideの開発が完了します。

2.5. コネクタ設定に戻り、「保存」をクリックします

2.6. 適切なページでデータソースを設定し、データソースを使用します
2.6.1. データを取得してテーブルに表示します
次のケースを参考にしてください。この例は、次のケースの検索データ機能のアップグレードです。
2.6.2. データソースで作成したばかりのコネクタを選択します


2.6.3. フロントエンドによるデータソースの直接呼び出し

// 加载表单数据
export function getData() {
const { currentPage, pageSize, searchCondition = [], } = this.state;
this.dataSourceMap.getData.load({
inputs: JSON.stringify({
body: {
appType: pageConfig.appType,
formUuid,
pageSize,
pageNumber: currentPage,
searchCondition: JSON.stringify(searchCondition),
},
}),
}).then(res => {
const { content, success, error } = res;
if (!success) {
this.utils.toast({
title: error,
type: 'error',
});
this.setState({
loading: false,
});
return;
}
const result = (content.data || []).map((item) => {
const { formInstanceId, formUuid, formData } = item;
return {
formInstId: formInstanceId,
formUuid,
...formData,
};
});
this.setState({
tableData: {
currentPage: content.pageNumber,
data: result,
totalCount: content.totalCount,
},
loading: false
});
}).catch(error => {
this.utils.toast({
title: error.message,
type: 'error',
});
this.setState({
loading: false,
});
});
}

// 搜索
export function onSubmit(values) {
const searchCondition = [{
'key': 'textField_lcpug407', // 姓名
'value': values.textField_lpas7xw1,
'type': 'TEXT',
'operator': values.selectField_lpb05kua,
'componentName': 'TextField',
}, {
'key': 'selectField_lpgn09sv', // 性别
'value': values.multiSelectField_lpgpe5te && values.selectField_lpgpe5td === 'eq' ? values.multiSelectField_lpgpe5te[0] : values.multiSelectField_lpgpe5te,
'type': 'ARRAY',
'operator': values.selectField_lpgpe5td,
'componentName': 'RadioField',
}, {
'key': 'numberField_lcpusnib', // 年龄
'value': values.numberField_lpgpe5tf,
'type': 'DOUBLE',
'operator': values.selectField_lpgpe5tg,
'componentName': 'NumberField',
}, {
'key': 'multiSelectField_lpgn09su', // 擅长技术
'value': values.multiSelectField_lpgpe5th,
'type': 'ARRAY',
'operator': values.selectField_lpgpe5ti,
'componentName': 'MultiSelectField',
}, {
'key': 'dateField_lpbyrnq7', // 入职日期
'value': values.dateField_lpgpe5tj,
'type': 'DOUBLE',
'operator': values.selectField_lpgpe5tk,
'componentName': 'DateField',
}, {
'key': 'employeeField_lpgn09st', // 直属主管
'value': values.employeeField_lpgpe5tl ? (values.selectField_lpgpe5tm === 'eq' ? values.employeeField_lpgpe5tl.value : values.employeeField_lpgpe5tl.map(item => item.value)) : '',
'type': 'STRING',
'operator': values.selectField_lpgpe5tm,
'componentName': 'EmployeeField',
}];
this.setState({
currentPage: 1,
loading: true,
searchCondition,
});
this.getData();
}
3. 効果を実現する


4. オンラインで試遊する
この文書は機械翻訳により生成されています。翻訳により生じた齟齬や相違点は拘束力を持たず、コンプライアンスや執行目的において法的効力はありません。
このドキュメントは役に立ちましたか?
