




















在业务流程管理系统中,案例定义(Case Definition)的版本更新是一个常见的需求。Flowable提供了强大的案例迁移(Case Migration)功能,允许您将案例实例从一个定义版本迁移到另一个版本。本文将详细介绍这个功能的使用方法。
Flowable提供了多个层级的迁移API:
除了上述API外,Flowable还支持历史案例实例的迁移,这对于使用案例重新激活功能特别有用。需要注意的是,在迁移历史案例实例时,不能指定迁移映射和表达式,因为案例仍然处于关闭状态。
迁移过程的核心是迁移文档(Migration Document),这是一个JSON格式的配置文件。让我们通过一个具体的例子来说明:
假设我们要将以下testMigrationCase案例(包含两个人工任务,通过sentry连接):

迁移到新版本(包含一个人工任务和一个服务任务,通过sentry连接):

迁移文档的JSON结构如下:
{
"toCaseDefinitionKey": "testMigrationCase",
"toCaseDefinitionVersion": 2,
"terminatePlanItemDefinitions": [
{
"planItemDefinitionId": "humanTask2"
}
],
"moveToAvailablePlanItemDefinitions": [
{
"planItemDefinitionId": "serviceTask1"
}
]
}
toCaseDefinitionId:目标案例定义的唯一IDtoCaseDefinitionKey:目标案例定义的键值toCaseDefinitionVersion:目标案例定义的版本号toCaseDefinitionTenantId:多租户环境下的租户ID迁移文档支持多种状态变更操作:
激活计划项(Activate Plan Items)
移动到可用状态(Move to Available)
终止计划项(Terminate Plan Items)
重复等待状态管理
waitingForRepetitionPlanItemDefinitions:添加重复等待removeWaitingForRepetitionPlanItemDefinitions:移除重复等待Flowable提供了CmmnMigrationService接口来管理案例实例的迁移。以下是主要的接口方法:
// 创建案例实例迁移构建器
CaseInstanceMigrationBuilder createCaseInstanceMigrationBuilder();
// 从迁移文档创建案例实例迁移构建器
CaseInstanceMigrationBuilder createCaseInstanceMigrationBuilderFromCaseInstanceMigrationDocument(CaseInstanceMigrationDocument document);
// 创建历史案例实例迁移构建器
HistoricCaseInstanceMigrationBuilder createHistoricCaseInstanceMigrationBuilder();
// 从迁移文档创建历史案例实例迁移构建器
HistoricCaseInstanceMigrationBuilder createHistoricCaseInstanceMigrationBuilderFromHistoricCaseInstanceMigrationDocument(HistoricCaseInstanceMigrationDocument document);
// 验证单个案例实例的迁移
CaseInstanceMigrationValidationResult validateMigrationForCaseInstance(String caseInstanceId, CaseInstanceMigrationDocument document);
// 验证案例定义下所有案例实例的迁移
CaseInstanceMigrationValidationResult validateMigrationForCaseInstancesOfCaseDefinition(String caseDefinitionId, CaseInstanceMigrationDocument document);
// 验证指定版本案例定义下所有案例实例的迁移
CaseInstanceMigrationValidationResult validateMigrationForCaseInstancesOfCaseDefinition(String caseDefinitionKey, int caseDefinitionVersion, String caseDefinitionTenantId, CaseInstanceMigrationDocument document);
// 迁移单个案例实例
void migrateCaseInstance(String caseInstanceId, CaseInstanceMigrationDocument document);
// 迁移单个历史案例实例
void migrateHistoricCaseInstance(String caseInstanceId, HistoricCaseInstanceMigrationDocument document);
// 迁移案例定义下的所有案例实例
void migrateCaseInstancesOfCaseDefinition(String caseDefinitionId, CaseInstanceMigrationDocument document);
// 迁移案例定义下的所有历史案例实例
void migrateHistoricCaseInstancesOfCaseDefinition(String caseDefinitionId, HistoricCaseInstanceMigrationDocument document);
// 迁移指定版本案例定义下的所有案例实例
void migrateCaseInstancesOfCaseDefinition(String caseDefinitionKey, int caseDefinitionVersion, String caseDefinitionTenantId, CaseInstanceMigrationDocument document);
// 迁移指定版本案例定义下的所有历史案例实例
void migrateHistoricCaseInstancesOfCaseDefinition(String caseDefinitionKey, int caseDefinitionVersion, String caseDefinitionTenantId, HistoricCaseInstanceMigrationDocument document);
// 批量迁移案例定义下的所有案例实例
Batch batchMigrateCaseInstancesOfCaseDefinition(String caseDefinitionId, CaseInstanceMigrationDocument document);
// 批量迁移案例定义下的所有历史案例实例
Batch batchMigrateHistoricCaseInstancesOfCaseDefinition(String caseDefinitionId, HistoricCaseInstanceMigrationDocument document);
// 批量迁移指定版本案例定义下的所有案例实例
Batch batchMigrateCaseInstancesOfCaseDefinition(String caseDefinitionKey, int caseDefinitionVersion, String caseDefinitionTenantId, CaseInstanceMigrationDocument document);
// 批量迁移指定版本案例定义下的所有历史案例实例
Batch batchMigrateHistoricCaseInstancesOfCaseDefinition(String caseDefinitionKey, int caseDefinitionVersion, String caseDefinitionTenantId, HistoricCaseInstanceMigrationDocument document);
// 获取批量迁移的结果
CaseInstanceBatchMigrationResult getResultsOfBatchCaseInstanceMigration(String migrationBatchId);
假设您有一个"项目案例"的CMMN模型,当前版本包含以下阶段和计划项:
项目准备阶段
项目执行阶段
现在需要升级到新版本,增加以下改进:
迁移文档示例:
{
"toCaseDefinitionKey": "projectCase",
"toCaseDefinitionVersion": 2,
"terminatePlanItemDefinitions": [
{
"planItemDefinitionId": "projectPlanTask"
}
],
"moveToAvailablePlanItemDefinitions": [
{
"planItemDefinitionId": "riskAssessmentPlan",
"localVariables": {
"riskAssessmentType": "comprehensive"
}
},
{
"planItemDefinitionId": "codeReviewTask"
}
],
"activatePlanItemDefinitions": [
{
"planItemDefinitionId": "autoProjectPlan",
"localVariables": {
"planTemplate": "standard"
}
}
]
}
Flowable的Case Migration功能提供了灵活且强大的案例版本迁移能力。通过合理使用迁移文档中的各种配置项,您可以安全地将案例实例从一个版本迁移到另一个版本,同时保持业务流程的连续性和完整性。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。