# Return

Before *Linx 6.4.0*, a SetValue function was needed to set $.Result and return a result from a function or service.

In *Linx 6.4.0 and higher* there is a **Return** function in the Linx plugin that can be used for this.

{% hint style="info" %}
**Note:**

With the introduction of the Result function:

* The $.Result option has been removed from all dropdowns throughout the Linx Designer.
* The result of a function can only be set by using the new Return function.
  {% endhint %}

***

### How it works <a href="#how-it-works" id="how-it-works"></a>

A **Return** function must be added to the relevant function or service at the point in the process where the function/service is to be exited and a potential value returned.

If a function has been configured to have a result, but it contains no **Return** function the Linx Designer will show a validation message that reads: "Not all code paths return a result."

When this validation is shown, you need to drag a **Return** function from the Linx plugin into your applicable function. Usually, the **Return** function will be the last item in your execution sequence.

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

***

### Solution Upgrades <a href="#solution-upgrades" id="solution-upgrades"></a>

While upgrading solutions to *Linx 6.4.0* will affect the execution sequences contained in your functions, the impact should not be significant. However, to be completely safe, we recommend that you make a backup of your solutions before you upgrade them.

#### Automatic Upgrades <a href="#automatic-upgrades" id="automatic-upgrades"></a>

Upon opening older solutions in Linx 6.4.0, most of the functions they contain will be automatically upgraded. This upgrade will result in some of the components being converted. However, the upgrade will not affect the logic of your solution and does not require any intervention from you.

#### Manual Upgrading <a href="#manual-upgrading" id="manual-upgrading"></a>

In some cases Linx cannot perform an automatic upgrade. In such cases the validation messages below will be shown:

* “Not all code paths return a result.”
* “Cannot locate reference(s) \[$.Result]”

Double-clicking on the second validation message will guide you directly to the **SetValue** function that needs to be manually replaced.

#### Nullable properties on result types <a href="#nullable-properties-on-result-types" id="nullable-properties-on-result-types"></a>

Nullable properties on result types, which are often used in API related functions and services, e.g. with RESTHost, will produce validation errors when the original **SetValue** functiuon was not at the end of the execution sequence.

It is important to remember that when there is a result that is returned by a function (at the end of the execution sequence), then it *must* be handled by a **Return** function.

The way to fix this type of upgrade issue depends on your actual scenario. You may want to replace all **SetValue** functions with **Return** functions, or you may want to add a **Return** function at the end of the execution sequence to handle the function's returned output value.

***
