Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletter Hub
Free Learning
Arrow right icon
timer SALE ENDS IN
0 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
Extending Microsoft Dynamics NAV 2016 Cookbook
Extending Microsoft Dynamics NAV 2016 Cookbook

Extending Microsoft Dynamics NAV 2016 Cookbook: Extend Dynamics NAV 2016 to win the business world

eBook
€24.99 €36.99
Paperback
€45.99
Subscription
Free Trial
Renews at €18.99p/m

What do you get with eBook?

Product feature icon Instant access to your Digital eBook purchase
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
OR
Modal Close icon
Payment Processing...
tick Completed

Billing Address

Table of content icon View table of contents Preview book icon Preview Book

Extending Microsoft Dynamics NAV 2016 Cookbook

Chapter 2. Advanced C/AL Development

In this chapter we will cover the following recipes:

  • Creating custom tables
  • Understanding database triggers
  • Implementing a user interface with pages
  • Linking datasources in subpages
  • Working with page triggers
  • Presenting related data in FactBoxes
  • Designing reusable code
  • Accessing temporary tables
  • Role-Tailored client and role centers
  • Assigning role centers to user profiles
  • Simplifying data access with queries
  • Improving performance with table indexes
  • Linking datasources with advanced queries
  • Exchanging data with XMLPort objects
  • Designing user menu
  • Referencing records and fields via RecordRef and FieldRef
  • Working with single instance codeunits
  • Running tasks in background sessions

Introduction

Each object type in Dynamics NAV has a designer associated with it. So far, we dealt with only one type - codeunit designer where you could write C/AL code. But different tasks, such as describing a table structure or designing a user interface in pages, require different tools. In this chapter we will have a closer look at all types of object designers presented in NAV development environment.

To make all the examples consistent, recipes in this chapter are presented in a form of a small add-on, each recipe expanding its functionality. We will see how to create a data model, present data in pages, move common code into codeunits, and create custom menus and a role center for the add-on.

Examples will be centered around a fictitious company selling goods that require a quality certificate to be sold. We will create a solution to store certificates, keep track of their validity, and block sales documents posting for items with an expired or invalid certificate.

Creating custom tables

Data is the core of any business application. We will start developing our solution from designing the data model. The first recipe will show how to create custom tables, set up field references and configure FlowFields that are calculated by the NAV platform based on table data.

How to do it...

In this recipe, we design the data model for the solution.

  1. Open Object Designer and select Table in the list of object types. Click New. Table designer will open.
  2. Each table field must have a number, a name, and a data type. Number 1 is already assign automatically. In the Field Name field enter No. and choose Code as Data Type. Finally, enter 20 in Length. This will create a Code[20] field.
  3. Move to the next empty line. Field No. will automatically increment. Enter CA Code in Field Name, Code in Data Type, and 20 in Length.
  4. Create other fields as given in the following table:

    Field No.

    Field Name

    Data Type

    Length

    1

    No.

    Code

    20

    2

    CA Code

    Code

    20

    3

    Item No...

Understanding database triggers

Data in the database is constantly changed - records are inserted, updated, deleted. Almost any user action results in data modification, and all modifications of data run application triggers.

How to do it...

In this recipe we will learn how to use some of the most important and frequently used table triggers to control data flow.

  1. Open table 50010 Item Certificate in object designer. Click C/AL Code in the View menu or press F9 to open table code. Open C/AL Globals and create two functions, DeleteCertificateActions and UpdateItemOnActions.
  2. Position cursor in the DeleteCertificateActions variable and declare a local record variable ItemCertificateAction:

    Name

    DataType

    Subtype

    ItemCertificateAction

    Record

    Item Certificate Action

  3. This is a simple function with lines of code in it:
            ItemCertificateAction.SETRANGE("Certificate No.","No."); 
            ItemCertificateAction.DELETEALL; 
    
  4. Move to the function UpdateItemOnActions...

Implementing a user interface with pages

The foundation of the user interface in Dynamics NAV, is the Page object. Pages can be used to represent table data, receive user input, and exhibit actions buttons.

C/AL code can be executed in pages to format data and process data received from the input.

