Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
An array is a data structure that contains several variables of the same type. The variables are treated as a single collection. Although you can already create arrays in C/AL, you can now use arrays from the .NET Framework. Choosing whether to use a C/AL array or a .NET Framework array depends on how you intend to use the data.
| For this scenario | Use this array type |
|---|---|
| Your C/AL code uses .NET Framework interoperability extensively, and you must share the array among many methods. | .NET Framework array |
| Your C/AL code mostly uses basic C/AL types and does not interoperate with the .NET Framework. | C/AL array |
To use a .NET Framework array in C/AL, you must use the System.Array class in the .NET Framework class library, which is the class from which all arrays inherit. When interfacing with an array in C/AL, you must use the following methods of the System.Array class to create and access elements in the array.
| Method | Description |
|---|---|
| CreateInstance | Creates a new array instance that is passed to a method or property. |
| SetValue | Sets a value in an array element. |
| GetValue | Gets a value from an array element |
Many .NET Framework classes implement these methods. Therefore, they are available for you to use in C/AL code. If you are writing your own .NET Framework code and want to use it in Dynamics NAV, then you must implement these methods yourself.
In C/AL, some .NET Framework data types, such as strings, integers, and decimals, are automatically converted to C/AL types. If a .NET Framework array contains these data types, then you create an assembly that contains methods that return the information about the data types and then reference the assembly in the C/AL code. This concept is illustrated in the following examples.
Example: Using Native C/AL Data Types in a .NET Framework Array
The following example shows how you can use a .NET Framework array for an integer data type.
In Visual Studio, create a C# class library project called NavInteropHelper that contains a method that returns the information about the integer type as follows:
namespace Microsoft.Dynamics.Nav.NavInteropHelper; { public class WrapInt32 { public static Type GetTypeOfInt32() { return typeof(Int32); } } }Build the project, and then copy the assembly to the Add-ins folder of the Microsoft Dynamics NAV Windows client installation folder. By default, the path of the installation folder is C:\Program Files\Microsoft Dynamics NAV\110\RoleTailored Client or C:\Program Files (x86)\Microsoft Dynamics NAV\100\RoleTailored Client.
In the development environment, open a Dynamics NAV object, open the C/AL code, and then create the following C/AL variables.
Variable name DataType SubType varDotNet DotNet 'NavInteropHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.Microsoft.Dynamics.Nav.NavInteropHelper.WrapInt32 varArray DotNet 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array arraySize Integer i Integer alData Integer On a trigger of the Dynamics NAV object, add the following C/AL code to create, fill, and implement the array.
// Sets the number of elements in the .NET Framework array. arraySize := 10; // Creates an instance of the .NET Framework array that contains the Int32 type. varArray := varArray.CreateInstance(varDotNet.GetTypeOfInt32(), arraySize); // Clears the object instance because it is no longer used. clear(varDotNet); // Sets the data in the array. FOR i := 0 TO (arraySize -1) DO varArray.SetValue(i+100,i); // Gets the array data and validates the content. The object that is returned by // GetValue is automatically converted into a C/AL integer in the assignment. FOR i := 0 TO (arraySize -1) DO BEGIN alData := varArray.GetValue(i); if alData <> (i+100) then error('Invalid array data in element %1, expected %2, actual %3', i, i+100, alData); END;
Example: Using User-Defined Classes in a .NET Framework Array
This example shows how you can use a .NET Framework array that includes user-defined classes.
In Visual Studio, create a C# class library project called NavInteropHelper that contains methods that return the information about the types as follows.
namespace Microsoft.Dynamics.Nav.NavInteropHelper; { public class WrapInt32 { public int Data { get; set; } public WrapInt32(Int32 value) { Data = value; } } }Build the project, and then copy the assembly to the Add-ins folder of the Microsoft Dynamics NAV Windows client installation folder. By default, the path of the installation folder is C:\Program Files\Microsoft Dynamics NAV\110 RoleTailored Client or C:\Program Files (x86)\Microsoft Dynamics NAV\100 RoleTailored Client.
In the development environment, open a Dynamics NAV object, open the C/AL code, and then create the following C/AL variables.
Variable name DataType SubType varDotNet DotNet 'NavInteropHelper, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.Microsoft.Dynamics.Nav.NavInteropHelper.WrapInt32 varArray DotNet 'mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.System.Array arraySize Integer i Integer alData Integer On a trigger of the Dynamics NAV object, add the following C/AL code to create, fill, and implement the array.
// Sets the number of elements in the .NET Framework array. arraySize := 10; // Creates an instance of the .NET Framework object so the type information can be retrieved. varDotNet := varDotNet.WrapInt32(1); // Creates an instance of the .NET Framework array that contains the user-defined type. varArray := varArray.CreateInstance(varDotNet.GetType(), arraySize); // Clears the object instance because it is no longer used. clear(varDotNet); // Sets data in the array. FOR i := 0 TO (arraySize -1) DO BEGIN varDotNet := varDotNet.WrapInt32(i+100); varArray.SetValue(varDotNet,i); END; // Gets array data and validates content. FOR i := 0 TO (arraySize -1) DO BEGIN varDotNet := varArray.GetValue(i); // Gets the integer value from the .NET Framework object using the Data property. alData := varDotNEt.Data; if alData <> (i+100) then error('Invalid array data in element %1, expected %2, actual %3', i, i+100, alData); END;
See Also
Extending Microsoft Dynamics NAV Using Microsoft .NET Framework Interoperability