Core DevPre-alpha
SDK API
Import sumeru/core/sdk from addon code — not sumeru/core/orm or sumeru/core/server directly.
Source: sumeru/core/sdk/
Model definition
Define models as structs embedding sdk.Model with typed fields and sumeru struct tags. Run make generate to produce models/zmodels.go, which calls sdk.MustRegister. Authors do not write registration or field metadata by hand.
type MyModel struct {
sdk.Model `sumeru:"model=my.module"`
Name sdk.String `sumeru:"required,string=Name"`
State sdk.String `sumeru:"selection=draft:Draft,done:Done,string=State"`
PartnerID sdk.Many2One[sdk.Any] `sumeru:"comodel=core.partner,string=Partner"`
}
See Models and fields and Field types.
Field markers
| Type | Purpose |
|---|---|
sdk.Model | Embed; sumeru:"model=dotted.name" sets model identity |
sdk.String, sdk.Text, sdk.Integer, sdk.Float, sdk.Float64, sdk.Boolean, … | Scalar columns |
sdk.Many2One[T], sdk.One2Many[T], sdk.Many2Many[T] | Relations |
Selection fields use sdk.String with a selection= tag (not a separate type).
Registration
Generated only — do not call manually:
// models/zmodels.go (generated)
func init() {
sdk.MustRegister("my_module", &MyModel{}, &MyModelLine{})
}
Database bootstrap
| Function | Purpose |
|---|---|
InitDB(InitDBInput{DSN}) | Open PostgreSQL |
SyncModels(SyncModelsInput{}) | Create/alter tables from registered models |
Queries
| Function | Input | Returns |
|---|---|---|
SearchOne | SearchOneInput{ModelName, Criteria} | One row map |
Search | SearchInput{ModelName, Domain} | Row maps |
Create | CreateInput{ModelName, Values} | New id |
Upsert | UpsertInput{ModelName, Values, ConflictCol} | Id |
ResolveXmlId | ResolveXmlIdInput{XMLID} | id, model name |
Helpers
| Function | Purpose |
|---|---|
Cfg() | INI config singleton |
AsString | Coerce field values to string |
CoerceInt64 | Coerce to int64 |
Report
Import sumeru/core/sdk only. Implementation: sumeru/core/report/. See Report engine.
Constants
| Name | Value |
|---|---|
PageSizeA4 | "a4" |
PageSizeLegal | "legal" |
PageSizeLetter | "letter" |
ImportModeCreate | "create" |
ImportModeUpsert | "upsert" |
Functions
| Function | Purpose |
|---|---|
ExportCSV(ctx, ExportCSVInput) | CSV bytes for model rows and fields |
ExportPDF(ctx, ExportPDFInput) | PDF table for model rows and fields |
BulkTemplateCSV(model, fields) | Header-only CSV template |
PreviewBulkImport(ctx, PreviewBulkImportInput) | Validate mapped rows before confirm |
ExecuteBulkImport(ctx, ExecuteBulkImportInput) | Run create/upsert after user confirms |
RegisterReportCellFormatter(model, fn) | Optional per-field export cell text |
Input types (aliases)
| Type | Key fields |
|---|---|
ExportCSVInput | Model, Fields, Domain, RecordID, Title |
ExportPDFInput | Same + PageSize |
PreviewBulkImportInput | BatchID, Mapping |
ExecuteBulkImportInput | BatchID, Mapping, SkipInvalid |
ImportResult | Created, Updated, Skipped |
PreviewResult | Rows, ErrorCount, TotalRows, BlockingErr |
Addon HTTP routes for export/import are not supported — enable via view XML instead.
Not in SDK
| Need | Package |
|---|---|
| HTTP route registration | sumeru/core/server/router |
| Render hooks | sumeru/core/engine/render |
| Event subscriptions | sumeru/core/event |
| Object actions | sumeru/core/orm |
| Module install CLI | Process entrypoint / sumeru/core/module |