MICROSOFT.NET INTEROPERABILITY FOR BEGINNERS Vjekoslav Babic (Fortempo)

Post on 26-Dec-2015

242 views 7 download

Tags:

transcript

MICROSOFT .NET INTEROPERABILITY

FOR BEGINNERSVjekoslav Babic

(Fortempo)

Vjekoslav Babićconsultant, trainer, blogger, author

Blog: vjeko.comE-mail: vjeko@vjeko.com

Author of many How Do I… videos for MSDN and PartnerSource for NAV 2013 and NAV 2013 R2

Co-author of “Implementing Microsoft Dynamics NAV 2009” book

ABOUT ME

HOW USERS SEE PROGRAMMERS

HOW PROGRAMMERS SEE USERS

NAV PROGRAMMER PROGRAMMING IN C/AL

NAV PROGRAMMER PROGRAMMING IN .NET

A lot of the time?

WHAT DO PROGRAMMERS REALLY DO?

SO, WHAT DO PROGRAMMERS DO A LOT OF THE TIME?

UNFORTUNATELY – IT IS OFTEN A WRONG WHEEL

WHAT ARE WE GOING TO DO TODAY…Managing strings and textManaging dates, times, and numbersAccessing operating system, file system, and the environmentManaging data, arrays, collections, and streams

C/AL.NET

THE DotNet DATA TYPEVariables of type DotNet give access to .NET Framework

Each DotNet variable specifies:• Assembly• Type

DotNet gives access to:• Methods• Properties• Constructors• Enumerations

System.StringA powerful class to handle text information.Maps fully and directly to Text data type in C/AL.

System.Text.StringBuilderA very powerful class to handle large text data efficiently.

CONSTRUCTORSCreate an instance of a class.

There is no equivalent in C/AL to constructors.CREATE function for instantiating automation objects is the closest

Typically used to:• Initialize the default state of an object• Execute default initialization logic• Limit instantiation

SYNTAX OF A CONSTRUCTORThe name of the constructor always matches the class name.

This probably looks confusing in C/AL:StringBuilder := StringBuilder.StringBuilder;

(why in the Earth do we need all those StringBuilders?)

Replace the StringBuilder variable name with s, and it’s more manageable:s := s.StringBuilder;

The syntax of the constructor in C/AL is the following:Variable := Variable.[Class Name]({argument1, …});

OVERLOADINGCapability that allows multiple members to use the same name as long as the signature remains different.

C/AL understands overloading of:• Methods• Constructors

System.Diagnostics.StopwatchA simple and useful class to handle time measurements.

NAMESPACEA higher-level scope used to organize code

Namespace has a many-to-many relationship to assemblies:• One assembly can contain multiple namespaces• The same namespace can span multiple assemblies

System.Text.RegularExpressionsA namespace containing classes for managing regular expressions.

In case you didn’t know:• Regular Expressions (RegEx) are a language used for searching

text data through pattern matching• Regular Expressions are SQL of textual data

System.DateTimeManages date and time information.Maps fully and directly to DateTime data type in C/AL.

Many useful properties and methods.

System.GlobalizationNamespace that defines a lot of useful type for managing date and time formats, regional settings, cultures, etc.

Useful classes:• Calendar• CultureInfo• DateTimeFormatInfo• NumberFormatInfo

System.Globalization.CultureInfoProvides access to culture information. Cultures are the heart of the .NET localization/globalization functionality.

System.Globalization.DateTimeFormatInfoProvides access to date and time formatting information.

System.Globalization.NumberFormatInfoProvides access to number formatting information.

System.MathProvides methods for trigonometric, logarithmic, and other common mathematical functions.

System.Numerics.BigIntegerRepresents an arbitrarily large integer value, without any theoretical upper or lower bounds.

System.ConvertConverts a base type to another base type.

System.IONamespace that provides many useful input and output classes.

System.IO.FileProvides static methods for the creation, copying, deletion, moving, and opening of files.

STATIC OBJECTS AND METHODSStatic classes cannot be instantiatedStatic methods can be called on classes

Static classes and members are shared for the whole application domain

Microsoft Dynamics NAV Server runs as a single application domain

System.IO.DirectoryExposes static methods for creating, moving, and enumerating through directories and subdirectories.

System.IO.PathPerforms operations on String instances that contain file or directory path information.

System.IO.FileSystemWatcherListens to the file system change notifications and raises events when a directory, or file in a directory, changes.

EVENTSEnable a class to notify other classes when something of interest

happens.

Equivalent to C/AL triggers.

Events are not automatically exposed.You must first set the WithEvents property.

Events can run be:• Server-Side: default behavior, if RunOnClient is No• Client-Side: if RunOnClient is Yes

ENUMERATIONSTypes that consist of set of named constants.

Similar, but not nearly equal to C/AL options.

C/AL .NET

Always of Integer type Of any integer numeric type, except char

Always 0-based 0-based by default, but can be any value

Each consecutive element is increased by 1

Every element can have an explicit numeric value, even negative

SUPPORT FOR ENUMERATIONS IN C/SIDE

NAV 2009 R2 NAV 2013

Does not recognize them Recognizes them

You must use integers You can use named values

You cannot use bitwise operators (AND, OR, NOT, XOR).You can use + in place of OR, but that’s about it.

System.Diagnostics.EventLogProvides interaction with Windows event logs.

MANAGING TYPE INFORMATION AT RUNTIMESystem.TypeGETDOTNETTYPECANLOADTYPE

ARRAYS AND COLLECTIONSArrays:• Contain a fixed number of values of the same data type• Roughly correspond to C/AL arrays (variables with Dimensions

property)

Collections:• Contain an arbitrary, flexible number of values of the same data

type• No equivalent in C/AL

Both arrays and collections are extensively used in .NET

System.ArrayProvides methods for creating, manipulating, searching, and sorting

arrays.

Serves as the base class for all arrays in the common language runtime.

ENUMERATORSEnable iterating through arrays and collections.C# uses the foreach keyword to manage the iteration.

Two interfaces are in charge of the enumerator-based iteration:• IEnumerable<T>• IEnumerator<T>

IEnumerable<T>• Exposes the enumerator

IEnumerator<T>• Allows iteration through enumerable object• Current• MoveNext

System.ObjectThe ultimate base class of all classes in the .NET Framework.The root of the type hierarchy.

System.Collections.HashTableRepresents a list of key/value pairs that are stored by using a hash

table.

System.Collections.Generic.List<T>Represents a strongly typed list of objects that can be accessed by

index.

Provides methods to search, sort, and manipulate lists.

GENERICSAllow a single design-time declaration that compiles to multiple run-time types.

List<T> can compile to List<int>, List<string>, or List<MyDesiredClass>

Supported on:• Classes and interfaces• Methods• Properties• Structures• Fields

In C/AL, all generics are of type System.Object

MAPPING .NET TYPES TO C/ALSome types map fully:• String• DateTime• InStream and OutStream

Many data types map uni-directionally:• Most simple data types (Boolean, Decimal, Integer, etc.)• Some complex data types (Duration)

You cannot use uni-directionally mapped .NET data types in C/AL directly.

System.IO.StreamA class that provides a generic view of a sequence of bytes.

Typical descendants:• System.IO.MemoryStream• System.IO.FileStream

Fully mutually interchangeable with both InStream and OutStream C/AL types.

Limitation:• CREATEOUTSTREAM and CREATEINSTREAM cannot be called on

System.IO.Stream