> For the complete documentation index, see [llms.txt](https://tldocs.gitbook.io/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tldocs.gitbook.io/documentation/framework/window-handling-object/input-output-arguments.md).

# Input/Output arguments

The Input and output arguments (sometimes referred as parameters) are used to specify the inputs and outputs for a module.&#x20;

{% hint style="info" %}
Outputs are generally used when dealing with response modules.
{% endhint %}

There is a strongly typed API to open modules and provide arguments.

In order to Add, Edit or Remove the the arguments for a module, you will find a button in the Menu of TimeLine Developer:

![](/files/-MhrcRmDIXH0n9T1wv15)

There you can Add, Edit or Remove the arguments. You must specify a name and type for your argument. Each type has a set of options (e.g. Default value, Nullable, Comment etc.) that you can set depending on your needs. These arguments can use standard .NET primitive types (int, string, double etc), DataTables, typed DataSets, typed DataSet rows, typed Enums or generic objects.

![](/files/-MhrdGLgM2G9f3VileZI)

This arguments editor changes the `TLAppContent.xml` file and generates the strongly typed `TimeLine.AppContent` assembly.

```markup
<WHO ID="whoItem" DLL="CustomProject.dll" Class="CustomProject.wndItemCustom" Descr="">
  <InputParameters>
    <Parameter Name="MyCustomArg" Type="System.Double" Default="3.3" IsNullable="True" />
  </InputParameters>
  <OutputParameters>
    <Parameter Name="MyOutputArg" Type="System.Int32" Default="333" />
  </OutputParameters>
</WHO>
```

Example of setting the input arguments:

```csharp
var input = new TimeLine.AppContent.WHO.ProdVorKalk2.Input
{
    BabTyp = Enums.BabTyp.Vorkalkulation,
    BabNr = row.id.ToInt(0),
    Kalk2Typ = Enums.Kalk2KopfTyp.Vorkalkulation
};

TimeLine.AppContent.Module.ProdVorKalk2.Open(input);
```

To use these input arguments use the WHO **`PostOpen`** method and check the **`this.RetrievalArguments`** property:

```csharp
public override void PostOpen()
{
    if (RetrievalArguments != null && RetrievalArguments.BelNr != 0)
    {
        var typ = RetrievalArguments.BelTyp;
    }

    base.PostOpen();
}
```

Example of using the output parameters:

```csharp
 var outputArgs = TimeLine.AppContent.Module.Item.OpenResponse(input);
 var output = outputArgs.MyOutputArg;
```

The output will be of type `void` or new `TimeLine.AppContent.WHO.[ModuleName].Output` of an tag is present in the `TLAppContent.xml` file.
