# User Interface

The default Linx Designer layout, in Light Mode, appears like this:

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-79644624861883715cdcc9eb2dab02c7c09f5783%2Fui.png?alt=media" alt="layoutoflinxdesigner"><figcaption></figcaption></figure></div>

1. Menu bar
2. Solution Explorer panel
3. Design canvas
4. Plugins panel
5. Properties panel
6. Definition panel

The key elements of the user interface are described in the sections below.

***

## Designer theme

To select your preferred Designer theme, i.e. *Light* or *Dark* mode, go to **Files** on the Menu bar, then select **Configuration**.

***

## Panel layout

The Linx Designer panel layout can be customized by moving panels around at will.

Each panel contains the following features, accessed by clicking on the respective icons that are positioned in the top-right corner of the panel:

* **Float Window**

  <div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-90dcc7ecfc74c80966b14a4e2e6b1c8d1f3c1a11%2Ffloat.png?alt=media" alt="Float Window Icon" height="30" width="30"><figcaption></figcaption></figure></div>

  \
  To open the panel in its own window which could be maximized for ease of use.
* **Dock Window**

  <div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-f621a74566232081c52b9aa0212ac80833d2958c%2Fdock.png?alt=media" alt="Dock Window Icon" height="30" width="30"><figcaption></figcaption></figure></div>

  \
  To dock an open or floating panel window to its original position.
* **Auto Hide**

  <div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-541df4acb3c83458df207072ceaa11cbd656d649%2Fautohide.png?alt=media" alt="Auto Hide Icon" height="30" width="30"><figcaption></figcaption></figure></div>

  \
  To “auto hide” a panel so that only a tab name will display. Click on the tab name to have the panel contents displayed. Click on the Auto Hide icon to revert back to the default panel display.
* **Hide**

  <div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-04525c5dccdbb6d3aaf6ad902e49a2880fcd7a23%2Fhide.png?alt=media" alt="Hide Icon" height="30" width="30"><figcaption></figcaption></figure></div>

  \
  To hide or “close” a panel. (To have the panel displayed again in its default position, go to Windows on the top menu bar and select the checkbox of the relevant panel.)

***

## Solution Explorer

The Solution Explorer panel displays the Functions, Services, Custom Types, and Folders that are included in your Solution.

The details of each component listed in the Solution Explorer are maintained in the design canvas (center of interface) and in the Properties section. Click on the relevant component to access its properties and to view on the design canvas the Functions or Types that have been added to the component's logic flow.

***

## Plugins

The plugins that have been added to a Solution are listed in the *Plugins* panel.

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-19d5b2efeea40a2518a87d6f7186cd22fae2da9e%2Fplugins.png?alt=media" alt="Plugins Panel"><figcaption></figcaption></figure></div>

Drag-and-drop the required plugin element (Function or Type) onto the design canvas, or in the case of a Service, onto the Solution Explorer panel.

### Add a Plugin

Click the **Add Plugins** button, then click the **Add** button of the relevant plugin (see below).

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-5cfbe85a126092f4d995b30d4335d2665c039c57%2Fplugins1.png?alt=media" alt="Add Plugins Example"><figcaption></figcaption></figure></div>

### Maintain Plugins

Each Plugin will have relevant options available to:

1. get more information on the plugin
2. remove the plugin
3. upgrade the plugin

These options are displayed next to each plugin name, as shown below:

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-fe9175132c88306ace10ef68ac78467f7e59d552%2Fpluginsicons.png?alt=media" alt="Plugin Options Icons"><figcaption></figcaption></figure></div>

{% hint style="info" %}

* The upgrade option will only display when an upgrade is available for the plugin.
* To access the options for removing a plugin or for getting more information, hover over the plugin name to display the option icons.
  {% endhint %}

#### Update

Click the *Update* link.

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-0b82cdbcc046bf2adecca611d0867d84d4aed4a5%2Fupdateplugin1.png?alt=media" alt="Update Link"><figcaption></figcaption></figure></div>

Then click the *UPDATE ALL* button or the specific plugin's *UPDATE* button.

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-63da4672631fdbc4df0b807cc7b7502221d218b6%2Fupdateplugin2.png?alt=media" alt="Update Plugin Button"><figcaption></figcaption></figure></div>

### Find plugin references

You can locate where a function, type, or service, e.g., the *CommandLine* function, is being used in your solution by making use of the "Find References" functionality. Right-click on the relevant function, type, or service, then click on **Find References**.

When executing this command, you will get a list of all the places in the solution where this function, type, or service is being used. You can navigate to a usage instance by double-clicking on the search result.

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-9374206daf9aea47285c312ac15c7388d1fd8291%2Ffindpluginreferences.png?alt=media" alt="Find Plugin References"><figcaption></figcaption></figure></div>

***

{% embed url="<https://youtu.be/QhDudwn1VYA>" %}

***

## Design canvas

The design canvas, in the center of the interface, is where all the Functions and Types that form part of a Solution are placed. Once a component is placed on the canvas, its properties can be set to determine the way in which it will function.

***

## Properties

The details displayed in the Properties section are dependent on the associated component.

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-9a2b69d11b43e4a52b1eaf21775c6116997154cd%2Fproperties.png?alt=media" alt="Properties Example"><figcaption></figcaption></figure></div>

A typical layout would include:

* Heading, indicating the name of the Plugin in brackets
* Name – enter a descriptive name
* Component-specific properties – enter or select relevant variables for the component to work as required
* Property Help – click on the property name to have a brief description of that property displayed in the Property Help section at the bottom of the Properties panel.

***

## Settings

Settings are values that are read-only at run-time. Settings can also be configured on Linx Application Server, either as additional settings to what was configured in Linx Application Designer, or to override those settings.

