Technical details

How messages flow through MyHub

MyHub recognizes three sources of messages — system events, human-authored notes, and programmatic ABAP calls. Each follows the same routing model and converges in the same Inbox. Here's how it works under the hood.

Three ways a message can be born.

They share the same data shape and the same downstream pipeline. What differs is who or what triggers them.

Automated · AT

Automated Messages

Generated automatically when something changes in the back-office system — a price moves, a listing goes live, a contract item gets removed. The system fires a structured event; MyHub turns it into an Inbox message for every Receiver Group that subscribes.

Origin: CENT (Change Event Notification Tool) Trigger code: AT### Authoring: Configuration only — no human writes the body
Free Text · FT

Free Text Messages

Composed by a human in the MyHub Outbox. The sender picks a Free Text trigger that defines the input fields, writes the message, optionally routes it through approval, and chooses which Receiver Groups will receive it.

Origin: Outbox UI (Fiori app) Trigger code: FT### Authoring: Human, with optional approval workflow
Cross-Message · CT

Cross-Messages NEW

The newest addition. A CT is a Free Text message posted programmatically from ABAP code — anywhere — through the Outbox API. Use it when you need typed, structured communication driven by custom logic that doesn't fit a CENT event.

Origin: ABAP code (BAdI, exit, custom job, BAPI…) Trigger code: CT### Authoring: Code-driven, fully under developer control

Automated Messages — from data change to actionable task

The classic MyHub flow. Wired in via configuration; no per-message code.

Whenever a relevant master-data attribute changes — say, a regional listing date or a gross price condition — the source system records it as a change document. CENT watches those changes and emits a typed event. MyHub's processor receives the event, looks up which Receiver Groups have subscribed to that trigger code, applies each group's filter rules, and creates one Inbox message per matching group.

Step 1 Change happens User updates master data in S/4 (or another source system)
Step 2 CENT detects Reads the change document, fires a structured event
Step 3 MyHub processes Maps event → trigger code, finds subscribed RGs, applies filters
Step 4 Message lands One Inbox entry per RG, with master-data snapshot attached

What makes ATs powerful is the "Current vs At Event Time" snapshot — every Inbox message carries both the original state of the data when the event fired and the live state right now. Reviewers always see what actually changed, even days later.

Free Text Messages — humans broadcasting to teams

For announcements, alerts, and ad-hoc notes that need a structured home.

FTs are MyHub's answer to the question "what about updates that aren't tied to a master-data change?" A buyer who wants to flag a delivery issue, a category planner announcing a launch, an audit team broadcasting a checkpoint — they all use the Outbox.

Step 1 User opens Outbox Clicks Create, picks an FT trigger and Sending Receiver Group
Step 2 Fills in the form Input fields tailored to the trigger; rich-text body; attachments
Step 3 Approval (optional) Routes to an Approver if the trigger requires it; can be rejected back
Step 4 Posted to Distribution List Each receiving RG gets an Inbox copy on the Post Date

Each FT trigger has its own configurable input schema, defined once by an admin in the Administrative Workbench under Free Text Trigger. That schema controls what fields appear in the Outbox form — Article ID, Site (DC), Supplier, Urgent flag, Post Date, etc. — so submissions stay consistent and machine-readable.

Cross-Messages — Outbox, but from ABAP NEW

The flexibility of Free Text messaging, callable from any place in the codebase.

Sometimes you need to communicate something typed and structured, but it's not a master-data change CENT can detect. Maybe it's a custom report finishing up. Maybe a nightly job that detects an anomaly. Maybe a scheduled cleanup task that needs to tell three teams which articles it touched. That's where CTs come in.

A CT is functionally identical to an FT — same trigger schema, same Inbox view for the receiver, same status lifecycle — but instead of being authored by a human in the Outbox UI, it's posted directly through the public Outbox API. Your ABAP code does the work that a human would have done in the form.

