LabKey Server Module Development
When working on LabKey Server modules, consult these documentation files.
Core Files
- •ai/docs/labkey/testresults-module.md - Architecture of the testresults module (controller, schema, JSP views, model classes)
- •ai/docs/labkey-dev-setup.md - LabKey development environment setup
Skyline Team LabKey Modules
All MacCossLab LabKey modules live under:
code
labkeyEnlistment/server/modules/MacCossLabModules/
Key Modules
- •targetedms - The Panorama module. Our most important LabKey module overall. Stores and visualizes targeted mass spec data. Started by Vagisha, now largely maintained by LabKey with funding from pharma contracts. Foundation of the entire Panorama platform.
- •panoramapublic - Panorama Public, our public-facing repository for publishable proteomics data as part of ProteomeXchange. Maintained by Vagisha. High external visibility.
- •pwebdashboard - Panorama web dashboard. Maintained by Vagisha.
- •testresults - Nightly test results dashboard on skyline.ms. Internal to the Skyline team but critical for development workflow. Primary data source for the LabKey MCP server that supports our
/pw-dailyreporting system.
Build Commands
bash
# Build and deploy the testresults module cd C:/proj/labkeyEnlistment gradlew :server:modules:MacCossLabModules:testresults:deployModule
Key Patterns
- •Controllers extend
SpringActionControllerwith static inner action classes - •Actions use
@RequiresPermission,@RequiresSiteAdmin, or@RequiresNoPermission - •API actions extend
MutatingApiActionorReadOnlyApiActionand returnApiSimpleResponse - •Views are JSP files under the module's
view/directory - •SQL uses
SQLFragmentwith parameterized queries (never string concatenation for values) - •Transactions use
DbScope.Transactionwith try-with-resources - •Schema access goes through static methods on the module's schema class (e.g.,
TestResultsSchema.getTableInfoTestRuns()) - •CSRF - JSP forms use
LABKEY.CSRFheader for POST requests - •JSP URL generation uses
jsURL(new ActionURL(...))for JavaScript andh(new ActionURL(...))for HTML attributes