Microsoft® Dexterity Dexterity Utilities Release 12

Copyright Copyright © 2012 Corporation. All rights reserved.

Limitation of liability This document is provided “as-is”. Information and views expressed in this document, including URL and other Internet Web site references, may change without notice. You bear the risk of using it.

Some examples depicted herein are provided for illustration only and are fictitious. No real association or connection is intended or should be inferred.

Intellectual property This document does not provide you with any legal rights to any intellectual property in any Microsoft product.

You may copy and use this document for your internal, reference purposes.

Trademarks Microsoft, Dexterity, , and Windows are trademarks of the Microsoft group of companies. FairCom and -tree Plus are trademarks of FairCom Corporation and are registered in the United States and other countries.

All other trademarks are property of their respective owners.

Warranty disclaimer Microsoft Corporation disclaims any warranty regarding the sample code contained in this documentation, including the warranties of merchantability and fitness for a particular purpose.

License agreement Use of this product is covered by a license agreement provided with the software product. If you have any questions, please call the Microsoft Dynamics GP Customer Assistance Department at 800-456-0025 (in the U.S. or Canada) or +1-701-281-6500.

Publication date December 2012 Contents

Introduction ...... 2 What’s in this manual ...... 2 What’s new in Dexterity Utilities ...... 2 Symbols and conventions...... 3

Part 1: ...... 6

Chapter 1: Getting Started ...... 7 Basic components ...... 7 Launching Dexterity Utilities...... 7 Dexterity Utilities terms...... 8 Working with dictionaries...... 10

Chapter 2: The Dexterity Utilities Interface...... 11 The main menu ...... 11 The toolbar...... 12 The menu bar...... 13

Part 2: Utility Reference...... 16 Utility Summary ...... 17

Chapter 3: Transfer Utilities...... 21 Transferring resources...... 22 Transferring strings and messages...... 29 Transferring windows...... 31 Transferring dictionary modules...... 33 Developer update ...... 35

Chapter 4: Script Utilities ...... 37 Compiling form scripts...... 38 Compiling global procedures ...... 40 Compiling global functions...... 42 Searching and replacing...... 44

DEXTERITY UTILITIES i CONTENTS

Chapter 5: Resource Utilities...... 47 Changing the dictionary core ...... 48 Updating series resources...... 50

Chapter 6: Inquiry Utilities...... 53 Viewing form information ...... 54 Viewing resource information...... 55

Chapter 7: Dictionary Utilities ...... 57 Synchronizing a dictionary...... 58 Using the packaging utilities...... 59 Compressing dictionaries ...... 60 Creating chunk dictionaries ...... 61 Comparing dictionaries...... 67 Adding product information...... 69 Extracting ...... 72 Expanding windows...... 74 SQL Compatibility ...... 75 Auto-Chunk ...... 78 Converting a user interface...... 82 Changing Evaluate After ...... 90

Part 3: Report Reference...... 94 Printing reports ...... 94 Information about the sample reports ...... 94 Reports summary...... 95 Forms Report ...... 101 Reports Report...... 104 Tables Report ...... 106 Global Functions Report ...... 109 Global Procedures Report...... 111 Global Resources Report...... 113 Local Resources Report ...... 116 Resource Lists ...... 119 Global Resource Usage Report...... 122 Local Resource Usage Report...... 126

ii DEXTERITY UTILITIES CONTENTS

Linked Prompt Report ...... 129 Diagnostics Report (Emergency Diagnostics) ...... 132 Summary Reports ...... 137 Cross Link Analysis Report...... 140 Prompt Overflow Report...... 142 Referential Diagnostics Report ...... 144 Table Relationships Validation Report ...... 147 Resource ID Validation Report ...... 149

Appendix...... 152

Appendix A: Dictionary Structure ...... 153 Parts of a dictionary...... 154 Types of modules...... 155 Dictionary cores ...... 155 Resources stored in modules...... 157 Form modules ...... 158 Report modules...... 158

Glossary...... 159

Index...... 165

DEXTERITY UTILITIES iii iv DEXTERITY UTILITIES INTRODUCTION Introduction

Welcome to Microsoft® Dexterity Utilities, an integral component of the Dexterity development system. Dexterity Utilities provides utilities and reports that help you manage dictionaries created with Dexterity. You’ll use the various utilities and reports in Dexterity Utilities throughout the application development process. What’s in this manual

Following is a list of the parts of the Dexterity Utilities manual, with a short description of each.

• Part 1, Basics, explains how to get started with Dexterity Utilities and introduces terms and concepts used in this manual. The Dexterity Utili- ties interface is also described.

• Part 2, Utility Reference, describes the various transfer, script, resource, inquiry and dictionary utilities that are available in Dexterity Utilities.

• Part 3, Report Reference, describes the various reports that are available in Dexterity Utilities. What’s new in Dexterity Utilities

A scrolling window update feature has been added to the user interface conversion utility. This utility will properly set the SetChangeFlag property for scrolling window fields.

The Product Information window and Compare Dictionaries window have been updated to reflect the new method of updating forms and reports dictionaries.

New Several other additions and changes available with this version of Dexterity Utilities are indicated throughout the manual by the New symbol.

2 DEXTERITY UTILITIES INTRODUCTION

Symbols and conventions

To help you use the Dexterity Utilities documentation more effectively, we’ve used the following symbols and conventions within the text to make specific types of information stand out.

Symbol Description The light bulb symbol indicates helpful tips, shortcuts and suggestions.

Warnings indicate situations you should be aware of when completing tasks with Dexterity Utilities.

Margin notes sum- Margin notes call attention to critical information, and marize important direct you to other areas of the documentation where information. a topic is explained.

New The New symbol indicates additions and changes available with this release of Dexterity Utilities.

Convention Description Part 1, Basics Bold type indicates the name of a part. Chapter 4, “Script Quotation marks indicate a chapter name. Utilities” Applying formats Italicized type indicates a section name. RUNTIME.EXE Words in uppercase indicate a file name. Software Acronyms are spelled out the first time they’re used. Development Kit (SDK) TAB or ALT+M Small capital letters indicate a key or a key sequence.

DEXTERITY UTILITIES 3 4 DEXTERITY UTILITIES PART 1: BASICS Part 1: Basics

Use this portion of the manual to become familiar with Dexterity Utilities. The information is divided into the following chapters:

• Chapter 1, “Getting Started,” describes the components necessary to run the utilities and explains how to start the utilities. It also includes a list of the terms used in Dexterity Utilities and describes the different methods of accessing dictionaries.

• Chapter 2, “The Dexterity Utilities Interface,” describes the toolbar and menu options available in Dexterity Utilities.

Be sure to review this information before you begin using Dexterity Utilities. Understanding the concepts will help you make better use of the utilities and reports.

6 DEXTERITY UTILITIES Chapter 1: Getting Started

You can begin using Dexterity Utilities immediately after you install it. This chapter describes what files are required to run Dexterity Utilities and introduces some new terms and concepts. Information is divided into the following sections:

• Basic components • Launching Dexterity Utilities • Dexterity Utilities terms • Working with dictionaries Basic components

When you installed Dexterity, you also should have installed Dexterity Utilities. The following table lists the files that are necessary to run Dexterity Utilities.

File Description DEXUTILS.EXE The Dexterity Utilities application. DEXUTILS.DIC A dictionary used by the Dexterity Utilities application. DEX.DIC The dictionary used by Dexterity and the runtime engine. Dexterity Utilities uses shared code from this dictionary. DEXUTILS.CHM The help file for Dexterity Utilities.

If the appropriate files haven’t been installed, refer to the installation instructions for information about installing Dexterity Utilities.

We recommend that you install Dexterity Utilities in the same location as Dexterity. Launching Dexterity Utilities

To ensure that Dexterity Utilities will function properly, the Dexterity Utilities application, its dictionary, and the DEX.DIC dictionary must be in the same location. To start Dexterity Utilities, locate and double-click the Dexterity Utilities icon in the folder where you installed Dexterity.

DEXTERITY UTILITIES 7 PART 1 BASICS

Dexterity Utilities terms

Several terms specific to Dexterity Utilities are used in this manual. You may want to familiarize yourself with them before beginning to use this application.

Block A block is the smallest element of a dictionary. All of the resources in the dictionary and internal information about the dictionary are composed of blocks.

Chunk dictionary A dictionary that contains only portions, or “chunks,” of information from a complete dictionary. Chunk dictionaries allow large dictionaries to be divided into more manageable pieces for delivery to customers. The runtime engine “unchunks” or merges the chunk dictionaries to recreate the complete dictionary. Chunk dictionaries are also used to update dictionaries.

Compile To run a script through a compiler. A compiler translates script instructions into a language that the computer can understand. Once the script has been compiled, the instructions within the script can be completed.

Compress The process of removing unneeded information (such as script source) and unused blocks from dictionaries. Dictionaries are typically compressed before being sent to customers.

Core module A group of related resources in a Dexterity dictionary that are used by several parts of the application. Resources such as fields, data types or strings are stored in core modules.

Core resources Resources such as strings, data types or global fields that are used by several parts of the application.

Destination dictionary The dictionary to which resources, strings and messages, windows, and dictionary modules will be transferred.

Dictionary module A group of related resources, such as those for a form or a report, that make up a subset of a larger dictionary. There are three types of dictionary modules: core modules, form modules and report modules.

Editable dictionary A dictionary that you can access in a read/write manner.

8 DEXTERITY UTILITIES CHAPTER 1 GETTING STARTED

Extract To copy the resources created for a third-party application from the Dynamics.dic dictionary to a new dictionary, excluding any main product resources.

Extracted dictionary The dictionary that is created when third-party resources are copied from the development dictionary to a new dictionary.

Resource An independent object such as a field, table, window or form, used to create Dexterity applications.

Series A means of grouping tables, table groups, forms and reports into categories. Dexterity Utilities allows you to generate reports and specify resources to work with based upon series.

Series resources Lists containing the names of forms, reports, tables and table groups in an application dictionary. These lists are used for security, the Work menu, palettes and table maintenance.

Synchronize The process of checking all relationships between resources in a dictionary and recalculating buffer sizes.

Source dictionary A read-only dictionary that is used as the source when transferring resources to a destination dictionary or generating dictionary reports.

Transfer To copy specified resources from a source dictionary to a destination dictionary.

DEXTERITY UTILITIES 9 PART 1 BASICS

Working with dictionaries

To effectively use Dexterity Utilities, you must understand how it works with dictionaries. A dictionary can be accessed in one of three ways:

•A source dictionary is opened in read-only mode. You’ll open a dictionary as a source dictionary when you want to generate reports about the dictionary or when you want to transfer resources from one dictionary to another dictionary.

•An editable dictionary is opened in read/write mode. You’ll open a dictionary as an editable dictionary when you want to update or mod- ify resources in it.

•A destination dictionary is opened in write mode. You’ll open a dictionary as a destination dictionary when you want to transfer resources to it from a source dictionary.

You can’t open a dictionary in more than one mode at a time. For instance, you can’t open the same dictionary as both a source and editable dictionary at the same time. Also, you can’t open a dictionary with Dexterity Utilities if the dictionary is in use by another application.

You can close a single dictionary by choosing the appropriate Close option from the File menu. All dictionaries are closed when you quit Dexterity Utilities. Dictionaries are also closed automatically when you open a different dictionary in the same mode. For example, if Dictionary A is open as a source dictionary, and you choose to open Dictionary B as a source dictionary, Dictionary A will be closed automatically.

You can use the Dictionaries menu to help keep track of which dictionaries are open.

10 DEXTERITY UTILITIES Chapter 2: The Dexterity Utilities Interface

This portion of the documentation describes the interface for Dexterity Utilities. It is divided into the following sections:

• The main menu • The toolbar • The menu bar The main menu

When you start Dexterity Utilities, the main menu will appear. This window allows you to access all of the utilities and reports that are part of Dexterity Utilities. The main menu is shown in the following illustration:

The menu bar includes the standard menus and the Dexterity Utilities menus.

The toolbar includes buttons that allow you to access the utilities and reports in Dexterity Utilities.

DEXTERITY UTILITIES 11 PART 1 BASICS

The toolbar

Each button that appears in the Dexterity Utilities toolbar represents one of the categories of operations you can perform. The following table lists the buttons on the toolbar and gives a short description of each:

This button Allows you to do this Transfer items from a source dictionary to a destination dictionary.

Compile selected scripts in the dictionary and search and replace items in scripts.

Generate various reports providing information about the dictionary.

Work with resources in a dictionary.

View lists of forms, tables and other resources in a dictionary.

Perform various utility procedures on a dictionary.

The individual utilities and reports accessed using these buttons are described in Part 2, Utility Reference, and Part 3, Report Reference.

The drop-down list on the right side of the toolbar serves two purposes:

• It sets the default series. Any place in Dexterity Utilities where the series can be specified will default to the same setting as the drop-down list on the toolbar.

• It specifies the dictionary core in which new core resources will be created. Refer to Appendix A, “Dictionary Structure,” for more infor- mation about core resources and dictionary cores.

12 DEXTERITY UTILITIES CHAPTER 2 THE DEXTERITY UTILITIES INTERFACE

The menu bar

This section describes the Dexterity Utilities menu items available.

File: Open Source Dictionary This menu item allows you to select a dictionary to open as a source dictionary. Only one source dictionary can be open at a time.

File: Close Source Dictionary This menu item closes the current source dictionary, if one is open.

File: Open Editable Dictionary This menu item allows you to select a dictionary to open as an editable dictionary. Only one editable dictionary can be open at a time.

File: Close Editable Dictionary This menu item closes the current editable dictionary, if one is open.

File: Open Destination Dictionary This menu item allows you to select a dictionary to open as a destination dictionary. Only one destination dictionary can be open at a time.

File: Close Destination Dictionary This menu item closes the current destination dictionary, if one is open.

File: Create New Dictionary This menu item allows you to create a new dictionary.

File: Close Window This menu item closes the currently active window.

File: Exit This menu item allows you to exit Dexterity Utilities.

Edit: Undo This menu item will undo the last cut, copy, paste, clear or keyboard entry in an editable field.

Edit: Cut/Copy/Paste These menu items allow you to cut, copy or paste text in editable fields.

Edit: Clear This menu item allows you to remove text from an editable field.

DEXTERITY UTILITIES 13 PART 1 BASICS

Edit: Select All This menu item allows you to select the contents of an editable field.

Macro: (all) This menu allows you to record and play macros in Dexterity Utilities. You can use macros to automate common utility tasks. Refer to Chapter 34, “Testing Your Application,” in Volume 2 of the Dexterity Programmer’s Guide for more information about the macro system.

Windows: This menu displays a list of the windows currently open in Dexterity Utilities. Selecting a window from this menu will make the window active.

Dictionaries: This menu displays a list of the dictionaries currently open in Dexterity Utilities. Its purpose is only to list the open dictionaries.

Help: Lookup This menu item opens any lookup window for the current field.

Help: Contents This menu item displays the contents topic for Dexterity Utilities online help.

Help: Search for Help On This menu item displays the search window for the help system, allowing you to search the Dexterity Utilities online help.

Help: Window Help This menu item displays help for the current window in Dexterity Utilities.

Help: How to Use Help This menu item displays help information describing how to use the help system.

Help: Online Manuals This menu item lists the online manuals available for Dexterity. The manuals are in Adobe Acrobat Portable Document (PDF) format.

Help: About Dexterity Utilities This menu item displays the About Dexterity Utilities window.

14 DEXTERITY UTILITIES PART 2: UTILITY REFERENCE Part 2: Utility Reference

Use this portion of the documentation to learn about the various utility procedures in Dexterity Utilities. The information is divided into the following chapters:

• Chapter 3, “Transfer Utilities,” describes the utilities used to transfer resources, strings and messages, windows, and dictionary modules from one dictionary to another. It also describes how to transfer third- party resources from a Dynamics.dic dictionary to a newer version of the dictionary.

• Chapter 4, “Script Utilities,” describes how to compile selected form scripts, procedures and functions in your application. It also describes how to search for and replace specified text in scripts.

• Chapter 5, “Resource Utilities,” describes how to change the core for core resources and update series resources.

• Chapter 6, “Inquiry Utilities,” explains how to display information about forms and other resources in a dictionary.

• Chapter 7, “Dictionary Utilities,” explains how to synchronize and compress dictionaries. Utilities to extract third-party resources from a Dynamics.dic dictionary, add product information to a dictionary, cre- ate chunk dictionaries for installation, and compare dictionaries are described. In addition, utilities used to create an international version of an application, test for SQL compatibility, and update your applica- tion’s interface are described.

16 DEXTERITY UTILITIES PART 2 UTILITY REFERENCE

Utility Summary

The following table summarizes the utilities available for various resources.

Category Action Utility to use Composites Transferring between Transfer Resources utility. Select dictionaries. Composites as the resource type. Constants Transferring between Transfer Resources utility. Select dictionaries. Constants as the resource type. Data Types Transferring between Transfer Resources utility. Select Data dictionaries. Types as the resource type. Dictionaries Adding product information. Product Information utility. Comparing two dictionaries. Compare Dictionaries utility. Compressing dictionaries. Compress Dictionary utility. Creating chunk dictionaries. Auto-Chunk utility or the Create Chunk Dictionary utility. Diagnosing dictionary Referential Diagnostics utility. problems. Extracting third-party resources Extract utility. from the Dynamics.dic dictionary. Preparing an application for SQL Compatibility utility. use with SQL. Preparing a dictionary for an Compare Dictionaries utility. update. Transferring an extracted Developer Update utility. dictionary back into the Dynamics.dic dictionary. Fields Transferring between Transfer Resources utility. Select Fields dictionaries. as the resource type. Formats Transferring between Transfer Resources utility. Select dictionaries. Formats as the resource type. Forms Displaying information about. Form Inquiry utility. Transferring between Transfer Resources utility. Select dictionaries. Forms as the resource type. Functions Compiling global functions. Compile Global Functions utility. Compiling form-level functions. Compile Form Scripts utility. Searching function scripts. Search and Replace utility. Transferring between Transfer Resources utility. Select dictionaries. Global Functions as the resource type. Global Variables Transferring between Transfer Resources utility. Select dictionaries. Global Variables as the resource type.

DEXTERITY UTILITIES 17 PART 2 UTILITY REFERENCE

Category Action Utility to use Messages Transferring between Transfer Resources utility. Select dictionaries. Messages as the resource type. Updating for international Transfer Strings and Messages utility. applications. Metafiles Transferring between Transfer Resources utility. Select dictionaries. Metafiles as the resource type. Pictures Transferring between Transfer Resources utility. Select dictionaries. Generic Pictures as the resource type. Procedures Compiling global procedures. Compile Global Procedures utility. Compiling form-level Compile Form Scripts utility. procedures. Searching procedure scripts. Search and Replace utility. Transferring between Transfer Resources utility. Select dictionaries. Global Procedures as the resource type. Reports Transferring between Transfer Resources utility. Select dictionaries. Reports as the resource type. Resources Changing core series of core Change Core utility. resources. Removing unused resources Global Resource Usage report from a dictionary. or Local Resource Usage report. Updating series resource lists. Series Resources utility. Scripts Compiling form scripts. Compile Form Scripts utility. Compiling global functions. Compile Global Functions utility. Compiling global procedures. Compile Global Procedures utility. Searching scripts. Search and Replace utility. Transferring global functions Transfer Resources utility. Select between dictionaries. Global Functions as the resource type. Transferring global procedures Transfer Resources utility. Select between dictionaries. Global Procedures as the resource type. Strings Transferring between Transfer Resources utility. Select dictionaries. Strings as the resource type. Updating for international Transfer Strings and Messages utility. applications. Tables Transferring between Transfer Resources utility. Select dictionaries. Tables as the resource type. Table Groups Transferring between Transfer Resources utility. Select Table dictionaries. Groups as the resource type.

18 DEXTERITY UTILITIES PART 2 UTILITY REFERENCE

Category Action Utility to use Windows Expanding the size of windows Expand Windows utility. and fields. Transferring between Transfer Window utility. dictionaries. Updating a user interface. User Interface Conversion utility.

DEXTERITY UTILITIES 19 20 DEXTERITY UTILITIES Chapter 3: Transfer Utilities

The Transfer utilities allow you to transfer resources, strings and messages, windows, and dictionary modules between dictionaries. You can also transfer third-party resources from a Dynamics.dic development dictionary to a newer version of the dictionary.

To perform a transfer, Before beginning a transfer, you must choose a source and a destination open a source and a dictionary. To open a source dictionary, choose Open Source Dictionary destination dictionary from the File menu and select the appropriate dictionary in the dialog box by choosing each item that will appear. To open a destination dictionary, choose Open Destination from the File menu and Dictionary from the File menu and select a dictionary using the same selecting the method. appropriate dictionary. If you want to transfer resources, strings and messages, windows, or dictionary modules into a new dictionary, choose Create New Dictionary from the File menu and specify the name and location of the dictionary in the dialog box that will appear. Then choose Open Destination Dictionary from the File menu and select the new dictionary.

Transferring items only copies them from the source dictionary to the destination dictionary. Transferring doesn’t remove items from the source dictionary.

The following topics are discussed:

• Transferring resources • Transferring strings and messages • Transferring windows • Transferring dictionary modules • Developer update

DEXTERITY UTILITIES 21 PART 2 UTILITY REFERENCE

Transferring resources

Resources are elements of application dictionaries, such as forms, tables and data types, that you’ve created using Dexterity. Transferring resources allows you to save time by copying a resource from one dictionary to another, instead of re-creating it in the destination dictionary.

To begin a transfer, select a source and a destination dictionary, then choose Resources from the Transfer menu to display the Transfer Resources window, shown in the following illustration.

These are the options for the transfer.

These drop-down lists specify the series and type of resource to transfer.

The resources to transfer will appear in this list.

1. Mark transfer options. Mark the appropriate transfer options for the resources you want to transfer. The selections you make will be applied to all transferred resources.

Skip Related Tables Mark this option if you are transferring tables, and you want to transfer only the selected tables. Dexterity Utilities won’t transfer tables related to the selected tables.

22 DEXTERITY UTILITIES CHAPTER 3 TRANSFER UTILITIES

Replace Referenced Resources This applies only to global fields, global data types and formats that are referenced by other resources. If this option is marked and the resources you’re transferring reference global fields, global data types or formats that already exist in the destination dictionary, these referenced resources will be replaced. If this option isn’t marked, only resources with names that are different from resources in the destination dictionary will be added; the existing referenced resources in the destination dictionary won’t be replaced.

If you replace referenced resources, be sure the Synchronize Dictionary option is marked. This will ensure any updated resources will be referenced properly in the destination dictionary.

As an example, suppose you’re transferring a form that uses the Customer Number field. If the Customer Number field doesn’t exist in the destination dictionary, it will be added to the destination dictionary. If the Customer Number field already exists in the destination dictionary, and Replace Referenced Resources isn’t marked, the Customer Number field won’t be replaced in the destination dictionary. If the Customer Number field already exists in the destination dictionary, and Replace Referenced Resources is marked, the field will be replaced in the destination dictionary.

In the previous example, you would mark the Replace Referenced Resources option if you had made changes to the Customer Number field, data type or format and wanted these changes transferred to the destination dictionary and used for the Customer Number field that already existed there.

If you’re transferring resources that don’t already exist in a destination dictionary or if the global fields, global data types or formats referenced by the resources you’re transferring haven’t changed, don’t mark Replace Referenced Resources. In these cases, transferring referenced resources won’t serve any purpose and the transfer could take much more time.

If you mark the Replace Referenced Resources option, all referenced resources for the items you’re transferring will be replaced. If you want to replace referenced resources for only a certain resource such as an individual field, transfer the resources individually.