// ABAP — posting a Cross-Message from a custom job
CALL FUNCTION 'Z_MYHUB_API_POST_FREE_TASK'
  EXPORTING
    iv_trigger_code   = 'CT042'      "<-- registered Cross-Msg trigger
    iv_sending_group  = 'WAREHOUSE_OUTBOUND'
    iv_message_text   = lv_html_body
    iv_post_date      = sy-datum
  TABLES
    it_input_fields   = lt_fields           "<-- Article ID, DC, etc.
    it_distribution   = lt_receiver_groups  "<-- which RGs get it
    it_attachments    = lt_files
  EXCEPTIONS
    invalid_trigger   = 1
    not_authorized    = 2
    OTHERS            = 3.

IF sy-subrc = 0.
  log( |MyHub CT posted: { ev_message_id }| ).
ENDIF.

Why CTs matter:

  • You decide when the message fires — any place an ABAP event handler, BAdI, or batch job can run.
  • You decide who receives it — pass an explicit RG list or compute it from custom logic at runtime.
  • You can pre-fill the message body programmatically with formatted HTML, master-data lookups, computed fields — anything ABAP can produce.
  • The message lands in the Inbox looking exactly like an FT, so receivers don't need to learn a new UI.

Common CT patterns: nightly anomaly reports, custom integration alerts (an external system handed us bad data), cleanup-job summaries, post-go-live "watch this" announcements that don't fit any standard trigger.

Distribution model

How messages reach the right Receiver Groups.

All three message types funnel through the same routing engine. The difference is who supplies the destination list.

The routing rules in plain English

  • For ATs: The destination list is implicit. Every Receiver Group that subscribes to that AT trigger in the Administrative Workbench is a candidate. Then per-RG filters (DC list, article type, product hierarchy, commodity group) decide who actually qualifies.
  • For FTs: The sender curates the Distribution List in the Outbox. They explicitly choose which RGs to include before posting.
  • For CTs: The ABAP caller passes the RG list as a parameter. It can be hard-coded, looked up from a custom config table, or computed at runtime from any business logic.

Lead Time: Each subscription can specify a Lead Time in days. If set, the message arrives in Waiting List status and flips to New when (Post Date − Lead Time) is reached. Useful for "tell the warehouse a week before listing day" patterns.

Status lifecycle

From posted to processed — and everything in between.

Both ends of the conversation track state independently. The Outbox shows where a message is in its publishing lifecycle; the Inbox shows where it is in each receiver's processing lifecycle.

Inbox lifecycle (per receiver)

Lateral statuses (Postponed, Not Required, Auto-Closed) can be reached from "New" or "In Progress" via the corresponding action buttons. The Reset button always returns a message to "New — Reset" and clears the assignment.

Outbox lifecycle (per sender)

Free Text messages may skip the approval steps if the trigger is configured for direct posting. Cross-Messages typically post directly because the ABAP caller has already done the validation.
Quick reference

Glossary for the impatient.

AT Automated Trigger
An identifier (e.g. AT015) for a kind of system event that MyHub knows about. Configured once; hundreds of messages may flow through one AT over time.
FT Free Text Trigger
An identifier (e.g. FT003) for a category of human-authored message. Defines what input fields appear in the Outbox form and whether approval is required.
CT Cross-Message Trigger
Same shape as an FT, but registered specifically for use via the ABAP API. Carries the same fields and approvals as FTs, with no UI required to fire.
Receiver Group (RG)
The unit of subscription. Users belong to RGs; messages are addressed to RGs, not individuals. RGs configure their own filters and Lead Times.
Sending Receiver Group
For FTs and CTs, the RG that "owns" the outbound message — typically the team responsible for the announcement.
Distribution List
For FTs and CTs, the explicit set of RGs that will receive the message. (For ATs the list is computed from subscriptions.)
Lead Time
An optional offset (in days) that delays a message from "Waiting List" to "New" status. Lets receivers see things just before they need to act, not weeks in advance.
Post Date
The date the message becomes active for receivers. For ATs it equals the event date; for FTs/CTs the sender chooses it.

Want to see all this in action?

The demo includes mock data for ATs, FTs, and a CT example, with the same routing model you just read about.

Open the MyHub demo