/** * `d365fo_file(action="modify", objectType="report", operation="report-design")` * — the first write path an AxReport has ever had. * * Until now every report recipe ended with "open the Report Designer", and for * LAYOUT that is still true and correct. But two of the things a developer needs * after scaffolding a report are not layout at all — they are bookkeeping the * tool already holds every input for, and getting them wrong is silent: * * - `refresh-dataset` — a field was added to the DP's temp table and the report's * dataset does not know about it. The information is on disk in the table's own * XML; nothing about copying it is a design decision. * - `add-parameter` — a report parameter is two elements in two collections that * must agree. Hand-writing one and forgetting the other produces a document * that builds and behaves oddly. * * ── WHAT MAKES THIS SAFE, AND WHY IT IS NOT A FINGERPRINT ──────────────────── * The plan proposed refusing "any design the scaffold does not own", enforced by * a marker in the RDL. That guard has the wrong shape: it is a property of the * FILE's provenance, so every report scaffolded before the marker existed — the * committed goldens included — would be refused, and a hand-written report that * acquired the marker would be accepted. * * The guarantee here is a property of the OPERATION instead, and it holds for * every document regardless of origin: * * 1. **Metadata only.** The RDL is never read, parsed or written. A malformed * RDL fails in the SSRS renderer at run time, where no build and no test can * see it, so this code does not go near it. * * It is stored TWO ways, and both are covered. This server's scaffold writes * a `` block, which every search here masks first. Shipped * reports instead put XML-ESCAPED text in `` — zero of the 1,057 on a * full install use CDATA — and that form is inert by construction: `<Fields>` * cannot match a search for ``. The masking is what makes OUR * documents safe; escaping is what makes Microsoft's. * 2. **Additive only.** Fields and parameters are added; nothing is removed or * renamed. Adding a dataset field the RDL does not reference is inert — the * design simply does not show it. REMOVING one the RDL does reference breaks * the render, so removal is not offered at all. * * That is also why there is no `add-column`: putting a column in the layout means * editing the RDL, and the failure mode there is invisible until someone runs the * report. */ export interface ReportDesignResult { success: boolean; message: string; } /** * Sync a report dataset with the temp table it reads. * * ADD-ONLY, by construction: a field the report already declares is left exactly * as it is, even when the table now disagrees about its type. Rewriting it would * be the one edit that can break a render, because the RDL binds by name AND * type, and this operation has no way to see the RDL. */ export declare function refreshReportDataset(filePath: string, tableName: string, datasetName?: string, packageRoots?: readonly string[]): Promise; /** * Add a report parameter — both halves of it. * * A parameter is two elements in two collections: an `` * that declares it and an `` that binds it to the * dataset. Writing one without the other is the mistake this exists to prevent — * so both insertion sites are resolved BEFORE the first byte is written, and a * dataset that cannot be found is an error, not a success with a caveat. * * The property vocabulary is not invented. Across 1,057 shipped AxReport * documents and 13,833 parameters, `UserVisibility` holds only `Hidden` (8,972) * and `Internal` (5) — a VISIBLE parameter omits the element — and `AllowBlank` * and `Nullable` appear only as `true`, never `false`. So visibility is expressed * by presence, and the flags are written only when they are on. */ export declare function addReportParameter(filePath: string, parameterName: string, opts?: { dataType?: string; hidden?: boolean; promptString?: string; datasetName?: string; }): Promise; //# sourceMappingURL=reportDesignXml.d.ts.map