DEXTERITY UTILITIES 23 PART 2 UTILITY REFERENCE

Create Series Resources Mark this option if you want to have series resources automatically created after the transfer and compile processes are completed. Series resources are lists of the forms, reports, tables and table groups in an application. These lists are used for security, palettes, table maintenance and the Work menu. Series resources are discussed in further detail in Chapter 5, “Resource Utilities.”

Synchronize Dictionary Mark this option if you want to automatically synchronize the destination dictionary as the final process in the transfer. Synchronizing a dictionary will recalculate buffer sizes, check all relationships between resources and ensure the proper data types and fields are referenced throughout the dictionary. Synchronizing is especially necessary if you’ve replaced referenced resources in the destination dictionary.

If this option isn’t marked, you should synchronize the dictionary once the transfer is complete by choosing Synchronize from the Utilities menu.

Compile Scripts Mark this option if you want all the scripts for the transferred items to be compiled after they’ve been transferred to the destination dictionary. If you mark the Compile Scripts option, a message will be displayed indicating whether all of the scripts compiled. If all scripts weren’t compiled, refer to the transfer report that will be created for a list of the compiler errors that occurred.

Because resources could be renumbered when they’re transferred, any scripts transferred must be compiled when they’re transferred to avoid “Not Found” errors when you attempt to use the destination dictionary. If any scripts will be transferred, be sure to mark the Compile Scripts option.

If the Compile Scripts option isn’t marked, the transferred scripts can be compiled using the Compile Form Scripts, Compile Global Procedures and Compile Global Functions utilities, which are discussed in Chapter 4, “Script Utilities.”

24 DEXTERITY UTILITIES CHAPTER 3 TRANSFER UTILITIES

Compiler Errors Only Mark this option if the only status messages you want printed on the transfer report are compiler errors. If this option isn’t marked, all status messages will be printed, including compiler error messages.

Compile Debug Mark this option to include debugging information in scripts, and to compile the debug and assert statements in your code. If you don’t mark this option, you won’t be able to use the Script Debugger, and the debug and assert statements won’t be executed. We recommend unmarking this option in the final version of your application to ensure optimal script performance.

2. Select a series and resource type. Select the series to which the resources being transferred belong. For example, if the resources to be transferred are part of the Sales series, select Sales and the existing Sales series resources will appear in the Resources list.

You can set a default series prior to opening the Transfer Resources window. Select the appropriate series from the Series list located on the toolbar. Once specified, the selected series will appear as the default whenever a series can be selected in a window.

Select the resource type that you want to transfer from the Resource Type list. Once the type is selected, you can select specific resources of that type to transfer.

You can transfer resources from different series and of different types at the same time. Insert the appropriate resources, as described in the next step, then select a different series or type.

Use the Show drop-down list to specify whether main product, third- party, or all resources are displayed in the Resources list.

3. Select resources to transfer. Select the resource you want to transfer by highlighting the resource in the Resources list and clicking Insert to display it in the Selected Resources list. Double-clicking the selection will perform the same function. Click the Insert All button to transfer all listed resources. You can use the Remove and Remove All buttons to remove items from the Selected Resources list.

DEXTERITY UTILITIES 25 PART 2 UTILITY REFERENCE

Resources are transferred based upon their names. If a resource of the same type with the same name exists in the destination dictionary, it will be replaced. The resource ID for the replaced resource in the destination dictionary will not change. If the resource doesn’t exist in the destination dictionary, it will be added and will be assigned the next available resource ID for that type of resource. It is very likely that the resource ID of the resource in the destination dictionary will be different than it was in the source dictionary.

When selecting the resources to transfer, keep in mind that many resources related to the resource you’re transferring will also be transferred. For example, when you transfer a field resource, the data type, composite, format and static picture resources for the field are transferred as well; you don’t have to transfer the related resources individually. The following table lists the additional resources that are transferred when you transfer a specific resource.

Resource being transferred Additional resources transferred Composites Fields and data types for fields in the composite Constants None Data types Composite for data type Format for data type Static pictures or text Fields Data type for field Composite for data type Format for data type Static pictures or text Forms Windows Global fields used in the form Data types for global fields\ Composites for data types Formats for data types Static pictures or text Local data types and local fields Strings in windows Pictures and native pictures Form, window and field scripts Form functions Form procedures Form menus and scripts Scrolling windows and scripts Tables attached to the form Any tables related to attached tables

26 DEXTERITY UTILITIES CHAPTER 3 TRANSFER UTILITIES

Resource being transferred Additional resources transferred Formats None Functions None Generic pictures None Globals Global field for the global variable Data type for field Composite for data type Format for data type Messages None Metafiles None Procedures None Reports Strings used for the report Tables attached to the report Table relationships Any related tables Strings None Tables Global fields in the table Data types for global fields Composites for fields Formats for fields Table relationships Any related tables * Keys for the table Restrictions applied to the table Table groups Tables in the table group Table relationships Any related tables * If the Skip Related Tables option is not marked

4. Set the series list on the toolbar. Refer to Appendix A, The series list on the right side of the toolbar indicates the dictionary “Dictionary Structure,” core in the destination dictionary in which any new core resources will for information about be created. Set this list to indicate the appropriate dictionary core. The dictionary cores and dictionary core any new core resources are created in won’t affect core resources. whether the transfer is successful, but it’s a good idea to create the core resources for your application in one dictionary core because they’ll be easier to manage.

DEXTERITY UTILITIES 27 PART 2 UTILITY REFERENCE

5. Transfer the selected resources. Click the Transfer button to transfer the resources in the Selected Resources list to the destination dictionary. The Report File Name dialog box will appear. Enter the name and location for the Transfer Resource Status Report file, then click OK to continue the transfer process, or click Cancel to return to the Transfer Resources window.

6. Use the status report to verify the transfer. Search the Dexterity Once the transfer is complete, the status report will be printed to a text online help for file. This report will list everything that was transferred and whether it Compiler messages to was simply added to the destination dictionary or whether it replaced see a list of compiler an existing resource in the destination dictionary. It also will list any error messages. compiler errors that occurred if you chose to compile scripts that were transferred.

The most common problem when transferring resources is errors compiling scripts. Use the Transfer Resource Status Report to track compiling errors. Common reasons for compiling errors include:

Refer to Chapter 4, • You haven’t transferred all necessary resources to the destination “Script Utilities,” for dictionary, such as constants, global variables, or other forms. information about Transfer these additional resources and then use the Compile Form using the Compile Scripts, Compile Global Procedures and Compile Global Functions Form Scripts, Compile utilities to compile scripts. Global Procedures and Compile Global • You used the Save Source menu item while in the script editor, so Functions utilities. only the script source was saved. Determine whether you trans- ferred any scripts for which only source was saved. If these scripts contain any errors, they won’t be compiled properly.

28 DEXTERITY UTILITIES CHAPTER 3 TRANSFER UTILITIES

Transferring strings and messages

A string is any static text that appears as a prompt, static text value, window display name, and so on. A message is created using the Messages window in Dexterity and referenced using the getmsg() function.

This utility is used only The Transfer Strings and Messages utility is used to transfer all strings and for making interna- messages in a dictionary to a separate dictionary so they can be updated for tional versions of an international versions of an application. After they’ve been updated, the application. strings and messages are transferred back into the application dictionary using this same utility.

Refer to Chapter 23, The resource IDs of the strings and messages, not the string or message “Strings,” in Volume 1 content, are used to determine whether a string or message exists in the of the Dexterity destination dictionary. Also, string and message resources aren’t Programmer’s Guide renumbered when they’re transferred using the Transfer Strings and for information about Messages utility. For these reasons, we recommend that you use this utility the Strings resource. only to transfer strings and messages from an application dictionary to a separate dictionary for updating using the Strings resource, and then back into the original application dictionary. If you want to transfer strings or messages from one dictionary to another for other purposes, use the Transfer Resources utility.

To begin a transfer, select a source and a destination dictionary, then choose Strings and Messages from the Transfer menu to display the Transfer Strings and Messages window, shown in the following illustration.

These lists select the type of resources to transfer and how the resources will be transferred.

1. Select resources to transfer. Specify whether you want to transfer strings, messages or both by making the appropriate selection from the Transfer Resources list.

DEXTERITY UTILITIES 29 PART 2 UTILITY REFERENCE

2. Select a transfer type. Use the Transfer Type list to specify whether only new strings or messages will be added to the destination dictionary, or whether existing strings or messages will be replaced and new ones added. If you select Add Only, only those strings and messages without corresponding strings and messages (those with the same resource IDs) in the destination dictionary will be transferred. If you select Replace and Add, any string or message in the destination dictionary that has the same resource ID as one being transferred will be replaced, and any new strings or messages will be added.

3. Transfer the selected resources. Click Transfer to transfer the strings, messages or both from the source dictionary to the destination dictionary. The Report File Name dialog box will appear. Enter the name and location for the Transfer Strings and Messages Status Report file, then click OK to continue the transfer process, or click Cancel to return to the Transfer Strings and Messages window.

4. Use the status report to verify the transfer. Once the transfer is complete, the status report will be printed to a text file. The report lists everything that was transferred and whether it was simply added to the destination dictionary or replaced an existing string or message.

30 DEXTERITY UTILITIES CHAPTER 3 TRANSFER UTILITIES

Transferring windows

Dexterity Utilities allows you to transfer a single window from a form in a source dictionary to a form having the same name in a destination dictionary. This utility allows new windows in multi-window forms that are prototyped by one programmer to be transferred to the dictionary of another programmer without affecting any other work that may have been done in the destination dictionary.

If the window exists in the destination dictionary, it will be replaced; otherwise, it will be added to the form it belongs to. After a window is transferred in this manner, use the Compile Form Scripts utility described in Chapter 4, “Script Utilities,” to compile any window or field scripts that were transferred.

To begin a transfer, select a source and a destination dictionary, then choose Window from the Transfer menu to display the Transfer Window window, shown in the following illustration.

The window selected in this list will be transferred to the destination dictionary.

1. Select the window to transfer. From the Forms list, select the form containing the window you want to transfer. The windows in the form will appear in the Windows list. Select the window you want to transfer.

DEXTERITY UTILITIES 31 PART 2 UTILITY REFERENCE

2. Transfer the selected window. Click the Transfer button to transfer the selected window to the destination dictionary. The Report File Name dialog box will appear. Enter the name and location for the Transfer Window Status Report file, then click OK to continue the transfer process, or click Cancel to return to the Transfer Window window.

Refer to Chapter 4, When you transfer a window, you’re also transferring any scrolling “Script Utilities,” for windows, global fields, global data types, local fields, local data types, information about composites, formats, strings and pictures used for the window that compiling window and don’t already exist in the destination dictionary. Any window, scrolling field scripts. window or field scripts will be transferred as well, though they won’t be compiled. Use the Compile Form Scripts utility to compile these scripts.

If a window exists in the destination dictionary with the same name as the one being transferred, that window will be replaced when the transfer occurs. For that reason, we recommend that you be aware of the windows included in each dictionary before performing the transfer. The Forms option in the Inquiry menu allows you to view names of windows associated with different forms within a dictionary.

3. Use the status report to verify the transfer. Once the transfer is complete, the status report will be printed to a text file. The report lists everything that was transferred and whether it was added to the destination dictionary or replaced an existing resource.

32 DEXTERITY UTILITIES CHAPTER 3 TRANSFER UTILITIES

Transferring dictionary modules

Refer to Appendix A, The transfer dictionary module utility is useful when creating a “subset” “Dictionary Structure,” dictionary without the slower process of transferring and compiling. for information about dictionary modules For example, you may want to create a version of an application dictionary and the structure of a that doesn’t include certain forms or reports. To do so, you would use this dictionary. utility to transfer all dictionary modules from the source dictionary to a newly created destination dictionary, with the exception of the form modules and report modules for the items you’re not including.

This utility is not intended to be used as a general-purpose tool to transfer resources between dictionaries. It can be used to transfer modules between dictionaries only if the resource IDs for all resources are the same in both the source and destination dictionaries.

The transfer dictionary module utility is also used when creating applications that integrate with Microsoft Dynamics™ GP. This utility is used to transfer the dictionary modules for modified forms and reports from the Dynamics.dic dictionary to a third-party extracted dictionary. Refer to the Integration Guide for more information about using this utility.

To begin a transfer, select a source and a destination dictionary, then choose Dictionary Module from the Transfer menu to display the Transfer Dictionary Module window, shown in the following illustration.

These lists specify the series and module type of the modules displayed in the Source Dictionary Modules list. The Transfer button copies the selected module to the destination dictionary. The Delete button removes the selected module from the destination dictionary.

1. Select a series and module type. Select the appropriate series from the Series list, then select the module type you want to transfer from the Dictionary Module Type list. The

DEXTERITY UTILITIES 33 PART 2 UTILITY REFERENCE

modules of the specified type in that series will appear in the Source Dictionary Modules list.

You can set a default series prior to opening the Transfer Dictionary Module window. Select the appropriate series from the Series list located on the toolbar. Once specified, the selected series will appear as the default whenever a series can be selected in a window.

2. Transfer dictionary modules. Select a module and click Transfer to transfer it to the destination dictionary. Double-clicking a module also transfers it.

Clicking Transfer or All performs the actual transfer. To cancel the transfer, you must individually delete any modules transferred to the destination dictionary.

If you want to delete a module from the destination dictionary, select the module name and click Delete.

The Dictionary Module Size and Total Size fields at the bottom of each list show the size of the selected module, and the combined sizes of all modules in the list.

3. Click Close to complete the transfer process. Clicking Close will synchronize core tables in the destination dictionary and close the Transfer Dictionary Module window. Synchronizing core tables creates an internal directory in the destination dictionary so resources can be accessed.

34 DEXTERITY UTILITIES CHAPTER 3 TRANSFER UTILITIES

Developer update

The Developer Update utility is used to transfer third-party resources (all those with resource IDs of 22,000 or greater) from an extracted dictionary back into the Dynamics.dic dictionary. This can be useful if you have an extracted dictionary that you created with the Extract utility, but no longer have the development dictionary you used to create your third-party product.

The Developer Update utility is no longer used to move integrating applications to new versions of Microsoft Dynamics GP. You must now use the source code control capabilities in Dexterity to update your integrating applications. Refer to Chapter 49, “Updating an Application,” in the Integration Guide for a complete description of this process.

When you transfer an extracted dictionary back into the Dynamics.dic dictionary, it’s essential that you are transferring resources into exactly the same version of the Dynamics.dic dictionary that they were extracted from. If the versions of the dictionary aren’t the same, you will encounter errors in your application, such as incorrect strings being displayed.

When transferring an extracted dictionary, the Developer Update utility can also remake any modifications you’ve made to alternate forms in Microsoft Dynamics GP. To use this capability, you must have an original, unaltered version of the Dynamics.dic dictionary available.

To begin an update, select the extracted dictionary containing third-party resources as the source dictionary and the corresponding version of the Dynamics.dic dictionary as the destination dictionary. Then choose Developer Update from the Transfer menu to display the Developer Update window, shown in the following illustration.

DEXTERITY UTILITIES 35 PART 2 UTILITY REFERENCE

1. Select alternate forms (optional). If you made modifications to Microsoft Dynamics GP forms and want those changes transferred to the destination dictionary, mark the Alternate Forms option. A file dialog will appear, asking you to select an editable dictionary. Select an unmodified Dynamics.dic dictionary that is the same version as the dictionary containing your modifications. The utility will use this unmodified dictionary as a baseline to find out what modifications you made.

After a moment, the names of all the forms you modified will appear in the Alternate Forms list. Select each form for which you want modifications transferred and click Insert to display it in the Selected Forms list.

2. Perform the transfer. Click the Transfer button to transfer the third-party resources to the destination dictionary and make modifications to any alternate forms you have selected. The Report File Name dialog box will appear. Enter the name and location for the Developer Update Status Report file, then click OK to continue the process, or click Cancel to return to the Developer Update window.

3. Use the status report to verify the transfer. Once the transfer is complete, the status report will be printed to a text file. This report lists all resources that were transferred to the destination dictionary and any errors that occurred while updating alternate forms.

Refer to Chapter 4, In most cases, your third-party application will work after it has been “Script Utilities,” for transferred back into the Dynamics.dic dictionary. If your application information about the can’t locate some resources, you may have to recompile your scripts in Compile Form Scripts, the destination dictionary using the Compile Form Scripts, Compile Compile Global Global Procedures and Compile Global Functions utilities. Procedures and Compile Global Functions utilities.

36 DEXTERITY UTILITIES Chapter 4: Script Utilities

The script utilities allow you to compile all scripts for a specific form or compile the global procedures or global functions in an application dictionary. You can also search for a specific text string and replace it with a new string or you can simply search for a text string to find where it occurs in scripts.

Before using the script utilities, you must choose an editable dictionary. To open an editable dictionary, choose Open Editable Dictionary from the File menu and select the appropriate dictionary in the dialog box that will appear.

The following topics are discussed:

• Compiling form scripts • Compiling global procedures • Compiling global functions • Searching and replacing

DEXTERITY UTILITIES 37 PART 2 UTILITY REFERENCE

Compiling form scripts

This utility compiles all scripts associated with a form, including form procedure scripts, form function scripts, form pre and post scripts, window scripts, scrolling window scripts, and all field scripts. Use this utility in the following situations:

• If you used the Transfer Window utility to transfer a window into a dic- tionary, use the Compile Form Scripts utility to compile the scripts for the window.

• If you transferred forms into a dictionary using the Transfer Resources utility, but didn’t have the Compile Scripts option marked, you’ll use the Compile Form Scripts utility to compile those scripts.

• If you transferred resources into a dictionary using the Transfer Resources utility, but some scripts didn’t compile because resources were missing from the destination dictionary, use the Compile Form Scripts utility to compile the uncompiled scripts after the missing resources have been included.

• Before you send out an application, it’s a good idea to compile all scripts using the Compile Form Scripts utility. This ensures that all resources referenced by scripts are included in the dictionary, that the latest version of scripts are being used, and that scripts don’t contain syntax errors.

To begin compiling scripts for a form, select an editable dictionary, then choose Compile Form Scripts from the Scripts menu to display the Compile Form Scripts window, shown in the following illustration.

This list specifies the series of the forms displayed in the Forms list.

This is a list of the forms in the specified series.

The scripts for the forms in this list will be compiled.

38 DEXTERITY UTILITIES CHAPTER 4 SCRIPT UTILITIES

1. Select a series. Select the series that includes the form for which scripts are being compiled. The forms in that series will appear in the Forms list.

You can set a default series prior to beginning the compiling process. Select a series from the Series list located on the toolbar. Once specified, the selected series will appear as the default whenever a series can be selected in a window.

2. Select compiling options. The following options control how the scripts will be compiled.

Compiler Errors Only Mark this option to include only compiler error messages in the status report that is printed after the scripts are compiled. Otherwise, all status messages will be saved to the report.

Compile Debug Mark this option to include debugging information in scripts, and to compile the debug and assert statements in your code. If you don’t mark this option, you won’t be able to use the Script Debugger, and the debug and assert statements won’t be executed. We recommend unmarking this option in the final version of your application to ensure optimal script performance.

3. Select scripts to compile. Select the scripts you want to compile by selecting each form name and clicking Insert to add it to the list of selected forms. Double-clicking your selection will perform the same function. You can select and compile scripts from several series at one time. If you want to compile scripts for all forms in the selected series, click the Insert All button. You can use the Remove and Remove All buttons to remove forms from the Selected Forms list.

4. Compile scripts. Click the Compile button to compile the scripts for the selected forms. The Report File Name dialog box will appear. Enter the name and location for the Compile Form Scripts Status Report file, then click OK to continue the compiling process, or click Cancel to return to the Compile Form Scripts window.

5. Use the status report to verify that scripts compiled. Search the Dexterity Once compiling is complete, the status report will be printed to a text online help for file. This report lists each script along with a message that indicates Compiler messages to whether the script was compiled successfully. If the script wasn’t see a list of compiler compiled successfully, the message will indicate the compiler error that error messages. occurred. If you mark Compiler Errors Only, only information about scripts that couldn’t be compiled will appear in the report.

DEXTERITY UTILITIES 39 PART 2 UTILITY REFERENCE

Compiling global procedures

Refer to Compiling This utility is used to compile specified global procedures in an application form scripts on dictionary. If your application uses global procedures, you may need to use page 38 if you want to this utility under the following circumstances: compile form procedure scripts. • If you transferred global procedures using the Transfer Resources util- ity, but didn’t have the Compile Scripts option marked, use the Com- pile Global Procedures utility to compile those global procedures.

• If you transferred global procedures into a dictionary using the Transfer Resources utility, but some global procedures couldn’t be compiled because resources were missing from the destination dictionary, use the Compile Global Procedures utility to compile the uncompiled global procedures after the missing resources have been included.

• Before you send out your application, it’s a good idea to compile all global procedures using the Compile Global Procedures utility. This ensures that all resources referenced by the global procedures are included in the dictionary, that the latest version of scripts are being used, and that the global procedures don’t contain any syntax errors.

To begin compiling global procedures, select an editable dictionary, then choose Compile Global Procedures from the Scripts menu to display the Compile Global Procedures window, shown in the following illustration.

This list specifies the series of the global procedures displayed in the Scripts list. This is a list of the global procedures in the specified series.

The global procedures in this list will be compiled.

40 DEXTERITY UTILITIES CHAPTER 4 SCRIPT UTILITIES

1. Select a series. Select the series that includes the global procedures being compiled. The global procedures in that series will appear in the Scripts list.

You can set a default series prior to beginning the compiling process. Select a series from the Series list located on the toolbar. Once specified, the selected series will appear as the default whenever a series can be selected in a window.

2. Select compiling options. The following options control how the scripts will be compiled.

Compiler Errors Only Mark this option to include only compiler error messages in the status report that is printed after the global procedures are compiled. Otherwise, all status messages will be saved to the report.

Compile Debug Mark this option to include debugging information in scripts, and to compile the debug and assert statements in your code. If you don’t mark this option, you won’t be able to use the Script Debugger, and the debug and assert statements won’t be executed. We recommend unmarking this option in the final version of your application to ensure optimal script performance.

3. Select scripts to compile. Select the global procedures to compile by selecting each one and clicking Insert to add it to the list of selected scripts. Double-clicking a script performs the same function. You can select and compile procedures from several series at one time. To compile all global procedures in the selected series, click Insert All. Use the Remove and Remove All buttons to remove scripts from the Selected Scripts list.

4. Compile scripts. Click the Compile button to compile the selected global procedures. The Report File Name dialog box will appear. Enter the name and location for the Compile Global Procedures Status Report file, then click OK to continue the compiling process, or click Cancel to return to the Compile Global Procedures window.

5. Use the status report to verify that scripts compiled. Search the Dexterity Once compiling is complete, the status report will be printed to a text online help for file. This report lists each global procedure along with a message that Compiler messages to indicates whether it was compiled successfully. If the global procedure see a list of compiler wasn’t compiled successfully, the message indicates the compiler error error messages. that occurred. If you mark Compiler Errors Only, only information about scripts that couldn’t be compiled will appear in the report.

DEXTERITY UTILITIES 41 PART 2 UTILITY REFERENCE

Compiling global functions

Refer to Compiling This utility is used to compile specified global functions in an application form scripts on dictionary. If your application uses global functions, you may need to use page 38 if you want to this utility under the following circumstances: compile form function scripts. • If you transferred global functions using the Transfer Resources utility, but didn’t have the Compile Scripts option marked, use the Compile Global Functions utility to compile those global functions.

• If you transferred global functions into a dictionary using the Transfer Resources utility, but some global functions couldn’t be compiled because resources were missing from the destination dictionary, use the Compile Global Functions utility to compile the uncompiled global functions after the missing resources have been included.

