원클릭으로
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"