# ユーザ定義ロジック

## ユーザ定義ロジックとは

ユーザ定義ロジックとは、複数のMapperロジックを一つのロジックとしてまとめ、ドキュメントMapperおよび変数Mapper上で共有できる機能です。
ユーザ定義ロジック自体への変更は配置したユーザ定義ロジックすべてに反映されるため、共通の変換処理を一カ所にまとめることができ、同じ処理を複数箇所に作成する方法に比べ、開発効率のアップおよび修正漏れの防止につながります。
ユーザ定義ロジックは、「グローバルユーザ定義ロジック」と「ローカルユーザ定義ロジック」の二種類が存在します。
グローバルユーザ定義ロジックは、すべてのプロジェクト・スクリプトから使用できます。プロジェクト間で共通のユーザ定義ロジックを使用することができ、特に大規模なスクリプト開発において、生産性の向上に貢献します。
プロジェクトとは別に管理されるため、サーバ移行のエクスポートで別のDataAnyware 2.0Serverに移行でき、共通ライブラリ的な使い方もできます。
すべてのプロジェクト・スクリプトで使用できるため、変更や削除の際の影響も大きくなります。そのような場合には、「参照元の検索」を使用し、影響範囲や配置先の簡単な確認が可能です。
ローカルユーザ定義ロジックは、一つのプロジェクト内でのみ使用できます。そのため、プロジェクト内でのみユーザ定義ロジックを共有したい場合や、プロジェクトと一括でユーザ定義ロジックを管理したい場合はローカルユーザ定義ロジックの使用が適切です。
ローカルユーザ定義ロジックをグローバルユーザ定義ロジックに(またはその逆も)移行することはできません。

## グローバルユーザ定義ロジック

1. 作成方法
2. 編集方法
3. マッピングキャンバスへの配置
4. 移動・複製方法
5. 参照元の検索
6. 削除方法
7. 仕様制限

### 作成方法

1. Mapperエディタを開き、ツールパレットの「グローバルユーザ定義」パレットの右クリックメニュー[追加]-[ユーザ定義ロジック]を選択します。
   グループを用いてユーザ定義ロジックを分類することもできます。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   追加 | ユーザ定義ロジック | 新しいグローバルユーザ定義ロジックを追加します。 |
   グループ | 新しいグループを追加します。 |

2. グローバルユーザ定義ロジック名を設定します。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   ユーザ定義ロジック名 | グローバルユーザ定義ロジック名を入力します。 |
   コメント | コメントを入力します。 |

3. 新しいグローバルユーザ定義ロジックが作成され、ツールパレット上に表示されます。

### 編集方法

1. ツールパレットの「グローバルユーザ定義」パレットにあるグローバルユーザ定義ロジックをダブルクリックしてグローバルユーザ定義エディタを開きます。
   マッピングキャンバスに配置したグローバルユーザ定義ロジックアイコンをダブルクリックして開くこともできます。
2. 入力元のルート要素(入力ハンドラ)の右クリックメニューで[ハンドラの新規作成]を選択します。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   ハンドラの新規作成 | 入力ハンドラを追加します。 |

3. 入力ハンドラ名を設定します。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   ハンドラ名 | 入力ハンドラ名を入力します。 |
   コメント | コメントを入力します。 |

4. ツールパレットからMapperロジックをキャンバスに配置し、グローバルユーザ定義ロジックのマッピングを作成します。

作成した入力ハンドラの右クリックメニュー[編集]から、ハンドラ名やコメントの編集ができます。
作成した入力ハンドラの右クリックメニュー[削除]から、ハンドラの削除ができます。
出力ハンドラは通常のロジックと同じように扱われるため、出力は一種類になります。そのため編集することはできません。

#### 注意事項

- グローバルユーザ定義ロジックを編集する場合、当該ロジックを参照しているスクリプトやサービスに影響を与えます。
  意図せず編集することを防ぐため、編集前に「参照元の検索」で影響範囲を確認したうえで、(当該ロジックを作成したユーザが別の場合は)編集内容について作成ユーザに確認してください。
- 入力ハンドラの変更(増減)は配置済みグローバルユーザ定義ロジックに反映されます。また、入力ハンドラを削除した場合、配置済みグローバルユーザ定義ロジックの入力ハンドラへのマッピングリンクが削除されます。
  そのため、入力ハンドラの変更前に「参照元の検索」で影響範囲を必ず確認してください。
- 入力ハンドラの変更(増減)は、それを行ったプロジェクトの配置済みグローバルユーザ定義ロジックにのみ即時反映されますが、それ以外のプロジェクトは、プロジェクトを開きなおし、Mapperを開いて変更を反映させる必要があります。
  「参照元の検索」で配置先を検索し、変更を反映させてください。