How to do it...

In this recipe, we will implement the user interface based on pages, and write C/AL code formatting data in the page.

  1. In the object designer, select Page in the object types list and Click on New -- this action button will open the page designer.
  2. In the Table field of the page wizard, select table 50010 Item Certificate as the source table for the page, or just enter its name or ID manually.
  3. Chose Create a page using wizard option and select Card in the list of page types. Click OK:

    How to do it...

  4. Next step in the wizard will suggest you to create FastTabs on the page. Leave one tab named General, as per the default setup, then click Next.
  5. In the next step, we select table fields that will...

Linking datasources in subpages

Subpages are used to present related information linked to the master record shown in the page. A document header displayed in the main page with linked lines in a subpage is a typical example.

Subpage always has a rule linking it to its master page, and it is always updated in response to any action in the master page. In NAV 2016 it is possible to update the master page after modifying data in a subpage.

How to do it...

In current recipe, we will create a subpage presenting the list of actions performed on a certificate.

  1. Create a new page in object designer.
  2. Set table 50012 Item Certificate Action as a source table for the new page.
  3. Choose the Create a page using a wizard option and select the ListPart page type.
  4. Select the following fields to be presented in the page:
    • Action Date
    • Action Type
    • Expiration Date

  5. Finish and save as page 50012 Item Certificate Subform.
  6. Design the page 50010 Item Certificate Card and add a line below the last field:
    • Type =...

Introduction


Each object type in Dynamics NAV has a designer associated with it. So far, we dealt with only one type - codeunit designer where you could write C/AL code. But different tasks, such as describing a table structure or designing a user interface in pages, require different tools. In this chapter we will have a closer look at all types of object designers presented in NAV development environment.

To make all the examples consistent, recipes in this chapter are presented in a form of a small add-on, each recipe expanding its functionality. We will see how to create a data model, present data in pages, move common code into codeunits, and create custom menus and a role center for the add-on.

Examples will be centered around a fictitious company selling goods that require a quality certificate to be sold. We will create a solution to store certificates, keep track of their validity, and block sales documents posting for items with an expired or invalid certificate.

Creating custom tables


Data is the core of any business application. We will start developing our solution from designing the data model. The first recipe will show how to create custom tables, set up field references and configure FlowFields that are calculated by the NAV platform based on table data.

How to do it...

In this recipe, we design the data model for the solution.

  1. Open Object Designer and select Table in the list of object types. Click New. Table designer will open.

  2. Each table field must have a number, a name, and a data type. Number 1 is already assign automatically. In the Field Name field enter No. and choose Code as Data Type. Finally, enter 20 in Length. This will create a Code[20] field.

  3. Move to the next empty line. Field No. will automatically increment. Enter CA Code in Field Name, Code in Data Type, and 20 in Length.

  4. Create other fields as given in the following table:

    Field No.

    Field Name

    Data Type

    Length

    1

    No.

    Code

    20

    2

    CA Code

    Code

    20

    3

    Item No.

    Code...

Understanding database triggers


Data in the database is constantly changed - records are inserted, updated, deleted. Almost any user action results in data modification, and all modifications of data run application triggers.

How to do it...

In this recipe we will learn how to use some of the most important and frequently used table triggers to control data flow.

  1. Open table 50010 Item Certificate in object designer. Click C/AL Code in the View menu or press F9 to open table code. Open C/AL Globals and create two functions, DeleteCertificateActions and UpdateItemOnActions.

  2. Position cursor in the DeleteCertificateActions variable and declare a local record variable ItemCertificateAction:

    Name

    DataType

    Subtype

    ItemCertificateAction

    Record

    Item Certificate Action

  3. This is a simple function with lines of code in it:

            ItemCertificateAction.SETRANGE("Certificate No.","No."); 
            ItemCertificateAction.DELETEALL; 
    
  4. Move to the function UpdateItemOnActions. Declare a local...

Implementing a user interface with pages


The foundation of the user interface in Dynamics NAV, is the Page object. Pages can be used to represent table data, receive user input, and exhibit actions buttons.