• Before you send out your application, it’s a good idea to compile all global functions using the Compile Global Functions utility. This ensures that all resources referenced by the global functions are included in the dictionary, that the latest version of scripts are being used, and that the global functions don’t contain any syntax errors.

To begin compiling global functions, select an editable dictionary, then choose Compile Global Functions from the Scripts menu to display the Compile Global Functions window, shown in the following illustration.

This list specifies the series of the global functions displayed in the Scripts list. This is a list of the global functions in the specified series.

The global functions in this list will be compiled.

42 DEXTERITY UTILITIES CHAPTER 4 SCRIPT UTILITIES

1. Select a series. Select the series that includes the global functions being compiled. The global functions in that series will appear in the Scripts list.

You can set a default series prior to beginning the compiling process. Select a series from the Series list located on the toolbar. Once specified, the selected series will appear as the default whenever a series can be selected in a window. 2. Select compiling options. The following options control how scripts will be compiled.

Compiler Errors Only Mark this option to include only compiler error messages in the status report that is printed after the global functions are compiled. Otherwise, all status messages will be saved to the report.

Compile Debug Mark this option to include debugging information in scripts, and to compile the debug and assert statements in your code. If you don’t mark this option, you won’t be able to use the Script Debugger, and the debug and assert statements won’t be executed. We recommend unmarking this option in the final version of your application to ensure optimal script performance. 3. Select scripts to compile. Select the global functions to compile by selecting each one and clicking Insert to add it to the list of selected scripts. Double-clicking a script performs the same function. You can select and compile functions from several series at one time. To compile all global functions in the selected series, click Insert All. Use the Remove and Remove All buttons to remove scripts from the Selected Scripts list. 4. Compile scripts. Click the Compile button to compile the selected global functions. The Report File Name dialog box will appear. Enter the name and location for the Compile Global Functions Status Report file, then click OK to continue the compiling process, or click Cancel to return to the Compile Global Functions window.

5. Use the status report to verify that scripts compiled. Search the Dexterity Once compiling is complete, the status report will be printed to a text online help for file. This report lists each global function along with a message that Compiler messages to indicates whether it was compiled successfully. If the global function see a list of compiler wasn’t compiled successfully, the message indicates the compiler error error messages. that occurred. If you mark Compiler Errors Only, only information about scripts that couldn’t be compiled will appear in the report.

DEXTERITY UTILITIES 43 PART 2 UTILITY REFERENCE

Searching and replacing

This utility allows you to search script source for a specified text string and, if you wish, replace the text string with another. You can select to search all forms’ scripts, a selected form’s scripts, any global procedures, any global functions or a combination of these. This utility is useful if you’ve changed the name of a resource, such as a field or window, and need to update the references to the resource in your application’s scripts.

To begin a search, select an editable dictionary, then choose Search and Replace from the Scripts menu to display the Search and Replace window, shown in the following illustration.

These lists specify the type and series of the resources displayed in the Resources list.

This is a list of the forms, global procedures, or global functions in the specified series.

The scripts in this list will be searched.

1. Enter the text to search for. In the Search For field, enter the text that you want to find. The entry can be up to 255 characters. Note that the search is case-sensitive.

2. Enter a replacement string (optional). Enter a replacement string, if desired. The entry can be up to 255 characters. If this field is left blank, the occurrences of the string you’re searching for will be listed on the status report, but no text will be replaced.

44 DEXTERITY UTILITIES CHAPTER 4 SCRIPT UTILITIES

Use caution when replacing strings using this utility. Any occurrences of the specified string will be replaced, including partial strings. For instance, if you replaced “Customer” with “Client”, the field name Customer_Number would become Client_Number. You may want to search for the specified string and view the status report first. This will allow you to see which items will be replaced before you perform the replace operation.

3. Select the series and resource type. Select the series containing the script to be searched, then select the appropriate resource type. Select Forms to display a list of all forms in the selected series. Select Global Procedures to display a list of the global procedures in the selected series. Select Global Functions to display a list of the global functions in the selected series.

You can set a default series prior to beginning the search and replace process. Select a series from the Series list located on the toolbar. Once specified, the selected series will appear as the default whenever a series can be selected in a window.

4. Select the scripts to search. From the Resources list, select the global procedures, global functions or the forms containing the scripts you want to search and click Insert to add items to the Selected Scripts list. Double-clicking your selection will perform the same function. If you want to search all global procedures, global functions or form scripts in a series, simply click the Insert All button. You can use the Remove and Remove All buttons to remove scripts from the Selected Scripts list.

5. Search the selected forms or scripts. Click the Search button to search for the specified string. The Report File Name dialog box will appear, allowing you to enter the name and location for the Search and Replace Report file. Click OK to continue the search and replace process, or click Cancel to return to the Search and Replace window. If you continue the search and replace process and you specified replacement text, any occurrences of the text being searched for will be replaced.

6. Use the status report to verify the search. The status report lists all occurrences of the text you searched for. If you only searched for a string, the report will list what type of script the string was found in, the script name, the line number and actual line where the string was found. If you replaced the string, the report will list the type of script the string was found in, the script name, and the number of occurrences of the string that were replaced.

DEXTERITY UTILITIES 45 46 DEXTERITY UTILITIES Chapter 5: Resource Utilities

The resource utilities allow you to perform maintenance actions such as updating series resource lists. Before performing a resource procedure, you must choose an editable dictionary. To open an editable dictionary, choose Open Editable Dictionary from the File menu and select the appropriate dictionary in the dialog box that will appear.

The following topics are discussed:

• Changing the dictionary core • Updating series resources

DEXTERITY UTILITIES 47 PART 2 UTILITY REFERENCE

Changing the dictionary core

Refer to Appendix A, The Change Core utility allows you to change which dictionary core a core “Dictionary Structure,” resource is located in. Each core resource is located in one of the seven for more information dictionary cores: about core resources and dictionary cores. •System • Financial •Sales • Purchasing •Inventory •Payroll •Project

Large applications, such as Microsoft Dynamics GP, have thousands of core resources. Because of limitations in Windows 3.1 and to better manage all of these core resources, the core resources are grouped into dictionary cores. These dictionary cores correspond to series for Microsoft Dynamics GP. For this reason, the dictionary cores are sometimes referred to as “series.” If a core resource was inadvertently placed in the incorrect dictionary core, the Change Core utility is used to move it to the proper dictionary core.

The series associated with forms, reports, tables and table groups have no direct relation to the “series” that correspond to the dictionary cores. The series associated with forms, reports, tables and table groups are used for the series resource lists, which are described in the Updating series resources section, later in this chapter.

When you change which dictionary core a table is located in, you also change the location of the keys and table relationships for that table. Changing which dictionary core a table is located in doesn’t change the series marked on the table resource itself as seen in Dexterity. If you change the dictionary core a field is located in, the location of the physical name resource that corresponds to that field is changed as well.

Only global fields used in tables require physical names. For this reason, the physical name for each global field is stored as a separate resource. When a global field is created, it’s stored in the core specified by the Default Core drop-down list. If a physical name is added later with the Default Core set to a different core, the physical name won’t be in the same core as the global field. The Change Core utility can be used to remedy this situation.

48 DEXTERITY UTILITIES CHAPTER 5 RESOURCE UTILITIES

To begin using the Change Core utility, select an editable dictionary, then choose Change Core from the Resources menu to display the Change Core window, shown in the following illustration.

These drop-down lists specify the current dictionary core and the dictionary core to which the selected resource will be moved.

The resource selected in this list will be moved to the new dictionary core.

1. Select the current core and new core for the resource. Use the Core drop-down list to select the dictionary core containing the resource that you want to move to a different dictionary core. Use the New Core drop-down list to select the dictionary core that you want to move the resource to.

2. Select the resource type and resource to move. Select the appropriate resource type; the available resources of that type will appear in the Resources list. Select the specific resource that you want to move to the new dictionary core.

3. Move the resource to the new dictionary core. Click the Change Core button to move the selected resource to the new dictionary core.

DEXTERITY UTILITIES 49 PART 2 UTILITY REFERENCE

Updating series resources

This utility allows you to update the series resource lists in a dictionary. Series resource lists contain the names of forms, reports, tables and table groups in the application dictionary, grouped according to their assigned series. Series resource lists allow the names of resources of a specific type and series to be retrieved quickly, instead of requiring that a script check each resource and determine its series. If necessary, you can use this procedure to manually update the series resource lists.

If you want to update all series resource lists for a dictionary, mark the All Resource Types and All Series options and click Update. All series resource lists will be updated. If you want to specify the type and series to be updated, follow the steps in the following procedure.

To update series resources, select an editable dictionary, then choose Series Resources from the Resources menu to display the Series Resources window, shown in the following illustration.

These drop-down lists specify the resource type and series of the resources in the Resources list.

Mark these two options to update all of the series resources lists for the dictionary.

1. Select a resource type and series. Select the appropriate resource type and series from the respective lists. You can select from four types of resources: forms, reports, tables and table groups.

50 DEXTERITY UTILITIES CHAPTER 5 RESOURCE UTILITIES

Once your selections are made, the Resources list will automatically display the names of any resources of the specified type and series that are in the series resource lists. This list is informational only. It indicates which resources of the specified type and series currently have entries in the series resource lists. You won’t see additions, deletions or changes to the series resource lists until you update them.

2. Mark resource options. The following options allow you to specify how extensive the update will be.

All Resource Types Mark this option if you want to update the series lists for all resource types (forms, reports, tables and table groups) in the selected series.

All Series Mark this option if you want to update the series resource lists for resources of the selected type for every series.

Mark both options if you want to update all series resource lists.

3. Update the dictionary. After the resource type and series are selected and you’ve marked your options, click Update to complete the process.

DEXTERITY UTILITIES 51 52 DEXTERITY UTILITIES Chapter 6: Inquiry Utilities

The inquiry utilities give you the ability to view summary information about selected forms and resources. The two options available from this menu are Forms and Resources. Form inquiry allows you to view all forms in a dictionary by series, and the windows, menus and tables associated with each. Resource inquiry allows you to view the resources in a dictionary by series and resource type, such as table, field or data type.

Before beginning an inquiry, you must choose a source dictionary. To open a source dictionary, choose Open Source Dictionary from the File menu and select the appropriate dictionary in the dialog box that will appear.

The following topics are discussed:

• Viewing form information • Viewing resource information

DEXTERITY UTILITIES 53 PART 2 UTILITY REFERENCE

Viewing form information

The Form Inquiry window allows you to list forms by series and view the windows, menus and tables included in each form.

To perform a form inquiry, select a source dictionary, then choose Forms from the Inquiry menu to display the Form Inquiry window, shown in the following illustration.

1. Select a series. Select the series that includes the form you wish to view. The forms in the selected series will appear in the Forms list.

You can set a default series prior to beginning the inquiry process. Select the appropriate series from the Series list located on the tool bar. Once specified, the selected series will appear as the default whenever a series can be selected in a window.

2. Select a form. Select the appropriate form; the names of the windows, menus and tables for that form will be displayed.

3. Close the Form Inquiry window. When you’ve finished viewing the displayed information, select a different form or click Close to close the window.

54 DEXTERITY UTILITIES CHAPTER 6 INQUIRY UTILITIES

Viewing resource information

The Resource Inquiry window allows you to view global resources by type in a single series or all series.

Once you’ve selected a source dictionary, choose Resources from the Inquiry menu to display the Resource Inquiry window, shown in the following illustration.

1. Select a series. Select the series containing the resources for which you want information. You can select All to display resources from all series in the dictionary.

You can set a default series prior to beginning the inquiry process. Select the appropriate series from the Series list located on the tool bar. Once specified, the selected series will appear as the default whenever a series can be selected in a window.

2. Select a resource type. Select the type of resource to display. The resources of the selected type in the specified series will be displayed in the Resources list.

3. Close the Resource Inquiry window. Select a different series and resource type to view additional resources, or click Close to close the Resource Inquiry window.

DEXTERITY UTILITIES 55 56 DEXTERITY UTILITIES Chapter 7: Dictionary Utilities

The utilities displayed in the Utilities menu allow you to perform a variety of maintenance procedures on a dictionary. The utilities are primarily used to prepare an application dictionary to be sent to customers. The compress utility, for instance, removes source code from the dictionary and compresses it, removing all unused blocks so that the dictionary will be as small as possible. Two other utilities allows you to create dictionary “chunks” that you will use to package your application for delivery to customers.

The following topics are discussed:

• Synchronizing a dictionary • Using the packaging utilities • Compressing dictionaries • Creating chunk dictionaries • Comparing dictionaries • Adding product information • Extracting • Expanding windows • SQL Compatibility • Auto-Chunk • Converting a user interface • Changing Evaluate After

DEXTERITY UTILITIES 57 PART 2 UTILITY REFERENCE

Synchronizing a dictionary

Synchronizing a dictionary should be performed if a field’s data type has changed, or if a data type’s control type has changed. A field’s data type reference is stored with the window, table, key, report and system variable resources for faster processing. If the data type changes, synchronizing the dictionary will ensure all references are correct. The procedure also recalculates the buffer sizes for tables and windows.

Open an editable dictionary, then choose Synchronize from the Utilities menu to display the Synchronize Dictionary window, shown in the following illustration.

1. Synchronize the dictionary. Click the OK button to begin the synchronization. The time required to complete this process depends on the size and complexity of your dictionary. A progress dialog will display the procedure’s progress.

58 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

Using the packaging utilities

Refer to Part 11, The Compress, Extract, Compare, Create Chunk Dictionary, and Product Packaging Information utilities are typically used together when you package your Applications, in product for distribution. The following chart lists the steps in packaging Volume 1 of the and updating stand-alone and integrating applications. Dexterity Programmer’s Guide Stand-alone Integrating for information about Packaging 1. Add product information 1. Extract packaging and 2. Compress 2. Transfer form and report updating stand-alone 3. Create chunk dictionaries modules applications. 3. Add product information 4. Compress Refer to Part 10, 5. Create chunk dictionaries Packaging Your Updating 1. Compress 1. Source Code Control for Application, in the 2. Compare update (if core application Integration Guide for 3. Create chunk dictionaries version has changed) more information 2. Development changes (if required) about packaging and 3. Extract updating applications 4. Transfer form and report that integrate with modules Microsoft Dynamics 5. Add product information GP. 6. Compress 7. C o m p a r e 8. Create chunk dictionaries

These utilities are used to package applications so launch files will be properly updated when the application is installed. They also ensure that form dictionaries and report dictionaries will be updated properly when applications are updated.

DEXTERITY UTILITIES 59 PART 2 UTILITY REFERENCE

Compressing dictionaries

The Compress utility can perform two types of compression: total compression or removing unused blocks. Total compression removes script source and all unused blocks from a dictionary. Total compression is used when you’re preparing a dictionary to be distributed. Removing unused blocks removes only unused blocks from the a dictionary, leaving the script source intact. As you work with a dictionary, it will accumulate unused blocks. Typically, the unused blocks are removed several times during the development process to keep a dictionary from getting unnecessarily large.

When a dictionary is compressed, a separate new dictionary is created. The compression in no way affects the original dictionary.

To compress a dictionary, select an editable dictionary, then choose Compress from the Utilities menu to display the Compress Dictionary window, shown in the following illustration.

1. Select compression options. You can choose to compress a dictionary completely, or to remove only unused blocks of space from a dictionary

Total Compression Mark this option to create the smallest version of a dictionary for distribution. All script source will be removed, as well as unused blocks and unused space within blocks.

Remove Unused Blocks Mark this option to remove only empty blocks from the dictionary. This is useful if many resources, especially large ones like pictures, have been removed from a dictionary.

2. Compress the dictionary. Click OK to compress the dictionary. The Compressed Dictionary Name dialog box will appear, allowing you to enter the name and location for the compressed dictionary. Click OK to create the compressed dictionary, or click Cancel to return to the Compress Dictionary window.

60 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

Creating chunk dictionaries

This utility allows you to split your extracted or stand-alone application dictionary into “chunks” that are used to install or update an application. The dictionary chunks are part of what you deliver to your customer.

Dexterity Utilities has the Auto-Chunk utility, which greatly simplifies the process of creating a dictionary chunk. For this reason, we recommend that you use the Auto-Chunk utility, rather than the Create Chunk Dictionary utility. Installing applications If you are creating an application that integrates with Microsoft Dynamics GP, the dictionary chunks are combined to re-create the integrating dictionary. If you’re creating a stand-alone application, the chunks are recombined to create the stand-alone dictionary. Chunk dictionaries are used for two reasons:

• Chunks allow large dictionaries to be divided into more manageable pieces.

• When an integrating or stand-alone dictionary is installed from dictionary chunks, the launch file for the application is updated automatically.

If your application dictionary is small (less than 1 megabyte in size), you can make a single chunk that contains all of the integrating or stand-alone dictionary’s resources. If the dictionary is larger than this, you may want to create several chunks. A common way to divide a dictionary into multiple chunks is to include core resources in one chunk, forms in another chunk, and reports in a third chunk. Updating applications If you’re updating an application that integrates with Microsoft Dynamics GP, the dictionary chunks add or change resources in the integrating dictionary. If you’re updating a stand-alone dictionary, the chunks merge with the main dictionary to add or change resources. Also, the dictionary chunks update the core resources in the forms and reports dictionaries associated with the integrating or stand-alone dictionary.

DEXTERITY UTILITIES 61 PART 2 UTILITY REFERENCE

The Extract utility, used To begin creating the chunk dictionary, select a source dictionary. The to make an extracted source dictionary is the dictionary containing the resources you want to dictionary, is described transfer to the chunk dictionary. (This is the application dictionary for later in this chapter. stand-alone applications or the extracted dictionary for integrating applications.) Next, choose Create Chunk Dictionary from the Utilities menu.

1. Choose whether to edit an existing chunk dictionary. A dialog box will appear, asking whether you want to edit an existing dictionary chunk. If you are adding resources to an existing chunk dictionary, click Yes. If you’re creating a new chunk dictionary, click No.

If you clicked Yes a dialog box will appear, allowing you to select a dictionary chunk to edit. If you clicked No, a dialog box will appear, allowing you to specify the name and location of the new chunk dictionary.

Due to a historical limitation imposed by early versions of Windows, the name of the chunk dictionary must not exceed 13 characters, including the .cnk extension. If the name exceeds 13 characters, the chunk cannot be accessed by the runtime engine and will not be unchunked.

The Create Chunk Dictionary window will appear, as shown in the following illustration.

This is the dictionary the chunk will become part of.

These lists specify the series and module type of the modules displayed in the Source Dictionary Modules list.

This is a list of all dictionary modules that will be included in the dictionary chunk.

62 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

2. Examine the Dictionary field. It will contain name of the source dictionary from which the dictionary chunk is being made. The name in this field is the name of the dictionary that the chunk will become part of. For instance, if you’re creating a chunk from the stand-alone dictionary RESM.DIC, be sure that name appears here. If you’re creating a chunk from an extracted integrating dictionary, be sure that dictionary name appears here.

3. Specify the sequence number. The sequence number indicates the order in which this chunk will be read when “unchunked.” If you’re creating a single chunk for the entire dictionary, specify 1. If you break the application dictionary into several smaller chunks, the chunks will be merged into the application dictionary in the order specified by the sequence number.

4. Select a module. This selection indicates which module the Major Version, Minor Version and Build Number information is associated with. (These are the fields below the Module field.) The setting in the Module field is used when the version numbers and build number are retrieved from the dictionary.

5. Set the major version, minor version and build number. Refer to the The Major Version and Minor Version numbers indicate the major and Runtime_GetModule minor version numbers for your application. The Build Number Info() function in the indicates the build of the current version of the dictionary. For instance, Function Library if this is the first build of release 1.3 of your application, enter a 1 for the Reference manual for major number, 3 for the minor number and 1 for the build number. The information about version numbers and build number can be retrieved from the retrieving version and dictionary using the Runtime_GetModuleInfo() function. Typically build numbers. these numbers are displayed in the application’s About Box.

The values you choose for the major version and minor version are significant. If the installation folder contains a dictionary for a previous version of your product dictionary, the dictionary chunk you are creating will unchunk only if the major version and minor version numbers in the chunk match those in the existing dictionary. If the version numbers don’t match, an error indicating the issue will be written to the InstallErrors.txt file in the installation folder. The dictionary chunk won’t be deleted.

DEXTERITY UTILITIES 63 PART 2 UTILITY REFERENCE

If you have multiple dictionary chunks with the same major version and minor version values, the build number is used to determine the order in which the dictionary chunks are unchunked. The chunks with lower build number values are unchunked first.

If the installation folder contains a dictionary for which the major and minor version numbers match those of the dictionary chunk, the build number will be examined. If the build number of the chunk is the same or greater than the build number of the dictionary, the chunk will be unchunked. If the build number of the chunk is lower, it will not be unchunked, and a message indicating the issue will be written to the InstallErrors.txt file in the installation folder. The dictionary chunk will be deleted.

6. Select starting and ending scripts. Refer to the Volume 1 These fields specify which installation scripts (procedures) will be run of the Dexterity when the chunk is merged into the application dictionary. To specify a Programmer’s Guide starting or ending script, mark the corresponding check box and then and the Integration click the lookup button for the starting or ending script. A list of the Guide for more procedures in the application dictionary is displayed, allowing you to information about select a script. writing installation scripts. The starting and ending scripts run only after all dictionary chunks have been merged into the application dictionary. All starting scripts are run in the order the chunks were merged. Then all ending scripts are run in reverse order. For example, if three dictionary chunks were merged, the starting and ending scripts would run in the following order:

• Chunk 1 Starting Script • Chunk 2 Starting Script • Chunk 3 Starting Script • Chunk 3 Ending Script • Chunk 2 Ending Script • Chunk 1 Ending Script

To remove the procedure script selected for the starting or ending script, simply unmark the check box for the starting script or ending script.

64 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

7. Select a series and dictionary module type. Select the series from which you want to add resources to the chunk dictionary. Select the type of resources (Forms, Reports or Core resources) you want to add to the chunk dictionary. Mark the Shared option if you want only forms or reports marked as shared to be displayed in the Source Dictionary Modules list. (Forms are marked as shared in the Form Definition window. Reports are marked as shared in the Report Definition window.)

8. Select the dictionary modules to include in the chunk dictionary. To add a module to the chunk dictionary, select it from the list, then click Transfer. If you want to add all modules from the Source Dictionary Modules list, click All. If you want to delete a module from the destination dictionary, select the module in the Chunk Dictionary Modules list and click Delete.

If you’re making a single chunk dictionary, first add all forms and reports from your dictionary to the Chunk Dictionary Modules list. Then add all core resources for the series listed from Financial through System in the Series list. Core resources for the Company through Report Writer series can be ignored because they contain duplicate resources from the System series. When you’ve finished, the size of the chunk dictionary should be nearly the same size as the source dictionary. (You can see this by viewing the Total fields beneath the source dictionary and the chunk dictionary lists.)

If you’re making multiple chunk dictionaries, the entry in the Dictionary name field must be the same for each chunk. Also, each chunk must contain the [Core] System Core Tables and the [Core] System Install modules for the dictionary chunks to merge properly. Be sure that you haven’t forgotten to include these resources in each dictionary chunk.

If you’re packaging an application, be sure you include all of the dictionary modules for your application.

The Compare If you’re updating an application, use the report generated by the Dictionaries utility is Compare Dictionaries utility to determine which dictionary modules described later in this you need to include in your update chunk. Be sure the update chunk chapter. contains the [Core] System Core Tables and the [Core] System Install modules so the update chunk will merge properly.

DEXTERITY UTILITIES 65 PART 2 UTILITY REFERENCE

