You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Fixed
Queued calls no longer time out behind a long abap_ui press, and a remaining timeout is retryable (#242). The pool's wait budget was a fixed ABAP_SESSION_WAIT_MS (10 s), so a call queued behind a ~60 s press failed with Timed out waiting for the ABAP session. It is now ABAP_SESSION_WAIT_MS plus the longest request timeout, as the connection-level lock already was. A refusal that still happens is classified SESSION_BUSY with retryable: true and details holder, heldForMs, expectedRemainingMs and retryAfterMs, instead of a generic ADT_ERROR. Press already runs on the write lane, so reads are not blocked behind it. README documents the variable.
abap_ui mode=press runs CALL TRANSACTION ... OPTIONS FROM CTU_PARAMS with DEFSIZE = 'X' by default (#240), so table controls expose their standard row count to batch input instead of only rows (01)/(02). New optional inputs defsize (default true), racommit, nobinpt, nobiend (default false); DISMODE stays N, UPDMODE S. The effective options are echoed in the response header as options.
abap_ui mode=fcode no longer claims a function code has no handler when it is just not a literal WHEN in the screen's PAI (#239). The unresolved reason now reads "not found statically" and says the code may be handled via a variable/constant, table-driven sequence control or by the caller after the screen returns; a note suggests a short press probe. The bridge also emits mention frames for every line in the program that holds the code as a quoted literal (capped at 40), and each row lists them as "OTHER MENTIONS" (constants, other CASE blocks, caller includes). The bridge source changes, so the first call after upgrading rewrites its class once. Not verified live against A4H: the program SAPLV45C is not present there and the installed MCP build predates mode=fcode.
core.call_fm fills structured IMPORTING/CHANGING parameters from a JSON object keyed by component name, and core.describe_fm lists the components (#238). Previously the raw input string was assigned to the structure, so a JSON object landed as shifted garbage in the first fields and a structure with packed, integer or raw components could not be filled at all. A parameter value that is a JSON object (an object in params, or a string holding one) is now parsed with the bridge's own scan() and each component is converted by its RTTI type: char, numc, dats (YYYYMMDD or YYYY-MM-DD), tims (HHMMSS or HH:MM:SS), packed and decimal floats from a JSON number or numeric string, integers, and raw/xstring from hex. Unknown component names, values that would be truncated or rounded, tables, references and nesting deeper than one sub-structure are refused with the component named. A plain string for a flat character structure keeps working as before. params_schema now carries components (name, type, length, decimals) for each structured parameter; output is unchanged. TABLES rows are not covered: call_fm does not bind TABLES parameters from input yet.
core.call_fm binds TABLES parameters from a JSON array of row objects, and core.describe_fm lists them in params_schema (#237). Previously describe_fm showed TABLES parameters only under parameters and call_fm refused them (RFC_READ_TABLE has no input parameter OPTIONS), so RFC_READ_TABLE and every other TABLES-based function module could not be given input. A TABLES value that is an array (or a string holding one) is now split into rows and each row filled like a structure parameter (component names, RTTI conversion, errors prefixed row N:); [] or an empty value passes an empty table. Tables with an elementary line type are refused with a message. params_schema carries type: [array, string] and items.components for each TABLES parameter, mandatory ones in required.
abap_ui mode=press no longer refuses dialog transactions whose TSTC-CINFO carries the authorization flag (#236). XD01, MM01 and similar (CINFO=04) were refused although the tool itself classified them as dialog transactions, because batch-input applicability was tested against the literal '00'. It is now derived from the decoded kind in one shared helper (describeTstc), used by both the press pre-check and the screen-mode transcript parser: dialog kinds with only non-type bits press; report (80, 84, 90), OO, parameter and area-menu transactions stay refused, and abap_run is suggested only for reports. A locked transaction (0x20) is refused with its own SM01 message, and an unrecognised CINFO is still refused conservatively, with text that no longer contradicts itself.
abap_ui mode=press no longer leaves enqueue locks held by the bridge session (#241). The driven transaction's enqueues lived on as long as the pooled ADT session did, which blocked the same user in SAP GUI. The generated bridge now ends with ROLLBACK WORK. and CALL FUNCTION 'DEQUEUE_ALL' after every result line is written (the update is synchronous under UPDATE 'S', so the rollback only discards leftovers), and the press run drops its ADT session afterwards through the new opt-in RunClassOptions.dropSessionAfter, so a dump, timeout or stall cannot keep the locks alive either. The bridge source changes, so the first press after upgrading rewrites its bridge class once.