ノンプログラマーも大丈夫！Volt MX Irisで電話帳アプリを手軽に作成する方法

# 目次
1. はじめに
1. 完成イメージ
1. 実装方法
1. まとめ


# はじめに
VoltMX Irisでは、ローコードでUI作成はもちろん、アクションの実行も簡単に行えます。
開発未経験の方でも直感的な操作でアプリを作成できます。

今回は、電話帳アプリの作成を通して、ローコードでUI作成からアクションの作成まで実装してみたいと思います！

# 完成イメージ
今回は、会社でもよく利用されている「電話帳アプリ」の作成を行っていきます。
電話帳一覧画面を表示し、詳細画面で電話をかけることができるアプリを作成していきます！
![ezgif-2-962bef71e2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a5c29cd0-313a-4f9d-d87e-5689b9924c59.gif)


# 実装方法
## a.電話帳一覧
まずはUIを作成していきましょう！
### 1.UI作成
Irisのワークスペースの使い方やWidgetの配置方法などは、
以下の記事で詳しく紹介しているのでわからない方はチェックしておきましょう！ 

https://qiita.com/VoltMX_Team/items/8d6afaed19229d01454e#%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF%E4%BD%9C%E6%88%90

今回このようにUIを作成しました。

電話帳一覧画面
![一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/38b48a6e-d2ad-6ac5-d3eb-3b89a44d6c8a.png)

#### 1-1.ヘッダー作成
ヘッダー部分は、複数画面で共通して表示されるUIのため以下のようにコンポーネントを作成しました。
タイトルと戻るボタンが配置された簡単なレイアウトです。
![スクリーンショット 0005-05-11 15.24.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/8ecb5243-cf66-91c2-6e76-ac62552c8974.png)

コンポーネントを作っておくと、他の画面でも同じ見た目で作成することができて便利です。
ヘッダーのコンポーネントが完成したら、対象のフォームを開いた状態で
Componentを右クリックし「Insert Into」クリックすることで追加ができます。

![ezgif-3-cfa712e910.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/7c124e87-1cf1-68ff-d8a3-b3ed8d7fb673.gif)

コンポーネントの詳しい作成方法は以下で紹介しているので、ご参考くださいね！
https://qiita.com/VoltMX_Team/items/1f20ddcbc4610105b97a

コンポーネントが追加できたら、アプリの最初の画面では戻るボタンは表示しなくても良いため、
btnBackを非表示に設定しておきましょう。
![スクリーンショット_0005-05-11_15_32_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/4e0d8887-6041-ca20-3397-c7af50118022.png)

#### 1-2.一覧部分作成
次に一覧表示部分を作成していきます。

一覧表示には、Segment Widgetを使用していきます。
左下のDefault LibraryからSegmentを選択してForm上にもっていきましょう。
![スクリーンショット_0005-05-11_15_34_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/5b81290a-7979-0d30-3144-2128d6a5e8cd.png)

Segmentに表示するFormatを作成していきますが、
作成方法はこちらを参考にしながら作成を行ってください。

https://qiita.com/VoltMX_Team/items/3e68b0fa9ea5ef0f5d2e#3-%E4%B8%80%E8%A6%A7%E9%83%A8%E5%88%86%E3%81%AE%E4%BD%9C%E6%88%90


今回はこのように作成しました。
![スクリーンショット 0005-05-11 15.36.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/b306a174-ffae-b662-0d98-6e95976fc8fe.png)

flxInfoSub内に入るデータは次の画面に渡すためのデータで、
一覧画面では表示しないため、VisibleをOff（非表示）にしておきます。
![スクリーンショット_0005-05-11_15_36_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/3e8163d2-5d09-cd80-99c6-aca8d48673ad.png)

Form内にSegmentが配置できたら、データを登録していきます。
今回はBackendとのデータのやり取りはせず、ダミーデータが表示できればOKです。
Segment WidgetのMaster Dataにデータを登録していきましょう。
（データの登録方法も上記の参考リンクをご参考ください。）

