> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ソリューションの開発

> 再販向けの ABBYY FlexiCapture ソリューションを構築して保護し、Developer's License を使用して Document Definition、FlexiLayout、ルールモジュールを保護します。

FC をベースに、第三者への販売を目的としたソリューションを開発できます。ソリューションは Document Definition であり、次の追加コンポーネントを含めることができます。

* FlexiLayout Studio で作成された FlexiLayout
* ルールを使用してデータをチェックするルールモジュール、または特殊なデータチェックアルゴリズム
* Export モジュール、またはカスタムのエクスポート手順

**Developer's License** と一意の識別子を使用すると、ライセンスのない使用からソリューションを保護できます。**User's License** を持つユーザーのみが、そのソリューションを利用できます。

<div id="protecting-document-definitions">
  ## Document Definition の保護
</div>

1. ソリューションの概要とそのコンポーネントの一覧を記載したメッセージを、お住まいの地域の [ABBYY office](https://www.abbyy.com/support/contacts/) に送信します。
2. 開発しているソリューションの種類に応じて、ABBYY office からソリューションのコンポーネント用の一意の識別子と、場合によってはDeveloper's Licenseが提供されます。これらの一意の識別子は、ソリューションのコンポーネントのソースコードに組み込み、User's License に指定された識別子と照合できます。
3. FC を起動し、Document Definition エディターを開きます。エディターの **Document Definition** メニューで **Document Definition Properties...** をクリックし、**General** タブを選択して、ABBYY office から受け取った一意の識別子を入力します。
4. ソリューションを顧客に販売する際は、一意の識別子を含む User's License を ABBYY office に依頼してください。このライセンスがないと、顧客は Document Definition や FlexiLayout を使用してドキュメントを処理できません。

<div id="protecting-individual-components">
  ## 個々のコンポーネントの保護
</div>

どのコンポーネントも、ソリューション全体とは独立して開発し、保護できます。

FlexiLayout を保護するには、Developer's License が必要です。詳しくは、ABBYY FlexiLayout Studio ヘルプの **Projects → FlexiLayouts and Classifiers の保護機能** の記事を参照してください。

Export モジュールとルール モジュールは、スクリプトを使用して Document Definition に統合されます。これらのモジュールを保護するために Developer's License は必要ありません。ソリューションでどの Document Definition でもモジュールを使用できる場合は、モジュールのコードに一意の識別子をチェックする処理を組み込むことで保護できます。

<Note>
  \*.dll 形式の外部ライブラリを開発し、それを ABBYY FlexiCapture に統合することをお勧めします。これにより、ユーザーはソースコードにアクセスできなくなります。
</Note>

そのためには、モジュール内で **IsModuleAllowedByLicense** メソッドを使用し、ユーザーの License でそのモジュールの使用が許可されているかどうかを確認します。

```
IsModuleAllowedByLicense ( authorId : string, moduleName : string ) : bool
```

上記のコード サンプルでは、**authorId** は開発者の一意の識別子、**moduleName** はソリューションの一意の識別子です。

<Accordion title="コード サンプル">
  次のコード サンプルは、メソッドでライセンス内のパラメーターを確認する方法を示しています。

  ```
  private bool CheckLicense()
         {
              if (FCTools.IsModuleAllowedByLicense("ABBYY RU", "ModuleName") == false)
              {
                  FCTools.ShowMessage("Your license does not allow the use of this module", true);
                  return false;
              }
              else
              {
                  // FCTools.ShowMessage("License is OK", false);
                  return true;
              }
          }
  ```

  次のように、エクスポート スクリプトでライセンス確認メソッドを呼び出せます。

  ```
  public void ExportDocument(ref IExportDocument docRef, ref FCTools FCTools )
          {
              if (CheckLicense() == true)
              {
                  …
                  exportImages(docRef, FCTools, exportFolder);
                      // export information about the document
                  exportDocInfo(docRef, sw);
                      // export fields
                  exportFields(docRef.Children, sw, "");
              }
          }
  ```

  ライセンスに **ModuleName** という名前で、著者が **ABBYY RU** のモジュールが含まれていない場合、ドキュメントをエクスポートするとエラーになります。
</Accordion>