9. Click Close to complete the process. When you’ve added the necessary resources to the Chunk Dictionary Modules list, click Close to complete the chunking process.

At this point, we recommend that you make backups of your chunk dictionaries.

66 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

Comparing dictionaries

Refer to Chapter 60, At some point after you’ve shipped your application to customers, you may “Updating an Applica- need to send an update. The extent of changes in your application tion,” in Volume 1 of determines the method you will use to package your update. the Dexterity Program- mer’s Guide for infor- • If you’re adding major new functionality to your application, you mation about updating should consider having your customers install a new version and stand-alone applica- migrate data to it from their current version. tions. • If you’re including only problem fixes and minor application changes, you can send your update in the form of a dictionary chunk. To do this, Refer to Chapter 49, the Compare Dictionaries utility is used to indicate which resources “Updating an Applica- have changed in the updated version. tion,” in the Integration Guide for information To determine what to include in the update, you will be comparing the about updating appli- updated dictionary with the version of the dictionary your customers cations that integrate currently have. The Dictionary Comparison report generated by the with Microsoft Dynam- Compare Dictionaries utility lists the dictionary modules that have been ics GP. added or changed in the updated dictionary. These are the modules that must be included in the update.

The Extract utility, used To compare two dictionaries, open the original dictionary as a source to make an extracted dictionary and the dictionary you’ve made changes to (the compare dictionary, is described dictionary) as an editable dictionary. If your application integrates with later in this chapter. Microsoft Dynamics GP, you will compare the extracted dictionary from the original version of your application with the extracted dictionary from the updated version of your application. When you’ve selected the dictionaries, choose Compare from the Utilities menu to display the Compare Dictionaries window, shown in the following illustration.

1. Verify the dictionaries to be compared. The two dictionaries you selected will appear in the Original Dictionary and Compare Dictionary fields on the window. Verify that these are the correct dictionaries to be compared.

2. Click OK to complete the procedure. Click OK to generate the report comparing the two selected dictionaries.

DEXTERITY UTILITIES 67 PART 2 UTILITY REFERENCE

The comparison report lists the dictionary modules that you need to include when using the Create Chunk Dictionary window to create the update chunk. The following illustration shows a report comparing versions 1 and 2 of the Real Estate Sales Manager application.

Time printed: 10/20/1995 10:31:15

Dictionary Comparison

Source Dictionary : HD1:RESM_V1.DIC Compare Dictionary : HD1:RESM_V2.DIC

* = New Resource or Name Change ______In this illustration, boxes Core System Core 1 Table have been drawn around Seller_Data * Seller_Data_OLD the module names. These Key are the modules you must * Seller_Data_By_ID! * Seller_Data_By_Name! include in the update chunk. * Seller_Data_By_Initial Contact Relation * 22005 Core System Strings 2 String * Convert Data * Initial Contact: Core System GScript Code/Data 3 Global Script Data * Convert Data Global Script Code * Convert Data Core System Data Types 6 Data Type * Date * STR45 Core System Fields 7 Field Seller Name * Initial Contact * String30 Core System Short Names 8 Field Short Name * Initial Contact * String30 Core System GScript Source/Debug 9 Global Script Source * Convert Data Global Script Debug * Convert Data Core System Core Tables 10 Core Table 3rd Local core table 1, 2 Local core table 5, 2 Local core table 6, 2

Form Sellers 22003 Form Sellers Window Sellers

The dictionary chunk to update version 1 of the application to version 2 must contain the dictionary modules listed in this report.

Another report, CHANGES.TXT, will also be generated by the Compare Dictionaries utility. This report contains a list of the forms and reports that have changed in the updated dictionary.

68 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

Adding product information Refer to Chapter 58, Before you can use a dictionary with the runtime engine, you must use the “Using Launch Files,” Product Information utility to add product information to the dictionary. in Volume 1 of the Product information is used when the launch file for the application is Dexterity created. If dictionaries don’t have product information, the launch file Programmer’s Guide, created won’t contain the appropriate information about the main product or to Chapter 47, dictionary and any additional dictionaries being accessed. “Building An Application,” in the If you’re developing applications that integrate with Microsoft Dynamics GP, that Integration Guide for is the main product. additional information about using launch To begin entering product information, open an editable dictionary (the files. dictionary you’re entering product information for), then choose Product Information from the Utilities menu to open the Product Information window. The window is shown in the following illustration.

These are the name and ID of the launch file. If your dictionary integrates with another application, you must use the launch file name and ID for that application.

The Product ID uniquely identifies your product. If your product is stand-alone, the product ID and launch file ID must be the same.

1. Name the launch file. Enter the name of the launch file in the Launch File field. The name is limited to eight characters plus a three-character extension. The name should have the .SET extension.

If you’re entering product information for the main product dictionary, this name is the default name the launch file will be given when it’s created. If you’re entering product information for an integrating dictionary, this should be the name of the launch file for the application you’re integrating with.

DEXTERITY UTILITIES 69 PART 2 UTILITY REFERENCE

2. Enter the launch file ID. Enter the launch file ID in the Launch ID field. The launch file ID is an integer that uniquely identifies the launch file. If you’re entering product information for the main application dictionary, the launch file ID should be the same as the product ID for the dictionary. If you’re entering product information for an integrating dictionary, the launch file ID you use should be the same as the launch file ID for the application you’re integrating with.

3. Enter the product name. In the Product Name field, enter the complete name of the product. This name can be displayed in your application while it is running. For example, if your product integrates with Microsoft Dynamics GP, the product name you enter here will appear in various parts of the application.

4. Enter the product ID. Enter the product ID of your application in the Product ID field. A product ID is an integer that uniquely identifies your product. You obtain a product ID by registering your product with Microsoft Business Solutions. Products should be registered so they each have a unique product ID. This minimizes the possibility of conflicts between different Dexterity applications. If you’re entering product information for the main application, the product ID must be the same as the launch file ID.

5. Name the forms and reports dictionaries. In the Forms Dictionary and Reports Dictionary fields, enter the names for the forms and reports dictionaries. These are the names the forms and reports dictionaries will be given when they’re created for the application. The names are limited to eight characters and should have the .DIC extension.

You must provide names for the forms and reports dictionaries, even if the Modifier and Report Writer won’t be used in your application. Otherwise, the launch file won’t work properly.

6. Enter the compatibility ID and compatibility message. The Compatibility ID is a string that uniquely identifies the version of your application. When you launch your application with the runtime engine, the compatibility ID in the application dictionary is compared with the compatibility IDs in the forms and reports dictionaries. If they match, items in the forms and reports dictionaries can be accessed.

70 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

The compatibility message is the message that is displayed when the compatibility IDs in the forms or reports dictionaries don’t match the compatibility ID in the main dictionary. You should provide information in this message describing how to update your forms and reports dictionaries to make them compatible with the current version of your application. Refer to Chapter 60, “Updating an Application,” in the Volume 2 of the Dexterity Programmer’s Guide for more information about updating forms and reports dictionaries.

7. Click OK to save the information. When you click OK, the information entered will be saved in the dictionary. When the dictionary is installed, the product information will be added to the launch file.

DEXTERITY UTILITIES 71 PART 2 UTILITY REFERENCE

Extracting

This utility is used when you develop your application in the Dynamics.dic dictionary, then want to create a dictionary to operate in multidictionary mode. The extract utility copies, or “extracts” resources with resource IDs 22,000 or greater from the Dynamics.dic dictionary and places them in a separate dictionary. The extract process excludes any Microsoft Dynamics GP resources, since these resource IDs are numbered below 22,000.

The Extract utility only copies resources from the modified dictionary. It doesn’t remove any resources from the Dynamics.dic dictionary.

To extract resources, select a source dictionary, then choose Extract from the Utilities menu to open the Extract window, shown in the following illustration.

1. Click OK. Click OK to begin the process of creating a new dictionary in which to store the extracted resources.

2. Specify the name of the extracted dictionary. A file name dialog box will appear, allowing you to name the extracted dictionary. The default name will be EXTRACT.DIC; accept that name or specify a new one.

Because dictionaries can be overwritten by another dictionary with the same name, choose the name of your dictionary carefully.

The Extract utility will begin creating the new dictionary and extracting the resources. As the resources are extracted, the types of resources being processed, such as system strings, and form and report names, will be displayed in a progress window.

72 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

The only resources extracted will be those with IDs equal to or greater than 22,000. The numbers within this range are those created for an integrating application; resources specific to Microsoft Dynamics GP will be less than 20,000; IDs between 20,000 and 22,000 are reserved for the runtime Report Writer and Modifier resources.

Modified Microsoft Dynamics GP forms and reports are not transferred by the Extract utility. You must use the Transfer Dictionary module utility to transfer modified forms and reports to the extracted dictionary. Refer to Chapter 47, “Building An Application,” in the Integration Guide for more information.

You can’t perform any development in the extracted dictionary. Opening the extracted dictionary with Dexterity and attempting to make changes could corrupt the dictionary. Instead, you must make changes in the modified Dynamics.dic dictionary, then re-extract.

DEXTERITY UTILITIES 73 PART 2 UTILITY REFERENCE

Expanding windows

This utility is used when you create an international version of your application. It expands all windows and window fields in your application by a specified percentage to allow room for international characters.

To expand the windows in a dictionary, open an editable dictionary, then choose Expand Windows from the Utilities menu to open the Expand Windows window, shown in the following illustration.

1. Select the amount to scale. Select the horizontal and vertical amounts to scale all windows and window fields in the dictionary. The numbers are expressed as a percentage of the current size. For example, to expand the windows and fields by 10 percent, enter 110. To reduce the size of windows and fields by 20 percent, enter 80.

2. Click OK. A progress window will appear while the windows and fields are being altered. The windows and fields will appear expanded when you view them at runtime or edit them in the Dexterity layout window.

74 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

SQL Compatibility

Use this utility when preparing an application dictionary for use with a SQL database. This utility examines a dictionary for the following conditions, which would prevent the application from working properly with SQL:

Refer to Appendix A, • SQL limits that have been exceeded. The following limits are tested: the “Dexterity Limits,” in number of fields in the table definition, the record size of each table, the Volume 2 of the Dex- number of keys for each table and the number of segments in each key. terity Programmer’s Guide for the specific • Table fields that don’t have physical names. limit values. • Table field physical names that are SQL reserved words.

• Table database types that aren’t SQL or Default.

• Tables for which no index is generated.

The SQL Compatibility utility prints the incompatibility information as a report. It can also make the necessary changes to the application dictionary to make it compatible for use with SQL.

To check the SQL compatibility of a dictionary, open an editable dictionary, then choose SQL Compatibility from the Utilities menu to open the SQL Compatibility window, shown in the following illustration.

DEXTERITY UTILITIES 75 PART 2 UTILITY REFERENCE

1. Specify the compatibility categories to examine. Mark the check boxes in the Category group to specify the incompatibilities to look for.

Field Physical Names Mark this option to find out which table fields don’t have physical names.

Reserved Words Mark this option to examine table fields to find out whether the physical names are SQL reserved words.

Table Database Types Mark this option to examine the database type of each table in the application dictionary.

Create Index Mark this option to examine the SQL key options for each key of every table in the application dictionary.

2. Generate a compatibility report or make the dictionary compatible. Click Check to generate a report listing the SQL limits exceeded and any incompatibilities for the categories you specified. Click Make Compatible to make changes to the application dictionary that will remove the SQL incompatibilities. When you click Make Compatible, a report will also be generated that lists the changes made to the application dictionary.

You may want to generate and examine the report listing any SQL incompatibilities before you choose to make the dictionary compatible. This allows you to see the changes that are required before they are actually made.

When you click Make Compatible, the following changes will be made to remove incompatibilities:

• If you marked the Field Physical Names option, any table field that doesn’t have a physical name will be given one. The physical name will be based upon the field name.

• If you marked the Reserved Words option, any table field physical names that are SQL reserved words will have an integer appended to the name. The physical name will be truncated, if necessary.

• If you marked the Table Database Types option, any tables that don’t have SQL or Default as their database type will be changed to have Default as the database type.

76 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

• The Create Index SQL key option will be marked for each key of every table in the dictionary.

The Unique SQL key option will also be marked appropriately for each key, based upon current setting of the Duplicates key option. If Duplicates is not marked, the Unique key option will be marked. If Duplicates is marked, the Unique key option will be unmarked.

While the SQL Compatibility utility can locate and make changes to overcome certain SQL incompatibilities, its use doesn’t guarantee that an application will work fully with SQL.

DEXTERITY UTILITIES 77 PART 2 UTILITY REFERENCE

Auto-Chunk

Refer to Part 11, Pack- This utility allows you to easily create a single chunk from your extracted or aging Applications, stand-alone application dictionary. The dictionary chunk is part of what in Volume 1 of the Dex- you deliver to your customer. The auto-chunk utility automatically terity Programmer’s performs the following: Guide for information about packaging and • If no product information has been added to the dictionary from which updating stand-alone you are making a chunk, the Product Information window is displayed applications. automatically, allowing you to add product information.

Refer to Part 10, Pack- • Automatically transfers all dictionary modules from the dictionary you aging Your Applica- specified to a new chunk dictionary. tion, in the Integration Guide for more infor- • Updates series resources in the chunk dictionary automatically. mation about packag- ing and updating • Compresses the chunk dictionary based upon the compression option applications that inte- you specify. grate with Microsoft Dynamics GP. To begin creating the chunk dictionary, select an editable dictionary. The editable dictionary is the dictionary that the chunk dictionary will be created from. (This is the application dictionary for stand-alone applications or the extracted dictionary for integrating applications.) Next, choose Auto-Chunk from the Utilities menu. The Auto-Chunk window will appear.

Click the Chunk Dictionary lookup button to specify the name of the chunk dictionary. This is the dictionary the chunk will become.

You can specify one starting script and one ending script. These are the compression options for the dictionary chunk.

78 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

1. Create a new chunk dictionary. Click the Chunk Dictionary lookup button. This displays a dialog box allowing you to name the chunk dictionary. The name will appear in the Chunk Dictionary field.

Due to a historical limitation imposed by early versions of Windows, the name of the chunk dictionary must not exceed 13 characters, including the .cnk extension. If the name exceeds 13 characters, the chunk cannot be accessed by the runtime engine and will not be unchunked.

2. Examine the Dictionary field. In the Dictionary field, enter the name the dictionary will have when the chunk is unchunked. The default name is the same as the name of the editable dictionary the chunk is being made from. As an example, if you’re creating a chunk from the stand-alone dictionary RESM.DIC, be sure that name appears in the Dictionary field. If you’re creating a chunk from an extracted integrating dictionary, be sure that dictionary name appears in the Dictionary field.

You can change this name if you want the dictionary created during the unchunking process to have a different name than the default name.

3. Select a module. This selection indicates which module the Major Version, Minor Version and Build Number information is associated with. (These are the fields below the Module field.) The setting in the Module field is used when the version numbers and build number are retrieved from the dictionary.

4. Set the major version, minor version and build number. Refer to the The Major Version and Minor Version numbers indicate the major and Runtime_GetModule minor version numbers for your application. The Build Number Info() function in the indicates the build of the current version of the dictionary. For instance, Function Library if this is the first build of release 1.3 of your application, enter a 1 for the Reference manual for major number, 3 for the minor number and 1 for the build number. The information about version numbers and build number can be retrieved from the retrieving version and dictionary using the Runtime_GetModuleInfo() function. Typically build numbers. these numbers are displayed in the application’s About Box.

DEXTERITY UTILITIES 79 PART 2 UTILITY REFERENCE

The values you choose for the major version and minor version are significant. If the installation folder contains a dictionary for a previous version of your product dictionary, the dictionary chunk you are creating will unchunk only if the major version and minor version numbers in the chunk match those in the existing dictionary. If the version numbers don’t match, an error indicating the issue will be written to the InstallErrors.txt file in the installation folder. The dictionary chunk won’t be deleted.

If you have multiple dictionary chunks with the same major version and minor version values, the build number is used to determine the order in which the dictionary chunks are unchunked. The chunks with lower build number values are unchunked first.

If the installation folder contains a dictionary for which the major and minor version numbers match those of the dictionary chunk, the build number will be examined. If the build number of the chunk is the same or greater than the build number of the dictionary, the chunk will be unchunked. If the build number of the chunk is lower, it will not be unchunked, and a message indicating the issue will be written to the InstallErrors.txt file in the installation folder. The dictionary chunk will be deleted.

5. Select starting and ending scripts. Refer to Volume 1 of These fields specify which installation scripts (procedures) will be run the Dexterity when the chunk is unchunked. To specify a starting or ending script, Programmer’s Guide mark the corresponding check box and then click the lookup button for and the Integration the starting or ending script. A list of the procedures in the application Guide for more dictionary is displayed, allowing you to select a script. information about writing installation To remove the procedure selected for the starting or ending script, scripts. simply unmark the check box for the starting script or ending script.

6. Specify the level of compression. You can choose to compress the chunk dictionary completely, or to remove only unused blocks of space from the chunk dictionary.

Total Compression Mark this option if you want to create the smallest version of a chunk dictionary. All script source will be removed, as well as any empty blocks of space.

Remove Unused Blocks Mark this option if you want to remove only empty blocks of space from the chunk dictionary.

80 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

7. Click OK to complete the process. Adding product When you have specified all of the necessary options, click OK to begin information is the chunking process. If the editable dictionary doesn’t contain product described in Adding information, you will be prompted to add the product information. product information on After you’ve added the product information, click OK in the Auto- page 69. Chunk window to restart the chunking process. When the dictionary chunk is complete, the Auto-Chunk window will close.

DEXTERITY UTILITIES 81 PART 2 UTILITY REFERENCE

Converting a user interface

Use this utility to globally change user interface characteristics of any Dexterity application. You may want to convert your application’s user interface to accomplish the following objectives: • Apply system colors to all your application’s window fields. • Apply a three-dimensional appearance to certain window fields, including text boxes, check boxes, radio buttons and list boxes. • Apply a visual indicator to zoom fields. • Apply custom colors to alternating lines in scrolling windows. • Provide custom color support for all prompts and prompt boxes in your application. • Reduce the height of drop-down lists and combo boxes in the layout window to standard height. • Remove graphical buttons, such as lookups, from a tab sequence. • Specify alignment for text on push buttons. • Correct several properties used by the Modifier. • Update palettes to use the new palette style. • Set the SetChangeFlag property for all scrolling window fields.

To convert a user interface, open an editable dictionary, then choose Convert User Interface from the Utilities menu to display the User Interface Conversion window, shown in the following illustration.

1. Enter a report file name. Enter the name for the report file that will log the results of the conversion, or accept the default name (CONVERT.TXT). The report lists any errors that occurred during the conversion, as well as any objects that the utility couldn’t convert. Review the report to find which objects you will need to convert manually.

82 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

2. Select conversion options. Choose the options you want the conversion to perform. If you choose not to perform some of the conversion operations now, you can run the conversion again later to perform those operations.

Refer to Chapter 11, Use System Colors Mark this option to change the FontColor, “Windows,” in Volume BackColor and LineColor properties for application objects to System. 1 of the Dexterity Pro- Once System becomes the default color, the object will inherit colors as grammer’s Guide for defined using the operating system’s control panel settings for color. more information This utility will perform the following system color conversions: about using system colors. Object Conversion information Push buttons Sets the BackColor and FontColor properties of all push buttons to System. Fields Sets the FontColor property of all fields to System. For all fields whose BackColor property is White or Light Gray, sets the BackColor property to System (unless the fields are in a scrolling window). For all fields whose Editable property is false, sets the BackColor property to System, and the Appearance property to 3D Border. Graphics For all graphics (lines, rectangles, rounded rectangles and circles) whose LineColor property is Medium Gray, sets the LineColor property to System. For all graphics in a scrolling window, sets the LineColor property to System. Static text Sets the FontColor property to System. Windows Sets the BackColor property to True.

Use 3D Effects Mark this option to set the Appearance property to 3D Border for the following objects that appear in standard windows. Items in scrolling windows are not affected.

•List box

• Multi-select list box

•Text

• Non-native list box

•Radio button

DEXTERITY UTILITIES 83 PART 2 UTILITY REFERENCE

•Check box

• Line – For adjoining lines that are of equal length, the utility will delete the bottommost or rightmost line and set the remaining line’s Appearance property to 3D Border.

• Push buttons – For graphical push buttons, the Border property is also set to true.

Use Visual Indicator for Zooms Mark this option to add a visual indicator to zoom field prompts. This utility will search for any static text overlapping a zoom push button (a push button whose Zoom property is true) and set the static text item’s Zoom property to true. You can choose to display the following visual indicators for zoom field prompts:

Refer to the • Display an underline for all zoom field prompts. You can show or Field_SetZoom- hide this underline using the Field_SetZoomFormat() function. If Format() function in you don’t use this function, the application will attempt to use the the Function Library defaults file setting that specifies this characteristic. If this defaults Reference manual for file setting doesn’t exist, the prompt will appear underlined. more information. • Change the color of all zoom field prompts. You can specify color using the Field_SetZoomFormat() function. If you don’t use this function, the application will attempt to use the defaults file setting that specifies the zoom prompt color. If this defaults file setting doesn’t exist, the prompt color will be black.

The underline and font color serve as visual cues, indicating the presence of a zoom field. The following illustration shows how a converted zoom field’s prompt will look:

84 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

Use Custom Colors for Prompts Mark this option to use custom prompt colors for all cyan prompts (rectangles or single-line entry fields with their BackColor property set to Cyan) that are 18 pixels high. The following actions are performed for each cyan prompt box or single-line entry field:

• Sets the prompt’s Size-Height and Size-Width properties to the same values as the Size-Height and Size-Width properties of the cyan rectangle.

• Sets the prompt’s Position-Left and Position-Top properties to the same values as the Position-Left and Position-Top properties of the cyan rectangle.

Refer to the Field_Set- • Sets the prompt’s BackColor, FontColor, PatternColor and Pattern CustomPrompt- properties to Custom. The Custom setting allows you change the Format() function in color and pattern of prompts using the Field_SetCustomPrompt- the Function Library Format() function. Reference manual for more information. • Sets the Border property to true.

• Deletes the cyan rectangle.

If you don’t use the Field_SetCustomPromptFormat() function to set custom prompts, your application will attempt to use the defaults file settings that specify the custom prompt characteristics. If these defaults file settings don’t exist, the custom prompts will have the following display characteristics:

Prompt attribute Default display Back color Turquoise (Cyan) Font color Black Pattern 75% Shading Pattern color White

These defaults do not apply to static text items for controls such as push buttons, check boxes and radio buttons. Your operating system color settings control the display characteristics for those objects if you convert your application using the Use System Colors option.

DEXTERITY UTILITIES 85 PART 2 UTILITY REFERENCE

Refer to the Field_Set- Use Custom Colors For Scrolling Windows Mark this option AltLineColor() func- to globally apply custom color support for scrolling window lines. This tion in the Function utility will change the AltLineColor property for all scrolling windows Library Reference man- to true. It also sets the BackColor, FontColor, Pattern and PatternColor ual for more informa- properties to Custom. Scrolling windows will then display alternating tion. scrolling window lines in the color you defined using the Field_SetAltLineColor() function.

If you don’t use the Field_SetAltLineColor() function, the application will attempt to use the defaults file settings that specify line characteristics for scrolling windows whose AltLineColor propert is set to true. If these defaults file settings don’t exist, alternating lines in the scrolling window will have the following display characteristics:

Attribute Default display Back color Green Font color Black Pattern 75% Shading Pattern color White

