関数とは、コード内のロジックに基づいて、アプリケーション内で実行される一連のステートメントです。Javaは広く使用されているプログラミング言語です。Javaの導入により、CreatorアプリケーションでJavaプログラミングに固有の概念を実装することができます。
Java を使用して新しい機能を作成する
新しいJava関数を作成するには:
-
「ワークフロー」をクリックして、ワークフローダッシュボードにアクセスしてください。
-
「機能」タブをクリックしてください。
-
「新しい機能」ボタンをクリックしてください。作成ページが表示されます。
-
「関数名」を入力してください。これは関数を呼び出すための識別子として使用されます。関数に有意義な名前を空白なしで指定してください。
-
「Java」をスクリプト関数の言語として選択してください。
- 引数を指定します。
- 「作成関数」ボタンをクリックしてください。ビルダーが表示されます。
-
今、関数に必要なJavaコードを追加し、完了をクリックします。
- この機能は、ワークフローダッシュボードの機能の下にリストされます。
注 :
- 名前空間 : Java関数の名前空間は デフォルト名前空間 です。
- 戻り値 : Java関数の戻り値は コレクションデータ型 のみとなります。
- 引数 : Java関数は 文字列 型の値のみを受け付けます。
- Java関数は作成後に名前を変更することはできません。
Java関数における引数とパラメータ
おなじようにデリュージ機能にも、Javaでは関数が実行されるのに応じて引数を指定する必要があります。引数は、関数を実行する際に渡されるインスタンスです。Java関数を作成する際には、引数を指定できます。後に同じ関数にさらに引数を追加する必要が生じた場合は、ビルダー内の「Function Properties」(「Settings」アイコンをクリック)にアクセスできます。
プログラムを実行するには、Java関数内でパラメータを定義する必要があります。パラメータは、引数の値に割り当てられる変数です。それは、Delugeから渡された引数値をJava関数内で受け取るためのコンテナとして機能します。
サンプル機能
この関数は、Java関数を使用して従業員ごとの給与を計算し、Delugeを使用してレコードを更新するために作成されました。
fetchRecordsは、{employe_id:勤務時間}の形式でEmployee_Detailsフォームの各レコードを含むコレクションデータを作成します。 データを埋めた後、文字列形式で 'calculateSalary' java関数に渡します。
Java関数はEmployee_Detailsマップを受け取り、各従業員IDの勤務時間に基づいて給与を計算し、{'employe_id : salary }形式のpayDetailsとしてその詳細を別のマップとして渡します。
Java関数の戻り値をdeluge関数内の「payCalc」コレクションデータに割り当てました。payCalcの値を繰り返し処理することで、「Weekly_Pay」フィールドに給与詳細を更新することができます。
void fetchRecords()
{
recDetails = Map();
for each i in Employee_Details[ID != 0]
{
recDetails.put(i.Emp_ID,i.Weekly_Hours);
}
payCalc = Collection();
payCalc = thisapp.calculateSalary(recDetails.toString());
updateDetails = payCalc.get('output').toMap();
keys = List();
keys = updateDetails.keys();
for each i in keys
{
info i;
x = Employee_Details[Emp_ID == i];
x.Weekly_Pay=updateDetails.get(i);
}
}
void fetchRecords()
{
recDetails = Map();
for each i in Employee_Details[ID != 0]
{
recDetails.put(i.Emp_ID,i.Weekly_Hours);
}
payCalc = Collection();
payCalc = thisapp.calculateSalary(recDetails.toString());
updateDetails = payCalc.get('output').toMap();
keys = List();
keys = updateDetails.keys();
for each i in keys
{
info i;
x = Employee_Details[Emp_ID == i];
x.Weekly_Pay=updateDetails.get(i);
}
}
void fetchRecords()
{
recDetails = Map();
for each i in Employee_Details[ID != 0]
{
recDetails.put(i.Emp_ID,i.Weekly_Hours);
}
payCalc = Collection();
payCalc = thisapp.calculateSalary(recDetails.toString());
updateDetails = payCalc.get('output').toMap();
keys = List();
keys = updateDetails.keys();
for each i in keys
{
info i;
x = Employee_Details[Emp_ID == i];
x.Weekly_Pay=updateDetails.get(i);
}
}
void fetchRecords()
{
recDetails = Map();
for each i in Employee_Details[ID != 0]
{
recDetails.put(i.Emp_ID,i.Weekly_Hours);
}
payCalc = Collection();
payCalc = thisapp.calculateSalary(recDetails.toString());
updateDetails = payCalc.get('output').toMap();
keys = List();
keys = updateDetails.keys();
for each i in keys
{
info i;
x = Employee_Details[Emp_ID == i];
x.Weekly_Pay=updateDetails.get(i);
}
}
import com.zoho.cloud.function.Context;
import com.zoho.cloud.function.basic.*;
import org.json.*;
import org.json.JSONObject;
import com.zohocreator.test.EmployeeSalary;
public class calculateSalary implements ZCFunction
{
public void runner(Context context, BasicIO basicIO) throws Exception
{
try
{
String dataMap = (String)(basicIO.getParameter('recDetails')); // Retrieve arguments
JSONObject dataObject = new JSONObject(dataMap); // Converting string arguments to JSONObject
EmployeeSalary salary = new EmployeeSalary(); // creating object for 'EmployeeSalary' class
JSONObject payDetails = salary.calculate(dataObject); //calling calculate method in 'EmployeeSalary' class
basicIO.write(payDetails.toString()); // Return data back to deluge script
}
catch(Exception e)
{
context.log(e.getMessage());
}
}
}
注意 :
- デフォルトでは、関数とクラス名は同じであり、変更してはいけません。
- 実行はrunnerメソッドから開始され、削除してはいけません。
- ユーザーが新しいクラスや関数を書きたい場合は、runnerメソッドの後に書き、runnerメソッドから呼び出す必要があります。
デリージスクリプト内でJava関数を呼び出すには、下の画像で示されている文を使用します。 この例では、「payCalc = thisapp.calculateSalary(recDetails.toString);」は、コレクションデータ値を含むJava関数を参照しています。
コレクションデータ型
Java関数は文字列の値のみを返します。プロセスが文字列データで満足している場合は、それを使用して進めることができます。整数などの他のデータ型が必要な場合は、返り値にコレクションデータ型を割り当てることができます。これは、Java関数を使用して導出された値でレコードを更新するためなど、さらなる処理に使用することができます。例えば、Java関数で計算された給与は文字列の値を返します。割り当てられたコレクションデータ値をDelugeで使用すると、これらの文字列値は整数値に変換され、アプリケーション内のレコードを更新するために使用されます。
このコレクションオブジェクトは、この関数をフォームにあるすべてのレコードに対してループを実行するのに使用できます。コレクションオブジェクトには、従業員ID(キー)と時間(値)が含まれます。フォームに20レコードがある場合、20つが1つのコレクションオブジェクトになり、20レコードのJava関数を1つの関数呼び出しで実行できます。
値を取得する
basicIO.getParameter文を使用することで、引数として格納されている値を取得することができます。引数として指定された値は、値を処理して望む結果を得るためのJava関数に渡す必要があります。この場合、Hours WorkedとSalaryが引数です。getParameter文を使用して賃金を計算するために、Java関数に値が渡されます。
出力
デフォルトでは、Java関数の出力値は「Collection Value」となります。この出力には2つのキーがあります:
- 出力キーには、出力データの値があります。
- ログキーには、ステートメントを使用してユーザーがプリントするログデータがあります。
出力キーには以下が含まれます:
- context.log:ログを出力するために使用されるステートメントです。Java関数の出力マップの「log」キーに追加された値を取得できます。context.logの情報はデバッグのために使用されます。
- basicIO.write:計算の結果をCreatorからこの関数が呼び出された場所に送信するために使用されるステートメントです。Java関数の出力マップの「output」キーに追加された値を取得できます。
config.jsonとライブラリ
覚えておくべきこと
- ライブラリには、Jarファイルやパッケージのみをアップロードできます。
- 全てのファイルの合計アップロード制限は10MBです。
- リクエストとレスポンスのペイロードのサイズは、それぞれ1MBまでとなります。
- エディタ内のファイルサイズは1MBまでとなります。
- Java関数への引数の最大数は20個までとなります。
- 1つのDelugeスクリプト内で関数を5回まで呼び出すことができます。
- 関数呼び出しから40秒以内にレスポンスを受け取る必要があります。それ以上の場合、実行が失敗します。
-
次のJARが組み込みで提供されています:
- commons-io-2.4.jar
- json.jar (org.json)
- 現在、DSファイルではこの機能をサポートしていません。インポート/エクスポート/バックアップ/複製操作中にはクラウド関数はキャプチャされません。代わりに、同じ名前の空のDeluge関数を使用して、エラーを回避するために置換されます。
- system.out.println 文は、クリエータークラウド関数内では機能しません。