- グローバルユーザ定義ロジック自体の入力ハンドラ数と、配置済みグローバルユーザ定義ロジックの入力ハンドラ数が異なる場合、実行エラーになります。

### マッピングキャンバスへの配置

ツールパレットの「グローバルユーザ定義」パレットからグローバルユーザ定義ロジックをマッピングキャンバスにドラッグ&ドロップします。
入出力の型はすべて文字列型です。

### 移動・複製方法

#### 移動

1. ツールパレットの「グローバルユーザ定義」パレットにあるグローバルユーザ定義ロジックの右クリックメニュー[切り取り]を選択します。
2. 移動したい場所(グループまたは「グローバルユーザ定義」パレット上の空白部分)の右クリックメニュー[貼り付け]を選択します。
   同一の階層には移動できません。
   移動先に同名のグローバルユーザ定義ロジックが存在した場合、グローバルユーザ定義ロジック名の末尾に半角アンダースコアと番号が自動で付与されます。

#### 複製

1. ツールパレットの「グローバルユーザ定義」パレットにあるグローバルユーザ定義ロジックの右クリックメニュー[コピー]を選択します。
2. グループまたは「グローバルユーザ定義」パレット上の空白部分の右クリックメニュー[貼り付け]を選択します。
   複製先に同名のグローバルユーザ定義ロジックが存在した場合、グローバルユーザ定義ロジック名の末尾に半角アンダースコアと番号が自動で付与されます。

### 参照元の検索

参照元の検索とは、グローバルユーザ定義ロジックを使用しているMapperを検索する機能です。

1. ツールパレットの「グローバルユーザ定義」パレットにあるグローバルユーザ定義ロジックの右クリックメニュー[参照元の検索...]を選択します。
2. 「参照元の検索」画面が起動します。
   当該ロジック(右クリックメニューを開いたグローバルユーザ定義ロジック)を参照しているMapperの情報が表示されます。
   読み取り権限のないプロジェクトまたはサービスは表示されません。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   プロジェクト | プロジェクト | 当該ロジックを使用しているプロジェクト名を表示します。 |
   スクリプト | 当該ロジックを使用しているスクリプト名を表示します。 |
   Mapper | 当該ロジックを使用しているMapperのコンポーネントアイコン名を表示します。 |
   レイヤ | 当該ロジックを使用しているMapperのレイヤ名を表示します。 |
   コメント | 当該ロジックのコメントを表示します。 |
   サービス | サービス | 当該ロジックを使用しているサービス名を表示します。 |
   スクリプト | 当該ロジックを使用しているスクリプト名を表示します。 |
   Mapper | 当該ロジックを使用しているMapperのコンポーネントアイコン名を表示します。 |
   レイヤ | 当該ロジックを使用しているMapperのレイヤ名を表示します。 |
   コメント | 当該ロジックのコメントを表示します。 |

3. [Mapper一覧]の行を選択し、[Mapperを開く]ボタンを押下すると、当該ロジックを使用しているMapperエディタが起動します。その際、当該ロジックは選択状態になります。
   同じコメントが設定された同一のグローバルユーザ定義ロジックがひとつのレイヤに複数配置されている場合、当該ロジックすべてが選択状態になります。

### 削除方法

ツールパレットの「グローバルユーザ定義」パレットにあるグローバルユーザ定義ロジックの右クリックメニュー[削除]を選択します。
グローバルユーザ定義ロジックを削除すると、当該ロジックを参照しているスクリプトやサービスが実行できなくなります。「参照元の検索」で影響範囲を必ず確認のうえ、削除してください。
グローバルユーザ定義ロジックの削除を行った際に、当該ロジックを参照している配置済みのグローバルユーザ定義ロジックの削除がすぐに行われない場合があります。その場合、プロジェクトを開きなおしてください。

### 仕様制限

- アクセス制限の設定はできません。そのため、不用意な編集や削除をしないように注意してください。定期的にサーバ移行のエクスポートを行い、バックアップを取っておくことをお勧めします。
- マッピングキャンバスに配置したグローバルユーザ定義ロジックの入力ハンドラにマッピングがない場合、そのハンドラの入力値をnullとして扱います。
- グローバルユーザ定義ロジックまたはグループの追加・削除・名前変更は、それを行ったプロジェクトのみ即時反映されます。それ以外は、プロジェクトを開きなおしたタイミングで反映されます。
- グローバルユーザ定義ロジックの実体が存在しない場合、プロジェクトを開き、当該ロジックを参照するMapperを開いたタイミングで「ユーザ定義ロジックの読み込みエラー」ダイアログが表示され、配置済みのグローバルユーザ定義ロジックが削除されます。
- [ユーザ定義ロジック名]を変更しても、マッピングキャンバスに配置済みのグローバルユーザ定義ロジックのツールチップには反映されません。
  その場合、Mapperエディタを開き直してください。