C/AL code can be executed in pages to format data and process data received from the input.

How to do it...

In this recipe, we will implement the user interface based on pages, and write C/AL code formatting data in the page.

  1. In the object designer, select Page in the object types list and Click on New -- this action button will open the page designer.

  2. In the Table field of the page wizard, select table 50010 Item Certificate as the source table for the page, or just enter its name or ID manually.

  3. Chose Create a page using wizard option and select Card in the list of page types. Click OK:

  4. Next step in the wizard will suggest you to create FastTabs on the page. Leave one tab named General, as per the default setup, then click Next.

  5. In the next step, we select table fields that will be presented...

Linking datasources in subpages


Subpages are used to present related information linked to the master record shown in the page. A document header displayed in the main page with linked lines in a subpage is a typical example.

Subpage always has a rule linking it to its master page, and it is always updated in response to any action in the master page. In NAV 2016 it is possible to update the master page after modifying data in a subpage.

How to do it...

In current recipe, we will create a subpage presenting the list of actions performed on a certificate.

  1. Create a new page in object designer.

  2. Set table 50012 Item Certificate Action as a source table for the new page.

  3. Choose the Create a page using a wizard option and select the ListPart page type.

  4. Select the following fields to be presented in the page:

    • Action Date

    • Action Type

    • Expiration Date

  5. Finish and save as page 50012 Item Certificate Subform.

  6. Design the page 50010 Item Certificate Card and add a line below the last field:

    • Type = Part

    • SubType...

Working with page triggers


Page triggers are used to change the way page data is presented to the user. In this recipe, we will use triggers to calculate a value that will be displayed in the page "on-the-fly", when a record in retrieved from the database. Besides, trigger code will update the style of text boxes depending on the data displayed in them.

How to do it...

To illustrate the data presentation in a page, we write page trigger code highlighting expired certificates to draw user's attention to entries demanding immediate action.

  1. Open the page 50010 Item Certificate Card in page designer. Declare a global variable ExpirationDate of the Date type.

  2. Insert a new field in the General group, just below the field Issued Date. Set SourceExpr = ExpirationDate to make the ExpirationDate variable as the data source for the new field.

  3. Open the C/AL Code page. Declare a function GetCertificateExpirationDate.

  4. Open function parameters and add one parameter:

    Name

    DataType

    Length

    CertificateNo...

Presenting related data in FactBoxes


FactBoxes are subpages presenting information related to the main page, but considered less important than the main content. This is an auxiliary page that can be minimized or completely removed from the view when it is not needed.

How to do it...

This recipe creates a FactBox to present information about item certificates in sales orders.

  1. Create a new page in page designer.

  2. Select the table 50010 Item Certificate as a source for the page. Choose Create a page using a wizard option and select the page type CardPart.

  3. Add fields to the page:

    • No.

    • Certification Authority

    • Issued Date

  4. The FactBox page must display the certificate expiration date the same way as it is shown in the Item Certificate Card page. In the next recipe we will see how to reuse the function we already have in page 50010. For now, let's copy the function to the new page.

  5. Declare two global variables: ExpirationDate of type Date and IsCertificateOverdue of type Boolean.

  6. Close variable declarations...

Designing reusable code


Code modules in NAV are called codeunits. A codeunit does not have any user interface; the only purpose of a codeunit object is to store application code that can be called from other objects.

How to do it...

Now we will create a codeunit that will store functions common for objects in the current chapter, and move duplicated code from different objects into the codeunit.

  1. Create a new codeunit in object designer. Save it as codeunit 50010 Item Certificate Mgt.

  2. Declare a global function GetCertificateExpirationDate.

  3. Select the function in C/AL Globals list and open its properties. By default, property Local is set to Yes. Change it to No to make the function accessible from other objects.

  4. Open function parameters in C/AL Locals and declare one parameter:

    Name

    Type

    Length

    CertificateNo

    Code

    20

  5. Still in C/AL Locals, add a local variable to the function:

    Name

    DataType

    Subtype

    ItemCertificateAction

    Record

    Item Certificate Action

  6. Change the function...

Accessing temporary tables


