导入后执行业务逻辑
如果有一些逻辑需要在导入成功后执行,那么可以通过自定义导入接口逻辑的【导入组件】之后进行。
接口流程图
导入后扩展
下面的流程演示了在数据导入完成后,通过【C#】脚本完成某些额外的逻辑。这里当然也可以使用其他类型组件来完成后续业务。
导入完成后,context.CmpResult 中返回的数据已经经过了过滤,这里取到的都是成功执行导入的数据。
代码示例
下面的C#脚本演示了在导入完成后,从导入成功数据中提取到人员ID,然后查询第三个对象数据完成某些字段赋值。
using System;
using System.Linq;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using Chameleon.Common;
using Chameleon.Common.Context;
using Chameleon.Common.Exceptions;
using Chameleon.Common.Models;
using Chameleon.Database;
using Chameleon.SDK;
using Newtonsoft.Json.Linq;
public class ChameleonCSharpScript
{
public object Execute(ComponentContext context, ChameleonSDK sdk)
{
if (context.CmpResult is List<ObjectData> cmpResultList)
{
if (cmpResultList == null || cmpResultList.Count == 0)
{
sdk.Logger.LogWarning("CmpResult is not a valid List<ObjectData> or is empty");
return context;
}
var index = 0;
foreach (var item in cmpResultList)
{
index++;
string studentId = Convert.ToString(item["studentid"]);
var ComprehensiveEvaluationFilter = FilterBuilder.And(
FilterBuilder.In("studentid", studentId)
);
var comprehensiveEvaluations = sdk.DbContext.GetList("StudentAffairs.ComprehensiveEvaluation", ComprehensiveEvaluationFilter);
if (comprehensiveEvaluations == null || comprehensiveEvaluations.Count == 0)
{
var comprehensiveEvaluation = new ObjectData();
comprehensiveEvaluation["studentid"] = studentId;
comprehensiveEvaluation["moral_cultivation"] = item.Fields.TryGetValue("moral_cultivation", out var moral_cultivationField) && moral_cultivationField != null
? (double)moral_cultivationField.Value
: 0;
comprehensiveEvaluation["academic_ability"] = item.Fields.TryGetValue("academic_ability", out var academic_abilityField) && academic_abilityField != null
? (double)academic_abilityField.Value
: 0;
comprehensiveEvaluation["aesthetic_labor"] = item.Fields.TryGetValue("aesthetic_labor", out var aesthetic_laborField) && aesthetic_laborField != null
? (double)aesthetic_laborField.Value
: 0;
comprehensiveEvaluation["social_competence"] = item.Fields.TryGetValue("social_competence", out var social_competenceField) && social_competenceField != null
? (double)social_competenceField.Value
: 0;
comprehensiveEvaluation["physical_mental_health"] = item.Fields.TryGetValue("physical_mental_health", out var physical_mental_healthField) && physical_mental_healthField != null ? (double)physical_mental_healthField.Value
: 0;
;
sdk.DbContext.Add("StudentAffairs.ComprehensiveEvaluation", comprehensiveEvaluation);
}
else
{
comprehensiveEvaluations.First()["moral_cultivation"] = item.Fields.TryGetValue("moral_cultivation", out var moral_cultivationField) && moral_cultivationField != null
? (double)moral_cultivationField.Value
: 0;
comprehensiveEvaluations.First()["academic_ability"] = item.Fields.TryGetValue("academic_ability", out var academic_abilityField) && academic_abilityField != null
? (double)academic_abilityField.Value
: 0;
comprehensiveEvaluations.First()["aesthetic_labor"] = item.Fields.TryGetValue("aesthetic_labor", out var aesthetic_laborField) && aesthetic_laborField != null
? (double)aesthetic_laborField.Value
: 0;
comprehensiveEvaluations.First()["social_competence"] = item.Fields.TryGetValue("social_competence", out var social_competenceField) && social_competenceField != null
? (double)social_competenceField.Value
: 0;
comprehensiveEvaluations.First()["physical_mental_health"] = item.Fields.TryGetValue("physical_mental_health", out var physical_mental_healthField) && physical_mental_healthField != null ? (double)physical_mental_healthField.Value
: 0;
;
sdk.DbContext.BatchUpdate("StudentAffairs.ComprehensiveEvaluation", comprehensiveEvaluations);
}
}
return cmpResultList;
}
return null;
}
}
使用场景
- 导入完成后更新关联对象数据
- 导入完成后发送通知消息
- 导入完成后触发工作流
- 导入完成后进行数据统计和汇总
注意事项
context.CmpResult中只包含成功导入的数据- 可以使用其他组件替代C#脚本
- 确保业务逻辑的幂等性,避免重复导入导致数据错误
- 合理处理异常情况,避免影响导入结果