# DSQLマップでBeanとルーチンを使用

java:callファンクションを使い、DSQLマップでグローバルルーチンとカスタムルーチンを呼び出します。 この例ではルーチンのみを使用していますが、同じメソッドでBeanを呼び出すこともできます。

## 始める前に

* 入力と出力のストラクチャーが作成済みであること。ストラクチャーの作成には下のJSONサンプルを使用できます。

## このタスクについて

この例では、それぞれ2つの文字列が含まれているオブジェクトの配列があります。untrimmed文字列には余分なスペースが入っているので、グローバルルーチンで削除する必要があります。ordered文字列については、文字の順序を逆転させるカスタムルーチンを作成します。

入力データは次のようになります。

```
[
    {
        "untrimmed": " extra spaces before and after  ",
        "ordered": "abcdefgh"
    },
    {
        "untrimmed": " extra spaces before",
        "ordered": "ijklmno"
    },
    {
        "untrimmed": "extra spaces after     ",
        "ordered": "pqrstuvwxyz"
    }
]
```

出力ストラクチャーは次のようになります。

```
[
    {
        "trimmed": "",
        "reversed": ""
    }
]
```

## 手順

1. 次の手順で、文字列を逆転させるカスタムルーチンを作成します。
   1. Integrationパースペクティブを開き、[Repository] (リポジトリー)タブのCodeノードを展開します。
   2. [Custom Routine Jars] (カスタムルーチンJar)を右クリックし、[Create Routine Jar] (ルーチンJarを作成)をクリックして、dsqlmapという名前を付けます。
   3. dsqlmapを右クリックし、[Create routine] (ルーチンを作成)をクリックして、このルーチンにStringUtilsという名前を付けます。
   4. ルーチンにあるhelloExampleメソッドを次のコードに置き換えて保存します。
      ```
      public static String reverse(String s) {
          return new StringBuilder(s).reverse().toString();
          }
      ```
2. [Window] (ウィンドウ) &gt; [Preferences] (環境設定) &gt; [Mapping] (マッピング)を開き、[Enable java function calls in DSQL Maps] (DSQLマップでJava関数の呼び出しを有効化)チェックボックスをオンにします。

   セキュリティ上の理由により、これはデフォルトで無効になっています。
3. 新しいDSQLマップを作成して入力ストラクチャーと出力ストラクチャーを追加します。
4. 出力のtrimmedエレメントをクリックし、次の式を入力してStringHandlingグローバルルーチンにあるTRIMメソッドを呼び出します。
   ```
   java:call('routines.StringHandling', 'TRIM', untrimmed)
   ```

   このファンクションには少なくとも次の2つのパラメーターが必要です。
   * ルーチンの完全クラス名
   * 呼び出すメソッド

   これらの後に、メソッドによって期待されるパラメーターを追加できます。この場合、メソッドは文字列を必要とするので、入力untrimmedエレメントへの参照を追加します。
5. 出力reversedエレメントをクリックし、次の式を追加してカスタムルーチンを呼び出します。
   ```
   java:call('org.example.<yourproject>.routinesjar.dsqlmap.StringUtils', 'reverse', ordered)
   ```

   この呼び出しでは、&lt;yourproject&gt;をお使いのTalend Studioプロジェクトの名前に置き換える必要があります。また、ルーチンの先頭の行を見ればその完全クラス名を確認することもできます。

## タスクの結果

2つのJava関数が呼び出されるようマップが設定されます。[Test Run] (テスト実行)機能を使ってテストできます。このケースでは、次の結果が返されます。

```
[
   {
      "trimmed": "extra spaces before and after",
      "reversed": "hgfedcba"
   },
   {
      "trimmed": "extra spaces before",
      "reversed": "onmlkji"
   },
   {
      "trimmed": "extra spaces after",
      "reversed": "zyxwvutsrqp"
   }
]
```