Temporary tables, created in server memory instead of the database, are widely used to store the interim results of complex calculations. Temp tables can be used as buffers for data presented to the user, when the dataset cannot be obtained directly from a table.

An example of such dataset can be a list of certificates issued or prolonged in the past year, that have not been revoked and not yet expired. While it is possible to construct a SQL query that will collect this data from a join of several tables, C/AL code for this task will be a little more intricate and requires a temporary storage for the records.

How to do it...

In this recipe, a temporary table is used to store a list of certificates collected in a C/AL function. The table will be used as a data source for a page to present the data to the user.

  1. Edit the codeunit 50010 Item Certificate Mgt. and declare a global function CollectProlongedNotRevokedCertificates. To allow the function to be called from other...

Role-Tailored client and role centers


Role center is a special type of page created through the page designer. Usually role centers include a number of subpages.

Typical role center is not a single page, but a container with a number of subbpages presenting different dataset under various angles. Therefore, creating and configuring a role center may be a complicated task that requires creating many auxiliary tables and pages.

How to do it...

In this recipe, we will develop a role center for our custom solution to present the most important information in one screen.

  1. Create a table with the following fields:

    Field No.

    Field Name

    Data Type

    Length

    Field Class

    1

    Primary Key

    Code

    10

    Normal

    2

    Certificates - Total

    Integer

    FlowField

    3

    Certificates - Issued

    Integer

    FlowField

    4

    Certificates - Revoked

    Integer

    FlowField

    5

    Date Filter

    Date

    FlowFilter

    6

    Future Period Filter

    Date

    FlowFilter

  2. Select field 2 Certificates - Total and change its CalcFormula property to...

Assigning role centers to user profiles


The role center is the central access point to everyday tasks for the user. This is what he or she will see first when launching the application, and the role center page should be configured accordingly. Role centers are assigned to users in agreement with their roles in the organization.

Getting ready

In this recipe you will assign the role center created in the previous demo, to a user profile. In order to do it, you will need all object from the Role-Tailored client and role centers recipe imported and compiled.

How to do it...

Now we will assign the custom role center to a user account to make it the user's homepage:

  1. In the application menu, open /Departments/Administration/Application Setup/RoleTailored Client/Profiles, or type Profiles in the Search field and select the Profiles page in the search results.

  2. In the Profiles page, click New to create a new user profile.

  3. Enter profile ID. Name CERT MANAGER and Certification Manager in the Description.

  4. Click...

Simplifying data access with queries


Structures of NAV client application language allow accessing only one table at a time, there is no C/AL structure that would enable a table join in one statement. This limitation often affects the performance of C/AL code, forcing the developer to use loops on table records where a single query would be sufficient. With a Query object, developers can overcome this limitation and create queries joining several tables.

How to do it...

In this recipe, we will create a query object calculating profit per item, and use the query as a data source for a page.

  1. In the first step, we will add a field to the Item table that will specify if an item certificate is required to post an item entry. Open the table 27 Item in table designer and insert the field:

    Field No.

    Field Name

    Data Type

    50100

    Certificate Required

    Boolean

  2. Save the modification in the table. Switch to the page designer and open the page 30 Item Card. Insert the field Certificate Required in...

Improving performance with indexes


Selecting data from a large table with millions of records can be a very slow process when records are scanned directly. A good index can drive search queries many times faster. We will see how to control table indexed from the NAV development environment.

How to do it...

This recipe shows how to create indexes in a table to improve the performance of queries from the previous recipe.

  1. In the list of keys, move to the empty line below the primary key No. and click the assist button on the right.

  2. Open table 50010 Item Certificate in object designer and click View | Keys.

  3. In the Fields List window, add two fields to the index:

    • Item No.

    • CA Code

  4. Click OK, then close key's list and save the table:

  5. Open table 5802 Value Entry in table designer, go to key's definition.

  6. Add a key containing two fields: Item No. and Certificate No..

    Certificate No. is a custom field added in the recipe Creating Custom Tables.

  7. Click the assist button in the SumIndexFields field and add two...

Linking datasources with advanced queries


