# Programming Notes
Updated: 9/28/2020, 10:32:47 PM
Created: 9/28/2020, 10:32:47 PM
Last Updated By: Peter Schellenbach
Read Time: 1 minute(s)
- Multiple widgets may be defined to call a single subroutine. The subroutine may use the G$WIDGET.NAME global variable to determine the name of the widget that is associated with the execution of the program.
- WIDGET.USER.DATA and GLOBAL.USER.DATA are stored and retrieved using MATWRITE and MATREAD statements. Therefore, you must not store attribute-mark delimited arrays in any of the associated dimensioned array positions.
- Widget programs must be designed to execute very quickly. Users may add several widgets to a single dashboard page, so it is important that the widgets run as fast as possible. Look at G$CALL.DUR to see the duration of each subroutine call. You must use the last widget in the dashboard to see the duration of each widget call before it.
- Widget programs must have no output to the screen. Any output generated by the widget programs can corrupt the HTTP response headers and the HTML structure.