Collapse Drop Down Lists and Combo Boxes Mark this option to set properties for drop-down list and combo box fields. Drop-down lists appearing in the control area will be resized to 20 pixels high. All other drop-down lists will be resized to 18 pixels high. Combo boxes will be resized to 20 pixels high. Both drop-down lists and combo boxes will have the VisibleItems property set to 8.

Converting the drawn appearance of these controls makes the window’s layout appear less cluttered. Modifier users will also benefit from a more accurate representation of controls as they appear at runtime.

Remove Fields from Tab Sequence Mark this option to remove from the tab sequence any button with a picture as the static item (such as a lookup button or a browse button) by setting its TabStop property to false. This allows for more efficient data entry, since the tab sequence includes only fields used for keyboard entry. This option does not remove from the tab sequence buttons with text as the static item (such as a Save or Delete button).

86 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

Adjust Field Alignment Push buttons with static text values now honor the Alignment property. Mark this option to properly set the alignment of text that appears on push buttons.

Correct Required, Editable, Visible Properties Mark this option to correct some internal properties for window fields. These properties are used by the Modifier only. They do not affect the appearance of fields.

New Palette Style Mark this option to update palettes to use the new palette style. The following actions are performed for each palette:

• The positions of the push pin and palette title are exchanged.

• If a separator line exists below the palette title, the Appearance property is set to 3D Border and the line is moved to position (0, 18).

• Graphical push buttons are moved from the window and their Visible property is set to false.

• The visual switch appearing at the bottom of the palette is moved from the window and its Visible property is set to false.

• Prompt push buttons are widened to the width of the palette win- dow.

• The prompt fields are positioned three pixels from the left edge of the palette window.

• The data type used for the prompt button is updated to use native pictures as the static items, rather than text. Then the following properties are set for each prompt button:

Property Value Appearance 3D Highlight BackColor Transparent Position-Left 0 Position-Top Current value + 4 Size-Width 128 Visible True

DEXTERITY UTILITIES 87 PART 2 UTILITY REFERENCE

The prompt button must be based on a global push button data type for the button to appear properly. Otherwise, the prompt button won’t appear with the 3D highlight.

• The following properties are set for each prompt string field that displays the prompt text:

Property Value BackColor System Border False Size-Width 125 Position-Left 3 Position-Top Current value + 4

Set Change Flag Property For Scrolling Windows Mark this option to set the SetChangeFlag property to True for all scrolling window fields. In early versions of Dexterity, this property didn’t default to True for scrolling window fields.

3. Run the conversion. Click Start to begin the conversion process. When complete, the utility saves the conversion report to the same location as your dictionary.

4. Review the conversion report. The conversion text report shows all the objects the utility successfully converted. If the utility was unable to convert an object on a given form, it will display the form on the report in the following format:

***Exception*** Form: SY_Company_Options

Examine the forms listed to determine if any need additional changes.

5. Make any necessary changes. There are a number of user interface changes you may need to make before you’ve completely converted your application. The following are the most common issues you will encounter.

Custom prompt colors If you choose the Use Custom Prompt Colors option, and the utility encounters a prompt that is more than 18 pixels tall, it sets the BackColor property of the item to Custom; however, an exception will still be logged. This situation can occur if you’ve used one prompt for multiple fields.

88 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

Refer to the section System colors If you choose the Use System Colors option, all titled System color windows in your application will inherit system colors as the window support - automatic in background color. However, bitmaps that appear in these windows will Chapter 11, “Win- keep their original background color, and the backgrounds may not dows,” in Volume 1 of match. the Dexterity Program- mer’s Guide for infor- To address this problem, you’ll need to use the special background mation about making color for the bitmap. The RGB values for this color are Red=192, pictures blend with the Green=192 and Blue=192 on a scale of 255. If you use a paint or draw window background application that specifies RGB colors as percentages, use the following color. percentages: Red=75.294%, Green=75.294% and Blue=75.294%. Changing the background color of the bitmap to this specific color allows the bitmap’s background color to blend automatically with whatever window background color the user selects.

DEXTERITY UTILITIES 89 PART 2 UTILITY REFERENCE

Changing Evaluate After

This utility allows you to analyze the reports in your application to find out which use functions that are considered “unsafe.” You can also use it to set Evaluate After to for each calculated field in reports that don’t use unsafe functions.

To use the Evaluate After utility, select an editable dictionary. Next, choose Change Evaluate After from the Utilities menu. The Evaluate After Utility window will appear.

Use this list to indicate which functions are safe and unsafe.

This field indicates which functions to display. Use these fields to save the list of unsafe functions to a file.

1. Indicate which functions are safe and unsafe. The user-defined functions available for use in the Report Writer will be listed. Indicate which are safe and unsafe by selecting a function name, then clicking Toggle Status. Click All Safe to mark all functions as safe. Click All Unsafe to mark all functions as unsafe.

If you are checking reports that integrate with Microsoft Dynamics GP, look in the SDK (Software Development Kit) for a list of the unsafe functions in each of these products.

2. Save the list of unsafe functions (optional). When you have indicated which functions are safe and unsafe, you may want to save the list of functions that are considered unsafe. Do this by entering a file name in the File field and clicking Save.

90 DEXTERITY UTILITIES CHAPTER 7 DICTIONARY UTILITIES

You can load a list of unsafe functions by clicking Browse and selecting the text file that contains the list of unsafe functions, then clicking Load.

3. Specify the report options. Mark the options that indicate what information you want to appear in the log file generated by the Evaluate After utility. You can include the following information:

Unsafe Reports that contain calculated fields that use unsafe functions.

Modified Reports that contain calculated fields that don’t use any unsafe functions. Evaluate After will be set to for each calculated field in these reports.

Unchanged Reports that contain calculated fields that don’t use any unsafe functions. Evaluate After is already set to for these calculated fields, so no changes are required.

4. Analyze the reports (optional). If you want to find out which reports contain calculated fields that use unsafe functions and which will be modified by this utility, click Analyze. A dialog will be displayed prompting you to enter the name of the output report.

5. Run the update. Click Modify to update the reports in the dictionary. All calculated fields that don’t use unsafe functions will have the Evaluate After field set to .

DEXTERITY UTILITIES 91 92 DEXTERITY UTILITIES PART 3: REPORT REFERENCE Part 3: Report Reference

Use this portion of the documentation to learn about the reports available in Dexterity Utilities. You may want to print reports from time to time when developing or modifying a dictionary to keep information about the dictionary on hand. Printing reports

Before you can print reports, you must open the dictionary for which you want information. All reports, with the exception of the Global Resource Usage and Local Resource Usage reports, require a source dictionary. The local and global resource usage reports require an editable dictionary.

After opening a dictionary, select the report you want to print from the Reports menu. A window will appear, allowing you to specify options for the report. Choose the appropriate options and click Print. All reports generated by Dexterity Utilities are printed directly to a text file. A dialog box will appear, allowing you to name the text file. You can open the text file using any text editor. Reports have the best appearance if displayed in a monospaced font. Information about the sample reports

Space does not permit all possible printing options to be illustrated for each report. To clarify which options are included on the sample reports, the section titled Options included in this example indicates which options were selected when the report was printed.

When reviewing the sample reports, keep in mind that information on most is only a sample of the kind of information you can include on the report. For example, while you can choose to print script information on several reports, we’ve chosen to illustrate it on only the Forms report.

94 DEXTERITY UTILITIES PART 3 REPORT REFERENCE

Reports summary

The following table summarizes the reports most commonly used to view information about specific resources.

Category Action Report to use Composites List the characteristics Global Resources Report. Select Composites as of a composite. the resource type. List the unused Global Resource Usage Report. Select composites in a Composites as the resource type. Select Unused as dictionary. the resource detail. You can choose to remove the unused composites. List the data types that Global Resource Usage Report. Select a composite is used Composites as the resource type. Select List with. Occurrences as the resource detail. Constants List the constants Global Resources Report. Select Constants as the defined for a resource type. dictionary. Data Types List the characteristics Global Resources Report. Select Data Types as the of global data types. resource type. List the characteristics Local Resources Report. Choose Local Data Types of local data types. as the resource type. List the unused global Global Resource Usage Report. Select Data Types data types in a as the resource type. Select Unused as the resource dictionary. detail. You can choose to remove the unused data types. List the unused local Local Resource Usage Report. Select Local Data data types for a form. Types as the resource type. Select Unused as the resource detail. You can choose to remove the unused local data types. Fields List the characteristics Global Resources Report. Select Global Fields as of global fields. the resource type. List the characteristics Local Resources Report. Choose Local Fields as of local fields. the resource type. List the unused global Global Resource Usage Report. Select Fields as fields in an application. the resource type. Select Unused as the resource detail. You can choose to remove the unused fields. List the unused local Local Resource Usage Report. Select Local Fields fields for a form. as the resource type. Select Unused as the resource detail. You can choose to remove the unused local fields. List where a specific Global Resource Usage Report. Select Global global field is used. Fields as the resource type. Select List Occurrences as the resource detail.

DEXTERITY UTILITIES 95 PART 3 REPORT REFERENCE

Category Action Report to use Fields (cont.) List where a specific Local Resource Usage Report. Select Local Fields local field is used. as the resource type. Select List Occurrences as the resource detail. List the fields in a Forms Report. Mark the Window Information check window. box. List the field options Forms Report. Mark the Window Information check for a window field. box. List the fields without Summary Reports. Select Field Summary report. physical names. List the resource IDs Resource Lists. Select [Core] Corename Fields as for global fields. the dictionary module. Select Field as the resource type. List the resource IDs Resource Lists report. Select [Form] Formname as for the local fields in a the dictionary module. Select Field as the resource form. type. List the window fields Linked Prompt Report. Select All Fields and that are linked to Prompts as the field detail. prompts. List the window fields Linked Prompt Report. Select Fields with no that aren’t linked to a Prompt as the field detail. prompt. Print field scripts. Forms Report. Mark the Window Information check box. or Local Resources Report. Choose Local Scripts as the resource type. Summarize the global Summary Reports. Select Field Summary report. fields in the dictionary. Formats List the characteristics Global Resources Report. Select Formats as the of a format. resource type. List the data types Global Resource Usage Report. Select Formats as where a format is used. the resource type. Select List Occurrences as the resource detail. List the unused Global Resource Usage Report. Select Formats as formats in a dictionary. the resource type. Select Unused as the resource detail. You can choose to remove the unused formats.

96 DEXTERITY UTILITIES PART 3 REPORT REFERENCE

Category Action Report to use Forms List the form series a Global Resource Usage Report. Select Forms as form is associated the resource type. with. List the forms in a Global Resources Report. Select Form Groups as specific form series. the resource type. List the name of a Forms Report. form. List the resource ID of a Resource Lists report. Select [Form] Formname as form. the dictionary module. Select Form as the resource type. List the tables attached Forms Report. Mark the File Information check box. to a form. List whether the form Global Resource Usage Report. Select Forms as is used for a lookup. the resource type. Print form-level Forms Report. functions. or Local Resources Report. Select Form Functions as the resource type. Print form-level Forms Report. procedures. or Local Resources Report. Select Form Procedures as the resource type. Print form scripts. Forms Report or Local Resources Report. Select Local Scripts as the resource type. Global Variables List the system Global Resources Report. Select System Variables variables in a as the resource type. dictionary. Menus List the menus for a Forms Report. Mark the Menu Information check form. box. Print menu scripts. Forms Report. Mark the Menu Information check box. or Local Resources Report. Select Local Scripts as the resource type. Messages List the messages in a Global Resources Report. Select Messages as the dictionary. resource type.

DEXTERITY UTILITIES 97 PART 3 REPORT REFERENCE

Category Action Report to use Pictures List the generic Global Resources Report. Select Pictures as the pictures in a dictionary. resource type. List the Windows Global Resources Report. Select Metafiles as the metafile pictures in a resource type. dictionary. List the unused Global Resource Usage Report. Select Pictures as pictures in a dictionary. the resource type for generic pictures. Select Metafiles as the resource type for Windows format pictures. Select Unused as the resource detail. You can choose to remove the unused pictures. List where a picture is Global Resource Usage Report. Select Pictures as used in a dictionary. the resource type for generic pictures. Select Metafiles as the type for Windows format pictures. Select List Occurrences as the resource detail. Reports List the characteristics Reports Report. of a report. List the reports in a Global Resources Report. Select Report Groups as specific series. the resource type. Scripts Print field scripts. Forms Report. Mark the Window Information check box. or Local Resources Report. Select Local Scripts as the resource type. Print form-level Forms Report. functions. or Local Resources Report. Select Form Functions as the resource type. Print form-level Forms Report. procedures. or Local Resources Report. Select Form Procedures as the resource type. Print form scripts. Forms Report. or Local Resources Report. Select Local Scripts as the resource type. Print global functions. Global Functions Report. Print global procedures. Global Procedures Report. Print menu scripts. Forms Report. Mark the Menu Information check box. or Local Resources Report. Choose Local Scripts as the resource type.

98 DEXTERITY UTILITIES PART 3 REPORT REFERENCE

Category Action Report to use Scripts (cont.) Print window scripts. Forms Report. Mark the Window Information check box. or Local Resources Report. Select Local Scripts as the resource type. Strings List the strings used in Global Resources Report. Select Strings as the a dictionary. resource type. List the unused strings Global Resource Usage Report. Select Strings as in a dictionary. the resource type. Select Unused as the resource detail. You can choose to remove the unused strings. List where a string is Global Resource Usage Report. Select Strings as used in a dictionary. the resource type. Select List Occurrence as the resource detail. Tables List table Tables Report. characteristics. List how many times Global Resource Usage Report. Select Tables as and where a table is the resource type. Select List Occurrences as the linked. resource detail. List the fields in a table. Tables Report. Mark the Fields check box. List the keys for a table. Tables Report. Mark the Keys check box. List the table Tables Report. Mark the Relationships check box. relationships for a table. List the tables attached Forms Report. Mark the Table Information check to a form. box. List the tables in a table Global Resources Report. Select Table Groups as group. the resource type. List the tables in a Global Resources Report. Select Table Lists as the specific table series. resource type. List the table groups in Global Resources Report. Select Table Group Lists a specific series. as the resource type. List the resource IDs of Resource Lists report. Select [Core] Corename Core table groups. as the dictionary module. Select Table Group as the resource type. List the resource IDs of Resource Lists report. Select [Core] Corename Core tables. as the dictionary module. Select Table as the resource type. Summarize the Summary Reports. Select Table Summary report. information for a table. Table Identify invalid table Table Relationships Validation Report. Relationships relationships.

DEXTERITY UTILITIES 99 PART 3 REPORT REFERENCE

Category Action Report to use Windows List characteristics of a Forms Report. Mark the Window Information check window. box. List resource ID of a Resource Lists report. Select [Form] Formname as window. the dictionary module. Select Window as the resource type. Print window scripts. Forms Report. Mark the Window Information check box. or Local Resources Report. Choose Local Scripts as the resource type.

100 DEXTERITY UTILITIES FORMS REPORT

Forms Report

The Forms Report contains information about a form and the windows, fields, tables, menus and scripts that are part of the form. This report can also be used to print the scripts attached to the form and to the windows, fields and menus for the form.

To use the Forms Report, open a source dictionary and choose Forms from the Reports menu. The Forms Report window will appear, as shown in the following illustration.

These are the options for the report. This drop-down list specifies the series of the forms in the Forms list.

The report will contain information for forms in this list.

1. Mark the report options. Mark the appropriate options to indicate the information you want included in the report. The selections you make will apply to all forms for which you print reports.

Scripts Only Mark this option to print only script information. Other information won’t be included in the report. Table Information This option allows you to include information about all tables used by each form selected. Window Information This option allows you to include details about all windows within each form. Menu Information This option allows you to include information about any menus that are part of each form.

DEXTERITY UTILITIES 101 PART 3 REPORT REFERENCE

2. Indicate the level of detail for the script and field information. The first Script and Field Detail list allows you to specify the level of script detail to print. Select one of three options: • No Scripts – Excludes script information from the report.

• Script Names – Includes only script names on the report.

• Script Names and Source – Includes script names and script source.

Prompts placed on the The second Script and Field Detail list allows you to specify the level of window using the text field detail to print for each field on a window in the form. Select one of tool are static window four options: fields. • Name Only–All – Lists only the name of all window fields.

• Name Only–Non-static – Lists only names of non-static window fields, such as string or currency fields.

• Detailed–All – Lists detailed information about all window fields.

• Detailed–Non-static – Lists detailed information for only non- static window fields, such as string or currency fields.

3. Select the forms you want to print information for. Select the series containing the form you want to print information for. The Forms list will be filled with the names of forms in the selected series. Select each of these forms you want to include and click Insert to display it in the Selected Forms list. Double-clicking the selection performs the same function. Click Insert All to select all forms listed.

4. Print the report. Click Print to print the report for the forms in the Selected Forms list. The Report File Name dialog box will appear. Enter the name and location for the Forms Report, then click Save. A sample Forms Report is shown on the following page.

102 DEXTERITY UTILITIES FORMS REPORT

Forms Report

Time printed: 11/24/1995 12:06:14

Dictionary: HD1:RESM.DIC Form Resources ______Form : Houses Series : Sales Pre-form Script : None Post-form Script: None Table Display Name Physical Name Table Group Access ______House_Pictures House Pictures HOUSEPIC House Tables Read/Write House_Descriptions House Descriptions HOUSEDES House Tables Read/Write Seller_Data Seller Data SELLDAT Seller Tables Read/Write House_Data House Data HOUSEDAT House Tables Read/Write

Window Name : Houses Display Name: Houses Window Type : Standard Options: Close Box Auto Open Auto Link Background Color Link Table : House_Data Background : [None] Pre-window Script: Houses_WIN_PRE !255F1255F0! ______disable '(L) Delete Button'. ______

Post-window Script: Houses_WIN_POST !255F1255F1! ______local integer reply.

if changed (window Houses) then set 'reply' to ask("Do you want to save your changes","Yes","No","Cancel"). if reply = ASKBUTTON1 then {Yes, save the changes} if required(form Houses) then {Move from window to table buffer.} copy from window Houses to table House_Data.

Change-Field Script : [None] Post-Field Script : [None] ______

Options included in this example: Window Information Table Information Script Detail: Script Names and Source Field Detail: Detailed - Non-static

DEXTERITY UTILITIES 103 PART 3 REPORT REFERENCE

Reports Report

The Reports Report contains information about reports that have been created in a dictionary.

To use the Reports Report, open a source dictionary and choose Reports from the Reports menu. The Reports Report window will appear, as shown in the following illustration.

This drop-down list specifies the series of the reports in the Reports list.

The report will contain information for reports in this list.

1. Select the reports you want to print information for. Select the series containing the report you want to print information for; the Reports list will be filled with the names of reports in the selected series. Select each report you want to include and click Insert to display it in the Selected Reports list.

2. Print the report. Click Print to print the report for the reports in the Selected Reports list. The Report File Name dialog box will appear. Enter the name and location for the Reports Report, then click Save. A sample Reports Report is shown on the following page.

104 DEXTERITY UTILITIES REPORTS REPORT

Reports Report

Time printed: 11/24/1995 11:43:35

Dictionary: HD1:RESM.DIC Report Resources ______Report : Seller Report Series : Sales Type : Graphics Options : First Page Header First Page Footer Tables : Seller_Data using key Seller_Data_By_ID House_Data(1-M) Sort : Restrict :

Report Design Document:

This report prints a list of all individuals who currently have real estate for sale.

Tables used: Seller_Data is the main table for this report. House_Data is a related table.

______

Options included in this example: Design Documents

DEXTERITY UTILITIES 105 PART 3 REPORT REFERENCE

Tables Report

The Tables Report contains information about tables in a dictionary. The report can include the display and physical names of the table, the record size, information about fields in the table, and the name of the table group to which the table belongs (if any).

To use the Tables Report, open a source dictionary and choose Tables from the Reports menu. The Tables Report window will appear, as shown in the following illustration.

These are the options for the report. This drop-down list specifies the series of the tables in the Tables list.

The report will contain information for tables in this list.

1. Select the report options. Mark the appropriate options to indicate the information you want included in the report. The selections you make will apply to all tables for which you print reports.

Keys Mark this option to list the keys in the table. A list of fields in each key and the attributes of the key will follow each key name.

106 DEXTERITY UTILITIES TABLES REPORT

Fields This option allows you to include the following information about the table’s fields:

•Name

• Control type

• Keyable and storage lengths

• String field attributes

• Range of values (for currency fields only)

• Number of elements in array fields

• Static values for list boxes, drop-down lists, push buttons, radio buttons, check boxes and visual switches

Relationships Mark this option to include information about related tables, including the linked fields.

2. Select the tables you want to print information for. Select the series containing the tables you want to print information for. The Tables list will be filled with the names of tables in the selected series. Select each of these tables you want to include and click Insert to display it in the Selected Tables list. Double-clicking the selection will perform the same function. Click Insert All to select all tables listed.

3. Print the report. Click Print to print the report for the tables in the Selected Tables list. The Report File Name dialog box will appear. Enter the name and location for the Tables Report, then click Save. A sample Tables Report is shown on the following page.

DEXTERITY UTILITIES 107 PART 3 REPORT REFERENCE

Tables Report

Time printed: 11/24/1995 10:59:15

Dictionary: HD1:RESM.DIC Table Resources ______Table : Seller_Data Record Size : 152 Display Name : Seller Data Physical Name: SELLDAT Database Type: Default Series : Sales Table Group : Seller Tables Options : Use 4 byte header String Attribute Legend: U-Uppercase A-Alphanumeric #-Numeric Only Lengths String Currency Range Field Name Storage Type Keyable Storage Attributes Low High ______Seller ID String 6 8 [ ] Seller Name String 30 32 [ ] Address String 30 32 [ ] City String 20 22 [ ] State String 2 4 [U A ] ZIP Code String 9 10 [ #] Phone String 10 12 [ #] Agent String 30 32 [ ]

Keys ______Seller_Data_By_ID Seller ID Key Length: 8 Seller_Data_By_Name Seller Name Key Length: 32 Max Key Length: 32 Relationship : ______22000 Seller_Data links to many records of table House_Data using key House_Data_By_Seller_ID Linked fields: Seller ID

______

Options included in this example: Keys Fields Relationships

108 DEXTERITY UTILITIES GLOBAL FUNCTIONS REPORT

Global Functions Report

The Global Functions Report allows you to print the script source for global functions.

To use the Global Functions Report, open a source dictionary and choose Global Functions from the Reports menu. The Global Functions Report window will appear, as shown in the following illustration.

This option determines whether each script begins on a new page.

The report will contain the script source for the global functions in this list.

1. Mark the report options. Mark Form Feed After Script to start each global function on a separate page.

2. Select the global functions you want to print. Select the series containing the global functions you want to print; the Functions list will be filled with the names of global functions in the selected series. Select each function to include and click Insert to display it in the Selected Functions list.

3. Print the report. Click Print to print the report for the global functions in the Selected Functions list. The Report File Name dialog box will appear. Enter the name and location for the Global Functions Report, then click Save. A sample Global Functions Report is shown on the following page.

DEXTERITY UTILITIES 109 PART 3 REPORT REFERENCE

Global Functions Report

Time printed: 11/24/1995 11:59:25

Dictionary: HD1:RANDOM.DIC Functions ______FUNCTION: random() !10093001! ______function returns currency random_number.

local long temp, low, hi, test.

{Keep the current seed. This will be used to get the next random number in the stream.} set temp to seed of globals.

{Generate the next seed.} set hi to seed of globals / QUOTIENT. set low to seed of globals % QUOTIENT. set test to (MULTIPLIER * low) - (REMAINDER * hi). if test > 0 then set seed of globals to test. else set seed of globals to test + MODULUS. end if. set random_number to temp * (1.0) / MODULUS. ______

