System Tables are created automatically by the Navision to manage system security and keys in Navision. There are eight system tables in Navision:
1) 2000000002 - User
2) 2000000003 - Member Of
3) 2000000004 - User Role
4) 2000000005 - Permission
5) 2000000053 - Windows Access Control
6) 2000000054 - Windows Login
7) 2000000006 - Company
8) 2000000203 - Database Key Groups
Saturday, September 12, 2009
System Table in Navision
Thursday, September 10, 2009
Relational Operators
= (equal to)·
< (less than)·
> (greater than)·
<= (less than or equal to)·
>= (greater than or equal to)·
<> (not equal to)·
IN (included in set)
Thursday, September 3, 2009
Object-Oriented vs. Object-Based
Saturday, August 29, 2009
System Defined Variables
Rec
When a record is modified, this variable specifies the current record, including the changes that are made.
xRec
When a record is modified, this variable specifies the original values of the record, before the changes.
CurrForm
This variable specifies the current form. You can access the controls of the form through this variable and set the dynamic properties of the form and its controls.
CurrReport
This variable specifies the current report.
RequestOptionsForm
This variable specifies the request options form for the current report.
Tuesday, August 25, 2009
Add a Function to a Codeunit
Monday, August 24, 2009
C/SIDE Temporary Table
2. The write transaction principle that applies to a database table does not apply to a temporary table.
When you need to perform many operations on the data in a specific table in the database, you can load the data into a temporary table while you modify it. Loading the data into a temporary table speeds up the process because all the operations are performed locally on the client.
2. Click View, and then click C/AL Globals or C/AL Locals, depending on whether your variable is going to be global or local.
3.Enter a name for the temporary table variable, and enter or select Record as the data type. Use the lookup button in the Subtype field to select the table to copy.
4. With the cursor still on the line that defines the temporary table, click View, and then click Properties (SHIFT+F4) to display the Properties window.
Special C/SIDE Tables
- Temporary
- System
- Virtual
Temporary tables are used as a repository for temporary information at run time. System and virtual tables are system generated tables that provide information about the current state of the system.
Guidelines for Implementing Record Level Security
- Record level security and the business logic of the application must work together.
- For forms, reports, and dataports that are run by properties and not code, the security filters that you apply at user level are sufficient.
- For forms, reports, and dataports that run code, assign an extra indirect read permission at user level.
- For codeunits, assign the extra indirect read permissions at user level and at object level.
- Permissions are cumulative and not mutually exclusive.
Thursday, August 20, 2009
Defining Keys to Improve Performance
To maximize performance, you must define the keys in the table so that they facilitate the queries that you will have to run. These keys must then be specified correctly in the queries.
For example,
The table could have these keys.
Entry No.,Customer No.,Posting Date
The query could look like the following.
SETCURRENTKEY("Customer No.");
SETRANGE("Customer No.",'1000');
IF FIND('-') THEN
REPEATUNTIL NEXT = 0;
Tuesday, August 18, 2009
How to create a Dataport
1. Click Tools, and then click Object Designer.
2. In Object Designer, click Dataport, and then click New.
3. In the Properties window for the new dataport, set the following properties.
Property | Value |
---|---|
FileFormat Property | Variable |
FieldStartDelimiter Property | " |
FieldEndDelimiter Property | " |
FieldSeparator Property | ; |
*The format of the external file is variable and uses a semicolon as the field separator. This is because the external editor is Microsoft Excel, and for this use, a .csv file is appropriate.You have created a dataport and must now specify which tables and fields will be used in the dataport.
For Eg:
To add a data item for the Item table
1. In Dataport Designer, in the first DataItem field, click the AssistButton, and then select the Item table.
2. In the Properties window of the Item data item, in the DataItemTableView property, click the AssistButton.
3. In the Table View window, in the Key field, click the AssistButton, and in the Key List window, select the No. field.
4. Click View, and then click C/AL Globals.
5. In the C/AL Globals window, create a global variable called Tariff Number of data type Record, with the Tariff Number table as the subtype.
Next, you add fields to the data item.
To add fields to the Item data item
1. In Dataport Designer, select the Item data item, click View, and then click Dataport Fields.
2. In Field Designer, in the first row, in the SourceExpr field, click the AssistButton, and then in the Field List window, select the No. field.
3. Repeat step 2 to add the more Fields.
4. Save and compile the dataport.
Dataport Design
When you are importing data, the records read from the external file can be inserted into tables that correspond to the data items. You can examine the records before inserting them and you can specify:
1. If the records should be inserted.
2. If the records should be inserted automatically.
3. If the records that are already in the database should be overwritten or updated when a record with the same primary key is read from the external file.
Designing a dataport consists primarily of setting various properties. The following sections explain which properties to use, and how to use them.
Dataport component | Description |
---|---|
Dataport description | A complete description of the dataport including how data is collected, how data is formatted when written to the output file, and so on. The dataport description is stored in the database. |
Data item | A data item corresponds to a table in the database. You define data items so that you can retrieve information from the tables in the database. A dataport must contain at least one data item, and each data item defines one or more fields. |
Field | A dataport field can be a field in a data item (a database table), a field in a file from which data is to be imported, or a source expression to be executed during import or export. Fields in the external file are defined either as having a fixed length, or as being delimited by certain characters that you define. |
Request form | A request form is a form that is run before the dataport is executed. The request form is used to gather requests and options from the user, for example, the name and location of the external file. |
Property | The dataport itself, and data items, fields, and the request form have properties that characterize the object in some way. For example, the length and position of a field in a line during import, or whether the OnValidate trigger of a field should be executed when inserting imported data into a table. |
Dataport Fundamentals
Dataports can be dynamic, meaning that when you execute the dataport, you specify if it must import or export data, and you specify the name of the file to read from or write to. This can be achieved either by defining options that the user sets in the request form or by programming.
Monday, August 17, 2009
CLEAR Function
1. A number variable is set to 0 (zero)
2. A string variable is set to empty string
3. A date variable is set to 0D (undefined date)
4. A time variable is set to 0T (undefined time)
5. A Boolean variable is set to FALSE
Thursday, August 13, 2009
Modifying a Codeunit
2. In Object Designer, click Codeunit.
3. Select the codeunit that you want to modify, and then click Design.
4. In the C/AL Editor, modify the codeunit by changing the existing functions or by adding new functions.
Wednesday, August 12, 2009
How to define Primary and Secondary Key in Navision
1. On the Tools menu, click Object Designer.
2. Click Table.
3. Select a table from the list and then click Design.
4. Select the first empty line and then from the View menu, click Keys.
5. In the first line of the Keys window, enter the primary key as a comma-delimited list; for example, "ID Number, Name".
1. On the Tools menu, click Object Designer.
2. Click Table.
3. Select a table from the list and then click Design.
4. Select the first empty line and then from the View menu, click Keys.
5. The first line shows the primary key. Enter the secondary keys on the following lines as comma-separated lists; for example: Name, Address.
Table Properties in Navision
Property Name | Description |
---|---|
ID Property | Sets a unique identifier for the table. |
Name Property | Defines the table name, which is used as the table caption. |
Caption Property | Displays the table caption in the currently selected language. This value is taken from the CaptionML Property, if a value is set. |
CaptionML Property | Provides the text that is used to identify a control or other object in the user interface. This property is multilanguage enabled and can contain a list of text in different languages. The text that is actually used is selected according to the current language setting of the user. |
Description Property | Include an optional description of the table. This description is for internal purposes only and is not visible to the end user. A short description of the table’s purpose makes it easier to maintain the application. |
DataPerCompany Property | Determines whether data in this table is available to all companies or only the current company. Yes if data is available only to this company; otherwise, No. The default value is Yes. |
Permissions Property | Defines extended permissions for the table. |
LookupFormID Property | Defines the ID of the form you want to use as a lookup. |
DrillDownFormID Property | Defines the ID of the form you want to use as a drill down. |
DataCaptionFields Property | Defines a list of fields to be used as captions when a record from this table is displayed in a form or a page. |
PasteIsValid Property | Use this property to enable inserting records into this table using the paste command. Yes if you want to allow insert by pasting; otherwise, No. The default is Yes. |
LinkedObject Property | Use this property to link to SQL Server objects. Yes to link the table to an existing SQL Server object. |
LinkedInTransaction Property | Determines whether the table can read and modify data from linked data sources, such as Microsoft Office Excel, Access, or another SQL server. This property is only visible when the value of the LinkedObject Property is set to Yes. |
Field Properties in Navision
The above table list the properties that are common to most field types.
PropertyName | Description |
---|---|
Field No. Property | Assigns a unique numeric ID to this Field. |
Name Property | Specifies the name of the field. |
Caption Property | Specifies the text used to identify a control based on the field. |
CaptionML Property | Specifies the text that is used to identify a control or other object in the user interface. The CaptionML property is multilanguage enabled and can contain a list of text in different languages. The text that is used is selected according to the current language setting of the user. |
CaptionClass Property | Controls the caption that is used in the label of a field in a database table or in the label of a control on a form. |
Description Property | Includes an optional description of the field. This description is for internal purposes only and is not visible to the end user. |
Data Type Property | Specifies the data type of a table field. |
Enabled Property | Determines whether the field is enabled. |
A field may have additional properties, depending on its data type. The following table lists properties that apply to various field types.
PropertyName | Description |
---|---|
DataLength Property | Specifies the maximum length of the data stored in a code or text field. |
InitValue Property | Defines an initial value for a field. |
FieldClass Property | Define the class for a field. That is, specifies whether it is a normal field, a FlowField, or a FlowFilter field. |
CalcFormula Property | Defines a formula used by a FlowField. |
AltSearchField Property | Defines an alternative search field. |
DecimalPlaces Property | Sets the number of decimal places shown to the user. This property also performs validation of whether user input conforms to this setting. |
Editable Property | Determines whether a field can be edited. |
NotBlank Property | Forces the user to make a non-blank entry in this field. |
BlankNumbers Property | Determines whether a range of numbers will be set to blank as they are formatted. |
Numeric Property | Forces the user to enter numbers in this field. |
CharAllowed Property | Sets the characters you will allow the user to enter in this field. |
DateFormula Property | Validates the syntax of a date expression entered by the user. |
Standard day/time unit Property | Specifies the unit of measure that is used when you enter data into Duration fields. |
MinValue Property | Sets the minimum value for the contents of a field. |
MaxValue Property | Sets the maximum value for the contents of a field. |
Title Property | Adds a title to a field. The first letter in each word is capitalized. |
ValuesAllowed Property | Specifies the values you want to allow in the field. Can be specified either as a range or as distinct values, or as a combination of these. |
AutoIncrement Property | Specifies whether each field value is automatically given a new number that is greater than the number given to the previous value. |
TableRelation Property | Defines relationships to other tables. |
TestTableRelation Property | Indicates whether the field is included in table relationship tests. |
TableIDExpr Property | Specifies the ID of the table to which you want to apply a table filter. |
BlankZero Property | Determines whether the fields appears blank if the value is 0 (zero) or FALSE. |
DataLength Property | Defines the length of a data field. |
OptionString Property | Defines an option string (a comma-separated string of options). The maximum size is 1000 characters. |
ClosingDates Property | Determines whether closing dates are allowed. |
AutoFormatType Property | Determines how data is formatted. |
AutoFormatExpr Property | Determines how data is formatted. |
OptionCaption Property | Defines the text string options that are displayed to the user. |
How to Design a Table in Navision
1. On the Tools menu, click Object Designer.
2. Click Table and then click New.
1. On the Tools menu, click Object Designer.
2. Click Table and then click New.
3. In the first empty row, enter a Field Name and a Field No. Enter a Data type and appropriate Length. Description is optional.
1. With the focus on Table Designer, on the File menu, click Save.
The Save As dialog box opens.
2. In the ID field, enter a number that will serve as a unique table identification.Note
3. In the Name field, enter the name of the table.
4. Clear the Compiled check box if you do not want the table to be compiled when it is saved.
Monday, August 10, 2009
List Of DataTypes
OCX : OCX object reference.
Automation : COM object reference.
InStream : Stream for reading.
OutStream : Stream for writing.
Variant : Equivalent to BASIC's Object datatype.
Codeunit : Equivalent to a Class object containing public and private Methods.
Form : Equivalent to a windows form.
Record : ORM implementation for Navision Tables.
RecordRef : A reference to a record(Navision Table).
RecordID : A representation of the primary key fields of a record.
Dataport : Specialized units for importing/exporting data through textfiles.
Boolean : Datatype boolean.
Option : Equivalent to an ENUM structure.
Integer : Datatype 16-bit integer.
Decimal : Datatype decimal.
BigInteger : Datatype 32-bit integer.
Char : Equivalent to datatype char.
Text : Datatype String.
Code : Datatype String (Capitalized).
Date : Datatype Short date.
Time : Datatype Short Time.
Datetime : Equivalent to SQL datatype Datetime
Binary : Equivalent to Byte Array
Guidlines For C/AL Coding.
The following are simple guidelines for placing C/AL code:
In general, place the code as close as possible to the object on which it will operate. This implies that code which modifies records in the database should normally be placed in the triggers of the table fields that are involved.
In reports, always maintain a clear distinction between logical and visual processing and position your C/AL code accordingly. This implies that it is acceptable to have C/AL code in a section trigger if that code controls either the visual appearance of the controls or whether the section should be printed. Never place code that manipulates data in section triggers.
The principle of placing code near the object on which it operates can be overruled in some situations. One reason to overrule this principle is security. Normal users do not have direct access to tables that contain sensitive data, such as the General Ledger Entry table. If you place the code that operates on the general ledger in a codeunit, give the codeunit access to the table, and give the user permission to execute the codeunit, you will not compromise the security of the table and the user will be able to access the table.
There are reasons other than security for putting a posting function in a codeunit. A function that is placed in a codeunit can be called from many places in the application, including, perhaps, some that you did not anticipate when you first designed the application.
Friday, August 7, 2009
Security In Navision
2. Company Level Security·
3. Object Level Security·
4. Record Level Security
Thursday, August 6, 2009
Objects In Navision
Zoom Funtion In Navision
Tuesday, August 4, 2009
How To Create a New CodeUnit
Click OK. Now, scroll down to the bottom of the Object Designer window and find your new codeunit. Select it and press the Design button.
Define a Variable
To define global variables in an object, select View, C/AL Globals on the MenuBar once you are designing that object. A window like the following will appear:
Please fill it If you press the F6 key while you are in theDataType column, you will see a list of data types that you can select.Once you have entered all of these, select the Variable name. To Set the Properties, Select the Varible Click on the Properties (Press SHIFT+F4) and like set all the properties for all variable.Now close the Properties window, then close theC/AL Globals window. Finally, close the Object Designer window.When it asksif you want to save, click Yes. T write the code in the CodeUnit Go to the Corresponding Codeunit Select the Design button and write the code in OnRun(). The Save it.
This Codeunit can be called from any of the Trigers in forms or Report sections.Variable scope and initialization
Identifiers and Variables
String Data Types
String data is data that is made up of strings of characters. The data that isplaced in word processors is string data.
Monday, August 3, 2009
Simple Data Types
Data is known facts, known pieces of information. For our purposes, we will always use “data” to mean information that is available for us to manipulate in Navision Financials using C/SIDE.
Data Types
Data Types are the different kinds of information that may appear in C/SIDE. Different Data Types have different values, different meanings for those values and are manipulated differently.
Constants
Constants are data values that are written directly into our programming statements. They are called Constants because their values never change while the user is running the application. Constants can only be changed by changing the C/AL code.
Byte
A Byte is a unit of data storage space used in computers. One character stored in the computer takes up one byte of storage. Related terms are a Kilobyte (KB), which is 1024 bytes, a Megabyte (MB), which is 1024 Kb or 1,048,576 bytes and a Gigabyte (GB), which is 1024 Mb, or 1,073,741,824 bytes.
What is C/AL
C/AL (Client Application Language) is the programming language used in the Client / Server Integrated Development Environment (C/SIDE) included with Navision Solutions.
What is it used for?
The many purposes for which it is used are
. Data presentation is handled through the form objects and report objects.
· Data acquisition is mainly handled through form and dataport objects.
· Data storage and organization is handled by the table objects in conjunction with the built-in Database Management System (DBMS).
In C/SIDE, the main purpose of the programming language is data manipulation. Through C/AL, you can create business rules to insure that the data stored in the tables are meaningful and consistent with the way your customer does business. You can add new data or transfer data from one table to another (for example, a journal to a ledger). If data from multiple tables need
to be combined onto one report or displayed on one form, you will probably need to program this.
Another purpose of C/AL is to control the execution of the various C/SIDE objects. With C/AL you are able to coordinate them in a way that meets the business needs of your customer.
Validate, Testfield
IF Then Else, Case in C/AL
By using a conditional statement, you can specify a condition and one or more commands that should be executed, according to whether the condition is evaluated as TRUE or FALSE. There are two types of conditional statements in C/AL:
1. IF THEN [ELSE], where there are two choices
2. CASE, where there are more than two choices.
IF THEN ELSE statements have the following syntax.
This means that if (Condition) is true, then (Statement1) is executed. If (Condition) is false, then (Statement2) is executed.
The square brackets around ELSE
You can build even more complex control structures by nesting IF THEN ELSE statements. The following example is a typical IF THEN ELSE statement.
If 'Condition1' is false, then nothing is executed. If 'Condition1' and 'Condition2' are both true, then 'Statement1' is executed. If 'Condition1' is true and 'Condition2' is false, then 'Statement2' is executed.
The following example shows an IF statement without the optional ELSE part.
The following example shows an IF statement with the optional ELSE part.
A common error is to put an extraneous semicolon at the end of a line before an ELSE (line 4). As mentioned earlier, this is not valid according to the syntax of C/AL. The semicolon is used as a statement separator. (The end of line 4 is inside the inner IF statement.)
CASE statements have the following syntax.
1. The 'Expression' is evaluated, and the first matching value set executes the associated statement, if there is one.
2. If none of the value sets matches the value of the expression, and the optional ELSE part has been omitted, no action is taken. If the optional ELSE part is used, then the associated statement is executed.
The data type of the value sets must be the same as the data type of 'Expression' or at least be convertible to the same data type.
Friday, July 31, 2009
SETCURRENTKEY,SETRANGE,SETFILTER
#. SETCURRENTKEY #. SETRANGE #. SETFILTER
These functions are some of the most commonly used C/AL functions. They set limits on the value of one or more specified fields, so that only a subset of the records are displayed, modified, deleted, and so on.
SETCURRENTKEY Function
If no keys can be found that include the field(s) that you specify, the return value is FALSE. If you do not test the return value, a runtime error occurs. If you do test the return value, the program will continue to run even though no key was found.
SETRANGE Function
Record.SETRANGE(Field [,From-Value] [,To-Value]);
SETFILTER Function
Field is the name of the field on which you want to set a filter. String is the filter expression. String may contain placeholders, such as %1 and %2, to indicate where to insert the Value parameter(s) in a filter expression.
CALCFIELDS, CALCSUMS
CALCFIELDS updates FlowFields. FlowFields are automatically updated when they are the direct source expressions of controls, but they must be explicitly calculated when they are part of a more complicated expression.
CALCFIELDS has the following syntax.
Variable := Record.CALCFIELDS(Field1, [Field2],...)
When you use FlowFields in C/AL functions, you must use the CALCFIELDS function to update them.
For Eg:
In the following example, the SETRANGE function sets a filter and then the CALCFIELDS function calculates the Balance and Balance Due fields by using the current filter and performing the calculations that are defined as the CalcFormula properties of the FlowFields.
Let the Variable Be 'Customer', Data Type be 'Record'.
Customer.GET(INDG-CUS-005); // Will Selct The Customer No: INDG-CUS-005
Customer.SETRANGE("Date Filter",0D,TODAY); // Will set the date Range for the Present Dt
Customer.CALCFIELDS(Balance,"Balance Due"); // Using, Calcfields system calcs the balance as per Dt.
MESSAGE('The Balance is %1 and your Balance Due is 2',Customer.Balance,Customer."Balance Due"); // Will Displays the balance in a Message Box, with Corresponding Value.
CALCSUMS Function:CALCSUMS calculates the sum of one or more fields that are SumIndexFields in the record. CALCSUMS has the following syntax.
Variable := Record.CALCSUMS (Field1, [Field2],...)
For CALCSUMS, a key that contains the SumIndexFields must be selected as the current key. Similar to CALCFIELDS, CALCSUMS uses the current filter settings when performing the calculation.
For Eg:
Let the Variable be 'CustLdgentry' & Datatype be 'Record'
CustLdgentry.SETCURRENTKEY("Customer No."); // will Set the Key Customer No.
CustLdgentry.SETRANGE("Customer No.",'50000','90000');// Will set Range of Customers No. From 50000-90000.
CustLdgentry.SETRANGE("Posting Date",0D,TODAY); // will Filter the posting date with Present date.
CustLdgentry.CALCSUMS("Sales (LCY)"); // Will Calculate total Sales Froam Sales(LCY) Field.
MESSAGE ('%1 calculated sales',custledgerentry."Sales (LCY)") // Total sales Amount in Local Currency Will be displayed in Message Box.
NEXT Function
REPEAT
// process record
UNTIL NEXT = 0;
C/SIDE Objects
GET, FIND Functions
The following functions are used to search for records:
1. GET 2. FIND
These functions are some of the most commonly used C/AL functions. When you search for records, it is important to know the difference between GET and FIND and to know how to use FIND and NEXT in conjunction.
GET Function
FIND Function
Common C/AL Functions
1. GET, FIND, and NEXT Functions
2. SETCURRENTKEY, SETRANGE, SETFILTER, GETRANGEMIN, and GETRANGEMAX Functions
3. INSERT, MODIFY, MODIFYALL, DELETE and DELETEALL Functions
4. LOCKTABLE Function
5. CALCFIELDS, CALCSUMS,FIELDERROR, FIELDNAME, INIT, TESTFIELD, and VALIDATE Functions
6. Progress Windows, MESSAGE, ERROR and CONFIRM Functions
7. STRMENU Function
Triggers And Events
This section describes where to write C/AL code.
Almost every object in C/SIDE contains triggers where you can place your C/AL code.
Triggers exist for the following objects:
1. Tables , 2. Table fields , 3. Forms, including request forms , 4. Form controls , 5. Reports ,6. Data items , 7. Sections , 8. Pages.
You can initiate the execution of your C/AL code from the following:
#. Command buttons #. Menu items #. Codeunits.
Coding Standards in C/AL
The following are simple guidelines for placing C/AL code:
In general, place the code as close as possible to the object on which it will operate. This implies that code which modifies records in the database should normally be placed in the triggers of the table fields that are involved.
In reports, always maintain a clear distinction between logical and visual processing and position your C/AL code accordingly. This implies that it is acceptable to have C/AL code in a section trigger if that code controls either the visual appearance of the controls or whether the section should be printed. Never place code that manipulates data in section triggers.
The principle of placing code near the object on which it operates can be overruled in some situations. One reason to overrule this principle is security. Normal users do not have direct access to tables that contain sensitive data, such as the General Ledger Entry table. If you place the code that operates on the general ledger in a codeunit, give the codeunit access to the table, and give the user permission to execute the codeunit, you will not compromise the security of the table and the user will be able to access the table.
There are reasons other than security for putting a posting function in a codeunit. A function that is placed in a codeunit can be called from many places in the application, including, perhaps, some that you did not anticipate when you first designed the application.
Reusing Code : The most important reason for placing C/AL code consistently, and as close to the objects that it manipulates, is that it lets you reuse code. Reusing code makes developing applications both faster and easier. More importantly, if you place your C/AL code as suggested, your applications will be less prone to errors. By centralizing the code, you will not inadvertently create inconsistencies by performing essentially the same calculation in many places.
About Nav 2009
1. Three-tier Architecture With Microsoft Dynamics NAV 2009, the architecture has changed from a two- to three-tier architecture, enabling the new RoleTailored client and Web services.
2. Customizable, Role-Based User Interface Microsoft Dynamics NAV 2009 provides a more intuitive and customizable user interface (UI) called the RoleTailored client, which you can modify to support the job functions of different work roles in your organization. For each role that you support, you can create a customizable Role Center that displays key information that is required by that role and makes day-to-day tasks easier to complete. Partners, administrators, and super users can customize the UI for specific roles, and individual users can also further personalize the UI to meet their specific needs.
3. Page Objects Microsoft Dynamics NAV 2009 includes a new object called a page, which is used in the same way as a form. However, unlike forms, you have the flexibility to display pages in the RoleTailored client or to publish a page using a Web service. You can also transform your existing form objects to page objects.
4. Improved Report Design and Functionality Microsoft Dynamics NAV 2009 offers an improved reporting experience. You can now create interactive reports to which you can add charts, graphs, tables, and other data presentation elements that were not available in previous versions of Microsoft Dynamics NAV. You can also save your reports in .pdf or .xls file formats.
5. Business Connections with Web Services Web services are a standard, widely used method for integrating applications and are supported in Microsoft Dynamics NAV 2009. By implementing Web services, you can access Microsoft Dynamics NAV data and business logic from outside the product in a standard, secure way. This enables you to connect Microsoft Dynamics NAV to other systems within an organization.
6. RoleTailored client control add-ins RoleTailored client control add-ins extend the RoleTailored client with custom functionality. A control add(Available in NAV2009-SP1)-in is a visual element for displaying and modifying data on RoleTailored client pages.