Custom Transform の作成

Transformer ステージには、一般的な各種データ変換を実行するトランスフォームがあらかじめ定義されています。これらのトランスフォームがニーズを満たさない場合は、Groovy を使用して Custom Transform スクリプトを記述できます。この手順では、Groovy を使用して、基本的な Custom Transform を作成する方法について説明します。Groovy に関する詳細なドキュメントは、groovy-lang.org でご覧いただけます。

  1. Enterprise Designer で、データフローに Transformer ステージを追加します。
  2. [Transformer] ステージをダブルクリックします。
  3. [追加] をクリックします。
  4. [全般] の下の [カスタム] をクリックします。
  5. [Custom Transform 名] フィールドに、作成するトランスフォームの名前を入力します。名前は一意でなければなりません。
  6. [スクリプト エディタ] をクリックします。

    このエディターは、コード自動入力、パレット リスト関数およびフィールドなど、トランスフォームの開発を容易にするさまざまな機能を備えています。

    タスク 手順

    関数を追加するには

    [関数] ウィンドウで、追加する関数をダブルクリックします。

    注: エディターに表示される関数は、Custom Transform スクリプトの記述を容易にするものです。これらの関数は、本来なら Groovy コードを数行書かないと実行できない処理を実行します。これらの関数は、標準的な Groovy 関数ではありません。

    データフロー フィールドから値を取得するには

    [入力フィールド] ウィンドウで、目的の入力フィールドをダブルクリックします。スクリプトに次の形式で追加されます。
    data['FieldName']

    例えば、CurrentBalance フィールドから値を取得する場合は、次の式が追加されます。

    data['CurrentBalance']

    データフロー フィールドの値を設定するには

    スクリプト エディタに次のコードを入力します。

    data['FieldName']=NewValue

    例えば、Day フィールドに、PurchaseDate フィールドに含まれる曜日を設定する場合:

    data['Day']=dayOfWeek(data['PurchaseDate'])

    この例では、dayOfWeek()関数を使用して、PurchaseDate フィールドの日付の値から曜日を取得し、その結果を Day フィールドに書き込んでいます。

    ヒント: [出力フィールド] ウィンドウで出力フィールドの名前をダブルクリックすると、スクリプトにフィールド参照を追加できます。

    数値データ タイプを使用して新しいフィールドを作成するには

    スクリプト エディタに次のコードを入力します。

    data['FieldName'] = new constructor;

    ここで、constructor は以下のいずれかです。

    java.lang.Double(number)
    Double データ タイプのフィールドを作成します。
    java.lang.Float(number)
    Float データ タイプのフィールドを作成します。
    java.lang.Integer(number)
    Integer データ タイプのフィールドを作成します。整数を指定することによって、新しい integer フィールドを作成することもできます。例えば、次の例では、値 23 を持つ integer フィールドが作成されます。
    data['MyNewField'] = 23;
    java.lang.Long(number)
    Long データ タイプのフィールドを作成します。

    例えば、Double データ タイプで値 23.10 を持つ、"Transactions" という新しいフィールドを作成するには、次のように指定します。

    data['Transactions'] = new com.java.lang.Double(23.10);

    date または time データ タイプを使用して新しいフィールドを作成するには

    スクリプト エディタに次のコードを入力します。

    data['FieldName'] = new constructor;

    ここで、constructor は以下のいずれかです。

    com.pb.spectrum.api.datetime.Date(year,month,day)
    date データ タイプのフィールドを作成します。例えば、December 23, 2013 は、次のようになります。
    2013,12,23
    com.pb.spectrum.api.datetime.Time(hour,minute,second)
    time データ タイプのフィールドを作成します。例えば、4:15 PM は、次のようになります。
    16,15,0
    com.pb.spectrum.api.datetime.DateTime(year,month,day,hour,minute,second)
    DateTime データ タイプのフィールドを作成します。例えば、4:15 PM on December 23, 2013 は、次のようになります。
    2013,12,23,16,15,0

    例えば、Date データ タイプで値 December 23, 2013 を持つ、"TransactionDate" という新しいフィールドを作成するには、次のように指定します。

    data['TransactionDate'] = new com.pb.spectrum.api.datetime.Date(2013,12,23);
    Boolean データ タイプの新しいフィールドを作成するには

    スクリプト エディタに次のコードを入力します。

    data['FieldName'] = true or false;

    例えば、IsValidated というフィールドを作成して false に設定するには、次のように指定します。

    data['IsValidated'] = false;
    新しいリスト フィールドを作成するには

    factory.create() メソッドを使用してレコードに新しいフィールドを作成し、次に leftShift 演算子 << を使用して新しいレコードをリスト フィールドに追加します。

    NewListField = []
    
    NewRecord = factory.create()
    NewRecord['NewField1'] = "Value"
    NewRecord['NewField12'] = "Value"
    ...
    NewListField << NewRecord
    
    NewRecord = factory.create()
    NewRecord['NewField1'] = "Value"
    NewRecord['NewField12'] = "Value"
    ...
    NewListField << NewRecord
    data['ListOfRecords'] = NewListField

    次の例では、"addresses” という新しいリスト フィールドを作成し、2 つの "address” レコードを含めています。

    addresses = []
    address = factory.create()
    address['AddressLine1'] = "123 Main St"
    address['PostalCode'] = "12345"
    addresses << address
    
    address = factory.create()
    address['AddressLine1'] = "PO Box 350"
    address['PostalCode'] = "02134"
    addresses << address
    data['Addresses'] = addresses

    また、レコードのリストではなく、個々のフィールドのリストを含んだ新しいリスト フィールドを作成することもできます。次の例では、"PhoneNumbers ” という新しいリスト フィールドを作成し、自宅と職場の電話番号を含めています。

    phoneNumbers = []
    phoneNumbers << data['HomePhone']
    phoneNumbers << data['WorkPhone']
    data['PhoneNumbers'] = phoneNumbers

    複数のフィールドを連結するには

    +記号を使用します。例えば、次の式は、FirstName フィールドと LastName フィールドを 1 つの値に連結し、その値を FullName フィールドに格納します。

    String fullname = data['FirstName'] + ' ' + data['LastName'];
    data['FullName']=fullname; 

    次の例には、2 つの入力フィールド (AddressLine1 と AddressLine2) があります。これらのフィールドは連結されて、出力フィールド Address に書き込まれます。

    address1 = data['AddressLine1']; 
    address2 = data['AddressLine2']; 
    data['Address']=address1+ ',' + address2; 

    フィールドをパースするには

    分割文字を特定した後、substringを使用してフィールドをパースします。次の例では、PostalCode フィールドが 6 文字以上の場合は、フィールドを 5 桁の ZIP コードと +4 番号に分割し、それぞれの番号を出力レコードの各フィールドに書き込みます。

    if (data['PostalCode'].length() > 5) 
    { 
    	 String postalCode = data['PostalCode']; 
    	 int separatorPosition = postalCode.indexOf('-'); 
    	 String zip = postalCode.substring(0, separatorPosition); 
    	 String plusFour = postalCode.substring( 
    			 separatorPosition + 1, 
    			 postalCode.length(); 
    	 data['Zip']=zip; 
     	data['PlusFour']=plusFour; 
    } 

    条件付き処理を実行するには

    ifまたはswitch 文を使用します。これらは、条件付き処理で最も一般的に使用される構造です。詳細については、groovy-lang.org を参照してください。

    この例では、AddressCity フィールドを最初の住所行に設定し、都市が Austin の場合は都市名も設定します。

    city = data['City']; 
    address1 = data['AddressLine1'] 
    if(city.equals('Austin')) 
    data['AddressCity']=address1 +',' + city; 

    ループ処理を実行するには

    forループを使用します。これは、唯一必要なループ構造です。ループ処理または構文の詳細については、groovy-lang.org を参照してください。

    データを拡張するには

    定数を定義し、連結文字+を使用します。例えば、次のスクリプトは、"Incorporated" という単語を FirmName フィールドに追加します。

    firmname = data['FirmName']; 
    constant = 'Incorporated'; 
    if(firmname.length() > 0)
    data['FirmName']=firmname + ' ' + constant;

    実行時に指定されたオプションにアクセスするには

    データフローで実行時オプションが有効になっている場合、次の構文を使用して、実行時にデータフローに引き渡される設定にアクセスできます。

    options.get("optionName")

    例えば、casing という名前のオプションにアクセスするには、Custom Transform スクリプトに次の式を含めます。

    options.get("casing")
  7. スクリプトの入力が完了したら、ウィンドウの "X" ボタンをクリックしてエディターを閉じます。
  8. [入力フィールド] フィールドで、トランスフォームを適用するフィールドを選択します。
  9. [出力フィールド] フィールドで、トランスフォームからの出力を書き込むフィールドを指定します。必要に応じて、新しいフィールドを定義できます。その場合は、[出力フィールド] フィールドの右にある [追加] ボタンをクリックします。
  10. 作業が完了したら、ウィンドウ下部の [追加] ボタンをクリックします。
  11. [OK] をクリックします。