Options included in this example: Form Feed After Script

110 DEXTERITY UTILITIES GLOBAL PROCEDURES REPORT

Global Procedures Report

The Global Procedures Report allows you to print the script source for global procedures.

To use the Global Procedures Report, open a source dictionary and choose Global Procedures from the Reports menu. The Global Procedures Report window will appear, as shown in the following illustration.

This option determines whether each script begins on a new page.

The report will contain the script source for the global procedures in this list.

1. Mark the report options. Mark Form Feed After Script to start each procedure on a separate page.

2. Select the procedures you want to print. Select the series containing the global procedures you want to print; the Global Procedures list will be filled with the names of global procedures in the selected series. Select each procedure you want to include and click Insert to display it in the Selected Global Procedures list.

3. Print the report. Click Print to print the report for the global procedures in the Selected Global Procedures list. The Report File Name dialog box will appear. Enter the name and location for the Global Procedures Report, then click Save. A sample Global Procedures Report is shown on the following page.

DEXTERITY UTILITIES 111 PART 3 REPORT REFERENCE

Global Procedures Report

Time printed: 11/24/1995 13:02:38

Dictionary: HD1:RESM.DIC Global Procedures ______PROCEDURE: Progress_Control !1009155F0! ______{------Script name: Progress_Control Type: Procedure Script Description: This script updates the Progress_Control window based upon the ratio of the two values passed to this script. The ratio is used to update a visual switch that shows progress between 0% and 100%. ------}

in long Current_Value. in long Total_Value.

local integer previous_value, current_display.

set previous_value to Progress_Bar_Status of globals.

{Don't update the Progress_Control form if it isn't open.} if isopen(form Progress_Control) then {Progress_Control is open, so update it.} if Current_Value >= Total_Value then set Progress_Bar of window Progress_Control of form Progress_Control to 10. set Progress_Bar_Status of globals to 0. else set current_display to ((Current_Value*1.0/Total_Value)*100.0). if ((current_display - previous_value) >= 10) then set Progress_Bar of window Progress_Control of form Progress_Control to (current_display)/10. set Progress_Bar_Status of globals to previous_value + 10. end if. end if. end if. ______

Options included in this example: Form Feed After Script

112 DEXTERITY UTILITIES GLOBAL RESOURCES REPORT

Global Resources Report

The Global Resources Report contains information about global resources in a dictionary. Typically, it is used to list a specific type of resource, such as messages.

To use the Global Resources Report, open a source dictionary and choose Global Resources from the Reports menu. The Global Resources window will appear, as shown in the following illustration.

This drop-down list specifies the type of resource for which information will be reported.

Select a resource in this list if you’re printing information for a specific resource.

The Printing Options specify which resources to include in the report.

1. Select a series for the resource. From the Series drop-down list, select the series containing the global resources for which you want to print information.

2. Select a resource type. From the Resource Type drop-down list, select the type of global resource for which you want to print information. The following is a list of the resource types you can select, along with the information printed for each:

• Composites – Name and the list of components.

• Constants – ID, name and value.

DEXTERITY UTILITIES 113 PART 3 REPORT REFERENCE

• Data types – Name, control type, keyable length, storage length and static values.

• Table, Table Group, Form and Report lists – List name, list mem- bers and their internal and display names.

• Formats – Attributes of the format.

• Global Fields – Name, data type, control type, keyable length, stor- age length and static values.

• Table Groups – Name, member tables and the table group display name.

• Pictures, Mac pictures and Metafiles – Name and ID.

• Messages – ID, name and message text.

• Strings – ID, number of occurrences and the actual string.

• System variables – Name and storage type.

3. Specify the printing options. The printing options specify which resources to include in the report. Chose one of the following:

• To include all global resources of all types in the report, choose All Resources. This option may result in a lengthy report.

• To include information about all resources listed in the Resources list, choose Listed Resources.

• To include a single resource of the specified type, select the resource in the Resources list and choose the Selected Resource printing option.

4. Print the report. Click Print to print the report for the selected global resources. The Report File Name dialog box will appear. Enter the name and location for the Global Resources Report, then click Save. A sample Global Resources Report is shown on the following page.

114 DEXTERITY UTILITIES GLOBAL RESOURCES REPORT

Global Resources Report

Time printed: 11/24/1995 14:02:33

Dictionary: HD1:RESM.DIC Global Field Resources ______Lengths Lookup Form Field / Data Type Array Storage Type Keyable Storage Values ______Address STR30 String 30 32 Agent STR30 String 30 32 Air Conditioned Air Conditioned Radio Group 3 2 1 Yes 2 No Asking Price CUR9 Currency 12 10 Baths INT2 Integer 2 2 Bedrooms INT2 Integer 2 2 Buyer ID Buyer_ID String 6 8 Buyer Name STR30 String 30 32 Buyers Button PB_Buyers Push Button 13 2 1 [Pict] Buyers Button Up 2 [Pict] Buyers Button Down City STR20 String 20 22 Description Text32000 Text [Var Len] 32000 0 Expand Button Expand Button Visual Switch 16 2 1 [Pict] Scroll_Win_Expand_Down 2 [Pict] Scroll_Win_Expand_Up Floor Space INT5 Integer 5 2

ZIP Code ZIP_STR9 String 9 10 ______

Options included in this example: Resource Type: Global Fields Printing Options: Listed Resources

DEXTERITY UTILITIES 115 PART 3 REPORT REFERENCE

Local Resources Report

The Local Resources Report contains information about local resources for a specific form in a dictionary. It allows you to include information about local data types and local fields, as well as script source for local scripts, form procedures and form functions.

To use the Local Resources Report, open a source dictionary and choose Local Resources from the Reports menu. The Local Resources window will appear, as shown in the following illustration.

Select the form in this list for which you want to print information. This drop-down list specifies the type of local resource for which information will be reported. Select a resource in this list if you want to print information for a specific resource.

The Printing Options specify which resources to include in the report.

1. Select a series and form. Select a form series; the Forms list will be filled with the names of forms in the selected series. Select the form for which you want to print local resource information.

116 DEXTERITY UTILITIES LOCAL RESOURCES REPORT

2. Select a resource type. From the Resource Type list, select the type of local resource for which you want to print information. The following is a list of the local resource types you can select, along with the information printed for each:

• Form Functions – Script name and source.

• Form Procedures – Script name and source.

• Local Data Types – Name, storage type, keyable length, storage length, static values and format.

• Local Fields – Name, data type, array size, control type, keyable length, storage length and static values.

• Local Scripts – Script name and source.

3. Specify the printing options. The printing options specify which resources to include in the report. Chose one of the following:

• To include all local resources of all types in the report, choose All Resources. This option may result in a lengthy report.

• To include information about all resources listed in the Resources list, choose Listed Resources.

• To include a single resource of the specified type, select the resource in the Resources list and choose the Selected Resource printing option.

4. Print the report. Click Print to print the report for the selected local resources. The Report File Name dialog box will appear. Enter the name and location for the Local Resources Report, then click Save. A sample Local Resources Report is shown on the following page.

DEXTERITY UTILITIES 117 PART 3 REPORT REFERENCE

Local Resources Report

Time printed: 11/24/1995 15:05:34

Dictionary: HD1:RESM.DIC Form: Houses Local Field Resources ______Lengths Lookup Form Field / Data Type Array Storage Type Keyable Storage Values ______Amount Financed Amount Financed Currency 12 10 Calculate Calculate Push Button 9 2 1 Calculate Clear Button Clear Button Push Button 5 2 1 Clear Closing Cost Percentage Closing Cost Percentage Currency 6 10 Closing Costs Closing Costs Currency 10 10 Delete Button Delete Button Push Button 6 2 1 Delete Description Button Description Button Push Button 11 2 1 Description DownPayment DownPayment Currency 12 10 Interest_Rate Interest_Rate Currency 7 10 Match Buyers Match Buyers Push Button 12 2 1 Match Buyers Monthly Payment Button Monthly Payment Button Push Button 10 2 1 Payment... Monthly_Payment Monthly_Payment Currency 12 10 Payments_per_Year Payments_per_Year Integer 4 2

Years Years Integer 2 2 ______

Options included in this example: Resource Type: Local Fields Printing Options: Listed Resources

118 DEXTERITY UTILITIES RESOURCE LISTS

Resource Lists

The Resource Lists report is used to view the names of resources and their associated resource ID numbers. It is also useful for identifying the dictionary core and module in which specific resources are located. Refer to Appendix A, “Dictionary Structure,” for more information about the structure of a dictionary.

To use the Resource Lists report, open a source dictionary and choose Resource Lists from the Reports menu. The Resource Lists window will appear, as shown in the following illustration.

Select the dictionary module containing the resources for which you want to view information.

This list displays the types The report will contain of resources in the selected information for the dictionary module. dictionary modules and resource types in this list.

1. Select a dictionary module. From the Dictionary Modules list, select the dictionary module that contains the resources for which you want to view information. The Resource Types list will be filled with the resource types that are part of the selected module.

Each specific module won’t necessarily contain all the types of resources that can be stored in that module. For example, if you select a form module that doesn’t have any local data types, you won’t see Data Type as one of the entries in the Resource Types list.

DEXTERITY UTILITIES 119 PART 3 REPORT REFERENCE

2. Select the appropriate resource types. Select a resource type from the Resource Types list and click Insert to display the resource type in the Selected Resource Types list. Repeat this process to include information for as many dictionary modules and resource types as you want. To insert all resource types displayed in the Resource Types list into the Selected Resource Types list, mark the All Resource Types check box and click Insert.

To remove an item you’ve inserted in the Selected Resource Types list, select it and click Remove. Click Remove All to clear the list and begin again.

3. Print the report. Click Print to print the report for the resource types in the Selected Resource Types list. The Report File Name dialog box will appear. Enter the name and location for the Resource Lists report, then click Save. A sample Resource Lists report is shown on the following page.

120 DEXTERITY UTILITIES RESOURCE LISTS

Resource Lists

Time printed: 11/24/1995 16:15:26

Dictionary: HD1:RESM.DIC Resource Lists ______

-- Table resources in System Core -- Id # 22000 Name: House_Descriptions Id # 22001 Name: Seller_Data Id # 22002 Name: House_Data Id # 22003 Name: House_Pictures Id # 22004 Name: Buyer_Data

-- Key resources in System Core -- Id # 22000 Name: House_Descriptions_By_ID Id # 22001 Name: Seller_Data_By_ID Id # 22002 Name: Seller_Data_By_Name Id # 22003 Name: House_Data_By_ID Id # 22004 Name: House_Pictures_By_ID Id # 22005 Name: Buyer_Data_By_ID Id # 22006 Name: Buyer_Data_By_Name Id # 22007 Name: House_Data_By_Seller_ID Id # 22009 Name: Buyer_Data_By_Price Id # 22010 Name: House_Data_By_Price

-- Format resources in System Core -- Id # 22000 Name: Ref_Number Id # 22001 Name: STR_U Id # 22002 Name: ZIP_STR9 Id # 22003 Name: STR10_Phone Id # 22004 Name: CUR Id # 22005 Name: Interest_Rate

-- Picture resources in System Core -- Id # 22000 Name: GPS Logo Id # 22001 Name: Progress_Bar_Scale Id # 22002 Name: RESM_Logo Id # 22004 Name: RESM About Box Picture

-- Relation resources in System Core -- Id # 22000 Name: 22000

Id # 22013 Name: DexterSys Id # 22014 Name: RW ______

DEXTERITY UTILITIES 121 PART 3 REPORT REFERENCE

Global Resource Usage Report

The Global Resource Usage Report lists how specific global resources are used throughout a dictionary. The report can include the number of times a global resource is used or where the resource is used. It can also print a list of the unused resources in the dictionary (global resources that have been created but not used by other resources). An option for the report allows you to remove the unused resources from the dictionary.

To use the Global Resource Usage Report, open an editable dictionary and choose Global Resource Usage from the Reports menu. The Global Resource Usage window will appear, as shown in the following illustration.

This drop-down list specifies the type of resources to display in the Resources list.

Select a resource in this list if you’re printing information for a specific resource.

These options indicate what information will be included in the report, and whether unused resources will be removed.

1. Select the series for the resources. From the Series drop-down list, select the series containing the global resources for which you want to print information.

122 DEXTERITY UTILITIES GLOBAL RESOURCE USAGE REPORT

2. Indicate the resource detail. Use the Resource Detail drop-down list to indicate the information to include in the report. Choose one of the following options.

• Unused – List the unused global resources.

• No. Occurrences – List the number of occurrences of a global resource.

• List Occurrences – List where a global resource is used.

3. Select a resource type. From the Resource Type drop-down list, select the type of global resource for which you want to print information. The following is a list of the resource types you can select:

•Composites • Data Types •Formats •Forms • Global Fields •Mac Pictures • Metafiles •Pictures • Relationships •Reports • Strings •Table Groups • Tables

4. Indicate whether to remove unused resources. If you’re printing a list of unused resources, you can mark the Remove Unused check box to remove the unused resources.

You may want to print and review the report listing the unused resources before you actually remove them from the dictionary.

Use caution when removing unused global fields. If a global field is used only as a local variable type in a script, this report will consider it unused and will delete it from the dictionary.

DEXTERITY UTILITIES 123 PART 3 REPORT REFERENCE

5. Select the resources to include in the report. To include a single resource of the specified type, select the resource in the Resources list. To include all resources listed in the Resources list, mark the All Resources Listed check box.

6. Print the report. Click Print to print the report for the selected resources. The Report File Name dialog box will appear. Enter the name and location for the Global Resource Usage Report, then click Save. A sample Global Resource Usage Report is shown on the following page.

If you’re listing unused resources and have marked the Remove Unused check box, any of the selected resources that are unused will be removed from the dictionary.

124 DEXTERITY UTILITIES GLOBAL RESOURCE USAGE REPORT

Global Resource Usage Report

Time printed: 11/24/1995 16:51:13

Dictionary: HD1:RESM.DIC Field Usage ______Occurrences of 'House ID': Table House_Descriptions Table House_Data Table House_Pictures Table Candidate_Houses_List Key House_Descriptions_By_ID Key House_Data_By_ID Key House_Pictures_By_ID Key Candidate_Houses_List_By_ID Form : Houses Window Houses Window Monthly_Payment Form : House_Lookup Window House_Lookup_Scroll [Scrolling Window]

Number of occurrences: 11

Occurrences of 'Description': Table House_Descriptions Form : Houses Window House_Description

Number of occurrences: 2

Occurrences of 'Seller ID': Table Seller_Data Table House_Data Key Seller_Data_By_ID Key House_Data_By_Seller_ID Form : Houses Window Houses Form : House_Lookup Window House_Lookup_Scroll [Scrolling Window] Form : Sellers Window Sellers Form : Seller_Lookup

Window Tool_Bar

Number of occurrences: 1

Options included in this example: Resource Type: Global Fields Resource Detail: List Occurrences All Resources Listed

DEXTERITY UTILITIES 125 PART 3 REPORT REFERENCE

Local Resource Usage Report

The Local Resource Usage Report lists how local resources are used within a specified form or how many times the resources are used. It can also be used to print a list of the unused local resources for a form. An option for the report allows you to remove the unused local resources from the dictionary.

To use the Local Resource Usage Report, open an editable dictionary and choose Local Resource Usage from the Reports menu. The Local Resource Usage window will appear, as shown in the following illustration.

These options indicate what information will be included in the report, and whether unused resources will be removed.

The report will include information about local resources for the form selected in this list.

Select a resource in this list if you’re printing information for a specific resource.

1. Select a series. Select the series containing the form for which you want to print information about local resources.

2. Select a form. Select the form for which you want to print local resource information.

126 DEXTERITY UTILITIES LOCAL RESOURCE USAGE REPORT

3. Indicate the resource detail. Use the Resource Detail drop-down list to indicate the information to include in the report. Choose one of the following options:

• Unused – List the unused local resources.

• No. Occurrences – List the number of occurrences of a local resource.

• List Occurrences – List where a local resource is used.

4. Select a resource type. From the Resource Type drop-down list, select the type of local resource for which you want to print information. The following is a list of the resource types you can select:

• Local Data Types •Local Fields • Local Scripts

5. Indicate whether to remove unused resources. If you’re printing a list of unused resources, you can mark the Remove Unused check box to remove the unused resources.

6. Select the resources to include in the report. To include a single resource of the specified type, select the resource in the Resources list. To include all resources listed in the Resources list, mark the All Resources Listed check box.

7. Print the report. Click Print to print the report for the selected resources. The Report File Name dialog box will appear. Enter the name and location for the Local Resource Usage Report, then click Save. A sample Local Resource Usage Report is shown on the following page.

If you’re listing unused resources and have marked the Remove Unused check box, any selected resources that are unused will be removed from the dictionary.

DEXTERITY UTILITIES 127 PART 3 REPORT REFERENCE

Local Resource Usage Report

Time printed: 11/24/1995 17:00:20

Dictionary: HD1:RESM.DIC Unused Local Fields ______Yes No PushButton5 DDL6 ______

Options included in this example: Resource Type: Local Fields Resource Detail: Unused All Resources Listed

128 DEXTERITY UTILITIES LINKED PROMPT REPORT

Linked Prompt Report

The Linked Prompt Report displays fields and the corresponding prompts the fields have been linked to. The report lists all fields and prompts or lists only fields that have not been linked to prompts. Refer to the Chapter 11, “Windows,” of Volume 1 of the Dexterity Programmer’s Guide for information about linking fields to prompts.

To use the Linked Prompt Report, open a source dictionary and choose Linked Prompts from the Reports menu. The Linked Prompt Report window will appear, as shown in the following illustration.

This drop-down list indicates what information will be included in the report.

The report will contain information for forms in this list.

1. Select the forms you want to print information for. Select the series containing the forms you want to print information for; the Forms list will be filled with the names of forms in the selected series. Select each form you want to include and click Insert to display it in the Selected Forms list. Double-clicking the selection will perform the same function. Click Insert All to select all forms listed.

2. Indicate the report detail. Use the Report Detail drop-down list to indicate the information to include in the report. Choose one of the following options.

• Fields with no Prompt – List the fields that have no corresponding linked prompt.

• All Fields and Prompts – List all fields and prompts, including fields with no assigned prompt.

DEXTERITY UTILITIES 129 PART 3 REPORT REFERENCE

3. Print the report. Click Print to print the report for the selected forms. The Report File Name dialog box will appear. Enter the name and location for the Linked Prompt Report, then click Save. A sample Linked Prompt Report is shown on the following page.

130 DEXTERITY UTILITIES LINKED PROMPT REPORT

Linked Prompt Report

Time printed: 11/24/1995 17:46:43

Dictionary: HD1:RESM.DIC Linked Prompt Report ______Form : Sellers Window: Sellers Field Prompt ______Seller ID Seller ID: Seller Name Seller Name: Address Address: City City, State, ZIP: State City, State, ZIP: ZIP Code City, State, ZIP: Phone Phone: Agent Agent: ______

Options included in this example: Field Detail: All Fields and Prompts

DEXTERITY UTILITIES 131 PART 3 REPORT REFERENCE

Diagnostics Report (Emergency Diagnostics)

The Diagnostics Report displays detailed information about a dictionary’s structure. It can also detect certain types of dictionary corruption. Specifically, it looks for gaps or overlaps in how resources are stored in the dictionary. Also, if an unexpected crash occurs while a dictionary is open, the Diagnostics Report can find discrepancies that can result between the actual size of the dictionary and the size reported by the operating system. We recommend that you run the Diagnostics Report when you’re having problems with a dictionary and before you distribute a dictionary to customers.

The only difference between the Diagnostics Report and Emergency Diagnostics Report is that for the Emergency Diagnostics Report, the Diagnostics window isn’t displayed and all report information is always included.

To use the Diagnostics Report, open a source dictionary and choose Diagnostics from the Reports menu. The Diagnostics window will appear, as shown in the following illustration.

If no items appear in the Dictionary Modules list, the section of the dictionary containing module information may be damaged. In this instance, nothing can be recovered from the dictionary.

132 DEXTERITY UTILITIES DIAGNOSTICS REPORT (EMERGENCY DIAGNOSTICS)

1. Select the information to include in the report. Mark the appropriate options to indicate the information you want included in the report.

Block Table Mark this option to include a block table in the report. The block table lists information about each block in the dictionary, such as its size and location in the dictionary.

We recommend that you include the block table because if the Diagnostics Report finds any problems with the dictionary, they will be listed in the block table section.

Module Table Mark this option to include a module table at the beginning of the report. The module table includes information about all modules in the dictionary, such as the quantity of each type of resource in each module.

2. Select the amount of directory information to include. Use the Directory drop-down list to include module directory information. A module directory contains a list of all resources in the module, including the names of the resources, the resource types and IDs, the version number assigned to each resource, and the blocks in the dictionary in which the resources are stored. Select one of the following options:

• No Directory Information – Don’t include directory information.

• Directory Information for Selected Module – Include directory information for only the module selected in the Dictionary Mod- ules list.

• Directory Information for All Modules – Include directory infor- mation for all modules in the dictionary.

3. Print the report. Click Print to print the Diagnostics Report. The Report File Name dialog box will appear. Enter the name and location for the Diagnostics Report, then click Save. A sample diagnostics report is shown at the end of this section.

DEXTERITY UTILITIES 133 PART 3 REPORT REFERENCE

4. Examine the report. If problems were found, they will be displayed in the block table section of the Diagnostics Report. To examine the block table for errors, use a text utility and search for ** Error. Also, at the end of the block table section, compare the calculated file size and the O/S file size numbers. They should be the same.

Unused in allocated blocks 25597 Unused in unallocated blocks 99172 Total unused in file 19743913 O/S File size 19743913

These two values at the end of the block table should be the same.

Keep in mind that the Diagnostics Report may not find all types of dictionary corruption.

5. Address any errors that were found. If you found errors in the block table, or the physical and calculated dictionary sizes don’t match, the dictionary may be corrupt.

If you found errors in the block table, indicated by ** Error, the dictionary likely has corrupted resources. Note the block numbers where the errors were found. If you haven’t already included it in the Diagnostics Report, print a module directory for all modules. Search the Dblock (data block) and Nblock (name block) columns in the module directory for the block numbers of the damaged blocks. When you find the block numbers in the module directory, the resources in that block could be corrupted.

You have two options to deal with the corrupt resources: delete the corrupt resources or transfer the undamaged resources to a new dictionary.

• If you choose to delete the corrupt resources, make a copy of the dictionary and delete the resources from the copy. Use Dexterity to delete the resources.

• If you choose to transfer the undamaged resources to a new dictio- nary, you can use the Transfer Dictionary Module utility to transfer the undamaged dictionary modules to a new dictionary.

134 DEXTERITY UTILITIES DIAGNOSTICS REPORT (EMERGENCY DIAGNOSTICS)

If the physical and calculated sizes don’t match, run a disk diagnostic utility such as Norton Disk Doctor, CHKDSK.EXE or SCANDISK.EXE. In some cases these utilities can find and repair problems in dictionary files.

Unexpected crashes can cause the discrepancy between the physical and calculated file sizes. The sooner you run a disk diagnostic utility after the corruption occurs, the more likely it is that the problem can be fixed.

DEXTERITY UTILITIES 135 PART 3 REPORT REFERENCE

Diagnostics Report

Time printed: 11/24/1995 11:08:52

Dictionary: HD1:RESM.DIC Module Information ______Num mods 32 Num unused 50 Mtype Modid DirBlock Noffset Nlength 2 22000 163 641 10 2 22001 196 46 7 2 22002 213 104 13 2 22003 230 117 8 2 22004 247 125 14 2 22005 264 222 17 2 22006 281 239 10 2 22007 298 249 7 2 22008 315 501 13 3 22000 322 256 14 3 22001 327 594 17 3 22002 332 611 17 3 22003 341 628 13 3 22005 350 651 13 System Core # Types 13 # Unused type slots 0 # allocated res slots 186 # unallocated res slots 10

