SMSService Example

LANSA Integrator

SMSService Example

This example demonstrates how to use the SMSService in an RDMLX form. The form allows a user to create a message that will be sent to a mobile phone.

It consists of a simple interface with 2 input capable fields that need to be defined in the LANSA Repository as:

#PHONE, Alphanumeric, Length 30

#SMSTEXT, Char, Length 200, Visualisation VisualMultiLineEdit

There is also one display only field that needs to be defined in the LANSA Repository as:

#REMCHAR, Integer, Length 3, Decimals 0.

While this example provides a visual interface, it is quite possible that you will build applications that do not need an interface. For example, you might need to automatically send out an SMS when certain conditions are met, like sending an SMS to a sales person when a customer has placed a large order on your web site. Such applications will need to fetch the phone number and message information from a database or some alternative source.

With this example you can enter an email address into the phone number field for initial testing. Once satisfied that it works, you can then start using real phone numbers.

The following is the RDMLX code behind this Visual LANSA form.

***************************************************

*
* Description:
* This RDMLX form provides an example of how to use the SMSService. The form allows a user to create a message that will be sent to a mobile phone.
* It consists of a simple interface with 2 input capable fields that are defined in the repository as:
*           - #PHONE, Alphanumeric, Length 30
*           - #SMSTEXT, Char, Length 200, Visualisation VisualMultiLineEdit
* There is also one display only field:
*           - #REMCHAR, Integer, Length 3, Decimals 0.
*
*
* Disclaimer : The following material is supplied as sample material only. No warranty concerning this material or its use in any way whatsoever is expressed or implied.
*
***************************************************
FUNCTION OPTIONS(*DIRECT)
Begin_Com Role(*EXTENDS #PRIM_FORM) Clientheight(236) Clientwidth(542) Height(270) Left(391) Top(135) Width(550)
Define_Com Class(#PRIM_LABL) Name(#LABL_1) Alignment(Center) Caption('Please Enter the Phone Number and Message Below') Displayposition(1) Height(17) Left(64) Parent(#COM_OWNER) Tabposition(4) Tabstop(False) Top(16) Width(289)
Define_Com Class(#PHONE.Visual) Name(#PHONE) Displayposition(2) Left(10) Parent(#COM_OWNER) Tabposition(1) Top(62) Width(305)
Define_Com Class(#REMCHAR.Visual) Name(#REMCHAR) Displayposition(3) Height(19) Left(10) Parent(#COM_OWNER) Readonly(True) Tabposition(6) Tabstop(False) Top(152) Usepicklist(False) Width(200)
Define_Com Class(#PRIM_PHBN) Name(#Btn_Send) Caption('Send SMS') Displayposition(4) Left(160) Parent(#COM_OWNER) Tabposition(3) Top(175)
Define_Com Class(#PRIM_STBR) Name(#STBR_1) Displayposition(5) Height(24) Left(0) Messageposition(1) Parent(#COM_OWNER) Tabposition(5) Tabstop(False) Top(212) Width(542)
Define_Com Class(#SMSTEXT.VisualMultiLineEdit) Name(#SMSTEXT) Displayposition(6) Height(57) Left(10) Parent(#COM_OWNER) Tabposition(2) Top(88)

* The following locally defined fields are used to hold the parameters required within the JSM Built-in Functions.
Define Field(#JSMSTS) Type(*CHAR) Length(020)
Define Field(#JSMMSG) Type(*CHAR) Length(255)
Define Field(#JSMCMD) Type(*CHAR) Length(255)
Define Field(#JSMSRV) Type(*CHAR) Length(050)
Define Field(#JSMHND) Type(*CHAR) Length(4)

EVTROUTINE handling(#com_owner.Initialize)
SET #com_owner caption(*component_desc)

* This example simulates a case whereby the SMS provider can only accept emails that hold a maximum of 200 characters. The #REMCHAR field is used to inform the users the number of remaining characters they may enter before they reach this limit. Most SMS providers and mobile phones can now send messages that are far greater this, and if they cannot, then the message is often split into multiple messages and sent to the mobile phone by the SMS provider. The #REMCHAR field is set here to 200 and is updated via the SMSTEXT.Changed event.
#Remchar := 200

ENDROUTINE

EVTROUTINE HANDLING(#Btn_Send.Click)

* 'Open service'
* The JSMX_OPEN Builtin Function is used to connect this JSMX client to the Java Services Manager, and to start a thread for the service. The server name must be a valid and available server name and the port number will be that which your SMTP mail server is running on. The server name defined here is not related to any servers that you have defined in the LANSA Communications Administrator.
#JSMSRV := 'LANSA01:4560'
Use Builtin(JSMX_OPEN) With_Args(#JSMSRV) To_Get(#JSMSTS #JSMMSG #JSMHND)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)

* 'Load service'
* The Service_Load(SMSService) command loads and initializes the service using the values defined in the SMSService.properties file.
#JSMCMD := 'Service_Load Service (SMSService)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)

* 'Examples of Set command'
*
* Here are two examples of how to use the SET command. This command might be used to override any defaults that are defined in the SMSService.properties file.
*
* 1st Example of 'Set' command. In this example of the 'Set' command, we are setting the Encoding value to be that of the ISO08859_1 standard.
#JSMCMD := 'Set Encoding(ISO8859_1)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)
* 2nd Example of 'Set' command. In this example of the 'Set' command, we are overriding the FROM value. This might be useful for some initial testing if you want the return address value to be your personal email address. The value used here will be appended to the mail domain (e.g. @mycompany.com), so you need only enter the first part of the address.
#JSMCMD := 'Set From(return_address)'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)

* 'Send message'
* This command is required to 'kick off' the sending of the message, and contains the 'guts' of the message. The 'To' parameter contains the phone number, while the 'Msg' parameter contains the message to be sent.
#JSMCMD := 'Send To(' + #Phone + ') Msg(' + #SMSText +')'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)

* 'Unload service'
* This command is required to unload the service and to remove the temporary directory. If you needed to send out multiple messages then you would not issue this command until after you had finished sending all the messages.
#JSMCMD := 'Service_Unload'
Use Builtin(JSMX_COMMAND) With_Args(#JSMHND #JSMCMD) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)

* 'Close service'
* The final step in the process is to close the service.
Use Builtin(JSMX_CLOSE) With_Args(#JSMHND) To_Get(#JSMSTS #JSMMSG)
Execute Subroutine(CHECK) With_Parms(#JSMSTS #JSMMSG)

Endroutine

* The following event routine provides information to the user on how many characters they have left before they reach their limit. This is a purely optional feature, and would not be necessary in applications that do not allow users to type in their messages.
EVTROUTINE HANDLING(#SMSText.Changed) OPTIONS(*NOCLEARMESSAGES *NOCLEARERRORS)

#Remchar := 200 - #SMSText.CurSize

ENDROUTINE

* SUBROUTINES
* The following subroutine is used by all the JSMX commands to handle any errors that are encountered.
Subroutine Name(CHECK) Parms((#JSMSTS *RECEIVED) (#JSMMSG *RECEIVED))

If Cond('#JSMSTS *NE OK')

Message Msgtxt('Java service error has occurred')
Message Msgtxt(#JSMMSG)

Use Builtin(JSMX_CLOSE) With_Args(#JSMHND) To_Get(#JSMSTS #JSMMSG)

Endif

Endroutine

END_COM