跳到主要内容

导入后执行业务逻辑

如果有一些逻辑需要在导入成功后执行,那么可以通过自定义导入接口逻辑的【导入组件】之后进行。

接口流程图​

导入后扩展​

下面的流程演示了在数据导入完成后,通过【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#脚本
  • 确保业务逻辑的幂等性,避免重复导入导致数据错误
  • 合理处理异常情况,避免影响导入结果