Beruflich Dokumente
Kultur Dokumente
June 2008
The information contained in this document represents the current view of Microsoft Corporation on the
issues discussed as of the date of publication. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft
cannot guarantee the accuracy of any information presented after the date of publication.
These guidelines are for informational purposes only. MICROSOFT MAKES NO WARRANTIES, EXPRESS,
IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS DOCUMENT.
Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights
under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval
system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or
otherwise), or for any purpose, without the express written permission of Microsoft Corporation.
Microsoft may have patents, patent applications, trademarks, copyrights, or other intellectual property
rights covering subject matter in this document. Except as expressly provided in any written license
agreement from Microsoft, the furnishing of this document does not give you any license to these
patents, trademarks, copyrights, or other intellectual property.
Unless otherwise noted, the example companies, organizations, products, domain names, e-mail
addresses, logos, people, places, and events depicted herein are fictitious, and no association with any
real company, organization, product, domain name, email address, logo, person, place, or event is
intended or should be inferred.
Appendix .......................................................................................................................... 11
C/FRONT Library Functions ...................................................................................................................................................... 11
Development Best Practices ..................................................................................................................................................... 15
Solution Architecture
Microsoft Dynamics Entrepreneur is designed as a two-tier application. It consists of a Database
Management System (DBMS) that resides on a server and a Graphical User Interface (GUI) that resides on
each client. In this two-tier architecture, the data and data manipulation layers reside on the server,
whereas the application logic, presentation logic, and presentation layers reside on the client.
Server
Some of the functions that the standard server component of Microsoft Dynamics Entrepreneur is
responsible for are:
Controlling the number of users that can connect to the database at one time.
Controlling access to the data through locking.
Keeping track of all the read and write transactions performed by each user.
Sending data to each client, as requests are made.
Performing all the key-based filtering and calculating the SumIndexFields.
Caching data that can be requested again.
NAS
The NAV Application Server (NAS), which is compatible with Microsoft Dynamics Entrepreneur, is an
optional middle-tier server that supports an n-tier architecture and executes business logic without user
intervention. The NAS enables communication with external services, acts as a client toward a database
server, and can act as a server for other services. When starting the NAS, it opens a predefined database
and executes the Client Application Language (C/AL) code in a predefined Codeunit. The NAS only
supports Windows® Authentication and automatically reconnects to the database server if there is a
problem with the network.
C/SIDE
C/SIDE is an object-based, secure, and efficient development environment combined with an easy-to-use
GUI. C/SIDE enables access to the Microsoft Dynamics Entrepreneur application source code, so you can
develop powerful and fully integrated solutions. C/SIDE provides a number of development options,
including using new or modifying existing functionality, reusing functionality for various purposes,
redesigning the UI, and modifying and executing business logic. Because of the close integration with
Microsoft Dynamics Entrepreneur, add-on solutions developed with C/SIDE must pass a software
certification test before distribution.
C/SIDE is not object-oriented, but object-based. This is an important distinction. In an object-oriented
language or environment, the developer can create new types of objects that are based on the ones that
are already in the system. In C/SIDE, there are seven types of the application objects, and that is all. The
objects are Tables, Forms, Reports, Dataports, XMLports, Codeunits, and MenuSuites. By limiting
developers to these seven objects, they can work quickly and efficiently. The biggest benefit from this
limitation? It is fairly difficult to create a severe bug in C/SIDE.
Object Type Explanation
Table Stores the actual data. Typically a business application has a
Customer table that stores information such as name, address,
phone number, and contact person for each customer.
Form Used to access the information contained in tables. Forms are
used both when users enter new information, and when they
view existing information.
Report Presents data that contains summary information. For example,
use a report to print a list of customers.
Dataport Imports and exports information to and from other programs;
Writing functions in C/SIDE is done in C/AL. In C/SIDE, the main purpose of the programming language is
data manipulation. Through C/AL, you can create business rules to help ensure 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 in one report or displayed on one form, you will probably need to program
this functionality. Another purpose of C/AL is to control the execution of the various C/SIDE objects. With
C/AL, you are able to coordinate the objects in a way that meets the business needs of your customer.
The Object Designer is the main tool for developing C/SIDE applications. Use it to:
Design new Tables, Forms, Reports, Dataports, XMLports and Codeunits. You design
MenuSuite objects in the Navigation Pane Designer.
View existing application objects. However, you view the content of a MenuSuite object in the
Navigation Pane Designer, or in the Navigation Pane at runtime.
Modify existing application objects with the exception of MenuSuite objects that are modified
in the Navigation Pane Designer.
Run an application object, except XMLports and MenuSuite objects.
The C/SIDE development environment is accessible not only to developers, but also to experts in a given
business area. For example, someone who understands the distribution business doesn’t necessarily have
to be a trained programmer to develop add-on solutions for a wholesale company. The source code’s
components are very descriptive, and the programming is in everyday, easy-to-understand language. For
This line of code indicates that there will be a check as to whether the currency codes created are in the
currency table.
The descriptiveness of the language makes Microsoft Dynamics Entrepreneur a good base for building
on business expertise and learning the underlying processes of a specific business area. This is a short
example of C/AL code included in Microsoft Dynamics Entrepreneur:
For more information regarding C/SIDE, please see the Application Developer Guide as well as the
C/SIDE Reference Guide mentioned in the More information section.
C/FRONT
C/FRONT is an application programming interface that is used to access a Microsoft Dynamics
Entrepreneur database from environments such as Microsoft Office Excel® and Microsoft Office Word, or
Microsoft Visual Basic®. C/FRONT provides C programming language developers with the ability to read
and write to the database. The C/FRONT tool also enables Microsoft .NET application developers to
create programs in the Microsoft Visual Studio® .NET development environment that can access a
Microsoft Dynamics Entrepreneur database.
For example, if users want to build sophisticated budgeting functions that require a spreadsheet, they
can configure Excel to act as a controller to their Microsoft Dynamics Entrepreneur server. Budgets or
actual figures can then be read from Microsoft Dynamics Entrepreneur, manipulated in Excel, and written
back to the database. You don't need to perform any intermediate steps, such as importing or exporting
data to accomplish this. C/FRONT can also be a useful tool for data collection systems, such as barcode
readers for order fulfillment.
You don’t have to know how to write code in Microsoft Dynamics Entrepreneur to use C/FRONT. In fact,
you don’t even have to work in the Microsoft Dynamics Entrepreneur development environment. By
using C/FRONT, you can, for example, access a specific company in the Microsoft Dynamics Entrepreneur
8
More information
Your first and foremost source of information should be your local Microsoft subsidiary. Microsoft
recommends that you contact the local representative in your country or region who is responsible for
Microsoft Dynamics Entrepreneur to receive further guidance. For more information about Microsoft
Dynamics Entrepreneur and the ISV business opportunity, please use the following resources.
Microsoft Dynamics Entrepreneur Solution Overview
White paper: Providing ISV Solutions for Microsoft Dynamics Entrepreneur Solution 2008
Microsoft Dynamics Entrepreneur Solution Add-on Documentation (PartnerSource – requires login)
10
Database Functions
Function Purpose
DBL_ConnectServerandOpenDatabase() Connects to a server and opens a database
DBL_ConnectServer() Connects to a server
DBL_DisconnectServer() Disconnects from a server
DBL_ReleaseAllObjects() Frees all resources in C/FRONT
DBL_OpenDatabase() Opens a database
DBL_CloseDatabase() Closes a database
DBL_OpenCompany() Opens a company
DBL_CloseCompany() Closes a company
DBL_CompanyName() Retrieves the current company name
DBL_NextCompany() Scans company names
DBL_GetDatabaseName() Tests whether a database is open and—if it is open—returns its name
DBL_GetLanguage Retrieves the language ID that is currently used
DBL_CheckLicenseFile() Checks user permissions against license file
DBL_LoadLicenseFile() Loads a license file
DBL_GetVersion() Gets version number of C/FRONT library
DBL_AddKey() Adds keys and SumIndexFields to a table
DBL_AddTableField() Adds a field to a table
DBL_CreateTable() Creates a database table
DBL_CreateTableBegin() Acquires a create table handle
DBL_CreateTableEnd() Releases a create table handle
DBL_DeleteTable() Deletes a table from a database
DBL_SetLanguage() Sets the language ID
DBL_TestSysPermission() Tests whether the current license has execute permission to a specified
object
DBL_Str_Compare_Database() Compares 2 strings in the database
Security Functions
Function Purpose
DBL_Login() Authorizes entry to a database
DBL_UserID() Retrieves current user ID
DBL_UserCount() Counts users in a database
DBL_CryptPassword() Encrypts password
DBL_UseCodeUnitsPermissions() Enables you to use the permissions of a codeunit
11
Record Functions
Function Purpose
DBL_AllocRec() Creates a record buffer
DBL_DupRec() Duplicates a record
DBL_FreeRec() Removes a record buffer
DBL_FindRec() Finds a record
DBL_FindTopRec() Finds the first or the last record
DBL_FindSet() Finds a set of records
DBL_NextRec() Scans records
DBL_InsertRec() Inserts a record
DBL_DeleteRec() Deletes a record
DBL_DeleteRecs() Deletes all records in a table
DBL_ModifyRec() Modifies a record
DBL_CopyRec() Copies a record
DBL_CmpRec() Compares two records
DBL_InitRec() Initializes fields in a record
DBL_RecCount() Counts records
DBL_RenameRec() Renames a record
DBL_CalcFields() Updates FlowFields in a record
Transaction Functions
Function Purpose
DBL_BWT() Begins a write transaction
DBL_EWT() Ends a write transaction
DBL_AWT() Aborts a write transaction
DBL_SelectLatestVersion() Selects the latest data version
12
Key Functions
Function Purpose
DBL_SetCurrentKey() Sets the current key for a table
DBL_GetCurrentKey() Retrieves the current key
DBL_KeyCount() Counts the keys
DBL_NextKey() Scans the keys of a table
DBL_KeySQLIndexFields() Retrieves the SQLIndexFields of a key
DBL_KeySumFields() Retrieves the SumIndexFields of a key
Filter Functions
Function Purpose
DBL_SetFilter() Sets a filter for a field
DBL_GetFilter() Retrieves the current filter
DBL_SetRange() Sets a range filter for a field
DBL_GetRange() Retrieves the current range filter
Conversion Functions
Function Purpose
DBL_Field_2_Str() Converts a value to a string
DBL_YMD_2_Date() Converts date elements to DATE type
DBL_Date_2_YMD() Converts a DATE type to date units
DBL_DateFormula_2_Str() Converts a DateFormula to a string
DBL_Datetime_2_Str() Converts a Datetime to a string
DBL_Datetime_2_Str_Ex() Converts a Datetime to an extended string
DBL_Datetime_2_YMDHMST() Converts a Datetime to years, months, days, hours, minutes, seconds,
and, thousandths of a second
DBL_Datetime_2_YMDHMST_Ex() Converts a Datetime to years, months, days, hours, minutes, seconds
and thousandths of a second and enables you display it as UTC or local
time
DBL_Duration_2_Str() Converts a Duration to a string
DBL_HMST_2_Time() Converts time elements to TIME type
DBL_Time_2_HMST() Converts TIME type to time units
DBL_Alpha_2_Str() Converts ALPHA type to string
DBL_Str_2_Alpha() Converts string to ALPHA type
13
BCD Functions
Function Purpose
DBL_BCD_2_Str() Converts a BCD number to a string
DBL_Str_2_BCD() Converts a string to a BCD number
DBL_BCD_2_Double() Converts a BCD number to a double
DBL_Double_2_BCD() Converts a double to a BCD number
DBL_BCD_2_S32() Converts a BCD number to an S32
DBL_S32_2_BCD() Converts an S32 to a BCD number
DBL_BCD_IsZero() Tests if a BCD number has a value of zero
DBL_BCD_IsNegative() Tests if a BCD number is negative
DBL_BCD_IsPositive() Tests if a BCD number is positive
DBL_BCD_Div() Divides one BCD number by another BCD number
DBL_BCD_Mul() Multiplies one BCD number by another BCD number
DBL_BCD_Add() Adds two BCD numbers together
DBL_BCD_Sub() Subtracts one BCD number from another BCD number
DBL_BCD_Abs() Returns the absolute value of a BCD number
DBL_BCD_Neg() Reverses the sign of a BCD number
DBL_BCD_Power() Raises a BCD number to a power
DBL_BCD_Sgn() Returns the sign of a BCD number
DBL_BCD_Cmp() Compares one BCD number to another BCD number
DBL_BCD_Trunc() Truncates a BCD number
DBL_BCD_Round() Rounds a BCD number
DBL_BCD_RoundUnit() Rounds a BCD number to a unit
DBL_BCD_Make() Returns a BCD number
14
Security
Security is vitally important to Microsoft and its customers. Make sure that you develop and implement
your solution by adhering to industry-standard security technology. You can get an overview of the
Microsoft Dynamics NAV Security Model (which also applies to Microsoft Dynamics Entrepreneur) in
Chapter 3 of the Application Designer’s Guide. You can also read the Microsoft Dynamics NAV Security
Hardening Guide. Both documents are available on the Microsoft Dynamics NAV Developer
Documentation referenced in the More information section.
When designing applications, consider helping to secure the data by using firewalls and encryption. This
involves building new security roles or modifying existing ones for Microsoft Dynamics Entrepreneur.
For general background information and to stay current about issues regarding security in application
development, visit MSDN and review the security documentation regularly.
For more background information, read ―Writing Secure Code, Second Edition‖ by Michael Howard and
David LeBlanc. The safety of your development code is another important consideration. You need to
control who has access to the code in the development cycle, and make sure changes are controlled. A
source control tool will help you manage your code.
Developing an external control may have some upgrade benefits, because you link this functionality into
the existing C/SIDE environment with C/AL code. The control is easy to upgrade and the control might
not need to change in a new version. You must also consider controlling the security of the interface,
because forms developed in C/SIDE will enhance security by using the application security that is
provided in Microsoft Dynamics Entrepreneur. If you develop externally in .NET Framework, then you can
utilize authentication provided by the Windows operating system.
15
Tables
Modifying the data model is one of the main tasks that you will undertake to implement your vertical
functionality. You do this by adding new tables in your add-on number range, or by modifying existing
tables in the number range below 50,000. Follow best practices ISVs use to minimize upgrades and
migration and simplify development. Best practices include but are not limited to:
Avoid copying existing tables to implement new functionality. If you don't, you will have to
modify forms, reports, and codeunits that reference this table to make sure that the application
continues to function.
Consider normalizing the data model for additional information for your vertical solution.
You can store data in an additional table. This enables you to add one field to the parent table
with a reference to your vertical table, which minimizes the impact on the standard Microsoft
Dynamics NAV table. This can be used in conjunction with developing smaller componentized
forms. While this practice works well with master file-type information, it may not work with
journal-type tables, as you might have to change additional code in posting routines.
When working with OptionString properties on fields, leave room for Microsoft to add
new options in future releases. This will minimize the upgrade work that you will have to do if
there is a clash. You will have to move your option and update data, which can be a difficult task.
Consider this OptionString :
Red,Yellow,Brown
If you add a new option:
Red,Yellow,Brown,Pink
Then and Microsoft adds this new string:
Red,Yellow,Brown,Blue
Then the Microsoft string will override your data. You should add your string with
spaces.
Red,Yellow,Brown,,,,,,,,,,,,,,,,,,,,,Pink
The amount of spaces you add is up to you and how volatile the field could be, perhaps
somewhere around 10–20.
When developing the data model, consider the needs of keys and indexes and the number and
users of fields. Refer to the existing documentation, such as the Performance Troubleshooting
Guide and SQL Server Resource Kit, for guidance about performance of tables and database
design.
16
General,Communication,Invoicing,,,,,,,,,,,MyNewPage
17
Reports
Reports are the objects used to print information from Microsoft Dynamics Entrepreneur. Reports can
also be used to process data to mimic a batch process engine. Some best practices ISVs use for reports
include:
Consider copying when customizing reports. If you need to make complex customizations to
an existing report, consider copying the standard report to an object in your solutions object
number range. You will have to evaluate copying on a case-by-case basis, depending on the
functionality you are developing. You can use the Source Analysis features in the Microsoft
Dynamics NAV Developer’s Toolkit to check for references to the report, so you can understand
other objects that need to be changed. If the work that is needed to change references
outweighs the minimization of upgrade issues that could occur by copying the report, then you
should make the changes to the original report.
Explore options for external reports. If you have external reporting needs, such as reports that
need to be executed by users that don’t have access to the Microsoft Dynamics Entrepreneur
client, consider using SQL Server Reporting Services for transactional type reports.
Consider the C/AL business logic code you add to reports. Can the business logic be
separated and placed in a codeunit? Think of the report as the presentation system. By placing
the code in a codeunit, you make this code available to be called by other mechanisms. Perhaps
a report you write in SQL Server Reporting Services could make a call to the same business logic
through the Microsoft Dynamics NAV Application Server. Similary, if you develop an invoice
template in Word to give users an easier way to manipulate the layout of the invoice in a familiar
18
Codeunits
The Application Designer’s Guide (found in the Microsoft Dynamics NAV Developer Documentation
referenced in the More information section) provides a great reference for developing C/AL code. Best
practices that ISVs use for codeunits include the following:
When working with codeunits, avoid using code that will stop processes and wait for user
input. Functions like CONFIRM and STRMENU and other functions that halt the execution of
code should be carefully considered or avoided.
When developing functions in objects, consider where the function will be used. If it is
only on an object, create it on the object. If you are not calling the function from other
objects, consider making the function local by changing the local property where the function is
defined. This means that the function can only be seen and called effectively in this object,
similar to when you make a private variable declaration in other programming languages. This
has the added advantage that if you know the function has to be changed, then there is only one
object that will need to be tested. If it is global, then you can see other code referencing the
function with a tool such as the Microsoft Dynamics NAV Developer’s Toolkit.
Consider making a codeunit in your solution number range that contains your business
logic code. When the code needs to be referenced in standard codeunits, for example, 80 Sales-
Post, reference your codeunit with a variable, and pass the relevant variables that you need.
Remember to pass as a Ref variable, which enables you to minimize the code that you have to
insert into standard code. Using this method also enables you to work on your codeunit as a
black box and change it as needed. If the change is an upgrade, you will only have to merge the
reference to the new version. Where there are multiple changes needed in different parts of a
posting codeunit, consider creating different functions in a new codeunit, and then just reference
functions in the posting code. In these cases, ensure that you document your code effectively to
make it easier for a support engineer to read—they might have to jump around a lot and could
lose the flow of your code.
19
Menu System
The menu system is a way for users to find the functionality you’ve developed. When working with the
menu system, consider the following best practices:
If you are adding a new set of functionality, create a new menu to appear on the list of functional
areas such as Purchase and Warehouse.
If your solution is extending an existing standard Microsoft Dynamics Entrepreneur module,
make sure you add new menu items to the existing menu structure.
To effectively operate your vertical solution, consider changing the menu structure to one that is
better-suited to user roles in your vertical industry.
Using Comments
Regardless of your programming skills, you cannot work on a number of products and remember all the
reasons for code changes. You must document them. Commenting code is a great help for people who
may have to continue to develop and support your code.
As a best practice, avoid too many inline comments in your code; this will clutter it. In your comments,
make sure to add a reference number and the additional details in the documentation trigger. The
reference number should have some meaning relating back to a design specification or a support
tracking number from your support system. When you insert code or remove code, add a marker.
20
//>> XJZ1.0.1.2
TESTFIELD("Document Date");
//<< XJZ1.0.1.2
In this code example, a new line of code is inserted. In the documentation trigger, you add the reference
number XJZ1.01.2 and short additional comments. The build containing the information should exist in
your design specifications or support system. Make sure the same information is in both places.
When you change existing code to implement your vertical functionality, avoid deleting standard code.
Use comments to block the code out. This will appear in the source code compare tools to make it easier
to identify what you have done.
//>> XJZ1.0.1.3
//TESTFIELD("Document Date");
//<< XJZ1.0.1.3
Also, make sure that you use the comments features of your source control application. For example,
Microsoft Visual SourceSafe® enables you to add comments when you check out and check in your
updated object. This enables you to use the reporting functionality in the Source Control application to
get an overview of changes.
21
Internationalization
In your business plan, you have identified the geographic markets you would like to address with your
vertical solutions. Taking the solution to those markets could require localization.
Does the functionality in your vertical solution need to be localized? You have the domain knowledge, so
you are best qualified to answer this question, as it will vary between different functionality in different
industries. If the market you are going into has more government regulations than the countries you
already work in, it might require extra localization.
Translations
Your vertical solution may require you to change the standard definition of an entity in Microsoft
Dynamics Entrepreneur—for example, changing Customers to Clients. To do this, you will need to take
steps to translate the application. Remember to translate online Help and training materials, so that your
customers are aware of the change.
Create a terminology list of words and their context that need to be changed. You will need to do this so
that when a new version of Microsoft Dynamics Entrepreneur arrives, you can translate the base
application for your needs.
Tools
The Microsoft Dynamics Entrepreneur client provides the tools you need to work with languages.
Generally, you will translate the complete application or at least the new objects that you have created
and modified for your vertical functionality.
To extract the translation texts from Microsoft Dynamics Entrepreneur, you can use the Translate features
in the Microsoft Dynamics Entrepreneur client. In the Microsoft Dynamics Entrepreneur client, you can
use the Object Designer to filter down to your objects. (On the Tools menu, point to Translate, and then
click Export.) This will give you the option to export the translation texts to a text file. You can then have
this file translated.
The Microsoft Dynamics NAV Localization Workbench (NLW), which is also applicable for Microsoft
Dynamics Entrepreneur, is provided on the Microsoft Dynamics NAV Developer Documentation
referenced in the More information section. The NLW enables you to create a project to translate your
captions to a new language. The input for the NLW is the Translate Export file that is created from the
Microsoft Dynamics Entrepreneur client. After you have used the NLW to translate the text, you can
export to the language you need.
The NLW will generate a file that you can then use to import back into Microsoft Dynamics Entrepreneur.
(On the Tools menu, point to Translate, and then click Import.) Make sure you select the objects to be
updated before executing this menu.
Be careful when you import a translation back into Microsoft Dynamics Entrepreneur. All the objects that
you have selected will have the modified flag, date, and time stamps set to the import time. You can
work around this by exporting the object attributes first.
License Issues
When developing your localizations, you will need a license file that can access the different regional
databases. You also can make a special request to the Microsoft Operations Center to get a different
license file to use. To avoid delays, make sure you have a license before you need to start using it.
23
Daily Build
You should plan to create a build daily or, depending on the size of your project, at least two to three
times per week. The purpose of the daily build is to make sure that development is on track. If you are
not doing a daily build, it is difficult to test, and testing is the most important part of your development
cycle.
There are a number of steps to setting up a daily build process. Some may be manual, but to reduce
administrative tasks, you can automate most of the processes and start before leaving in the evening.
Use the following steps to set up a daily build:
1. Build an empty database on SQL Server. You can automate this process by using the Microsoft
Dynamics Entrepreneur client and building an empty database on SQL Server, for example, a
database named ―BUILD.‖ Take a backup of this database and store it on the server to use when
creating the daily build. You can restore the database by using a command line statement with
the Microsoft SQL Server osql utility. Alternatively, you can use the Microsoft Dynamics
Entrepreneur Client with a macro utility to create a new database on SQL Server.
2. Export all objects from the Source Control system. With VSS, you can automate exporting
with a command line using SS.exe. The command line looks like this: ss Get $/Entrepreneur –R.
The project name here is ―Entrepreneur.‖ By executing the command, you can extract the latest
version of all the objects from VSS as individual objects. The command will also export the
AllObjects.fob file that you create during the setup in VSS.
3. Create an individual TXT file for each object. You can make the import process simpler by
joining these into one big TXT file; for example, the command line copy *.txt AllObjects.txt can
run in the folder with the TXT files extracted from VSS.
4. Use the Microsoft Dynamics Entrepreneur client to import the AllObjets.fob file. Open the
Object Designer, click File, click Import all, and then locate the AllObjects.fob file. You need to
use one of these methods because you cannot import the TXT files straight into the empty
Microsoft Dynamics Entrepreneur database; you do not have insert permissions on your license
file to create objects below 50,000.
5. Use the same import procedure with the Microsoft Dynamics Entrepreneur client.
Importing the AllObjects.txt file in TXT format will force overwrite of the object, so be careful that
you are importing to the correct database.
6. The objects will now all be in an uncompiled state. Compile the objects. You can use a macro
utility to automate this process. You will have to manage and compile errors manually. Also the
machine on which you run the compile will have to have access to all the COM objects called by
the C/AL code. If you can’t set up a machine that includes these, import the already compiled
25
Database Consistency
If you are shipping a database to your customers or resellers to use in training or demo situations, make
sure it is a quality product by running the database test tools. You will find these tools in the Microsoft
Dynamics Entrepreneur client (On the File menu, point to Database, and then click Test). If you have
created demo data, make sure that all the tests pass, so that if a customer runs these in a pre-sales demo
situation the test will run without error.
26
Version Numbering
Version numbering is about managing the version of your product so that you can keep track of it. If you
know the version, developers and support staff can communicate issues; sales and marketing staff know
what features are included in the version they’re selling, and partners know what version they need.
Microsoft Dynamics Entrepreneur provides a field in the Object Designer that enables you to update the
version list. This is a simple text field that can give your channel partners and support staff a simple way
to identify the version of the object deployed. The version lists should be maintained as described in the
Microsoft Dynamics Entrepreneur 2008 Developer Guidelines referenced in the More information section.
27
Technical Communications
Documentation is your means of communicating what your solution does and how to use and maintain
it. The following documentation provides different functions that are critical to understanding the
product.
User manuals are important for end users to understand the functionality of your solution.
These are also useful to enable channel partners or end users to train themselves on the
functionality.
White papers describe a particular concept or a piece of functionality in more detail. You can
use marketing white papers in the sales process to provide a simplified description of a complex
concept or technology. You can also have technical white papers that provide a very detailed
examination of the topic concept.
Online Help provides the end user with easy access to descriptions of the functionality they are
currently using. The end user knows that F1 is a button they can always press to get Help. You
can extend and develop the online Help for your vertical solution by adding an extra Help topic.
Tools are provided on the Microsoft Dynamics NAV Developer Documentation referenced in the
More Information section, along with an Online Help Guide, for creating Microsoft Dynamics
Entrepreneur online Help. Adding online Help gives your solution a professional, packaged feel,
and it adds value for the end user.
Development documentation is also important. The source control system will enable you to
control changes to your development. Make sure you use the comments features in the source
control program to document why code has changed. This is an important tool because some
government regulations, for example, Sarbanes-Oxley, are starting to demand a high level of
tracking for why code has changed in development and who has changed it. At minimum, you
need to document where you have changed the base Microsoft Dynamics Entrepreneur, so that
adjustments in help, training, and implementation material can be developed.
Release Documentation
When you ship your business solution, you should also provide documentation. That documentation
should contain at least:
Changes documents that enable customer and partners to see what has changed in the product
release.
Product release documentation. This documentation might include fact sheets, data sheets,
product documentation, or training materials that describe the business solution in greater
detail.
28