Restype # resources # unused resslots ______1 5 5 5 10 5 8 6 5 15 4 5 25 3 5 26 1 5 28 28 5 29 26 5 40 9 5 42 3 4 43 9 5 44 9 5 45 9 5 ------122 64 = 186

Number of types: 8 ======______

Options included in this example: Block Table Module Table Directory Information for Selected Module

136 DEXTERITY UTILITIES SUMMARY REPORTS

Summary Reports

The Summary Reports list information about tables in a dictionary or all global fields in a dictionary. The table summary report includes the table name, series, table display name, table physical name and the table group to which the table belongs (if any). The field summary report includes the name, array size, physical name and data type used for each field.

To use the Summary Reports, open a source dictionary and choose Summary Reports from the Reports menu. The Summary Reports window will appear, as shown in the following illustration.

1. Select the summary report to print. Choose either the Table Summary Report or the Field Summary Report.

2. Print the report. Click Print to print the summary report. The Report File Name dialog box will appear. Enter the name and location for the summary report, then click Save. Sample Table Summary and Field Summary reports are shown on the following pages.

DEXTERITY UTILITIES 137 PART 3 REPORT REFERENCE

Table Summary Report

Time printed: 11/24/1995 11:23:36

Dictionary: HD1:RESM.DIC Table Resources - Summary ______Table Series Display Name Physical Name Table Group ______House_Descriptions Sales House Descriptions HOUSEDES House Tables Seller_Data Sales Seller Data SELLDAT Seller Tables House_Data Sales House Data HOUSEDAT House Tables House_Pictures Sales House Pictures HOUSEPIC House Tables Buyer_Data Sales Buyer Data BUYERDAT Buyer Tables Candidate_Buyers_List Sales Candidate Buyers List temp [None] Candidate_Houses_List Sales Candidate Houses List temp [None]

138 DEXTERITY UTILITIES SUMMARY REPORTS

Field Summary Report

Time printed: 11/24/1995 11:23:50

Dictionary: HD1:RESM.DIC Field Report - Summary ______Field Array Physical Name Datatype Storage Type Format ______Address Address STR30 String Agent Agent STR30 String Air Conditioned Air Conditioned Air Conditioned Radio Group Asking Price Asking Price CUR9 Currency CUR Baths Baths INT2 Integer Bedrooms Bedrooms INT2 Integer Buyer ID Buyer ID Buyer_ID String Buyer Name Buyer Name STR30 String Buyers Button PB_Buyers Push Button City City STR20 String Description Description Text32000 Text [Var Len] Expand Button Expand Button Visual Switch Floor Space Floor Space INT5 Integer Floors Floors INT2 Integer Garages Garages INT2 Integer Heating Type Heating Type Heating_Type Drop Down List House ID House ID House_ID String House Type House Type House_Type Drop Down List Houses Button PB_Houses Push Button Lookup Button [ 5] PB_Lookup Push Button Maximum Price Maximum Price CUR9 Currency CUR Minimum Price Minimum Price CUR9 Currency CUR Monthly Utility Cost Monthly Utility Cost CUR6 Currency CUR No No Radio Button Normal Button Normal Button Visual Switch Phone Phone STR10_Phone String STR10_Phone Picture Picture Picture Picture [Var Len] Progress_Bar Progress_Bar Visual Switch Progress_Bar_Status Progress_Bar_Status Integer Reports Button BDL_Reports Button List Seller ID Seller ID Seller_ID String Seller Name Seller Name STR30 String Sellers Button PB_Sellers Push Button

Yes Yes Radio Button ZIP Code ZIP Code ZIP_STR9 String ZIP_STR9 ______

DEXTERITY UTILITIES 139 PART 3 REPORT REFERENCE

Cross Link Analysis Report

The Cross Link Analysis Report examines a dictionary for resources that improperly reference other resources. Specifically, it checks for the following conditions:

• A script resource referenced by more than one field. • A table relationship referenced by more than one table. • A key resource referenced by more than one table.

These problems could occur under rare circumstances in earlier versions of Dexterity. Use this utility to determine whether any of these problems have affected your dictionaries.

To use the Cross Link Analysis report, open a source dictionary and choose Cross Link Analysis from the Reports menu. The Cross Link Analysis window will appear, as shown in the following illustration.

1. Analyze the dictionary. Click OK to check for cross links in the dictionary. The Report File Name dialog box will appear. Enter the name and location for the Cross Link Analysis report, then click Save. A sample Cross Link Analysis report is shown on the following page.

2. Use the Cross Link Analysis report to verify that there are no cross-linked resources. If no cross-linked resources are found in the dictionary, the Cross Link Analysis report won’t contain any entries. If any resources are cross- linked, you must take measures to fix the problem. Typically, this involves deleting the incorrect reference to the cross-linked resource and recreating the script, key or table relationship that should be referenced.

140 DEXTERITY UTILITIES CROSS LINK ANALYSIS REPORT

Cross Link Analysis Report

Time printed: 11/24/1998 11:44:40

Dictionary: HD1:RESM.DIC Cross-link Report ______Form: Sellers FIELD CHANGE script 22000 Sellers l_Save Button_CHG FIELD (L) Save Button FIELD CHANGE script 22000 Sellers l_Save Button_CHG FIELD (L) Clear Button

FIELD CHANGE script 22000 Sellers l_Save Button_CHG FIELD (L) Clear Button FIELD CHANGE script 22000 Sellers l_Save Button_CHG FIELD (L) Save Button

DEXTERITY UTILITIES 141 PART 3 REPORT REFERENCE

Prompt Overflow Report

The Prompt Overflow Report ascertains whether the text in static text prompts is too long to be displayed properly on forms or reports. This report is typically run after static text has been changed to create an international version of an application. In some cases, the translated text is too long to be displayed properly. This report lists which window and report static text fields must be adjusted to display the longer text.

To use the Prompt Overflow report, open a source dictionary and choose Prompt Overflow Report from the Reports menu. A file dialog box will appear, allowing you to specify the name and location of the Prompt Overflow Report. A sample Prompt Overflow Report is shown on the following page.

142 DEXTERITY UTILITIES PROMPT OVERFLOW REPORT

Prompt Overflow Report

------Forms ------

Form 'Seller_Lookup' Window 'Seller_Lookup' Prompt "Seller ID" Position (315,38) (342,56)

Form 'Buyers' Window 'Buyers' Prompt "Agent:" Position (170,23) (201,44) Prompt "Floors:" Position (129,188) (159,209)

------Reports ------

Report 'Buyer Report' Prompt "Buyer Name:" Position (7,84) (63,98)

DEXTERITY UTILITIES 143 PART 3 REPORT REFERENCE

Referential Diagnostics Report

The Referential Diagnostics Report examines a dictionary for two types of referential integrity problems: invalid direct references and invalid transitive references.

• Invalid direct references exist when one resource references a second resource that doesn’t exist. For example, a field that references a non- existent data type is an invalid direct reference.

• Invalid transitive references exist when a resource accessed via another resource doesn’t exist. For example, a report references a table resource directly. The table resource references field resources. If the report refer- ences a field from the table, but the field is no longer part of the table, the result is an invalid transitive reference.

We recommend that you run the Referential Diagnostics Report before you ship your application to customers. This will alert you to any improperly referenced resource in the application, which could cause problems not detectable by ordinary testing.

To use the Referential Diagnostics Report, open a source dictionary and choose Referential Diagnostics from the Reports menu. A file dialog box will appear, allowing you to specify the name and location of the Referential Diagnostics Report.

1. Examine the report. If any referential integrity problems were found, they will be listed in the report. If no problems were found, only the report headings will be included in the report. A sample Referential Integrity Report is shown on the following page.

2. Address any errors that were found. If referential integrity problems were found, they should be resolved before you ship your application. Typically, this involves using Dexterity to re-establish the references between resources. To do this, delete the erroneous reference (the [Not Found]) and then re-establish the reference.

144 DEXTERITY UTILITIES REFERENTIAL DIAGNOSTICS REPORT

For example, if a data type is deleted, fields that used it will no longer properly reference a data type. Open the field definition for any field that referenced the deleted data type and choose another data type.

In other cases, you may have to remove the references to resources that have been deleted. The following are two common situations:

• Windows and reports contain references to strings that no longer exist. Typically, these strings are very short, and may be difficult to locate on the window or report layout. In some cases, they may be listed in the drop-down list in the Properties window. If this is the case, you can select them and then choose Clear from the Edit menu to delete them.

• Invalid string references on report frames. This occurs when the names of additional headers and footers for a report are inadvert- ently deleted. Re-add the additional header and footer names to solve the problem.

DEXTERITY UTILITIES 145 PART 3 REPORT REFERENCE

Referential Diagnostics Report

Invalid Direct References

Data Type Seller_ID references a non-existent Composite. Window House_Lookup_Scroll of form House_Lookup references a non-existent String.

Invalid Transitive References

Table Buyer_Data: Key Buyer_Data_By_Name references a field not in this table. Report Candidate Buyers: Report Candidate Buyers references a field not in table Buyer_Data. Report Buyer Report: Report Buyer Report references a field not in table Buyer_Data. Report House Report: Report House Report contains a field from a table not linked to this report.

146 DEXTERITY UTILITIES TABLE RELATIONSHIPS VALIDATION REPORT

Table Relationships Validation Report

The Table Relationships Validation Report examines a dictionary for table relationships that have been defined incorrectly. Each table relationship is examined to ascertain whether it has any of the following problems:

• The relationship type is set incorrectly. For example, a one-to-one rela- tionship is set to be a one-to-many relationship.

• The relationship has corresponding key segments that have incompati- ble data types.

• The relationship has too many segments for the key in the secondary table.

These problems can be introduced into an application when you change key or table definitions for existing tables.

We recommend that you run the Table Relationships Validation Report before you ship your application to customers. This will alert you to any improperly-defined table relationships in the application.

To use the Table Relationships Validation Report, open a source dictionary and choose Table Relationships Validation from the Reports menu. A file dialog box will appear, allowing you to specify the name and location of the Table Relationships Validation Report.

1. Examine the report. If any table relationship problems were found, they will be listed in the report. If no problems were found, only the report heading will be included in the report. A sample Table Relationships Validation Report is shown on the following page.

2. Address any errors that were found. If table relationship problems were found, they should be resolved before you ship your application. Typically, this involves using Dexterity to open each table relationship that contains errors. The Table Relationship Definition Window will automatically set the relationship type. It will prevent you from setting key segments to incompatible types, and will also prevent having too many segments for the key in the secondary table.

DEXTERITY UTILITIES 147 PART 3 REPORT REFERENCE

Table Relationships Validation Report

Table Relationships Validation Report

Relationship from table "House_Data" to "Seller_Data": Invalid one to many error Relationship from table "House_Data" to "House_Descriptions": Too many fields error

148 DEXTERITY UTILITIES RESOURCE ID VALIDATION REPORT

Resource ID Validation Report

The Resource ID Validation Report examines two versions of a dictionary and lists potential resource ID issues. This report is typically used to isolate problems caused when resource IDs have changed between older and newer versions of a dictionary.

To use the Resource ID Validation Report, open the original version of the dictionary as a source dictionary. Open the new (revised) version of the dictionary as an editable dictionary. Choose Resource ID Validation from the Reports menu. A file dialog box will appear, allowing you to specify the name and location of the Resource ID Validation Report.

As the report is generated, all forms, windows, and window items (such as fields or static text) in the original dictionary are examined. The routine attempts to locate the corresponding resource in the revised dictionary. The following conditions are logged:

• If the resource is not found in the revised dictionary, either by its name or resource ID, it will be reported as “may have been removed”.

• If a resource with the same resource ID is found in the revised dictio- nary, but the name does not match, it will be reported as “may have been renamed”. This may also indicate that the resource has been deleted in the revised dictionary, and another resource of the same type is now using the resource ID.

• If a resource with the same name is found in the revised dictionary, but the resource ID does not match, it will be reported as “RESID changed”.

A sample Resource ID Validation Report is shown on the following page.

DEXTERITY UTILITIES 149 PART 3 REPORT REFERENCE

Resource ID Validation Report

**** Window 'Buyers' of form 'Buyers' **** Field 'Clear' on form 'Buyers' may have been renamed to 'Restart'.

**** Window 'Houses' of form 'Houses' **** Field 'Monthly Utility Cost' may have been removed. Field 'Match Buyers' on form 'Houses': RESID changed from 22017 to 22020.

150 DEXTERITY UTILITIES APPENDIX Appendix

This manual has the following appendix:

• Appendix A, “Dictionary Structure,” describes the internal structure of a Dexterity dictionary.

152 DEXTERITY UTILITIES Appendix A: Dictionary Structure

This appendix describes the structure of a Dexterity application dictionary. The information provided here can be useful when you’re attempting to repair a damaged application dictionary. Information about dictionary structure is divided into the following sections:

• Parts of a dictionary • Types of modules • Dictionary cores • Resources stored in modules • Form modules • Report modules

DEXTERITY UTILITIES 153 APPENDIX A DICTIONARY STRUCTURE

Parts of a dictionary

An application dictionary is composed of modules. A module is a collection of resources. Resources contain information about some specific element of the application such as a string, field or window. Modules provide a method of organizing resources. The structure of a dictionary is shown in the following illustration.

Application Dictionary Resources

Resources

Resources Modules Resources

Resources

Resources

Resources

Resources

Resources

154 DEXTERITY UTILITIES APPENDIX A DICTIONARY STRUCTURE

Types of modules

An application dictionary can have three types of modules:

• Form modules contain resources that are specific to a single form. Resources such as windows, menus and local fields are stored in form modules. Each form in an application has a corresponding form mod- ule in the dictionary.

• Report modules contain resources that are specific to a single report. Resources such as restrictions are stored in report modules. Each report in an application has a corresponding report module in the dictionary.

• Core modules contain resources that are used by several parts of the application. Resources such as strings, table definitions and global fields are stored in core modules. Dictionary cores

Large applications can have thousands of core resources. To better manage core resources, the core modules are grouped into dictionary cores. Each core module is placed into one of seven dictionary cores:

These dictionary cores •System are sometimes referred • Financial to as series. •Sales • Purchasing •Inventory •Payroll •Project

The dictionary cores correspond to series for Microsoft Dynamics GP. For instance, the core resources for Inventory are placed in the Inventory core. The drop-down list on the Dexterity Utilities tool bar and the Default Core drop-down list in the Dexterity Options window specify the dictionary core into which core resources will be placed.

DEXTERITY UTILITIES 155 APPENDIX A DICTIONARY STRUCTURE

To simply create a functional application, it doesn’t matter which dictionary core the core resources are created in. However, creating the core resources for your application in the appropriate dictionary cores will make them easier to manage.

You can use the Change Core utility in Dexterity Utilities to change the dictionary core in which a core resource is stored.

The following illustration shows how the core modules for a dictionary are grouped into the various dictionary cores.

Application Dictionary

Sales Core Modules

Financial Core Modules

Inventory Core Modules

Project Core Modules

Purchasing Core Modules

System Core Modules

Payroll Core Modules

Form Modules

Report Modules

156 DEXTERITY UTILITIES APPENDIX A DICTIONARY STRUCTURE

Resources stored in modules

This section lists the types of modules and the kinds of resources stored in them. Core modules Several types of core modules are stored in the dictionary. The following table lists the core module types and which resources can be stored in them.

Core module type Resources stored Core COM Library Composite Constant External Icon Format Form List Key Mac Pict Metafile Picture Relationship Reports List System Vars Table Table Group Table Group List Table List Core Tables Core Table Core Table 3rd Core Table Mod Data Types Data Type (global data type) Fields Field (global field) Install Product (product information) Physical Names Field Physical Name (physical name for global fields) Strings String PScript Code Procedure Script Code Procedure Script Data PScript Source Procedure Script Debug Procedure Script Source FScript Code Function Script Code Function Script Data FScript Source Function Script Debug Function Script Source

DEXTERITY UTILITIES 157 APPENDIX A DICTIONARY STRUCTURE

Core module type Resources stored Messages Message Form modules

The following is a list of the resources stored in a form module.

Module type Resources stored Form Command Data Type (local data type) Field (local field) Form Procedure Script Code Procedure Script Data Function Script Code Function Script Data Menu Menu Options Script Code Script Data Window Report modules

The following is a list of the resources stored in a report module.

Module type Resources stored Report Expression Frame Report Restriction String

158 DEXTERITY UTILITIES Chunk utility Compress Glossary A function of Dexterity Utilities that The process of removing unneeded allows you to transfer “chunks,” or information, such as script source, and Accelerator key related pieces of information, from a unused blocks from dictionaries. A key or set of keys on the keyboard that source dictionary to a chunk dictionary. Dictionaries are typically compressed can be used as a “shortcut” to select a This utility is useful for updating specific before being sent to customers. menu or menu option rather than using portions of a dictionary when the the mouse. dictionary is very large (such as the Control type Dynamics.dic dictionary). When you’ve The control type is the main characteristic Alert message modified or added resources in the chunk of a data type, controlling the type of A message that appears when dictionary, you can merge it back into the information that can be stored in fields inappropriate, inadequate or unclear source dictionary to implement with the data type, and some aspects of data or instructions are issued, when data modifications. how the information will be displayed. is not accessible or when a confirmation Commonly-used control types are push is required. Compare buttons, integers, check boxes, dates and To evaluate the variations between two currencies. See also Data type. Array field dictionaries, using Dexterity Utilities. A field containing multiple occurrences Core module of the same type of information. The Compatibility ID A group of related resources in a individual pieces of information stored A string that uniquely identifies the Dexterity dictionary that can be by an array field are called elements. For version of your application. You specify referenced by other resources, including example, a seven-element array field the compatibility ID when you add forms and reports, throughout the could be used to store daily sales totals product information to a dictionary. dictionary. Each core module contains instead of seven individual fields. When you launch your application with one or more specific types of resources the runtime engine, the compatibility ID such as fields, data types and scripts. See Array index in the application dictionary is compared also Dictionary module, Form module and The number designating a specific with the compatibility IDs in the forms Report module. element within an array field. Each and reports dictionaries. If they match, component field within an array field has items in the forms and reports Core resources an array index. dictionaries can be accessed. Resources such as strings, data types or global fields that are used by several Block Compatibility message parts of the application. When forms and A specified portion of the dictionary. For The message that is displayed when the reports dictionaries are created, the core instance, an unused “block” within a compatibility IDs in the forms or reports resources in the application dictionary dictionary refers to a portion of the dictionaries don’t match the are copied to them. dictionary that isn’t being used, or a compatibility ID in the main dictionary. If an application uses forms and reports portion that at one time contained You specify the compatibility message information that has been deleted. You when you add product information to a dictionaries, an update should be distributed as a dictionary chunk so the can remove unused blocks by using the dictionary. compress utility of Dexterity Utilities. core resources in the forms and reports Compile dictionaries will be updated properly. Chunk dictionary To run a script through a compiler. A Otherwise, the application may not work A dictionary that contains portions, or compiler translates the script instructions correctly. “chunks,” of resources from a source into a language that the computer can Cross-linked resources dictionary. Chunk dictionaries allow understand. Once the script has been Resources that improperly reference large dictionaries to be divided into more compiled, the instructions within the manageable pieces for delivery to script can be executed. other resources. Specifically, scripts customers. The runtime engine referenced by more than one field, table “unchunks,” or merges the chunk Compiler errors relationships referenced by more than dictionaries to re-create the original Errors generated when a script is one table, and keys referenced by more dictionary. Chunk dictionaries can also be compiled. than one table are cross-linked resources. used to deliver updates for an The Cross Link Analysis Report checks application. for these conditions.

DEXTERITY UTILITIES 159 GLOSSARY

Custom dictionaries Dictionary location ID defined in the Dynamics.dic dictionary to A forms or reports dictionary generated In a launch file, a line that indicates a set a new dictionary. by the Modifier and Report Writer. of dictionary locations. This set of Extracted dictionary dictionary locations includes generic The dictionary that is created when third- Data type pathnames for the locations of the party resources are copied from the A Dexterity resource that defines the application dictionary, forms dictionary, characteristics for a field, such as its reports dictionary and any integrating Dynamics.dic dictionary to a new dictionary using the Extract utility. keyable length, control type (push dictionaries. A launch file can contain button, check box, string, and so on) and several sets of dictionary location IDs and Field format. A single data type can be applied dictionary locations. A field contains a single piece of to several fields, but a field can only have information used by the application one data type applied to it. See also Dictionary module Control type. A group of related resources in a dictionary. A field can be displayed in a window or stored in a table. The kind of Dexterity dictionary, which can be Data types are commonly identified by information the field displays or stores viewed and transferred using Dexterity their control type or storage type; for Utilities. There are three types of depends upon the data type associated instance, a radio button data type, or a with it. See also Global field and Local field. dictionary modules: core, form and string data type. report modules. Form and report File Debug statement modules contain resources used only on a See Table. A Dexterity script statement that allows specific form or report, such as local you to create dialog boxes that will fields, scripts and calculated fields, while Form appear when an application is run in test core modules contain resources that can A collection of windows, menus, scripts mode. For example, the messages be used throughout the dictionary. See and tables that function together for a appearing in the dialog boxes can be used also Core module, Form module and Report common purpose. module. to indicate which script is being run or Form function the value that should be generated at a Display name A user-defined function that’s associated given point. If debug statements aren’t One of the names specified for a table. with a specific form. compiled, the messages can’t be The display name is used when the name displayed in test mode. Debug statement of the table is displayed to the user. See Form module messages never appear in applications also Technical name. A group of related resources that executed with the runtime engine. compose a specific form. Editable dictionary Destination dictionary A dictionary that you can access and Form procedure The dictionary to which resources, work with in a read/write manner. A procedure that’s associated with a strings and messages, windows or specific form. dictionary modules are transferred, using Ending script the Dexterity Utilities. One of the two procedures that can be Form scripts associated with a dictionary chunk. Scripts associated with a specific form. Dictionary When you create a dictionary chunk, you Form table A group of Dexterity resources that, can specify a procedure from the when interpreted by the runtime engine, A table that has been attached to a form. application to be the ending script for the present a complete, functioning Tables must be attached to the form dictionary chunk. The ending script will before any window in the form can use application. be run with the other starting and ending the tables. Dictionary core scripts after all dictionary chunks have A group of related core modules. Each been unchunked. See also Starting script Format core module is placed into one of seven and Installation script. The extra characters, spacing and attributes that can be applied to a data dictionary cores: System, Financial, Sales, Extract type when data is entered or displayed. Purchasing, Inventory, Payroll and A function of Dexterity Utilities that Project. For Microsoft Dynamics GP, copies third-party resources (resources dictionary cores typically correspond to with IDs of 22,000 or greater) you’ve Series.

160 DEXTERITY UTILITIES GLOSSARY

