codeunitPlatform, DevOps & Performanceofficial - Microsoftderived - from the source, no model text

Codeunit 9665 "Composite Layout Lookup Helper"

Base Application · Microsoft.Foundation.Reporting

Across versions

  1. BC23-28not present
  2. BC29added
  3. BC30unchanged

Neighbourhood 11 connected objects and pages

Page 9667 "Header/Footer Theme Assignment" (calls, 9 links)Header/Footer Theme AssignmentPage 9663 "Tenant Report Layout Cfg" (calls, 8 links)Tenant Report Layout CfgPage 9666 "Report Theme and Header/Footer" (calls, 6 links)Report Theme and Header/FooterPage 9670 "Layout Theme and Header/Footer" (calls, 4 links)Layout Theme and Header/FooterPage 9652 "Report Layout Selection" (calls, 3 links)Report Layout SelectionCodeunit 9660 "Report Layouts Impl." (calls, 2 links)Report Layouts Impl.Page 9660 "Report Layouts" (calls, 2 links)Report LayoutsPage 9669 "Report Layout FactBox" (calls, 2 links)Report Layout FactBoxPage 1 "Company Information" (calls)Company InformationPage 9662 "Report Layout New Dialog" (calls)Report Layout New DialogPage 9664 "Tenant Report Layout Selection" (calls)Tenant Report Layout Selection

Open in the neighbourhood explorer

One hop out, from the extracted relations and call graph. Up to 40 shown; the sections below list them all.

Base Application · Microsoft.Foundation.Reporting · BC29-30 · source at ea08af5e · facts from BC29

Properties

Property Value
Access Internal
Permissions tabledata “Tenant Report Layout Cfg” = RIMD

Procedures

  • LookupCompositePart(Subtype: Enum "Report Layout Subtype"; var Composite: Text): Boolean: Opens the Report Themes and Header/Footers registry as a lookup filtered to the given subtype. Non-approved parts (Draft, Pending Approval, Retired) are shown so they can be reviewed, but only an approved part may be picked: selecting a non-approved part raises an error and nothing is returned. On a…
  • DecodeLayoutName(CompositeName: Text): Text: Returns the plain layout name embedded in a composite reference. Returns the input unchanged when no :: separator is present so legacy or hand-edited values still display sensibly.
  • DecodeAppId(CompositeName: Text): Guid (internal): Returns the application ID embedded in a composite reference (the <guid> before the :: separator). Returns an empty GUID when there is no separator or the segment is not a valid GUID, so callers can fall back to matching by name alone.
  • CountPartAssignments(PartLayout: Record "Report Layout List"): Integer: Counts how many Tenant Report Layout Cfg entries currently assign the given part (matched by its composite reference in the Header Part Name column for header/footer parts, or the Theme Part Name column for theme parts).
  • ClearPartAssignments(PartLayout: Record "Report Layout List"): Integer: Clears every Tenant Report Layout Cfg assignment of the given part, blanking the composite reference in the Header Part Name column for header/footer parts, or the Theme Part Name column for theme parts. Call before deleting a part so no configuration is left pointing at — or able to silently re-bin…
  • EncodeCompositeName(AppId: Guid; LayoutName: Text): Text (internal): Builds the canonical composite part reference (<guid>::<layoutname>) used to store and match header/footer and theme parts.
  • CompositeLayoutKey(LayoutRec: Record "Report Layout List"): Text: Returns the platform Tenant Report Defaults report ID, under which reusable composite layout parts (themes and header/footer layouts) are stored so they can be assigned as defaults for any report.
  • IsBodyLayout(ReportID: Integer; LayoutName: Text): Boolean
  • GetTenantReportDefaultsReportID(): Integer (internal)
  • GetResolvedPartDisplays(ReportID: Integer; LayoutName: Text; var HeaderDisplay: Text; var HeaderSource: Text; var ThemeDisplay: Text; var ThemeSource: Text): Resolves the header/footer and theme parts that effectively apply to a report layout and reports both the part name and where it resolved from. Mirrors the platform resolver (Stage 2 of ReportLayoutSelection), walking the same six Tenant Report Layout Cfg precedence levels — most specific first — wi…
  • GetLayoutLevelPartDisplays(ReportID: Integer; LayoutName: Text; var HeaderDisplay: Text; var HeaderSource: Text; var ThemeDisplay: Text; var ThemeSource: Text; var HeaderResolved: Boolean; var ThemeResolved: Boolean) (internal): Resolves the header/footer and theme parts assigned at the layout level (this report + this layout) — the two most specific precedence levels. Reports whether each part was resolved so the caller can fall back to the layout-independent report/global defaults only for the parts not assigned at the la…
  • GetReportLevelPartDisplays(ReportID: Integer; var HeaderDisplay: Text; var HeaderSource: Text; var ThemeDisplay: Text; var ThemeSource: Text) (internal): Resolves the header/footer and theme parts from the layout-independent precedence levels: the report default (all layouts) and the company/global wildcard defaults. These do not depend on the body layout, so a page listing the layouts of a single report can resolve them once and reuse the result for…
  • GetCompanyDefaultDisplays(var HeaderDisplay: Text; var ThemeDisplay: Text): Returns the decoded company-default header/footer and theme part names (the Tenant Report Layout Cfg row with Report ID 0 and the current company), or empty when no company default is configured.
  • AssignCompanyDefaultPart(Subtype: Enum "Report Layout Subtype"; var Display: Text): Boolean: Prompts the user to pick a part of the given subtype and stores it as this company’s default (Report ID 0, empty layout, current company). Returns true and the decoded display name when a part was picked.
  • ClearCompanyDefaultPart(Subtype: Enum "Report Layout Subtype"): Clears this company’s default part of the given subtype, removing the configuration row when both parts are empty.

Plus 2 local procedures.

Called by

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.

Recent changes

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: "Composite Layout Lookup Helper"), then bcatlas_get_procedure_body or bcatlas_get_neighbors on the returned id.

Evidence 1 sources