In OpenEdge 11.5.1 or later, use the HTTP client . The ABL programmer is responsible for coding the HTTP request, and for parsing the HTTP response if it contains a multipart message.
BLOCK-LEVEL ON ERROR UNDO, THROW.
USING OpenEdge.Net.HTTP.ClientBuilder.
USING OpenEdge.Net.HTTP.IHttpRequest.
USING OpenEdge.Net.HTTP.IHttpResponse.
USING OpenEdge.Net.HTTP.RequestBuilder.
USING OpenEdge.Core.WidgetHandle.
USING OpenEdge.Net.MessagePart.
USING OpenEdge.Net.MultipartEntity.
USING OpenEdge.Core.Memptr.
DEF VAR mData AS MEMPTR.
DEF VAR hXmlDocument AS HANDLE.
DEF VAR oReq AS IHttpRequest.
DEF VAR oResp AS IHttpResponse.
DEF VAR mpEntity AS MultipartEntity.
DEF VAR msgPart AS MessagePart.
mpEntity = NEW MultipartEntity().
mpEntity:Boundary = 'MIME_boundary'.
CREATE X-DOCUMENT hXmlDocument.
hXmlDocument:LOAD('file', SESSION:TEMP-DIR + 'soap.xml', FALSE).
// first part
msgPart = NEW MessagePart('application/soap+xml; charset=UTF-8', NEW WidgetHandle(hXmlDocument)).
msgPart:ContentID = '<image@insurance.com>'.
mpEntity:AddPart(msgPart).
// second part
COPY-LOB FILE SESSION:TEMP-DIR + 'smileyface.jpg' TO mData.
msgPart = NEW MessagePart('image/jpeg', NEW MEMPTR(mData)).
msgPart:ContentID = '<image@insurance.com>'.
mpEntity:AddPart(msgPart).
oReq = RequestBuilder:Post('http://mtom.url', mpEntity)
:ContentType('Multipart/Related; boundary=MIME_boundary; type="application/soap+xml"; start="<claim@insurance.com>"')
:Request.
oResp = ClientBuilder:Build():Client:Execute(oReq).
MESSAGE
oResp:StatusCode
VIEW-AS ALERT-BOX.