Macros and Interface basics
A macro packages a workflow behind an input and output contract. The surrounding workflow supplies records, the nested tools transform them and the macro returns a stream. Keep the expected field names and types explicit so a source change doesn't silently alter its meaning. Test the macro on more than one set of records before reusing it across reports.
Interface tools collect values for an analytic application or macro. In desktop Designer, an Action connects a control to the configuration it updates. This simulator introduces typed controls as a small parameter table; it doesn't reproduce the full application designer. You can inspect and append that parameter stream here. Text Input is different: it stores a small fixed table inside the workflow. Use the basic exercises to separate reusable data preparation, fixed reference data and user-supplied settings.
input: {"source":"main"}
macro: {"workflow":{"name":"Trim notes","nodes":[{"id":"input","type":"input","x":70,"y":90,"config":{"source":"input"}},{"id":"tool1","type":"formula","x":230,"y":90,"config":{"field":"Note","expression":"Trim([Note])","type":"V_WString"}}],"edges":[{"from":"input","output":"O","to":"tool1","input":"I"}],"output":{"node":"tool1","anchor":"O"}}}
Worked example: A macro receives the incoming table under its input contract. Its nested workflow must transform that stream rather than a hardcoded sample file.