diff --git a/packages/plugins/@nocobase/plugin-workflow-action-trigger/src/server/ActionTrigger.ts b/packages/plugins/@nocobase/plugin-workflow-action-trigger/src/server/ActionTrigger.ts index c6a024c200..2da8647f72 100644 --- a/packages/plugins/@nocobase/plugin-workflow-action-trigger/src/server/ActionTrigger.ts +++ b/packages/plugins/@nocobase/plugin-workflow-action-trigger/src/server/ActionTrigger.ts @@ -54,7 +54,10 @@ export default class extends Trigger { params: { triggerWorkflows = '', values }, } = context.action; const dataSourceHeader = context.get('x-data-source') || 'main'; - const fullCollectionName = joinCollectionName(dataSourceHeader, resourceName); + const collection = context.app.dataSourceManager.dataSources + .get(dataSourceHeader) + .collectionManager.getCollection(resourceName); + const fullCollectionName = joinCollectionName(dataSourceHeader, collection.name); const { currentUser, currentRole } = context.state; const { model: UserModel } = this.workflow.db.getCollection('users'); const userInfo = { @@ -95,8 +98,8 @@ export default class extends Trigger { const syncGroup = []; const asyncGroup = []; for (const workflow of triggeringLocalWorkflows.concat(...globalWorkflows.values())) { - const { collection, appends = [] } = workflow.config; - const [dataSourceName, collectionName] = parseCollectionName(collection); + const { appends = [] } = workflow.config; + const [dataSourceName, collectionName] = parseCollectionName(workflow.config.collection); const dataPath = triggersKeysMap.get(workflow.key); const event = [workflow]; if (context.action.resourceName !== 'workflows') { diff --git a/packages/plugins/@nocobase/plugin-workflow-action-trigger/src/server/__tests__/trigger.test.ts b/packages/plugins/@nocobase/plugin-workflow-action-trigger/src/server/__tests__/trigger.test.ts index 46376e3b96..914091bca0 100644 --- a/packages/plugins/@nocobase/plugin-workflow-action-trigger/src/server/__tests__/trigger.test.ts +++ b/packages/plugins/@nocobase/plugin-workflow-action-trigger/src/server/__tests__/trigger.test.ts @@ -10,7 +10,7 @@ describe('workflow > action-trigger', () => { let db: Database; let agent; let PostRepo; - let CommentRepo; + let CategoryRepo; let WorkflowModel; let UserRepo; let users; @@ -25,7 +25,7 @@ describe('workflow > action-trigger', () => { db = app.db; WorkflowModel = db.getCollection('workflows').model; PostRepo = db.getCollection('posts').repository; - CommentRepo = db.getCollection('comments').repository; + CategoryRepo = db.getCollection('categories').repository; UserRepo = db.getCollection('users').repository; users = await UserRepo.create({ @@ -461,6 +461,33 @@ describe('workflow > action-trigger', () => { }); }); + describe('associations actions', () => { + it('trigger on associated data', async () => { + const workflow = await WorkflowModel.create({ + enabled: true, + type: 'action', + config: { + collection: 'posts', + }, + }); + + const c1 = await CategoryRepo.create({ values: { title: 'c1' } }); + + const res1 = await userAgents[0].resource('categories.posts', c1.id).create({ + values: { title: 'p1' }, + triggerWorkflows: `${workflow.key}`, + }); + expect(res1.status).toBe(200); + + await sleep(500); + + const e1s = await workflow.getExecutions(); + expect(e1s.length).toBe(1); + expect(e1s[0].status).toBe(EXECUTION_STATUS.RESOLVED); + expect(e1s[0].context.data).toMatchObject({ title: 'p1', categoryId: c1.id }); + }); + }); + describe('workflow key', () => { it('revision', async () => { const w1 = await WorkflowModel.create({