SMSServiceの例

LANSA Integrator

SMSServiceの例


この例により、RDMLXフォームでのSMSServiceの使用方法が実証されます。このフォームを使用すると、ユーザーは携帯電話に送信されるメッセージを作成できます。

これは、入力可能なフィールドが2つある簡単なインターフェースで構成されます。入力可能なフィールドは以下の2つになり、LANSAリポジトリで定義する必要があります。

#PHONE, Alphanumeric, 桁数 30

#SMSTEXT, Char, 桁数 200, ビジュアライゼーション VisualMultiLineEdit

また、表示専用フィールドも1つあります。このフィールドは以下のフィールドになり、LANSAリポジトリで定義する必要があります。

#REMCHAR, Integer, 桁数 3, 小数点桁数 0

この例ではビジュアル・インターフェースが提供されますが、インターフェースを必要としないアプリケーションを作成する可能性が十分あります。例えば、顧客がWebサイトで大口の注文をしたときに営業担当者にSMSを送信するなど、特定の条件を満たす場合にSMSを自動的に送信する必要があるとします。このようなアプリケーションは、データベースや他のソースから携帯番号とメッセージ情報を取得する必要があります。

この例では、初期テスト用の携帯番号フィールドにメール・アドレスを入力できます。これが機能することが確認されたら、実際の携帯番号を使用して開始できます。

以下は、このVisual LANSAフォームの背景にあるRDMLXコードです。

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

*
* 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