Settings are typically used for variables that are static, e.g., access credentials, file paths, email settings, etc.

### Add a Setting

1. Click **Settings** on the toolbar
2. On the main canvas, a Settings tab is created. Enter the details of the Settings by entering the setting's *Name*, select the *Type* (e.g., String, Integer, List, etc.), and add an optional *Value*.
3. Select the *Secret* checkbox to mask the value, if required.

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-ff5f55981632e04ce711ec6847abe73399f0f2ca%2Fsettings.png?alt=media" alt="Setting Example"><figcaption></figcaption></figure></div>

#### Secret settings

When a Setting is marked as "secret," it ensures that any personal or sensitive data stored in that Setting will remain secure, e.g., passwords, usernames, ID numbers, etc.

{% hint style="warning" %}
**Important:**

* When a Setting is marked as "secret," Linx will not export the value of the setting from the Designer to the Server when the Solution is deployed. On the Server, the Setting value will be blank.
* For "secret" Settings, you must provide a value for the Setting on the Server before starting your Solution.
  {% endhint %}

***

#### Using a Setting's value inside another Setting

To reference an existing Setting's value inside another Setting's value, add the existing value inside curly brackets to the new setting's value, e.g., *{var1}xyz*, as shown below:

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-a59bb9ff55bacd107342221cfbab02dc8bce3797%2Fsettinginsetting.png?alt=media" alt="Setting Inside Setting Example"><figcaption></figcaption></figure></div>

In the above example, *var2* resolves to a value of "*abcxyz*". Hover your cursor over the setting to view the resolved value in the displayed tooltip.

### Using a Setting

Settings are available for use when setting up Properties and Expressions.

Properties

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-d658c84093e63919672023b24b609ff7adadb171%2Fsettings2.png?alt=media" alt="Custom Type Example"><figcaption></figcaption></figure></div>

Expression Editor

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-4740658cb8dc07da9e2f567503229e778ec2619d%2Fsettings3.png?alt=media" alt="Expression Editor Example"><figcaption></figcaption></figure></div>

{% hint style="info" %}
**Note:** When a Solution is deployed to Linx Application Server, the settings are available to be edited from within Linx Application Server. In this case, there is no need to edit the settings within Linx Application Designer and to redeploy the Solution to Linx Application Server.
{% endhint %}

***

{% embed url="<https://youtu.be/QhDudwn1VYA>" %}

***

## Types

Types enable you to create your own type in Linx by defining its structure. These are typically complex types, consisting of a variety of other types and sub-types.

### Add a Type

1. Click **Type** on the toolbar
2. In the Properties section, open the Properties Editor \[...] to add the fields for the Type.
3. For each field, enter the field's *Name*, select the *Type* (e.g., String, Integer, List, etc.), and add an optional *Value*.
4. Click the Save button

### Import a Type

1. Click **Solution** on the menu bar
2. Click on **Import Type**
3. In the Import Editor, either browse for a file or paste JSON, JSON schema, XML, or XML schema data.
4. Click the Create button

### Examples

#### A simple Type

An example of a simple Type is the one shown in the screenshot below, called 'Article'. It consists of various String-type fields (author, publish\_date, summary, and title).

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-adbc19fe65f5fe407430dd226efbe4e8daed5b5f%2Fcustomtype1.png?alt=media" alt="Custom Type Example - Article"><figcaption></figcaption></figure></div>

#### A complex Type

An example of a complex Type is shown below, called 'Article\_List'. This Type consists of one field ('Articles'), which references another Type (called 'Article', which is defined in the simple Type example above) that contains a set of fields. The fields contained in the referenced Type ('Article') also become part of the complex Type ('Article\_List').

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-7a95b6449b3df049cda47d56174dabb986f332ea%2Fcustomtype2.png?alt=media" alt="Custom Type Example - Article_List"><figcaption></figcaption></figure></div>

#### More examples

A Type might be a *'Customer'*. Such a customer would probably have properties like *Name*, *Address*, and a *list of purchases*. When you create this type, you will want to specify that the type has a string field called 'Name', another string field with an *address*, and a *list of purchases*. A *purchase* is also a type, and you will need to create it first. It may consist of a *purchase date*, an *amount*, and a *product*. So, you will also need to create a *purchase* type with a date type called *'purchase date'*, a decimal called *'purchase amount'*, and a string called *'Product Name'*. You have now created a complex type for storing a customer and all related purchases.

When you point this type at a database query result that has the same fields, Linx can automatically populate the complex type directly from your SQL query.

***

{% embed url="<https://youtu.be/LwHlp1UAwOk>" %}

***

## Definition

When a specific function is selected, those variables for which output results could be retrieved by the function are displayed in the Definition section.

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-9abf7687790740da8fff27d6359d31b917359f18%2Fdefinition.png?alt=media" alt="Definition Section Example"><figcaption></figcaption></figure></div>

***

## Deploy a Solution to Linx Server

1. Click **Deploy** on the toolbar.
2. Select the server to deploy to, or if no server has been added yet, click **Add a Server** or click **Get a Trial Server**.
3. **Add a Server** – provide the details of the server:
   * Server Configuration Name
   * Server URL
   * User
   * Password
4. If a server has already been set up, a screen similar to the one below will display. From here, either select the server and click the **Deploy & Open Server** button or the **Deploy** button; or click **Add Server** to add the details of a different server to deploy to.

<div align="left"><figure><img src="https://3338214469-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1nxDeDH8GVCXb0XelqGm%2Fuploads%2Fgit-blob-61a13c87c1e577171c326d714454a2b2fe2e311b%2Fdeploy.png?alt=media" alt="Deploy from Designer Example"><figcaption></figcaption></figure></div>