- グローバルユーザ定義ロジック内で、ほかのユーザ定義ロジックを使用することはできません。

## ローカルユーザ定義ロジック

1. 作成方法
2. 編集方法
3. マッピングキャンバスへの配置
4. 削除方法
5. 仕様制限

### 作成方法

1. Mapperエディタを開き、ツールパレットの「ローカルユーザ定義」パレットの右クリックメニュー[追加]-[ユーザ定義ロジック]を選択します。
   グループを用いてユーザ定義ロジックを分類することもできます。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   追加 | ユーザ定義ロジック | 新しいローカルユーザ定義ロジックを追加します。 |
   グループ | 新しいグループを追加します。 |

2. ユーザ定義ロジック名を設定します。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   ユーザ定義ロジック名 | ローカルユーザ定義ロジック名を入力します。 |
   コメント | コメントを入力します。 |

3. 新しいローカルユーザ定義ロジックが作成され、ツールパレット上に表示されます。

### 変更方法

1. ツールパレットの「ローカルユーザ定義」パレットにあるローカルユーザ定義ロジックをダブルクリックしてMapperエディタを開きます。
   マッピングキャンバスに配置したローカルユーザ定義ロジックアイコンをダブルクリックして開くこともできます。
2. 入力元のルート要素(入力ハンドラ)の右クリックメニューで[ハンドラの新規作成]を選択します。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   ハンドラの新規作成 | 入力ハンドラを追加します。 |

3. 入力ハンドラ名を設定します。

   ##### 項目の説明

   項目名 | 説明 | 備考
   --- | --- | ---
   ハンドラ名 | 入力ハンドラ名を入力します。 |
   コメント | コメントを入力します。 |

4. 4.ツールパレットからMapperロジックをキャンバスに配置し、ローカルユーザ定義ロジックのマッピングを作成します。

入力ハンドラの増減はマッピングキャンバスに配置したローカルユーザ定義ロジックアイコンにも反映されます。入力ハンドラが削除された場合には結びついていたリンクも同時に削除されます。
出力ハンドラは通常のロジックと同じように扱われるため、出力は一種類になります。そのため編集することはできません。
作成した入力ハンドラの右クリックメニュー[編集]から、ハンドラ名やコメントの編集ができます。
作成した入力ハンドラの右クリックメニュー[削除]から、ハンドラの削除ができます。

### マッピングキャンバスへの配置

ツールパレットの「ローカルユーザ定義」パレットからローカルユーザ定義ロジックをマッピングキャンバスにドラッグ&ドロップします。
入出力の型はすべて文字列型です。

### 削除方法

ツールパレットの「ローカルユーザ定義」パレットにあるローカルユーザ定義ロジックの右クリックメニュー[削除]を選択します。
ローカルユーザ定義ロジックの削除を行った際に、当該ロジックを参照している配置済みのローカルユーザ定義ロジックの削除がすぐに行われない場合があります。その場合、プロジェクトを開きなおしてください。

### 仕様制限

- ローカルユーザ定義ロジックの内容を変更した場合、プロジェクト内のスクリプトに配置したすべてのローカルユーザ定義ロジックに変更が反映されます。そのため、スクリプト数が多いとプロジェクトの保存に時間がかかる場合があります。
- ローカルユーザ定義ロジックの実体が存在しない場合、プロジェクトを開き、当該ロジックを参照するMapperを開いたタイミングで「ユーザ定義ロジックの読み込みエラー」ダイアログが表示され、配置済みのローカルユーザ定義ロジックが削除されます。
- [ユーザ定義ロジック名]を変更しても、マッピングキャンバスに配置済みのローカルユーザ定義ロジックのツールチップには反映されません。
  その場合、Mapperエディタを開き直してください。
- ローカルユーザ定義ロジックを含むMapperを別プロジェクトのスクリプトにコピーすることはできません。同様に、そのMapperを含むスクリプトを別プロジェクトにコピーすることはできません。
  ローカルユーザ定義ロジックは作成されたプロジェクト内でのみ使用してください。
- ローカルユーザ定義ロジック内で、ほかのユーザ定義ロジックを使用することはできません。
- マッピングキャンバスに配置したローカルユーザ定義ロジックの入力ハンドラに同一のローカルユーザ定義ロジックをマッピングした場合、マッピングされていない入力ハンドラが存在すると予期せぬ処理結果になることがあります。
  すべての入力ハンドラにマッピングを行ってください。