Don Rozwick · May 9, 2019

How to "Post" a URL based on the Alert Message

I am trying to create a URL for Spoke Mobile to page users when our email system is down and we can't use the normal email alerts.

I was directed to and tried to create something.  The best I got was a response from the webpage that told me there was an error.

I want to be able to have a default pager number when we don't have an oncall schedule and grab information from Ens.AlertMessage.


I thought this would work:

Class User.NewClass21 Extends Ens.BusinessOperation

Parameter ADAPTER = "EnsLib.HTTP.OutboundAdapter";

Property Adapter As EnsLib.HTTP.OutboundAdapter;

Parameter INVOCATION = "Queue";

/// Analyst Pager number
Property PIN As %String;

Parameter SETTINGS As %String = "PIN";

/// Alert Message
Property MSSG As %String;

Method OnD03Alert(pReq As User.Alert, Output pResp As %String) As %Status
        Set httprequest = ##class(%Net.HttpRequest).%New()
        Do httprequest.SetParam("PIN",..PIN)
        Do httprequest.SetParam("MSSG","motogplay")

        Do httprequest.Post(,1,0)
        set stream = httprequest.HttpResponse.Data
        while 'stream.AtEnd {
                Set pResp = stream.Read($$$MaxStringLength)
    Quit $$$OK

XData MessageMap
    <MapItem MessageType="User.Alert">


put get an error the my function needs to return a response.

here is the URL I am trying to get to where nnnnnnnnnn is the pager number


Thanks for your time.

0 372
Discussion (4)1
Log in or sign up to continue

So from a network capture if I use out of the box operation EnsLib.http.operation the URL is correct

So now I am wondering if I need to get my proxy setup.

Here is the response from the trace:

<?xml version="1.0" ?>
<!-- type: EnsLib.HTTP.GenericMessage id: 55 -->
<HTTPMessage xmlns:s="" xmlns:xsi="">
<![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><title>Wireless Messaging</title> <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1" /> <link href='/message/stylesheets/OpenSans.css' rel='stylesheet' type='text/css'> <link href="/message/stylesheets/spok_1.css" rel="stylesheet" type="text/css" /> <script language=JavaScript> <!-- function MM_preloadImages() { //v3.0 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array(); var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++) if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}} } //--> </script> </head> <body leftMargin=0 topMargin=0 marginheight="0" marginwidth="0"> <table width=750 border=0 align="center" cellPadding=0 cellSpacing=0> <tbody> <tr> <td align="center" class=text-12>&nbsp;</td> </tr> <tr> <td align="center" class=text-12> Your page has been sent to <span class="TDBOLD"> Cannot process that request. Try Again.</span>. <p>&nbsp;</p> <span class="TDBOLD"><a href="#" onclick="'','_self','');;">Close [X]</a></span><br><br> <span class="TDBOLD"><a href="#" onclick="document.location.href='/message/index.html';">Send Another Page</a></span><br><br> <p class="TDBOLD">Thank you for using Spok.</p></td> </tr> <tr> <td>&nbsp;</td> </tr> <tr> <td> <p align=center><a href="javascript:history.go(-1)">Back</a></p></td> </tr> </tbody> </table> </body> </html> ]]>
<HTTPHeadersItem HTTPHeadersKey="CONTENT-TYPE">
text/html; charset=UTF-8
<HTTPHeadersItem HTTPHeadersKey="DATE">
Sat, 11 May 2019 13:00:14 GMT
<HTTPHeadersItem HTTPHeadersKey="SERVER">
<HTTPHeadersItem HTTPHeadersKey="StatusLine">
HTTP/1.1 200 OK

Compiling class User.NewClass21
ERROR #5373: Class 'Ens.StreamResponse', used by 'User.NewClass21:OnD03Alert:FormalSpec', does not exist
  > ERROR #5030: An error occurred while compiling class 'User.NewClass21'
Detected 1 errors during compilation in 0.657s.

I am using HealthShare Health Connect 2018.1

Also here is the User.Alert

Class User.Alert Extends Ens.Request

/// Analyst Pager number
Property PIN As %String;

/// Alert Message
Property MSSG As %String;

Storage Default
<Data name="AlertDefaultData">
<Value name="1">
<Value name="2">


You need to specify where you want to send your request. Something like this should work.

Method OnD03Alert(req As User.Alert, Output resp As Ens.StreamContainer) As %Status
    #Dim sc As %Status = $$$OK      
    #Dim test As %Integer = 0
    Set httprequest = ##class(%Net.HttpRequest).%New()   
    Set httprequest.Server =  ""
    Set httprequest.Location = "cgi-bin/wwwpage.exe"
    Do httprequest.SetParam("PIN", ..PIN)
    Do httprequest.SetParam("MSSG", "motogplay")
    Set sc = httprequest.Post(, test, $$$NO)
    If $$$ISOK(sc) {
        Set stream = httprequest.HttpResponse.Data
        Set resp = ##class(Ens.StreamContainer).%New(stream)
    Quit sc

Also Ensemble operations must return persistent objects so I replaced string with Ens.StreamResponse.

Sorry, I meant Ens.StreamContainer class.

Updated snippet code.