The data item property DataItemLinkType specifies how the tables will be joined in the query. Besides two basic types, there is an option that allows the developer to enable advanced options and perform right outer joins, full outer joins, and cross joins.

How to do it...

In this recipe , we will build a Query object with full outer join between two tables to see detailed information on customer discount groups configuration:

  1. Create a Query object in object designer.

  2. Insert a data item with the Customer table as data source.

  3. Include two columns from the Customer table: No. and Name.

  4. Add another data item Customer Discount Group.

  5. Include two fields from the Discount group: Code and Description:

  6. Open the properties for customer discount group data item and choose SQL Advanced Options in the DataItemLinkType property.

  7. The new property, SQLJoinType will become available. Select FullOuterJoin.

  8. Open link editor in the DataItemLink property and configure the link...

Left arrow icon Right arrow icon
Download code icon Download Code

Key benefits

  • •Extend Dynamics in a cost-effective manner by using tools that are ready at your disposal
  • •Solve common business problems with the valuable features and flexibility of Dynamics NAV
  • •Follow practical and easy-to-grasp examples, illustrations, and coding to make the most out of Dynamics NAV in your organisation

Description

Microsoft Dynamics NAV is an enterprise resource planning (ERP) software suite for organizations. The system offers specialized functionality for manufacturing, distribution, government, retail, and other industries. Its integrated development environment enables customizations with minimal disruption to business processes. The book starts explaining the new features of Dynamics NAV along with how to create and modify a simple module. Moving on, you will learn the importance of thinking beyond the boundaries of C/AL development and the possibilities opened by with it. Next, you will get to know how COM can be used to extend the functionalities of Dynamics NAV. You’ll find out how to extend the Dynamics NAV 2016 version using .NET interoperability and will see the steps required to subscribe to .NET events in order to extend Dynamics NAV. Finally, you’ll see the cmdlets available to manage extension packages. By the end of the book, you will have the knowledge needed to become more efficient in selecting the extending methods, developing and deploying them to the Dynamics NAV, and practicing the best practices.

Who is this book for?

This book is for Dynamics NAV developers and administrators who have a good knowledge level and understanding of Dynamics NAV application development and administration.

What you will learn

  • •Develop a module in Dynamics NAV using C/AL
  • •Build relationships with COM technologies
  • •Develop and integrate COM with Dynamics NAV 2016
  • •Call the framework members from C/AL
  • •Develop an event in the .NET framework and see how to subscribe to it using C/AL
  • •Automate the deployment into Dynamics NAV
  • •Develop Windows Client Control add-Ins
  • •Deploy your resource automatically from Visual Studio
  • •Install and Configure Windows Client Control add-Ins
  • •Integrate Dynamics NAV with Sharepoint

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Jan 19, 2017
Length: 458 pages
Edition : 1st
Language : English
ISBN-13 : 9781786468512
Vendor :
Microsoft
Languages :

What do you get with eBook?

Product feature icon Instant access to your Digital eBook purchase
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
OR
Modal Close icon
Payment Processing...
tick Completed

Billing Address

Product Details

Publication date : Jan 19, 2017
Length: 458 pages
Edition : 1st
Language : English
ISBN-13 : 9781786468512
Vendor :
Microsoft
Languages :

Packt Subscriptions

See our plans and pricing
Modal Close icon
€18.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
€189.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts
€264.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total 137.97
Extending Microsoft Dynamics NAV 2016 Cookbook
€45.99
Mastering Microsoft Dynamics NAV 2016
€45.99
Programming Microsoft Dynamics NAV
€45.99
Total 137.97 Stars icon

Table of Contents

10 Chapters
1. Writing Basic C/AL Code Chevron down icon Chevron up icon
2. Advanced C/AL Development Chevron down icon Chevron up icon
3. Reporting and Data Analysis Chevron down icon Chevron up icon
4. .NET Interoperability in C/AL Chevron down icon Chevron up icon
5. Extending C/AL with COM Components Chevron down icon Chevron up icon
6. SharePoint Integration Chevron down icon Chevron up icon
7. Control Add-ins Chevron down icon Chevron up icon
8. Web Services Chevron down icon Chevron up icon
9. Events and Extension Packages Chevron down icon Chevron up icon
10. PowerShell Chevron down icon Chevron up icon

