@memberjunction/ng-record-process-studio
The generic Bulk Operations studio — reusable Angular UI for authoring, running, and auditing Record Processes (rules-driven bulk operations). MJExplorer’s Bulk Operations app is a thin host over these components, but any MJ Angular app can drop them in.
A “Record Process” is a saved, reusable operation that runs over a set of an entity’s records. The flagship work type is FieldRules — declarative rules that set fields from a fixed value, another field, a formula, an entity lookup, or an AI prompt — always previewed as an exact per-record diff before any write happens.
Components
Section titled “Components”| Component | Selector | Purpose |
|---|---|---|
RecordProcessStudioComponent | <mj-record-process-studio> | The hub — list / search / create / edit / run bulk operations. |
RecordProcessEditorComponent | <mj-record-process-editor> | Author one process: basics + target entity + scope + the embedded visual rules builder + an inline dry-run Preview. |
RecordProcessHistoryComponent | <mj-record-process-history> | Run history with per-record drill-in (the field diff persisted on each Process Run Detail). |
All three are standalone, OnPush, extend BaseAngularComponent (so they accept [Provider] for
multi-provider), use --mj-* design tokens only (light + dark), and import nothing from
@angular/router (Generic-package rule).
Quick use
Section titled “Quick use”<!-- the whole hub --><mj-record-process-studio [Provider]="ProviderToUse"></mj-record-process-studio>
<!-- just the authoring editor for one record (e.g. embedded in an entity form) --><mj-record-process-editor [Record]="record" [ShowToolbar]="false" [Provider]="ProviderToUse"></mj-record-process-editor>
<!-- run history, optionally scoped to one process --><mj-record-process-history [RecordProcessID]="id" [Provider]="ProviderToUse"></mj-record-process-history>Call LoadRecordProcessStudio() once from your app bootstrap to keep the components through tree-shaking.
How it composes
Section titled “How it composes”ng-record-process-studio ├─ embeds <mj-field-rules-builder> ← @memberjunction/ng-entity-action-ux (visual rule authoring) ├─ embeds <mj-ai-prompt-selector> ← (grouped AI-prompt picker, via the builder) ├─ mounts RecordProcessRunnerUX ← @memberjunction/ng-entity-action-ux (dry-run → confirm runner) └─ runs RunRecordProcess ← @memberjunction/graphql-dataprovider → RecordProcessExecutor engineThe studio is intentionally thin orchestration over already-tested primitives: the rule engine
(@memberjunction/global field-rules, 25 tests), its metadata-aware layer (@memberjunction/core
EntityFieldRules), the transform plugins (@memberjunction/field-rules-transforms, 8 tests), the
builder/runner/serialization (@memberjunction/ng-entity-action-ux, 23 tests), and the executor +
scope-override (@memberjunction/record-set-processor, 24 facade tests). The studio adds the
list/edit/run/history surfaces around them.
The editor, embedded two ways
Section titled “The editor, embedded two ways”- In the Bulk Operations app —
RecordProcessStudioComponentshows it with its Save / Preview toolbar. - In the custom
MJ: Record Processesentity form —ShowToolbar=false; the form’s<mj-record-form-container>owns Save while the editor mutates the record in place. So editing a process from anywhere in Explorer gets the same visual rules builder instead of a rawConfigurationJSON field.
Conventions held
Section titled “Conventions held”Standalone + inject() · @if/@for/@switch · PascalCase public members · --mj-* tokens only ·
multi-provider via [Provider] / ProviderToUse · no Router imports · self-contained chrome (each component
owns its own toolbar so it drops into any host).