Fired when a learner's progress on a learning module changes, for example starting, completing, saving, languishing without completion, renewing, expiring or submitting a module. Raised throughout learning module processing in LearningManager and ModuleFolder, one instance per progress change, with the specific change identified by the action. The attributes map contains the ModuleFolder under the key "module" when one is available. A listener can use this event to drive triggers, funnels and the social recognition wall.
Group: Journeys
Implements: TriggerEvent, FunnelEvent, ShareableItemEvent
Properties
| Property | Returns | Description |
|---|---|---|
| action | ModuleProgressAction | The kind of progress change that occurred, eg module started, completed, renewed or expired. |
| attributes | Map<String,Object> | Extra properties associated with this event. Contains the ModuleFolder under the key "module" when one is available. |
| contentIds | List<String> | The content walls where this achievement should be shared. This event does not specify any, so the default behaviour of posting to the team organisation wall applies. |
| courseCode | String | The course code of the course containing the module, if the module belongs to a course. |
| eventId | String | The persistence-friendly identifier for this event type. |
| itemDescription | String | A human-readable description of the achievement, either the completed module's title or, if the module folder is not available in the attributes, a fallback message built from the module status's module code. |
| leadProfile | Profile | The learner associated with this event, for funnel processing. |
| moduleCode | String | The code of the module whose progress changed. |
| moduleStatus | ModuleStatus | The learner's status record for the module at the time of this event, if one was available when the event was raised. |
| programCode | String | The program code of the program containing the module. |
| relatedAppName | String | The name of the app that can locate the source activity, always the learning app's instance ID. |
| relatedId | String | The ID of the module status record for this progress change. |
| relatedLead | Lead | This event is not created from an existing funnel lead, so there is no related lead to return. |
| shareable | boolean | True if this event represents an achievement worth sharing on the social wall, which is the case only when the action is MODULE_COMPLETE. |
| shareableItemWebsite | Website | The website this shareable item should be associated with. |
| sourceProfile | Profile | The learner whose progress triggered this event. |
| triggerItem1 | String | A concatenated string combining the website name with the program, course and module codes, used as a trigger key. |
| triggerItem2 | String | The name of the ModuleProgressAction that describes what happened, eg MODULE_STARTED, MODULE_COMPLETE, MODULE_LANGUISHING or MODULE_SAVED. |
| triggerItem3 | String | Not used by this event; always null. |
| triggerItem4 | String | Not used by this event; always null. |
| triggerItem5 | String | Not used by this event; always null. |
| website | Website | The website that owns the module the learner is progressing through. |
Inherited from TriggerEvent
Properties
| Property | Returns | Description |
|---|---|---|
| serialisable | boolean | Whether this event's attributes were built to survive being persisted, ie every value is a plain serialisable value rather than a persistent entity or some other object that only makes sense inside the firing transaction. Only the firing app can know this, so it declares it - see EventBuilder. An agent that subscribes to an event does not run when it fires. The event is written to storage as JSON, buffered with others, and read back minutes later in a different session, so a value that cannot be written and read back is not merely awkward, it breaks the whole delivery. The agent framework therefore ignores any event which does not say yes here. |
Methods
isSerialisable()
Returns: boolean
Whether this event's attributes were built to survive being persisted, ie every value is a plain serialisable value rather than a persistent entity or some other object that only makes sense inside the firing transaction. Only the firing app can know this, so it declares it - see EventBuilder. An agent that subscribes to an event does not run when it fires. The event is written to storage as JSON, buffered with others, and read back minutes later in a different session, so a value that cannot be written and read back is not merely awkward, it breaks the whole delivery. The agent framework therefore ignores any event which does not say yes here.
Methods
toProps() · getSourceProfile() · getEventId() · getWebsite() · getProgramCode() · getCourseCode() · getModuleCode() · getAction() · getTriggerItem1() · getTriggerItem2() · getTriggerItem3() · getTriggerItem4() · getTriggerItem5() · getModuleStatus() · getAttributes() · getLeadProfile() · getRelatedLead() · isShareable() · getItemDescription() · getRelatedAppName() · getRelatedId() · getContentIds() · getShareableItemWebsite()
toProps()
Returns: Map<String,Serializable>
Builds the serialisable properties map for this event, including the moduleStatus URN and the action name, for use where the event needs to be passed to external systems such as an LLM.
getSourceProfile()
Returns: Profile
The learner whose progress triggered this event.
getEventId()
Returns: String
The persistence-friendly identifier for this event type.
getWebsite()
Returns: Website
The website that owns the module the learner is progressing through.
getProgramCode()
Returns: String
The program code of the program containing the module.
getCourseCode()
Returns: String
The course code of the course containing the module, if the module belongs to a course.
getModuleCode()
Returns: String
The code of the module whose progress changed.
getAction()
Returns: ModuleProgressAction
The kind of progress change that occurred, eg module started, completed, renewed or expired.
getTriggerItem1()
Returns: String
A concatenated string combining the website name with the program, course and module codes, used as a trigger key.
getTriggerItem2()
Returns: String
The name of the ModuleProgressAction that describes what happened, eg MODULE_STARTED, MODULE_COMPLETE, MODULE_LANGUISHING or MODULE_SAVED.
getTriggerItem3()
Returns: String
Not used by this event; always null.
getTriggerItem4()
Returns: String
Not used by this event; always null.
getTriggerItem5()
Returns: String
Not used by this event; always null.
getModuleStatus()
Returns: ModuleStatus
The learner's status record for the module at the time of this event, if one was available when the event was raised.
getAttributes()
Returns: Map<String,Object>
Extra properties associated with this event. Contains the ModuleFolder under the key "module" when one is available.
getLeadProfile()
Returns: Profile
The learner associated with this event, for funnel processing.
getRelatedLead()
Returns: Lead
This event is not created from an existing funnel lead, so there is no related lead to return.
isShareable()
Returns: boolean
True if this event represents an achievement worth sharing on the social wall, which is the case only when the action is MODULE_COMPLETE.
getItemDescription()
Returns: String
A human-readable description of the achievement, either the completed module's title or, if the module folder is not available in the attributes, a fallback message built from the module status's module code.
getRelatedAppName()
Returns: String
The name of the app that can locate the source activity, always the learning app's instance ID.
getRelatedId()
Returns: String
The ID of the module status record for this progress change.
getContentIds()
Returns: List<String>
The content walls where this achievement should be shared. This event does not specify any, so the default behaviour of posting to the team organisation wall applies.
getShareableItemWebsite()
Returns: Website
The website this shareable item should be associated with.