> ## 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.

# Develop solutions

> Build and protect ABBYY FlexiCapture solutions for resale, securing Document Definitions, FlexiLayouts, and rule modules with developer licenses.

You can develop solutions based on FC for sale to third parties. A solution is a Document Definition and may include the following additional components:

* A FlexiLayout created in FlexiLayout Studio
* A rule module or a special data checking algorithm that uses rules to check data
* An export module or a custom export procedure

You can protect your solution from unlicensed use using a **Developer's License** and a unique solution identifier. Only users with a **User's License** will be able to make use of your solution.

## Protecting Document Definitions

1. Send a message describing your solution and listing its components to the [ABBYY office](https://www.abbyy.com/support/contacts/) in your region.
2. Depending on the type of the solution you are developing, the ABBYY office will provide you with unique identifiers for your solution's components, and in some cases a developer's license. The unique identifiers can be included in the source code of your solution's components and checked against the identifiers specified in a User's License.
3. Start FC, open the Document Definition editor, click **Document Definition Properties...** on the **Document Definition** menu in the editor, select the **General** tab and enter the unique solution identifier you received from the ABBYY office.
4. When selling your solution to a client, ask the ABBYY office for a User's License that includes the unique solution identifier. Without this license, your client will not be able to use the Document Definition or FlexiLayout to process documents.

## Protecting individual components

Any component can be developed and protected independently from a complete solution.

If you want to protect a FlexiLayout, you will need a Developer's License. For details, see the **Projects → Protection features for FlexiLayouts and Classifiers** article of ABBYY FlexiLayout Studio help.

Export modules and rule modules are integrated into a Document Definition using a script. You will not need a Developer's License to protect these modules. If your solution allows using modules with any Document Definitions, you can protect them by including a unique identifier check in the module's code.

<Note>
  We recommend developing an external library in the \*.dll format and integrating it with ABBYY FlexiCapture. This will make the source code unavailable to users.
</Note>

To do this, use the **IsModuleAllowedByLicense** method in your module to check whether the user's license allows using the module:

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

In the code sample above, **authorId** is the unique identifier of the developer, and **moduleName** is the unique identifier of the solution.

<Accordion title="Code samples">
  The following code sample illustrates how a method can check for a parameter in a license:

  ```
  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;
              }
          }
  ```

  You can call the license check method in an export script as follows:

  ```
  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, "");
              }
          }
  ```

  If the license does not include a module with the name **ModuleName** and the author **ABBYY RU**, exporting documents will result in an error.
</Accordion>