Customer reviews

Rating distribution
Full star icon Full star icon Full star icon Full star icon Empty star icon 4
(1 Ratings)
5 star 0%
4 star 100%
3 star 0%
2 star 0%
1 star 0%
Colin G. Bradley Jan 01, 2018
Full star icon Full star icon Full star icon Full star icon Empty star icon 4
Written by a Russian speaker so don't expect perfect English grammar.That aside, it gives clues and in some cases, a lot of detail.To do the job as well as I would like would need several volumes I expect but have found answers to several tricky issues.Forums are still the first port of call for me but this is good to read in bed so you can dream of code or give yourself a list of things to try next day.
Amazon Verified review Amazon
Get free access to Packt library with over 7500+ books and video courses for 7 days!
Start Free Trial

FAQs

How do I buy and download an eBook? Chevron down icon Chevron up icon

Where there is an eBook version of a title available, you can buy it from the book details for that title. Add either the standalone eBook or the eBook and print book bundle to your shopping cart. Your eBook will show in your cart as a product on its own. After completing checkout and payment in the normal way, you will receive your receipt on the screen containing a link to a personalised PDF download file. This link will remain active for 30 days. You can download backup copies of the file by logging in to your account at any time.

If you already have Adobe reader installed, then clicking on the link will download and open the PDF file directly. If you don't, then save the PDF file on your machine and download the Reader to view it.

Please Note: Packt eBooks are non-returnable and non-refundable.

Packt eBook and Licensing When you buy an eBook from Packt Publishing, completing your purchase means you accept the terms of our licence agreement. Please read the full text of the agreement. In it we have tried to balance the need for the ebook to be usable for you the reader with our needs to protect the rights of us as Publishers and of our authors. In summary, the agreement says:

  • You may make copies of your eBook for your own use onto any machine
  • You may not pass copies of the eBook on to anyone else
How can I make a purchase on your website? Chevron down icon Chevron up icon

If you want to purchase a video course, eBook or Bundle (Print+eBook) please follow below steps:

  1. Register on our website using your email address and the password.
  2. Search for the title by name or ISBN using the search option.
  3. Select the title you want to purchase.
  4. Choose the format you wish to purchase the title in; if you order the Print Book, you get a free eBook copy of the same title. 
  5. Proceed with the checkout process (payment to be made using Credit Card, Debit Cart, or PayPal)
Where can I access support around an eBook? Chevron down icon Chevron up icon
  • If you experience a problem with using or installing Adobe Reader, the contact Adobe directly.
  • To view the errata for the book, see www.packtpub.com/support and view the pages for the title you have.
  • To view your account details or to download a new copy of the book go to www.packtpub.com/account
  • To contact us directly if a problem is not resolved, use www.packtpub.com/contact-us
What eBook formats do Packt support? Chevron down icon Chevron up icon

Our eBooks are currently available in a variety of formats such as PDF and ePubs. In the future, this may well change with trends and development in technology, but please note that our PDFs are not Adobe eBook Reader format, which has greater restrictions on security.

You will need to use Adobe Reader v9 or later in order to read Packt's PDF eBooks.

What are the benefits of eBooks? Chevron down icon Chevron up icon
  • You can get the information you need immediately
  • You can easily take them with you on a laptop
  • You can download them an unlimited number of times
  • You can print them out
  • They are copy-paste enabled
  • They are searchable
  • There is no password protection
  • They are lower price than print
  • They save resources and space
What is an eBook? Chevron down icon Chevron up icon

Packt eBooks are a complete electronic version of the print edition, available in PDF and ePub formats. Every piece of content down to the page numbering is the same. Because we save the costs of printing and shipping the book to you, we are able to offer eBooks at a lower cost than print editions.

When you have purchased an eBook, simply login to your account and click on the link in Your Download Area. We recommend you saving the file to your hard drive before opening it.

For optimal viewing of our eBooks, we recommend you download and install the free Adobe Reader version 9.