Version9新機能（Rules）の説明

#目次
1. はじめに
2. Rules機能の概要
3. 設定方法

#はじめに
今回はVersion9で新しく追加されたRule機能について説明します。
※新機能を使うには、Version9に対応した環境が必要となりますので、個別で用意していただくようにしてください。

#Rules機能の概要
Kony Fabricでは、クライアント側から送られてきたリクエストとレスポンスのパラメーターを変更するために、 PreProcessor, PostProcessorを使って処理を実行していました。
参考：[Kony FabricのObject Serviceの紹介](https://qiita.com/Kony_Team/items/358be86b24cad63a7987#%E3%83%97%E3%83%AA%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5%E3%83%BC%E3%81%A8%E3%83%9D%E3%82%B9%E3%83%88%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B5%E3%83%BC)

Pre/PostProcessorでは、JavaまたはJavascriptを使って処理を定義していましたが、 Version9からRules機能が追加され、より人間の言葉に近い形で処理を定義することが可能になりました。

例えば、商品の価格に消費税を上乗せしてデータ更新を行いたい場合、 これまでは以下のようにPre/PostProcessorを使ってJavaまたはJavascriptで定義していました。

[PreProcessorを使った場合]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/63b68b12-d6ab-4f34-77c4-46254fd0270d.png)

Rulesの機能では、Pre/PostProcessorで行っていた同様の処理を
 Java/Javascriptを使わずに実行することができます。

ここから詳しく設定方法のご説明をしたいと思います。

#設定方法
1. Kony Fabricで`Rules`タブを開きます。
![スクリーンショット 2020-06-24 14.36.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/8900fa43-6414-c0a0-609c-e9c4ef60fb7b.png)

2. `Configure New`をクリックして新しくRuleを追加します
![スクリーンショット 2020-06-24 14.37.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/e525aa27-a3c9-b7f4-3029-061e54b59999.png)
名前を設定したら、「Save & Add Rule」をクリック
![スクリーンショット 2020-06-24 14.40.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/543841c3-faac-e7dc-94a1-e9005d2e5830.png)
3. ルール設定の画面が開きますので、「Rule Logic」の箇所にロジックを記載していきます。
![スクリーンショット 2020-06-24 14.43.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/a9e51db2-e524-ff6f-b591-b71a4b3ae8db.png)

デフォルトでルールの記載がありますが、
以下の作成フォーマットに従っていればOKなので、実施したい内容によって記載を変更してください。

```
name: "<ルールの名前（※必須）>" 
description: "<ルールの詳細説明>"
priority: <優先度>
condition: "<条件（※必須）>"
actions:
   - "<条件に合った場合に実行するアクション（※必須）>"
```

これまでは、Pre/PostProcessorでJavaまたはjavascriptで記述していましたが、
Rulesでは、上記のような形式で定義することが可能になりました。
name,condition,actionsのみ必須で、それ以外は、任意での記載となります。

priority（優先度）は、ルールを実行する順序を表す値で、値が大きいほど優先度が高くなります。

今回は、そのまま以下のサンプルのものを使っていこうと思います。

```
---
name: "Credit Rating between 300 and 669, credit length less than 5 "
description: "Credit Rating between 300 and 669, credit length less than 5 "
condition: "creditRating >= 300 && creditRating <= 669 && creditLengthInYears <= 5"
actions:
- "results.addParam(\"status\", \"Reject\")"
---
name: "Credit Rating between 300 and 669, credit greater than 5 "
description: "Credit Rating between 300 and 669, credit greater than 5 "
condition: "creditRating >= 300 && creditRating <= 669 && creditLengthInYears > 5 "
actions:
- "results.addParam(\"status\", \"Review\")"
---
name: "Credit Rating between 670 and 750, credit length less than 5 "
description: "Credit Rating between 670 and 750, credit length less than 5 "
condition: "creditRating >= 670 && creditRating < 750 && creditLengthInYears <= 5 "
actions:
- "results.addParam(\"status\", \"Approve\")"
- "results.addParam(\"interestRate\", \"10\")"
---
name: "Credit Rating greater than 750, credit greater than 5 "
description: "Credit Rating greater than 750, credit greater than 5 "
condition: "creditRating >= 750 && creditLengthInYears > 5 "
actions:
- "results.addParam(\"status\", \"Approve\")"
- "results.addParam(\"interestRate\", \"5\")"
---
```

Rule Logicの記載が終わったら、「Request Input」でパラメーターを追加していきます。  
4. Rule Logicで、「creditRating」と「creditLengthInYears」の値で条件文を作成しているので、
Request Inputで、2つのパラメーターを追加します。

今回はテスト値に以下を設定しました。

| Name       |   Test Value |  
|:-----------------|:------------------|
|creditRating  |800|      
|creditLengthInYears           |10 |  

![スクリーンショット 2020-06-24 14.56.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/eae6a529-e5e0-91fa-c295-014f39c1aebf.png)


Test Valueの設定が完了したら、
「Select an Environment」でVersion9に対応している環境を選択し、
「Save & Fetch Response」をクリックします。

すると、今回のテスト値は上記条件の、4番目に該当するので、以下のようにレスポンスが返ってくればOKです。

```
{
"interestRate": "5"
"opstatus":0,"status" ​: "Approve
}
```


<font color="Red">
**以下のようなエラーが出る場合..:thinking:**
</font>
Output Resultにエラーメッセージが表示されてしまう場合、
選択した環境がVersion9に対応しているかどうかチェックするようにしてください。
Version9に対応していない環境を選択すると、Rule機能が搭載されていないので、エラーとなってしまいます。

```
{
  "ErrorCode": "9106",
  "ErrorMessage": "Connector Configuration Problem. The endpointUrl is missing for the service RuleSample."
}
```

#おわりに
今回は、Version9のRules機能について説明を行いました。
コーディング慣れしていない人でも簡単に記載ができるので、今後活用していきたい機能だと思いました。

#参考
https://docs.kony.com/konylibrary/konyfabric/v9m2/kony_fabric_user_guide/Content/Rules.htm