Format string Keyable length Physical name A data “mask” used for string and The number of characters that can be For tables, the name under which a table composite formats. The format string typed in a field. is stored by the operating system or allows extra characters to appear in a database. field without affecting the way data in Launch file For global fields, a shortened version of the field is stored. A file that’s used to start your dictionary with the runtime engine. This file stores the field name that is used as the column Forms dictionary the location of your application name when the field is used in a SQL The dictionary that stores user-modified dictionary, the name and location of any table. resources from a main dictionary. This forms or reports dictionaries and the Procedure dictionary is created when the Modifier is name and location of any integrating A script that isn't associated with a single accessed for the first time. Only copies of dictionaries. the main dictionary’s resources are stored window or form but that can be called from other scripts to perform a common in the forms dictionary. See also Custom Launch file ID function. Referred to as a “global script” dictionaries. An integer that uniquely identifies the launch file. It appears in the second line prior to Dexterity 3.0. Global field of the launch file. This number is also the Product ID A field created using the Field Definition product ID of the main product. See also window. Global fields can be displayed Product ID. The ID that’s used to uniquely identify an application dictionary. Product IDs for in windows or stored in tables. See also each product developed with Dexterity Local field. Local field A field that’s available only within the must be acquired from Microsoft Global script form in which it’s created. Local fields are Business Solutions. A script that isn’t associated with a single used as window fields. See also Global Product information window or form but that can be called field. Information added to a dictionary that from other scripts to perform a common allows the runtime engine to create a function. Renamed “procedure” in Message (resource) launch file properly. Dexterity 3.0. A message that was entered using the Dexterity Messages window and that can Record Installation script be referenced by its ID in scripts, using A complete group of information, such as A procedure in your application that the getmsg() function. The message can performs actions such as adding items to be displayed using the ask() function or a customer’s name, address and phone number, made up of one instance of each palettes or setting up default pathnames. the warning or error statement. field in a table. Each record in a table has Installation scripts are specified as starting or ending scripts for dictionary Module the same fields. See Dictionary module. chunks. When the dictionary chunks are Relations “unchunked,” the installation scripts will Multidictionary See Table relationship. run automatically. A feature of Dexterity that allows the Report module Integrating application runtime engine to interpret two or more separate application dictionaries at the A group of related resources in a A Dexterity application that runs Dexterity dictionary that are used to same time. This capability allows concurrently with another application define information that is unique to such as Microsoft Dynamics GP. multiple third-party dictionaries to function with Microsoft Dynamics GP. reports, such as scripts and calculated Integrating applications can use fields. Resources that aren’t unique to Microsoft Dynamics GP resources. Native pictures reports, such as fields and tables, are Key Picture objects that are specific, or native, stored in core modules and are referenced within the report definition. A field or combination of fields within a to a particular operating system. Native See also Core module, Dictionary module record that is used as a basis by which to pictures must be used to create pictures Form module store, retrieve and sort records. that appear on push buttons and button and . drop lists. Key segment One field of a group of fields that compose a key.

DEXTERITY UTILITIES 161 GLOSSARY

Reports dictionary Series resources String resources The dictionary that stores modified Lists containing the names of forms, Sequences of up to 79 characters used reports from the main dictionary and reports, tables and table groups in an throughout an application dictionary for new reports created with the runtime application dictionary. These lists are window names, field prompts, static text engine’s Report Writer. The reports used for security, palettes and table values and report text. dictionary is created when the runtime maintenance. Dexterity Utilities can be engine’s Report Writer is accessed for the used to manually update these lists. Synchronize (Dexterity) first time. All reports you modify or To specify the native picture on each create with the runtime engine’s Report Source dictionary platform that should be used as the static Writer are stored in the reports The dictionary containing the resources value for a single data type. When two dictionary. See also Custom dictionaries. to be used in transfers, printing reports, pictures are synchronized, Dexterity will comparing dictionaries or creating chunk assign them the same internal ID. Resource dictionaries. A source dictionary has Thereafter, when a synchronized picture An object such as a field, static text, read-only access. is displayed by the application as it runs, native picture, table, window or script the native picture that’s appropriate to that can be used to create applications in Stand-alone application the current operating system will be Dexterity. A Dexterity application that operates displayed. without integrating with Microsoft Resource ID Dynamics GP. Synchronize (Dexterity Utilities) An internal ID applied to each resource A function that checks all relationships in your application. For each type of Starting script between resources in a dictionary and resource you create, IDs start at 22,000. One of the two scripts associated with a recalculates all buffer sizes. For instance, the first data type you create dictionary chunk. When you create a is data type 22,000; the second is data dictionary chunk, you can specify a Table type 22,001, and so on. Resource IDs for procedure from the application to be the A collection of related data formatted in Microsoft Dynamics GP start at 1 and starting script for the dictionary chunk. rows. Each row represents a separate never exceed 19,999. The starting script will be run with the record, and each column represents a other starting and ending scripts after all separate field. Although this term Script dictionary chunks have been originated with relational databases, A list of instructions an application uses “unchunked.” See also Ending script and Dexterity uses it generically to refer to to perform tasks. Installation script. both relational database tables and ISAM database files. Sequence number Static picture value When a dictionary is broken into several A picture that’s displayed as part of a Table group chunk dictionaries, the sequence number data type, such as the picture on a button A group of logically-related tables. For associated with each dictionary chunk drop list. example, a customer master table, a indicates the order in which the customer address table and a customer dictionary chunks will be “unchunked” Static text value history table could all compose a table and any installation scripts will be run. Text that’s displayed as part of a data group. Table groups are used for security type, such as the name on a push button and table maintenance. Series or the items in a list box. A predefined category to which you can Table relationship assign forms, tables and reports in your Storage type A link between tables that have fields in application dictionary. Series allow you One of the standard forms used to store common. These relationships allow the to more easily organize these resources. If the data in a field. The storage types are: Report Writer to select fields from all of you’re creating an application that links boolean, integer, long, currency, variable the related tables and use them on a to Microsoft Dynamics GP, assign the currency, string, text, date and time. The single report. Table relationships are set appropriate series to your own forms, control type determines which storage up using the Table Relationship tables and reports based on the resources type is used to store the data in the field. Definition window. they integrate with. See also Control type and Data type. Technical name String The name used within scripts to refer to a A sequence of up to 255 ASCII characters. table or window. See also Display name. See also String resources.

162 DEXTERITY UTILITIES GLOSSARY

Transfer To copy specified resources in a source dictionary to a destination dictionary. Unchunking The process of dictionary chunks being converted back into a dictionary or being merged with an existing dictionary. User-defined function A script in Dexterity that you write and use in the same manner as Dexterity’s built-in functions. Version numbers (for dictionary chunks) A dictionary chunk can have a version number associated with it. When the dictionary chunk is “unchunked,” the version numbers are written to the application dictionary. The version numbers can be retrieved from the dictionary and typically are displayed in the application’s About Box. Window The work area used to enter and display information in an application.

DEXTERITY UTILITIES 163 164 DEXTERITY UTILITIES Index C user interface conversion 86 calculated fields Compare Dictionaries window 67 changing Evaluate After 90-91 comparing dictionaries Numerics Change Core window 49 defined 159 3D effects changing dictionary core procedure 67-68 user interface conversion 83 procedure 48-49 purpose 67 A charts compatibility ID additional resources transferred 26 defined 159 About Dexterity Utilities packaging applications 59 described 70 menu item 14 reports summary 95-100 compatibility message accelerator key updating applications 59 defined 159 defined 159 utility summary 17-19 described 70 alert messages checklists Compile Form Scripts window 38 search the Dexterity online help for see procedures Compile Global Functions window 42 alert messages chunk dictionaries Compile Global Procedures window 40 defined 159 adding modules to 65 compiler errors aligning attaching installation scripts 64, 80 search the Dexterity online help for fields, with user interface compression 80 Compiler messages conversion 87 creating defined 159 application dictionaries procedure 61-66, 78-81 printing when compiling scripts see dictionaries defined 8, 159 39, 41, 43 applications described 61 printing when performing packaging 59 editing 62 transfers 25 updating 59, 67 ending scripts 64, 80 when compiling scripts 39, 41, 43 array indexes modules to include 65 when transferring resources 28 defined 159 purpose 61 compiling arrays selecting a module 63, 79 assert statements defined 159 sequence numbers 63 when compiling scripts 39, 41, assert statements starting scripts 64, 80 43 compiling in scripts 39, 41, 43 version numbers 63, 79 when transferring 25 compiling when performing chunk utility debug statements transfers 25 defined 159 when compiling scripts 39, 41, Auto-Chunk utility chunks 43 creating chunk dictionaries 78-81 see chunk dictionaries when transferring 25 description 78 Clear defined 8, 159 Auto-Chunk window 78 menu item 13 errors 39, 41, 43 B Close Destination Dictionary form function scripts 38 menu item 13 form procedure scripts 38 Basics form scripts, procedure 38-39 part 6-14 Close Editable Dictionary menu item 13 global functions, procedure 42-43 block table global procedures, procedure description 133 Close Source Dictionary menu item 13 40-41 errors in 134 including debugging information blocks Close Window menu item 13 25, 39, 41, 43 defined 8, 159 options 39, 41, 43 removing 60 closing dictionaries 10 when transferring resources 24 combo boxes components of Dexterity Utilities 7

DEXTERITY UTILITIES 165 INDEX

composites defined 159 addressing errors 134 reports for 95 described 140 block table 133 utilities for 17 custom colors described 132 Compress Dictionary window 60 user interface conversion 85 interpreting 134 compressing custom dictionaries module directory 133 chunk dictionaries 80 defined 160 module table 133 defined 8, 159 Cut sample report 136 dictionaries menu item 13 window 132 procedure 60 dictionaries options 60 D see also applications, chunk purpose 60 data types dictionaries removing unused blocks 60 defined 160 adding product information, total compression 60 reports for 95 procedure 69-71 constants utilities for 17 chunk dictionaries reports for 95 debug statements creating 61-66, 78-81 utilities for 17 compiling in scripts 39, 41, 43 closing 10 Contents compiling when performing comparing menu item 14 transfers 25 procedure 67-68 control types defined 160 purpose 67 defined 159 debugging information compatibility ID 70 conventions including when compiling 25, 39, compatibility message 70 in documentation 3 41, 43 compressing, procedure 60 conversion report default core drop-down list 155 corruption 134 for user interface conversion 82 deleting defined 160 converting unused resources 122, 126 destination 10 user interfaces 82-89 destination dictionaries diagnostics 132 Copy defined 8, 160 editable 10 menu item 13 working with 10 errors in 134 core destination drop-down list 12, 155 developer update extracting resources from core modules procedure 35-36 Microsoft Dynamics GP, defined 8, 155, 159 Developer Update window 35 procedure 72 resources stored in 157 Dexterity Utilities list of open dictionaries 14 core resources components 7 opening 10 see also resources main menu 11 parts of 154 changing dictionary core, menu bar 13 source 10 described 48 reports summary table 95-100 SQL compatibility 75 defined 8, 159 starting 7 structure 154 corruption terms 8 synchronizing, procedure 58 in dictionaries 132 toolbar 12 utilities for 17 Create Chunk Dictionary window 62 utility summary table 17-19 working with 10 Create New Dictionary Dexterity Utilities Interface Dictionaries menu menu item 13 chapter 11-14 described 14 Cross Link Analysis Report diagnostics dictionary chunks described 140 for dictionaries 132 see chunk dictionaries sample report 141 for table relationships 147 dictionary cores Cross Link Analysis window 140 referential diagnostics 144 changing location of resources 48 cross-linked resources Diagnostics Report defined 160

166 DEXTERITY UTILITIES INDEX

for transferred resources 27 procedure 74 reports for 97 list of 48, 155 Extract window 72 utilities for 17 purpose 48, 155 extracted dictionary viewing dictionary location IDs defined 9, 160 form windows and menus 54 defined 160 extracting forms dictionaries dictionary modules defined 9, 160 compatibility ID 70 defined 8, 160 purpose 72 compatibilty message 70 size of 34, 65 third-party resources from defined 161 transferring, procedure 33-34 Microsoft Dynamics GP 72 naming 70 Dictionary Structure Forms Report appendix 153-158 F described 101 Dictionary Utilities Field Summary Report 137 sample report 103 chapter 57-91 fields Forms Report window 101 dictionary utilities defined 160 functions described 57 reports for 95 reports for 98 display names utilities for 17 utilities for 17 defined 160 File menu documentation described 13 G symbols and conventions 3 form functions Getting Started drop-down lists compiling 38 chapter 7-10 user interface conversion 86 defined 160 global fields reports for 98 see also fields E utilities for 17 defined 161 Edit menu Form Inquiry window 54 global functions described 13 form modules compiling procedure 42-43 editable dictionaries defined 155, 160 reports for 98 defined 8, 160 resources stored in 158 utilities for 17 working with 10 form procedures when to compile 42 Emergency Diagnostics Report 132 compiling 38 Global Functions Report ending scripts defined 160 described 109 defined 160 reports for 98 sample report 110 for a chunk dictionary 64, 80 utilities for 18 Global Functions Report window 109 errors form scripts global procedures compiling scripts 28, 39, 41, 43 compiling procedure 38-39 compiling procedure 40-41 found by diagnostics 132 defined 160 reports for 98 found by referential diagnostics when to compile 38 utilities for 18 144 form tables when to compile 40 found by table relationship defined 160 Global Procedures Report validation 147 format strings described 111 in block table 134 defined 161 sample report 112 Evaluate After formats Global Procedures Report window 111 procedure 90-91 defined 160 Global Resource Usage Report Evaluate After Utility window 90 reports for 96 described 122 Exit utilities for 17 sample report 125 menu item 13 forms Global Resource Usage window 122 Expand Windows window 74 defined 160 global resources expanding windows inquiry procedure 54 see resources

DEXTERITY UTILITIES 167 INDEX

Global Resources Report K Dictionaries menu 14 described 113 key segments Edit menu 13 sample report 115 defined 161 File menu 13 Global Resources Report window 113 keyable length Help menu 14 global scripts defined 161 Macro menu 14 defined 161 keys Windows menu 14 global variables defined 161 messages reports for 97 defined 161 utilities for 17 L reports for 97 launch file ID transferring, options 30 H described 70 transferring, procedure 29-30 Help menu launch files utilities for 18 described 14 defined 161 metafiles How to Use Help launching reports for 98 menu item 14 Dexterity Utilities 7 utilities for 18 I light bulb symbol 3 Microsoft Dynamics GP Linked Prompt Report extracting third-party resources 72 IDs described 129 transferring an extracted see resource IDs sample report 131 dictionary 35-36 Inquiry menu Linked Prompt Report window 129 module directory 133 described 12 local fields module table 133 inquiry procedure defined 161 modules for forms 54 Local Resource Usage Report see also dictionary modules for resources 55 described 126 adding to chunk dictionaries 65 Inquiry Utilities sample report 128 transferring, procedure 33-34 chapter 53-55 Local Resource Usage window 126 types of 155 inquiry utilities Local Resources Report multidictionary described 53 described 116 defined 161 installation sample report 118 using chunk dictionaries 61 Local Resources window 116 N installation scripts Lookup native pictures see also starting and ending scripts menu item 14 defined 161 defined 161 new features in Dexterity Utilities 2 order of execution 64 M new symbol 3 integrating applications Macro menu defined 161 described 14 O extracting from Microsoft main menu 11 Online Manuals Dynamics GP 72 main product menu item 14 packaging 59 described 70 Open Destination Dictionary updating 59 margin notes 3 menu item 13 interface conversion menu bar Open Editable Dictionary see User Interface Conversion see menus menu item 13 internationalization menus Open Source Dictionary of applications 29, 74 description of menu items 13-14 menu item 13 invalid references reports for 97 opening for resources 144 viewing for a form 54 dictionaries 10 menus in Dexterity Utilities

168 DEXTERITY UTILITIES INDEX

P Reports Report 104 example 23 packaging applications Resource Lists 119-120 replacing 23 chart 59 Searching and replacing 44-45 Transfer Resources option 22 described 59 SQL compatibility 75-77 references steps 59 Summary Reports 137 invalid 144 palettes Synchronizing a dictionary 58 Referential Diagnostics Report user interface conversion 87 Table Relationship Validation described 144 Paste Report 147 sample report 146 menu item 13 Tables Report 106-107 relations physical names Transferring dictionary modules see table relationships defined 161 33-34 removing pictures Transferring resources 22-28 unused blocks 60 reports for 98 Transferring strings and messages unused resources 122, 126 utilities for 18 29-30 replacing printing reports 94 Transferring windows 31-32 see also searching and replacing procedures Updating series resources 50-51 resources when transferring 25 Adding product information 69-71 Viewing form information 54 windows, when transferring 32 Auto-Chunk 78-81 Viewing resource information 55 report modules Changing dictionary core 48-49 procedures (resource) defined 155, 161 Changing Evaluate After 90-91 see also global procedures and resources stored in 158 Comparing dictionaries 67-68 form procedures Report Reference Compiling form scripts 38-39 compiling 40-41 part 94-150 Compiling global functions 42-43 defined 161 reports Compiling global procedures reports for 98 printing 94 40-41 utilities for 18 reports for 98 Compressing dictionaries 60 product IDs summary chart 95-100 Converting a user interface 82-89 defined 161 utilities for 18 Creating chunk dictionaries 61-66 described 70 reports dictionaries Cross Link Analysis Report 140 product information compatibility ID 70 Developer update 35-36 adding to dictionaries 69-71 compatibility message 70 Diagnostics Report 132-135 defined 161 defined 162 Emergency Diagnostics Report launch file ID 70 naming 70 132-135 product ID 70 reports in Dexterity Utilities Expanding windows 74 product name 70 Cross Link Analysis Report 140 Extracting resources 72 purpose 69 Diagnostics Report 132 Forms Report 101-102 Product Information window 69 Emergency Diagnostics Report 132 Global Functions Report 109 product name 70 Field Summary Report 137 Global Procedures Report 111 Prompt Overflow Report Forms Report 101 Global Resource Usage Report described 142 Global Functions Report 109 122-124 sample report 143, 150 Global Procedures Report 111 Global Resources Report 113-114 prototyping windows 31 Global Resource Usage Report 122 Linked Prompt Report 129-130 R Global Resources Report 113 Local Resource Usage Report Linked Prompt Report 129 records 126-127 Local Resource Usage Report 126 defined 161 Local Resources Report 116-117 Local Resources Report 116 referenced resources Referential Diagnostics Report Prompt Overflow Report 142 description 22 144-145 Referential Diagnostics Report 144

DEXTERITY UTILITIES 169 INDEX

Reports Report 104 procedure 22-28 defined 9, 162 Resource ID ValidationReport 149 unused resources series list Resource Lists 119 listing 122, 126 in the toolbar 12 Summary Reports 137 removing 123, 127 series resources Table Relationship Validation updating series resources, when to creating when transferring Report 147 perform 50 resources 24 Table Summary Report 137 viewing a list of 55 defined 9, 162 Tables Report 106 Resources menu updating, options 51 Reports menu described 12 updating, procedure 50-51 described 12 when to update 50 Reports Report S Series Resources window 50 described 104 sample reports size sample report 105 see reports in Dexterity Utilities of dictionary modules 34 Reports Report window 104 Script Utilities source dictionaries Resource ID Validation Report chapter 37-45 defined 9, 162 described 149 script utilities working with 10 resource IDs described 37 SQL defined 162 scripts compatibility finding for a resource 119 compiling for dictionaries 75 for third-party resources 72 procedure 38-39, 40-41, 42-43 limits examined 75 validation report 149 when transferring 24 making applications Resource Inquiry window 55 defined 162 compatible 76 Resource Lists errors when compiling 28, 39, 41, SQL compatibility utility described 119 43 described 75-77 sample report 121 not compiling when transferring procedure 75-77 Resource Lists window 119 resources 28 SQL Compatibility window 75 Resource Utilities reports for 98 stand-alone applications chapter 47-51 searching 44 defined 162 resource utilities utilities for 18 packaging 59 described 47 Scripts menu updating 59 resources described 12 starting see also core resources scrolling windows Dexterity Utilities 7 changing dictionary core 48 user interface conversion 86 starting scripts defined 9, 162 Search and Replace window 44 defined 162 finding resource ID 119 Search for Help On for a chunk dictionary 64, 80 in core modules 157 menu item 14 static picture values in form modules 158 searching and replacing defined 162 in report modules 158 entering text to search for 44 static text values inquiry procedure 55 procedure 44-45 defined 162 invalid references 144 selecting script to search 45 storage types removing unused resources 122, Select All defined 162 126 menu item 14 string resources replacing when transferring 25 sequence numbers defined 162 resource ID defined 162 strings finding 119 for chunk dictionaries 63 defined 162 transferring series reports for 99 options 22 see also series resources transferring, options 30

170 DEXTERITY UTILITIES INDEX

transferring, procedure 29-30 sample report 108 removing 123, 127 utilities for 18 window 106 update chunks strings and messages technical names description 61 transferring 29 defined 162 dictionary modules to include 67 structure terms in Dexterity Utilities 8 updating of dictionaries 154 third-party resources applications summary resource IDs 72 chart 59 of reports 95-100 toolbars described 59 of utilities 17-19 Dexterity Utilities’ toolbar 12 steps 59 Summary Reports Transfer Dictionary Module window using chunk dictionaries 61 described 137 33 series resources Field Summary sample report 139 Transfer menu options 51 Table Summary sample report 138 described 12 procedure 50-51 Summary Reports window 137 Transfer Resources window 22 when to perform 50 symbols in documentation 3 Transfer Strings and Messages window user interface conversion Synchronize Dictionary window 58 29 3D effects 83 synchronizing Transfer Utilities combo boxes 86 defined 9, 162 chapter 21-36 conversion report 82 dictionaries, procedure 58 Transfer Window window 31 custom colors 85 purpose 58 transferring described 82 when to perform 58 an extracted dictionary 35-36 drop-down lists 86 when transferring 24 defined 9, 163 field alignment 87 system colors dictionary modules, procedure palettes 87 user interface conversion 83 33-34 procedure 82-89 resources scrolling windows 86 T additional resources system colors 83 tab sequence transferred, chart 26 tab sequence 86 user interface conversion 86 dictionary core for transferred zooms 84 table groups resources 27 User Interface Conversion window 82 defined 162 options 22 user-defined functions utilities for 18 procedure 22-28 see also global functions and form Table Relationship Validation Report scripts not compiling 28 functions described 147 strings and messages defined 163 sample report 148 options 30 Utilities menu table relationships procedure 29-30 described 12 defined 162 windows utilities summary chart 17-19 diagnostics for 147 procedure 31-32 Utility Reference problems 147 part 16-91 reports for 99 U Table Summary Report 137 unchunking V tables defined 163 version numbers attached to a form 54 Undo for chunk dictionaries 63, 79, 163 defined 162 menu item 13 reports for 99 unused blocks W utilities for 18 removing 60 warning symbol 3 Tables Report unused resources Window Help described 106 listing 122, 126 menu item 14 windows

DEXTERITY UTILITIES 171 INDEX

defined 163 Windows menu expanding 74 described 14 replacing when transferring 32 Windows metafiles reports for 100 see metafiles transferring procedure 31-32 Z utilities for 19 zooms viewing for a form 54 user interface conversion 84 windows in Dexterity Utilities Auto-Chunk 78 Change Core 49 Compare Dictionaries 67 Compile Form Scripts 38 Compile Global Functions 42 Compile Global Procedures 40 Compress Dictionary 60 Create Chunk Dictionary 62 Cross Link Analysis 140 Developer Update 35 Diagnostics 132 Evaluate After Utility 90 Expand Windows 74 Extract 72 Form Inquiry 54 Forms Report 101 Global Functions Report 109 Global Procedures Report 111 Global Resource Usage 122 Global Resources 113 Linked Prompt 129 Local Resource Usage 126 Local Resources 116 Product Information 69 Reports Report 104 Resource Inquiry 55 Resource Lists 119 Search and Replace 44 Series Resources 50 SQL Compatibility 75 Summary Reports 137 Synchronize Dictionary 58 Tables Report 106 Transfer Dictionary Module 33 Transfer Resources 22 Transfer Strings and Messages 29 Transfer Window 31 User Interface Conversion 82

172 DEXTERITY UTILITIES