بنقرة واحدة
x3-soap-web-services
Use when building, deploying, or calling Classic SOAP sub-program web services on Sage X3.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Use when building, deploying, or calling Classic SOAP sub-program web services on Sage X3.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Anthropic API rate limit handling - retry logic, backoff, throttling for batch workloads against Claude models
Use when building an automated test → issue → fix loop with Claude Code and GitHub issues — overnight auto-fixing, regression loops, self-healing CI.
Use when creating, editing, publishing, or deleting posts on Cyril's Workshop blog or the steponnopets.net devblog.
Use when writing or contributing a boofuzz network-protocol fuzzer in this repo — layout, formatting rules, and reading results.
Use when a task needs real-time control of a connected browser via the Browser Bridge Broker — submit JS jobs over HTTP that browsers eval and return.
Use when training a character LoRA (Chroma/Flux or Pony/SDXL) on a RunPod GPU and wiring it into the ComfyUI + pony_web render stack.
| name | X3 SOAP Web Services |
| description | Use when building, deploying, or calling Classic SOAP sub-program web services on Sage X3. |
Skill for creating, deploying, and calling Classic SOAP sub-program web services on a Sage X3 install. Use when:
.src 4GL subprog that will be exposed via SOAPA working X3 Classic SOAP web service has four parts:
.src) containing a Subprog <NAME>(...) declaration in TRT directory.WSBUILD) that loads and runs the compiled wrapper WJ<NAME>.A SOAP call hits Syracuse → assigns to a pool worker → optional CHGUSR → reads HORDAT → loads wrapper WJ<NAME> → calls subprog → returns.
Z prefix by Ramsden convention (e.g. ZWEMSTAGE = Z + Write + EMStage).Subprog declaration name, the File/Subprograms fields in the dict, and the GESAWE publication name all match.& (not _). Trailing underscore = Illegal character compile error.Return (not End) to exit a Subprog early. End halts the entire Adonix process.Local File BPCUSTOMER [BPC]
Then use Read [BPC]BPC0 = ... and [F:BPC]field = .... Without the declaration, file ops silently no-op at runtime.+. No +=.Trace keyword isn't reliably available — don't depend on it for diagnostics. Set O_RETCODE to numeric breadcrumbs (10, 20, …) instead.Next (Next WI) on stricter parsers.<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wss="http://www.adonix.com/WSS"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<wss:run soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<callContext xsi:type="wss:CAdxCallContext">
<codeLang xsi:type="xsd:string">ENG</codeLang>
<poolAlias xsi:type="xsd:string">WSBUILD</poolAlias>
<requestConfig xsi:type="xsd:string">adxwss.optiontype=adxwss.optiontype.multi&adxwss.trace.on=on&adxwss.beautify=true</requestConfig>
</callContext>
<publicName xsi:type="xsd:string">YOURSERVICE</publicName>
<inputXml xsi:type="xsd:string"><![CDATA[<PARAM>
... see input format below ...
</PARAM>]]></inputXml>
</wss:run>
</soapenv:Body>
</soapenv:Envelope>
requestConfig flags& (XML-escape as &), not |.adxwss.trace.on=on — essential while debugging; without it the response trace is empty.adxwss.optiontype=adxwss.optiontype.multi — forces per-call session reset; gives per-worker CHGUSR rather than once-per-pool-cycle.adxwss.beautify=true — pretty-prints the response.The publication groups parameters into screen-style groups (GRP1, GRP2, …). The Mapping tab in GESAWE shows the layout; the XML view button gives the canonical schema (saved as <service>.xml).
<GRP><GRP ID="GRP2">
<FLD NAM="I_NEW_STAGE">6</FLD>
<FLD NAM="I_OTHER_PARAM">value</FLD>
</GRP>
<TAB> with <LIN> rows<TAB ID="GRP1">
<LIN><FLD NAM="I_BPCNUM">425073</FLD></LIN>
<LIN><FLD NAM="I_BPCNUM">400044</FLD></LIN>
<LIN><FLD NAM="I_BPCNUM">425099</FLD></LIN>
</TAB>
Mixing both works — group your scalars, TAB your arrays:
<PARAM>
<TAB ID="GRP1">
<LIN><FLD NAM="I_BPCNUM">425073</FLD></LIN>
<LIN><FLD NAM="I_BPCNUM">400044</FLD></LIN>
</TAB>
<GRP ID="GRP2">
<FLD NAM="I_NEW_STAGE">6</FLD>
</GRP>
</PARAM>
ID matches the group code from the Mapping tab. Attributes use NAM (3 chars), not NAME.
multi mode, ~1 successful call per pool restart. With multi, ~1 successful call per worker per cycle (≈2 with the default 2-channel install).Each change requires:
.src source — paste into Scripts editor (Folder=BUILD, Directory=TRT, Type=SRC), Compile (silent on success).WW_HORDAT matches the new Published the.Pattern:
https://<host>/syracuse-main/html/main.html?url=%2Ftrans%2Fx3%2Ferp%2F<ENDPOINT>%2F%24sessions%3Ff%3D<FUNC>%252F2%252F%252FM%252F%26profile%3D~(loc~%27en-GB~role~%27<ROLE_GUID>~ep~%27<EP_GUID>~appConn~())
Fastest way to extract the right profile=... tail: open any working X3 function tab and copy its URL — everything except the f%3D... segment is reusable.
Common function codes:
GESAWE — Classic SOAP web services / publication editorADOTRT — Scripts editor (compile/edit .src)GESAUS — X3 user maintenanceGESADS — Folders maintenanceIn the response's traceRequest CDATA, look for:
Call X3 subprogram 'CHGUSR:CHGLOGINXTEND' — present means user-switch fired.Call X3 subprogram 'WJ<NAME>:<NAME>' — present means the wrapper ran.Result parameters: [...] — populated O_* values come back here as {"num":N, "resu":..., "descr":"...", "grp":"..."} entries.processReport [err] lines — explicit error messages from the dispatcher.Result (0) with empty Technical parameters: [] and poolExecDuration ≈ 1ms — wrapper short-circuited before subprog body ran (auth/cache/empty-input issue).| Error message | Meaning | Fix |
|---|---|---|
Illegal character (val_anagram) | Adonix 4GL line continuation is & — a trailing _ is a syntax error | Replace trailing _ with & |
Class nonexistent [F:BPC] | File abbreviation not declared | Add Local File BPCUSTOMER [BPC] before any [F:BPC] reference |
File nonexistent ... BPC.fde (compile / runtime open) | Used the abbreviation as the table code in Local File | Use the actual table code (BPCUSTOMER, not BPC) |
Cannot add field [FLD] under root node. Field [X] not found into X3 description. | Field needs to be inside a GRP/TAB | Wrap in the right GRP/TAB based on the Mapping tab |
No attribute ID found into GRP tag. | GRP missing ID="..." | Add ID="GRPn" matching the schema |
Group [X] has a dimension greater than 1. You have to use TAB Xml tag. | Tried to use GRP for an array | Switch to <TAB ID="..."> with <LIN> rows |
Change login error | CHGUSR target user doesn't exist or is misconfigured | Check user exists in GESAUS, has password, is active |
Unknown web service (0) | Pool can't resolve the service | Re-publish in GESAWE, restart pool |
Connection error - Incorrect user code or password (pool start) | Pool's configured user has no valid X3-side credentials | Configure V6 connection info on the user, or use admin |
##############################################################################
# Set ZEMSTAGE on a single BP Customer.
##############################################################################
Subprog ZWEMSTAGE(I_BPCNUM, I_NEW_STAGE, O_RETCODE, O_ERRMSG)
Value Char I_BPCNUM()
Value Integer I_NEW_STAGE
Variable Integer O_RETCODE
Variable Char O_ERRMSG()
Local File BPCUSTOMER [BPC]
Trbegin [BPC]
Read [BPC]BPC0 = I_BPCNUM
If fstat
O_RETCODE = 1
O_ERRMSG = "Customer not found"
Rollback : Return
Endif
[F:BPC]ZEMSTAGE = I_NEW_STAGE
Rewrite [F:BPC]
If fstat
O_RETCODE = 4
O_ERRMSG = "Write failed"
Rollback : Return
Endif
Commit
O_RETCODE = 0
O_ERRMSG = "OK"
Return
End
ZWEMSTAGE shape)##############################################################################
# ZWEMSTAGE - Set ZEMSTAGE on a batch of BP Customer records.
#
# Inputs : I_BPCNUM array of customer codes (up to 100)
# I_NEW_STAGE target stage applied to every customer in the batch
# Outputs : O_COUNT number of records successfully updated
# O_FAIL_LIST comma-separated list of customer codes that failed
# O_ERRMSG human-readable summary
#
# Empty slots in I_BPCNUM stop the loop, so caller can leave trailing
# elements blank without padding.
##############################################################################
Subprog ZWEMSTAGE(I_BPCNUM, I_NEW_STAGE, O_COUNT, O_FAIL_LIST, O_ERRMSG)
Value Char I_BPCNUM()(0..100)
Value Integer I_NEW_STAGE
Variable Integer O_COUNT
Variable Char O_FAIL_LIST()
Variable Char O_ERRMSG()
Local File BPCUSTOMER [BPC]
Local Integer WI, WTRIED
O_COUNT = 0
O_FAIL_LIST = ""
WTRIED = 0
For WI = 0 To 99
If I_BPCNUM(WI) = "" : Break : Endif
WTRIED = WTRIED + 1
Trbegin [BPC]
Read [BPC]BPC0 = I_BPCNUM(WI)
If fstat
Rollback
O_FAIL_LIST = O_FAIL_LIST + I_BPCNUM(WI) + ","
Else
[F:BPC]ZEMSTAGE = I_NEW_STAGE
Rewrite [F:BPC]
If fstat
Rollback
O_FAIL_LIST = O_FAIL_LIST + I_BPCNUM(WI) + ","
Else
Commit
O_COUNT = O_COUNT + 1
Endif
Endif
Next
O_ERRMSG = "Updated " + num$(O_COUNT) + " of " + num$(WTRIED) + " to stage " + num$(I_NEW_STAGE)
Return
End
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wss="http://www.adonix.com/WSS"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<wss:run soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<callContext xsi:type="wss:CAdxCallContext">
<codeLang xsi:type="xsd:string">ENG</codeLang>
<poolAlias xsi:type="xsd:string">WSBUILD</poolAlias>
<requestConfig xsi:type="xsd:string">adxwss.optiontype=adxwss.optiontype.multi&adxwss.trace.on=on&adxwss.beautify=true</requestConfig>
</callContext>
<publicName xsi:type="xsd:string">ZWEMSTAGE</publicName>
<inputXml xsi:type="xsd:string"><![CDATA[<PARAM>
<TAB ID="GRP1">
<LIN><FLD NAM="I_BPCNUM">425073</FLD></LIN>
<LIN><FLD NAM="I_BPCNUM">400044</FLD></LIN>
<LIN><FLD NAM="I_BPCNUM">425099</FLD></LIN>
</TAB>
<GRP ID="GRP2">
<FLD NAM="I_NEW_STAGE">6</FLD>
</GRP>
</PARAM>]]></inputXml>
</wss:run>
</soapenv:Body>
</soapenv:Envelope>
@echo off
set X3_USER=MHE
set X3_PASS="<password>"
set X3_URL=https://x3.ramsden-international.com/soap-generic/syracuse/collaboration/syracuse/CAdxWebServiceXmlCC
curl -o response.txt -k -s -X POST ^
-H "Content-Type: text/xml; charset=utf-8" ^
-H "SOAPAction: \"\"" ^
-u %X3_USER%:%X3_PASS% ^
--data-binary "@envelope.xml" ^
"%X3_URL%"
X3 (reference), SEED, BUILD (development, full prod-like), RAMDATA, RAMLIVE (production financial system — off-limits for direct edits).BUILD. Pool used during dev: WSBUILD.BUILD folder has BPCUSTOMER available via inheritance, but BPC.fde doesn't exist as a separate file — BPC is just the abbreviation for table BPCUSTOMER.BPCUSTOMER → BPCBPSUPPLIER → BPSBPARTNER → BPRhttps://x3.ramsden-international.com/soap-generic/syracuse/collaboration/syracuse/CAdxWebServiceXmlCCcurl -s -H "APIKEY: <key>" "https://api.ramsden-international.com:8443/X3RestApiUAT/api/sagex3/customer?CustomerCode=425073" | jq -r ".responseData[0].customer.EMStage"