#はじめに
Delphi 10.3.3 Community Edition を入手したのでモバイルアプリを作ってみたいと思います。
まずはSoapクライアントができるのか試してみました。(Restはまだお勉強中)
SoapができればDB接続などのめんどくさい動作は全部サーバー側に持たせることができるので
作りなれないモバイルアプリでも色々出来るのではと期待しています。
AndroidでもIOSでも同じことができると思いますが、現状は手元にMacが無いので
手持ちのAndroid機で試してみることにしました。(それも超古いやつですが…)
作り方は基本Windowsアプリと同じです。FireMonkeyの本領発揮ですね。
#評価環境
開発マシン: Windows10 professional (Core i5-3337U 1.8GHzで重いですT_T)
Delphi : Delphi 10.3.3 Community Edition
Androidマシン:Nexus7 (32bit)
Androidバージョン:6.0.1
#Android側の準備
開発マシンとNexus7をUSBケーブルでつなぐ
設定-開発者向けオプションで
・USBデバッグモードをONにする
・スリープモードにしないをONにする
#Soapサービスの準備
Tomcat+Axis2 でテスト用に簡単なSoapサービスを作成します。
package main;
import java.util.Date;
public class Demo {
//固定文字列を返す
public String Rev(){
return "Rev1.00";
}
//2値の足し算の結果を返す
public int Plus(int a,int b){
return a + b;
}
//2値の引き算の結果を返す
public int Minus(int a,int b){
return a - b;
}
//現在の日付時刻を返す
public String DateTime(){
return new Date().toString();
}
}
#Delphiでプログラム作成
新規作成-マルチデバイスアプリケーション でプロジェクト作成
空のアプリケーションを選択
ファイル-新規作成-その他-Delphiプロジェクト-Web からWSDLインポータを起動
WSDLソースにSoapサービスのWSDLのURLを指定して次へ
SOAPバージョンの自動選択を選択して次へ
既定値のまま次へ
定義用ソースが自動生成される
この関数名(ここではGetDemoPortType)を使うのでメモっておく
ターゲットプラットフォームにUSB接続したデバイスが認識されているのを確認
・ターゲットをAndroid32ビット Nexus7 ビュー Android7インチタブレットに変更
・画面に各関数呼び出し用のTButton、足し算、引き算用の値入力用TEditを配置
uses句に自動生成されたソース名を追加
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,
FMX.Controls.Presentation, FMX.StdCtrls, Demo;
各ボタンのイベントハンドラに呼び出し内容を記述
xxx.xxx.xxx.xxx は実際に接続するSoapサーバーのIPまたはホスト名を指定
httpsでも動きました。
// 起動時に入力ボックスクリア
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := '';
Edit2.Text := '';
end;
// Revボタン
procedure TForm1.Button1Click(Sender: TObject);
var SoapObject : DemoPorttype;
begin
SoapObject := GetDemoPortType(false,'http://xxx.xxx.xxx.xxx:8080/SoapDemo/services/Demo?wsdl');
ShowMessage(SoapObject.Rev);
end;
// DateTimeボタン
procedure TForm1.Button2Click(Sender: TObject);
var SoapObject : DemoPorttype;
begin
SoapObject := GetDemoPortType(false,'http://xxx.xxx.xxx.xxx:8080/SoapDemo/services/Demo?wsdl');
ShowMessage(SoapObject.DateTime);
end;
// Plusボタン
procedure TForm1.Button3Click(Sender: TObject);
var SoapObject : DemoPorttype;
a,b,y : integer;
begin
SoapObject := GetDemoPortType(false,'http://xxx.xxx.xxx.xxx:8080/SoapDemo/services/Demo?wsdl');
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
y := SoapObject.Plus(a,b);
ShowMessage(format('%d+%d=%d',[a,b,y]));
end;
// Minusボタン
procedure TForm1.Button4Click(Sender: TObject);
var SoapObject : DemoPorttype;
a,b,y : integer;
begin
SoapObject := GetDemoPortType(false,'http://xxx.xxx.xxx.xxx:8080/SoapDemo/services/Demo?wsdl');
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
y := SoapObject.Minus(a,b);
ShowMessage(format('%d-%d=%d',[a,b,y]));
end;
#実行
プロジェクト、ソースに名前を付けて保存します。
実行を行うとコンパイル後にAndroid側でアプリが起動します。
コンパイル時間はWindowsアプリに比べると長いです。(私のマシンで1分くらい)
Androidで起動
DateTimeボタンクリック
Minusボタンクリック
無事に動きましたとさ。 めでたし めでたし
Macが入手出来たらIOSでもやってみたいと思います。