一覧画面には赤枠のみのデータが表示されます。
青枠のデータは先ほど非表示にしたflxInfoSub内にあるため、一覧画面には表示されず、
この後設定するアクション設定で次の画面に遷移する際に一緒に渡されるデータとなります。
![スクリーンショット_0005-05-11_15_43_55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/eae1e8ba-0ae3-af46-7816-f6e11ee96ed6.png)

次に、アクションの設定を行っていきましょう。

### 2.アクション設定
一覧の任意のデータをタップしたら対象者の詳細画面に遷移するようアクションの設定をしていきます。
セグメントのonRowClickアクションをクリックします。
![スクリーンショット_0005-05-11_15_51_36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/3e5b948d-53b5-b743-148b-b9c8e7facc45.png)
アクションエディタが開いたら、
①左側メニューから「Navigate to Form」を選択
②遷移先の対象のフォーム名を選択
③Pass data with navigationにチェックをつけ、selectedRowItemsを選択
![スクリーンショット_0005-05-11_15_52_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/aad4958b-e4fa-6e5f-2040-80cb2ef7fddf.png)

Pass data with navigationにチェックをつけて、渡すデータを選択することで
次の画面に遷移する際、データを一緒に渡すことができます。
selectedRowItemsを選択することで、タップしたデータの全てを指定することができるため、
Master Dataで登録されていて一覧に表示されていないデータ（lblPhoneMobile,lblPhoneOffice etc..）も全て渡すことができます。

次に、詳細画面を作成していきましょう！

## b.電話帳詳細
### 1.UI作成
詳細画面も一覧画面と同じヘッダーがあるので、
一覧の時と同じようにヘッダーのコンポーネントを追加するようにしましょう。
詳細画面では、一覧に戻るための導線が必要なので、btnBackのVisibleをOnにします。
タイトルは非表示にしたいので、lblTitleのVisibleをOffにしました。
![スクリーンショット_0005-05-11_16_02_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/d6dbfbd1-1905-4e14-a96e-03c04eb5f3c5.png)

メインの部分はこのように作成しました。
対象の人に電話をかけられるよう、電話番号やメールの情報を表示できるようにしました。
![詳細.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/58dcb17a-84c9-42fb-7b86-3eb840fba24e.png)

電話やメールのアイコンはタップして電話をかけられるようにButton Widgetを使用しており、
lblPhoneMobileDataには、登録されている電話番号のデータが表示されるようLabel Widgetを使用しています。
|電話ボタン|電話番号表示|
|--|--|
|![スクリーンショット 0005-05-11 16.06.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/ab4218c8-a012-c584-a65a-0061ea9426e0.png)|![スクリーンショット 0005-05-11 16.07.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/1de747ef-b6a6-b5c1-bd02-9ee3d03dd260.png)|

次にアクションの設定を行っていきましょう！

### 2.アクション作成

#### 2-1.データの受け取り
前の画面から渡ってきたデータを表示するためのアクションを設定します。
以下のコードを用いて、遷移後の処理を作成しました。

```frmPhoneBookDetailController.js
define({ 

 //Type your controller code here 
  onNavigate : function(res){
    voltmx.print("_________" + JSON.stringify(res));
    var info = res.segAddressList_selectedRowItems[0];
    this.view.imgProfile.src = info.imgAddress;
    this.view.lblName.text = info.lblName;
    this.view.lblPhoneMobileData.text = info.lblPhoneMobile;
    this.view.lblPhoneOffice.text = info.lblPhoneOffice;
    this.view.lblEmailData.text = info.lblMail;
    this.view.lblCompanyData.text = info.lblCompany;
  }

 });
```
前の画面でNavigate to Formのアクションを使用した場合、
次の画面でonNavigateを関数を実行することで、遷移後のアクションを設定することができます。

上記では、引数に`res`を指定することで遷移元から渡ってきたデータを受け取っています。
resの中身は下記のような配列構造になっているため、それぞれのデータが画面上に表示されるように
それぞれデータを指定します。

