Repository navigation
Open existing classes, ABAP 7.02 output, UI5 from your own URL, floorplan starters - #5
Merged
Merged
Conversation
src/handoff.js writes the playground's share link in the playground's own format (src/shell/share.mjs: version 2, base64url of the deflated JSON list of files), with the base URL as a parameter, and the VS Code link the abap2UI5 extension's URI handler reads: vscode://abap2ui5.abap2ui5/open with the deflated source in ?code= and the file name in ?name=. The tests decode both the way their readers do. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
…me class File > Open ABAP class (paste, a .clas.abap file, or ?src=<raw URL> as in the playground, ?class=&repo= for a class on GitHub) reads the view_display chain - the one-statement shape the editor writes and the split shape of the samples - into the design, the PUBLIC attributes with their model_init seeds into the data, client->_event( ) into event names. The export patches the class it came from: the chain is rewritten in the house layout over the range it had, new attributes are declared at the end of the PUBLIC SECTION, new events get a WHEN branch in on_event, and every other line stays as it was. A view attribute the editor cannot edit (a method call, a COND, an id, a prefixed attribute) is kept as ABAP on its control and written back unchanged unless the editor sets it; a public attribute of a type the Data tab has not and attributes of the View element are listed in the import report. Nothing is dropped silently. Every starter's and the kitchen sink's class round-trips byte-identically (generate, import, generate), the hello world of abap2UI5/samples is committed as a fixture and imported, and an imported and edited class is in the linter and runtime checks beside the generated ones. The menu offers Open in Playground and Open in VS Code. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
No tool of the set deploys to an SAP system: the MCP server's system mode operates apps that are already there and deploy_app writes into a local sandbox. The README says so and gives the abapGit recipe, with the system mode as the check afterwards. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
Next to the class name, the release the class is written for: ABAP 7.40 and later (the default, as before) or ABAP 7.02, saved with the design. The 7.02 class declares its variables at the top of a method, fills its sample rows field by field and APPENDs them, writes a line break or a tab as the constants of cl_abap_char_utilities joined with &&, compares a functional call with abap_true and uses WITH DEFAULT KEY - no inline declarations, string templates, constructor or table expressions. The view chain is the same in both. npm test checks every test design as a 7.02 class against a list of what 7.02 lacks, and runs abaplint at v702 on them with the rules of abap2UI5's own 7.02 check (abaplint-702.jsonc, also npm run check:abap702); npm run verify:abap transpiles and runs both releases. A new test design holds line breaks, tabs and long texts in attributes and in the rows of a table and of its table field. On the way, two faults of the 7.40 class: a text with a line break was one string template however long, past 255 characters a line, and so was a long text in a sample row; both are now split into pieces joined with &&. And a nested sample row too wide for one line lost the closing parenthesis of its outer row, which did not compile. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
The UI5 field above the canvas, and ?ui5= in the editor's URL, take the URL of a UI5 of your own besides a version: the folder that holds resources/, on another server or on the editor's own (/... or ./...). Empty still means the latest from the OpenUI5 CDN. A value with quotes or angle brackets is no URL and goes to the CDN as a version, so it never reaches the bootstrap tag as markup. A release before 1.102 has no Horizon theme: where the URL does not name the release, the canvas switches to Quartz once UI5 has said which it is. The browser tests take the same URLs for both legs (UI5_URL, UI5_URL_171), and E2E_PORT for a second checkout testing at the same time. The README says how to serve a resources/ tree for it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
Four floorplans for New, each a test design like the other starters - generated for both releases, run on abap2UI5, rendered on 1.71: - list report: a dynamic page with filter fields and a search in its header over a table of orders, its title with the number of rows - object page: sap.uxap.ObjectPageLayout with a header title, key facts in the header, a form section and an items table section - worklist: a table with a status column (ObjectStatus with the state from the row) and a row press, the search in its toolbar - master-detail: a list next to the details of the selected entry, in a two-column grid - SplitApp and FlexibleColumnLayout are not in the palette Only controls and properties of the catalogue. The number in a title is an attribute of its own, as in the UI5 worklist template, for the class to set; an expression over the table's path would hard-code it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
…arters Both sides add: the rules in AGENTS.md, the e2e tests, the test designs (the imported one beside the 7.02 set) and the classes gen-classes writes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
…tten A class the editor writes in 7.02 now opens as a 7.02 design: its rows (fields set on a work area, APPENDed, CLEARed), its texts joined with cl_abap_char_utilities, and the tree binding as literals around client->_bind( ). A 7.40 text with a line break, a string template with no expression, is read as text too. A long text written in pieces is read as one: literalText( ) took `a` && `b` for one literal with the pieces inside, and seedValue( ) did not fall back to them. Every test design round-trips byte-identically in both releases now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
A UI5 runs its scripts on the editor's origin, which the playground and the docs share. ?ui5=<URL> from a link to the editor or to preview.html now takes a URL only on this host, localhost, 127.0.0.1 or SAP's UI5 CDNs; preview.html takes any host only when the editor frames it, where the user typed it into the UI5 field. A refused link says so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes
.clas.abapfile, or use?src=/?class=&repo=.npm test, andverify:abapruns both releases.?ui5=is followed only for this server, localhost and SAP's UI5 CDNs. A UI5 runs its scripts on the editor's origin, which the playground and the docs share.vscode://link handled by abap2UI5/vscode-extension.Verified
npm testnpm run check:abapnpm run check:abap702npm run verify:abapnpm run test:e2e:localon 1.144 and 1.71Not verified:
🤖 Generated with Claude Code
https://claude.ai/code/session_011N8v1iay9ZgmK3Bzj8iqK5
Generated by Claude Code