Codeunit 9660 "Report Layouts Impl."
Base Application · Microsoft.Shared.Report
Across versions
- BC23-24not present
- BC25added
- BC265 procedures added, 1 procedures removed
- BC27unchanged
- BC282 procedures added
- BC2914 procedures added, 1 procedures changed
- BC30unchanged
Neighbourhood 9 connected objects and pages
Base Application · Microsoft.Shared.Report · BC25-30 · source at ea08af5e · facts from BC29
Properties
| Property | Value |
|---|---|
| Access | Internal |
| Permissions | tabledata “Tenant Report Layout” = rimd, tabledata “Tenant Report Layout Selection” = rimd, tabledata “Tenant Report Layout Override” = rimd, tabledata Company = r |
Events published
OnBeforeUpload(var AlreadyUploaded: Boolean; var UploadFileName: Text; var FileInStream: InStream)(internal)
Event subscriptions
- SelectReportLayout subscribes to Page “Report Layout Selection” OnSelectReportLayout
- SelectReportLayoutUI subscribes to Codeunit “ReportManagement” OnSelectReportLayout
Procedures
SetSelectedCompany(NewCompanyName: Text)(internal)SetLayoutStatus(ReportLayoutList: Record "Report Layout List"; NewStatus: Enum "Report Layout Status"): Boolean+ BC28 (internal): Sets the status for a layout. Extension-installed layouts live in the read-only App database, so their status is written as an override record rather than by copying the layout.SetLayoutStatusBatch(var ReportLayoutList: Record "Report Layout List"; NewStatus: Enum "Report Layout Status"): Integer+ BC28 (internal): Sets the status for multiple selected layouts. Use this from page actions when user selects multiple layouts.RunCustomReport(SelectedReportLayoutList: Record "Report Layout List")(internal)CreateNewReportLayout(SelectedReportLayoutList: Record "Report Layout List"; var ReturnReportID: Integer; var ReturnLayoutName: Text)+ BC29 (internal)CreateNewReportLayout(SelectedReportLayoutList: Record "Report Layout List"; ImpliedSubtype: Enum "Report Layout Subtype"; var ReturnReportID: Integer; var ReturnLayoutName: Text)+ BC29 (internal)SetDefaultReportLayoutSelection(SelectedReportLayoutList: Record "Report Layout List"; ShowMessage: Boolean)(internal)GetDefaultReportLayoutSelection(ReportId: Integer; var DefaultReportLayoutList: Record "Report Layout List"): Boolean(internal)UpdateDefaultLayoutSelectionName(SelectedReportLayoutList: Record "Report Layout List"; NewLayoutName: Text[250]): Boolean(internal)ConfirmDeleteDefaultLayoutSelection(SelectedReportLayoutList: Record "Report Layout List"; TenantReportLayoutSelectionParm: Record "Tenant Report Layout Selection"): Boolean(internal)InsertNewLayout(ReportID: Integer; LayoutName: Text[250]; LayoutDescription: Text[250]; LayoutFormat: Option; LayoutIsGlobal: Boolean; CreateEmptyLayout: Boolean; ExcelSheetConfiguration: Enum "Excel Sheet Configuration"; var ReturnReportID: Integer; var ReturnLayoutName: Text)+ BC26 − BC26 Δ BC29 + BC29 + BC29 (internal)InsertNewLayout(ReportID: Integer; LayoutName: Text[250]; LayoutDescription: Text[250]; LayoutFormat: Option; LayoutIsGlobal: Boolean; CreateEmptyLayout: Boolean; ExcelSheetConfiguration: Enum "Excel Sheet Configuration"; LayoutSubtype: Enum "Report Layout Subtype"; var ReturnReportID: Integer; var ReturnLayoutName: Text)+ BC26 − BC26 Δ BC29 + BC29 + BC29 (internal)InsertNewLayout(ReportID: Integer; LayoutName: Text[250]; LayoutDescription: Text[250]; LayoutFormat: Option; LayoutIsGlobal: Boolean; CreateEmptyLayout: Boolean; ExcelSheetConfiguration: Enum "Excel Sheet Configuration"; LayoutSubtype: Enum "Report Layout Subtype"; ReplaceExisting: Boolean; var ReturnReportID: Integer; var ReturnLayoutName: Text)+ BC26 − BC26 Δ BC29 + BC29 + BC29 (internal)DeleteReportLayout(TenantReportLayout: Record "Tenant Report Layout")(internal)UpdateReportLayoutDescription(ReportID: Integer; LayoutName: Text[250]; NewDescription: Text[250])+ BC29 (internal)ReplaceLayout(ReportID: Integer; LayoutName: Text[250]; LayoutDescription: Text[250]; LayoutFormat: Option; var ReturnReportID: Integer; var ReturnLayoutName: Text)(internal)ValidateLayout(SelectedReportLayoutList: Record "Report Layout List")+ BC26 (internal)EditReportLayout(SelectedReportLayoutList: Record "Report Layout List"; var NewEditedLayoutName: Text)(internal)ExportReportLayout(SelectedReportLayoutList: Record "Report Layout List"; UpdateOnOnexport: Boolean): Text(internal)ShowInfoDialog(SelectedReportLayoutList: Record "Report Layout List")+ BC26 (internal)OpenInOneDrive(SelectedReportLayoutList: Record "Report Layout List")(internal)EditInOneDrive(SelectedReportLayoutList: Record "Report Layout List")(internal)ExportReportSchema(SelectedReportLayoutList: Record "Report Layout List"; DefaultFileName: Text; ShowFileDialog: Boolean): Text
Plus 26 local procedures.
Calls
From the extracted call graph of BC29 (graphify-al on the snapshot checkout): calls whose target is known from a declared type or an Object::"Name" argument. Interface dispatch and calls through events are not counted, so the list is not complete.
- Codeunit 4100 “Temp Blob” (12 calls:
EditInOneDrive → CreateInStream,EditInOneDrive → CreateOutStream,EditReportLayout → CreateInStream, …) - Codeunit 419 “File Management” (4 calls:
CreateLayoutMime → GetExtension,ExportReportLayout → BLOBExport,ExportReportLayout → BLOBExportWithEncoding, …) - Codeunit 9510 “Document Service Management” (3 calls:
EditInOneDrive → EditInOneDrive,OpenInOneDrive → OpenInOneDrive,ShareWithOneDrive → ShareWithOneDrive) - Codeunit 9654 “Design-time Report Selection” (2 calls:
RunCustomReport → ClearLayoutSelection,RunCustomReport → SetSelectedLayout) - Codeunit 9665 “Composite Layout Lookup Helper” (2 calls:
ValidatePartReference → DecodeAppId,ValidatePartReference → DecodeLayoutName) - Page 9660 “Report Layouts” (2 calls:
SelectReportLayout → (object),SelectReportLayoutUI → (object)) - Codeunit 8714 “Audit Log” (1 call:
Log → LogAuditMessage)
Called by
- Page 9660 “Report Layouts” (5 calls:
OnAfterGetRecord → GetDefaultReportLayoutSelection,OnDeleteRecord → ConfirmDeleteDefaultLayoutSelection,OnDeleteRecord → DeleteReportLayout, …) - Page 9666 “Report Theme and Header/Footer” (5 calls:
CreateArtifact → InsertNewLayout,DeleteSelectedArtifact → DeleteReportLayout,EditPartDescription → UpdateReportLayoutDescription, …) - Page 9652 “Report Layout Selection” (2 calls:
ShowResolvedLayoutParts → GetDefaultReportLayoutSelection,ShowResolvedLayoutParts → SetSelectedCompany)
Recent changes
- 2026-09-10 #11211 [Bug 649379] Composite layout stress-test fixes, part resolution source and status action captions (main, BC30, fix)
- 2026-08-17 #9428 637301 Report layout override lifecycle (main, BC30, feature)
- 2026-08-10 #9949 [Bug 645022] UI improvements for report themes and header/footers (composite layout) (main, BC30, feature)
Ask your agent
Procedure bodies are not stored here (D10). The call sections above are our own, per object, from the BC29 call graph. For a procedure body or the calls of one procedure, ask bc-code-atlas (external, by Stefan Maron, MIT; default corpus w1-28), which the bc-observatory plugin connects: bcatlas_resolve_node(object_type: "codeunit", object_name: "Report Layouts Impl."), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.