```
{
    "segAddressList_selectedRowItems": [
        {
            "imgAddress": "woman_69.png",
            "lblAddress": "Address",
            "lblCompany": "株式会社XX",
            "lblDepartment": "人事・採用チーム",
            "lblMail": "sample@demo.com",
            "lblName": "田中 裕子",
            "lblPhoneMobile": "08000000000",
            "lblPhoneOffice": "030000000",
            "lblRole": "Role"
        }
    ],
        "_meta_": {
        "eventName": "onRowClick",
            "widgetId": ""
    }
}
```

#### 2-2.電話をかける
次に、表示されている電話番号に電話をかけるアクションを設定します。
電話ボタンのonClickアクションを選択します。
![スクリーンショット_0005-05-11_16_16_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/80259ca5-05fd-1cfa-201e-9dad3da8d338.png)

アクションメニューから、Add Snippetを選択し下記のコードを入力しましょう。  
```phonecall.js
var phoneMobile = self.view.lblPhoneMobileData.text;
voltmx.phone.dial(phoneMobile);
```
このようになっていればOKです。
![スクリーンショット_0005-05-11_16_17_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/bd92ad1d-ba20-9f8c-ea7c-7e9e5f968e49.png)


Add Snippetでは、コードを自由に記述することができます。
電話をかけるアクションは、アクションメニューにPhone Callとして用意されていますが、
固定値しか指定できないため、今回Add Snippetを使用しています。

Add Snippet内で`voltmx.phone.dial`のメソッドを使用することで、
()内の電話番号に電話をかけることができます。

#### 2-3.メールを送信する
メールを送信する場合も同様にアクションを設定したいので、
メールボタンのonClickを選択しましょう。
![スクリーンショット_0005-05-11_16_23_35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/23a156c4-32e2-65c2-8580-4e4eb11da20d.png)

先ほど同様、Add Snippetを追加し次のコードを入力しましょう。
```sendmail.js
var mail = self.view.lblEmailData.text;
voltmx.phone.openEmail([mail], [], [], null, null, false);
```
このようになっていればOKです。
![スクリーンショット 0005-05-11 16.24.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e55a0c31-96eb-080d-0674-dfa9c8fbbd8f.png)


`voltmx.phone.openEmail`のメソッドを使用することで、メールアプリが起動し、
()内のアドレスにメールが送信できるようになります。
（参考：[公式ドキュメント](https://opensource.hcltechsw.com/volt-mx-docs/docs/documentation/Iris/iris_api_dev_guide/content/voltmx.phone_functions.html)）

最後に、ヘッダーの戻るボタンに戻るアクションを追加したら完成です。
![スクリーンショット 0005-05-11 16.28.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/b3d7ab5f-6b0a-2849-cf44-7d871c46238b.png)

# 完成
最後に動作を見ていきましょう！
一覧画面でマスタデータに登録したデータを表示し、
次の詳細画面で電話番号などの情報を表示、電話をかけることができました！

![ezgif-2-962bef71e2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a5c29cd0-313a-4f9d-d87e-5689b9924c59.gif)

# まとめ
Irisでは特別な知識なく、ローコードでアプリを簡単に開発することができます！
アクションエディタには次の画面に遷移させるアクションや、電話・メールをかけるアクション、
関数を呼び出すアクションなど用意されており、実装も容易です。

次回は少し発展させて、バックエンドとのデータのやり取りを行い、
リアルタイムのデータを表示できるような実装方法を紹介していきたいと思います✨

是非ブックマークして楽しみにしておいてくださいね！

# 参考
https://opensource.hcltechsw.com/volt-mx-docs/docs/documentation/Iris/iris_user_guide/Content/working_with_Action_Editor.html

https://opensource.hcltechsw.com/volt-mx-docs/docs/documentation/Iris/iris_api_dev_guide/content/voltmx.phone_functions.html