DEVCON 2007

CNS PRODUCT LINE 2007
Powerful plug-ins, with bells and whistles available at no extra charge.

COMM-UNITY • NETWORKING • SYSTEMS

ABOUT

COMM-UNITY NETWORKING SYSTEMS

Address

Comm-Unity Networking Systems 6560 Lake Worth Blvd. Ste. 300 Fort Worth, Texas 76135 817-238-1688 info@cnsplug-ins.com http://www.cnsplug-ins.com

Phone Email Web

At CNS we have never been about flashy and pretty features with all the bells and whistles. We have been about empowering you, the developer, the end user, the knowledge worker, the educator. Empowering you to step ahead where FileMaker leaves off. From sending email to creating color schemes, to enhancing images and more, our hope is that we can enable you to realize and render the solutions you dream about. Oh, and by the way, we do also strive to make the pretty and flashy features you deserve with all the necessary bells and whistles.

Contents
TABLE OF CONTENTS
NEWS............................................................................................................................................... 6-7 New for 2007.................................................................................................................................... 6 Retired Products............................................................................................................................... 7 PRODUCT OVERVIEWS................................................................................................................... 8 PRO PLUG-INS................................................................................................................................. 10-18 SMTPit Pro ......................................................................................................................................... 10 POP3it Pro ......................................................................................................................................... 12 CNS Image......................................................................................................................................... 14 CNS Menu......................................................................................................................................... 16 CNS Audit.......................................................................................................................................... 18 MIGHTY MINI PLUG-INS.................................................................................................................. 20-26 MMQuery........................................................................................................................................... 20 MMColor............................................................................................................................................ 22 MMScript............................................................................................................................................ 24 MMEmail............................................................................................................................................. 26 Prices.............................................................................................................................................. 28 COUPONS........................................................................................................................................ 29

NEW FOR 2007
t is sometimes difficult to tell just how busy we are at CNS throughout the year. Be assured, we continue to put in long hours to bring you the latest and greatest plug-ins. POP3it Pro Our big job this past year was to re-work POP3it into POP3it Pro. This plug-in has been rebuilt absolutely from scratch with a new protocol engine and we have included many new features that were not possible with the older FileMaker plug-in interface. Imagine opening a settings dialog, entering in your email account information, and then downloading your email directly into your database. It really is that easy. With POP3it Pro, you can be up and running by making only two calls to the plug-in. You do not have to create any tables, fields, or records. POP3it Pro does all that for you. However, we do provide more advanced functions if you would rather build a state machine as with past renditions of POP3it. FTPit Pro An interesting thing has happened in the past year. FTPit Pro has become our number one requested plug-in for updating. Prior to this time, FTPit was only getting moderate interest. We hear your cries for this plug-in, and we promise - it is coming. To join in our beta testing program this fall, send an email to ftpit@cnsplug-ins.com with the subject "FTPit Pro Beta Program". CNS Audit CNS Audit may be one of our sleeper plug-ins. If you have a need to log the goings on of a database whether it be for education, corporate, or HIPAA reasons, give CNS Audit a try. To begin logging database interaction, you simply need to add two fields to any table that you want to log. CNS Audit will then take over and begin logging all new records, field changes, and more. The plug-in will automatically create any support tables and fields necessary to create a thorough audit log. MMQuery FileMaker and SQL integration is a big topic these days, so there is a chance MMQuery will get lost in the mix. Whereas FileMaker is now allowing you to easily connect to external SQL sources, MMQuery is actually allowing you to use SQL statements on a FileMaker database via the calculation engine. What does this mean? It means that you can create tables, fields, and records in your FileMaker database from any calculation. You can also find and update records directly from the plug-in. MMR egEx MMRegEx allows you to find and replace text using perl, sed, or grep style regular expressions. This plug-in is currently in early beta format and available for download from our website. Look for the final version to come out fall 2007.

6

RETIRED PRODUCTS
e have been making FileMaker plug-ins since 1999, and we have enjoyed every minute of it. However, there comes a time when it becomes quite difficult to support technology that is aging and aging and aging. The products listed below were developed for FileMaker 4-6. The FileMaker plug-in architecture changed greatly after these plug-ins were released. We have updated many of these plugins for this newer plug-in interface, and have greatly enhanced each product in doing so. Starting September 1, 2007, POP3it, SCRIPTit, and SMTPit will be retired. We will continue to sell these products, as is, at half price but without tech support. Starting September 1, 2007, SAVEit, SPEAKit, and Color Inspector will become unsupported freeware. If you have any tech support issues you would like to see resolved for the above plug-ins, you will need to do so prior to September 1.

Product

Description

Status Discounted, Unsupported Discounted, Unsupported Discounted, Unsupported Free, Unsupported Free, Unsupported Free, Unsupported

Price* $27.50 $42.50 $27.50 Free Free Free

POP3it Download Email Into FileMaker SCRIPTit Create dynamic popup menus SMTPit Send Email From FileMaker SAVEit Save Text

SPEAKit Add Speech to Windows Color Inspector Color browser and explorer

*Prices are for a single/one user license. Check our website for multi-user prices. Prices not valid until September 1, 2007.

7

PRODUCT OVERVIEWS
PR PLUG-INS O
The following plug-ins were built for FileMaker 7-9 SMTPit Pro SMTPit Pro provides a vast array of email options. You can send simple text based messages or you can send complex HTML messages. You can send a single message or an entire mail out. Its functionality is flexible enough to cover many email tasks.
Single User $65

CNS Menu CNS Menu allows you to place hierarchal menus anywhere on a FileMaker layout. When a menu item is chosen, the script of your choice in the database of your choice is performed. Menu item values are passed to your script as script parameters.
Single User $65

POP3it Pro Imagine opening a settings dialog, entering in your email account information, and then downloading your email directly into your database. It really is that easy. With POP3it Pro, you can be up and running by making only two calls to the plug-in. You do not have to create any tables, fields or records. POP3it Pro does all that for you. However, we provide more advanced functions if you would rather build a state machine as with past renditions of POP3it.
Single User $65

CNS Audit This plug-in allows you to easily log the goings on of a database whether it is for education, corporate, or HIPAA reasons. To begin logging database interaction, you simply need to add two fields to any table that you want to log. CNS Audit will then take over and begin logging all new records, field changes, and more. The plug-in will automatically create any support tables and fields necessary to create a thorough audit log.
Single User $95

MIGHTY MINI PLUG-INS
The following plug-ins were built for FileMaker 7-9 MMColor MMColor is an interface plug-in which allows you to create color swatches in container fields. It can also be used with the “TextColor” function to colorize text.
Single User $35

FTPit Pro FTPit gives you the ability to upload and download files using the File Transfer Protocol (FTP). You can also upload text from a FileMaker field to a text file on a FTP site or download a text file directly into a field in your FileMaker database.
Single User $65

CNS Image CNS Image can import images into container fields and export images from container fields. What the plug-in can do with images while in FileMaker is where it gets interesting.
Single User $65

MMEmail This email plug-in is dialog based, which means most of the work for both the end-user and the developer has already been done. No need to create a special layout, just trigger the email dialog, type in your message and click the send button.
Single User $35

8

MMQuery With MMQuery, you can actually use SQL statements on a FileMaker database via the calculation engine. What does this mean? It means that you can create tables, fields, and records in your FileMaker database from any calculation. You can also find records and update records directly from the plug-in.
Single User $35

POP3it POP3it allows you to download email from a POP3 email server directly into a FileMaker database. You do not need any other application in order to receive email, everything can be done within the FileMaker environment.
Single User $55

MMR egEx MMRegEx allows you to find and replace text using perl, sed, or grep style regular expressions. This plug-in is currently in early beta format and available for download from our website. Look for the final version to come out fall 2007.
Single User $35

SA VEit This plug-in allows you to dynamically save information from FileMaker to a user specified text file. You can name each text file on the fly, and you can create directories on the fly.
Single User $15

MMScript MMScript is no ordinary script calling plug-in. It allows you to create a whole calendar of events. Trigger a script now, or any time in the future. You can even call a script when the user is idle. With MMScript, even the most complex schedules can be done easily.
Single User $35

SMTPit SMTPit is our email sending plug-in, originally introduced in March of 1999. Its popularity grew quickly. We recently rebuilt the plug-in from scratch for FileMaker 7 and greater and renamed it SMTPit Pro.
Single User $55

CLASSIC PLUG-INS
The following classic plug-ins were built for FileMaker 4-6. Please note that many of these plug-ins will be retiring soon. FTPit FTPit gives you the ability to upload and download files using the File Transfer Protocol (FTP). You can also upload text from a FileMaker field to a text file on a FTP site or download a text file directly into a field in your FileMaker database.
Single User $45

SPEAKit The Windows only SPEAKit plug-in will allow you to use the Microsoft Text-to-Speech technology to speak text from your database.
Single User $35

UPLOADit This plug-in will allow your users to upload files from their computer to your FileMaker client computer using only their web browser.
Single User $75

9

SMTPit PRO
SMTPit Pro is a next generation email plug-in for FileMaker Pro® 7 and greater. SMTPit Pro is built from the ground up, taking advantage of years of plug-in development knowledge and the latest FileMaker plug-in API. OPTIONS SMTPit Pro provides a vast array of email options. You can send simple text based messages or you can send complex HTML messages. You can send a single message or an entire mail out. Its functionality is flexible enough to cover many email tasks. CUSTOMIZE SMTPit Pro makes customizing your email messages a snap. It has special header and footer functionality to aid with email greetings and signatures. You can also use merge fields to grab information from your current record. Merge field data can be used in the subject, header, body, and footer. CREATE You can create email messages in a variety of ways. You can simply refer to a field in a table, or you can build a message from several sources including fields, portals, and even container fields. You can convert styled text to HTML. You can even send a graphic copy of your layout by using Preview mode and sending it as an inline HTML image. ATTACH With the advent of FileMaker 7 and greater, it is now possible to use container fields to store attachments. This makes for a more natural integration between email and FileMaker. You can use files already in your database, referenced files on your hard drive, or select files using a dialog. SELF CONTAINED As with all of our email plug-ins, you do not need an additional email client in order to send email with SMTPit Pro. Once the plug-in is installed and optionally configured, you are ready to start sending messages. Feedback SMTPit Pro includes a status dialog to provide feedback of its work. You can programatically show, hide, and move the dialog. Email Window You can use the email window to provide a quick and easy way to send an email message. The window resembles a normal email client window, and you can either send the message when the user clicks the send button, or capture the window values for further manipulation. Control SMTPit Pro provides granular control over the messages you send. You can set the priority of a message. You can set the Reply-To header of a message. In fact, you can even set custom email headers such as X-RecordID or X-UserID to track messages throughout your solution. Furthermore, you can check the syntax of an email address to be sure it "looks" like a valid email address, or use the Verify Email Address function to try to determine if an address is active or not.

10

Example Code /* Below is an example calculation to get you started with SMTPit Pro. This calculation assumes that you have entered your email server information into the SMTPit Pro dialog box. To configure SMTPit Pro, enter into the FileMaker Pro preferences dialog, choose the "Plug-ins" tab, and double click the "SMTPit Pro" entry. Keep in mind that this is a very basic example, and that SMTPit Pro can do far greater things than what you see here. */ // Step 1. Set the from and to email addresses. SMTPit_SetFrom( "myAddress@my.com" ) & "¶" & SMTPit_SetTo( "myContact@their.com" ) & "¶" & // Step 2. Set the subject. SMTPit_SetSubject( "The next big thing" ) & "¶" & // Step 3. Set the body of the email message SMTPit_SetBody( "My great email body test" ) & "¶" & // Step 4. Send the message. This example will return a //transcript and display a dialog after the email has been //sent. SMTPit_Send( True ; True )

Utilities There are several utility functions in SMTPit Pro which allow you to do a variety of things. You can register the plug-in via a function, check current registration, or set the character set via a function. We have also included auto-update functionality to complement FileMaker Server by providing an auto-update friendly version number. You can also set the authentication type via a function. And more... And the list goes on and on. You can view preferences via a function. CC and BCC are supported. SSL is supported. You can use merge fields and custom headers and footers. You can use SMTP Connect and SMTP Disconnect in order to send mail outs efficiently. The list really does go on and on and on. Not done yet... We have many more ideas for SMTPit Pro, so be sure to look for great new features in the near future.

Support
Integrated File Functions SMTPit Pro includes several file functions to complement the needs of sending email. You can copy, delete, and see if a file exists, You can export, move, rename, and get the size of a file. You can retrieve several paths including the path to database, FileMaker, root, system, desktop, preferences, temporary, applications, and documents. You can use dialog functions to retrieve file and folder paths. You can even use a file on the drive as a text or HTML body of a message. Email Web smtpit@cnsplug-ins.com http://www.smtpit.com

Requirements Platform Win 2000, Win XP, Mac OS X 10.3.9+ FileMaker 7.x, 8.x, 9.x

11

POP3it PRO
POP3it Pro is our latest release and while we have had a version of POP3it out for many years, this new version is simply amazing. POP3it Pro allows you to connect to your mail server to download email into your database. It also allows you to import email from email clients like Thunderbird, Eudora, and Apple Mail. Unlike our previous version of POP3it, it is possible for POP3it Pro to do all of that automatically without you having to write a single script. POP3it Pro has been completely rewritten to take advantage of the FileMaker Pro 7.0+ plug-in architecture to bring you an email downloading and importing plug-in like never before. Easy Downloads and Imports It is entirely possible to add email downloading or importing to your database without writing a single script. POP3it Pro uses an integrated Account Management system that allows you to define all settings for your email account within a dialog, including the domain name of the mail server, the authentication settings (including SSL/TLS support), where to save attachments, when to automatically check your account, and if the plug-in should delete emails off the mail server. You can display the Account Configuration Dialog using the ConfigureAccount function. After setting up one or more email accounts, you can use the CheckAccount function to automatically start downloading emails into your database. POP3it will add two tables to your database to store the Messages and the Attachments, and as soon as the CheckAccount function has completed.

POP3it Pro has an advanced Message Window that you can If you have another email client on your system and you want to utilize in your solutions to present emails to a user just like they import emails from it, you can use the CheckFile function. This are used to in another email client. The Message Window will function takes the path to the mailbox file of the other email client show plain text and HTML emails just as they were sent and and will insert the email data into the Messages and Attachments includes a toolbar of buttons for the user to decide what to do table just like the CheckAccount function. POP3it Pro supports with any given email. There are Previous and Next buttons the "mbox" format which is used by popular email clients like allowing them to traverse through a series of emails in their Thunderbird and Eudora as well as many others. POP3it Pro can database. There are Reply and Forward buttons for the also import email from Apple Mail user to indicate that they want to reply or forward an email. Example Code 2.x mailbox folders. There is also a Delete button they can use to tell you they /* Try this calculation for importing no longer want the email. Finally, there is a Print button email from another email client: */ After setting up your Accounts and that the user can use to print out the email. POP3it Pro Let( Checking them for the first time, File = POP3it_SelectFileWithDialog ; takes care of the printing of the email so you don't have to, you can have POP3it Pro If( but the rest of the toolbar buttons can be implemented automatically check your email LeftWords( File ; 1 ) = "ERROR" ; any way you see fit. If there are any attachments with the "" /*User Canceled*/ ; every few minutes. POP3it will POP3it_CheckFile( File ) email, the Message Window will have an additional section automatically open the Status ) at the bottom to allow the user to save the attachments Window to let you know it is doing ) anywhere they like on the hard drive. something and insert new emails

12

into the Messages and Attachment tables completely in the background. You can continue to work in FileMaker the entire time. It's like the emails just appear in your database. Advanced Functionality POP3it Pro provides you with all the granular control you need. By default, POP3it Pro's advanced functions are hidden from view, but a quick trip to a setting in POP3it Pro's Configuration Dialog will make them appear. You can then work directly with POP3it Pro to connect, download individual emails, and disconnect from any of your accounts. Downloading the email you want from the server is easy to do with POP3it Pro's advanced GoToMessage function. This function allows you to traverse through the messages in order or allows you to go to a specific message by its sequence number or its Unique ID. One of the example databases we provide for POP3it Pro shows how you can download only the headers of all the emails on your server and then go back and selectively download the full content of only those emails you are interested in. That example database is made possible with the powerful GoToMessage function. POP3it Pro also allows you to work with the attachments in an email like never before. You can query the email to see how many attachments are in it and what each of the file names for the attachments are. If you want an attachment to have a different name when you extract it, you can tell POP3it pro the new name. If you do not want a specific attachment, you do not have to extract it. You can also import the attachments directly from the email into container fields in your database instead of saving them to the hard drive. If you do want the attachments on the hard drive, you can specify where on the hard drive at any time allowing you to change the location depending on the content of the email.

Example Code /* Take this calculation and put it in a Set Field or Set Variable Button Step and you'll add email checking to your database in one button! (You can use the option/alt key when pressing the button to configure the accounts.) */ If ( IsEmpty( POP3it_GetAccountNames ) or ( Get (ActiveModifierKeys) = 8 ) ; POP3it_ConfigureAccount ; POP3it_CheckAccount )

POP3it Pro also allows you to retrieve any email header out of the email with a single function. You can use this to retrieve the normal To, From, and Subject headers, but you can also get any other header you want like X-Mailer or Reply-To. POP3it Pro has a special function for extracting the Date of the email that will return the date as a Timestamp object. This makes it easier on you, the developer, because you no longer have to manually convert the email date to a timestamp. Utility Functions POP3it Pro has several utility functions to help you create the email database you've always desired. One function is the QuoteMessage function which will take a block of text and insert greater than signs at the beginning of every line to mimic the way another email client would set up an email for replies. There is the StatusWindow function which will allow you to show or hide the Status Window at any time. It is always a good idea to have the Status Window open any time you are downloading emails because it contains a Cancel button which would allow the user to cancel out of a lengthy download process. Finally, as with all of our plug-ins, there are utility functions for getting the version number of the plug-in to help with Auto Update, opening the Configuration Dialog to set any default settings, and registering the plug-in all from a script.

13

CNS IMAGE
Our CNS Image plug-in can import images into container fields and export images from container fields. What the plug-in can do with images while in FileMaker is where it gets interesting. Imagine importing a folder of digital photos into FileMaker. There are several tasks you will probably want to apply to your photos. You may want to rotate a photo from landscape to portrait. You may want to crop a photo down to capture the subject of the photo better. You may want to flip or reflect a photo horizontally, vertically, or both. You may want to apply a sepia color tint to the photo to give it that antique look. You may want to sharpen the photo up and adjust the hue or saturation of the photo to make the colors pop out better. All of these things, and more, can be done using CNS Image, and you do not even have to leave FileMaker to accomplish them. You may want to extract a layer from a Photoshop document. You can even extract pages (layers) from a PDF document which can be useful for viewing documents cross-platform in FileMaker. You can also use CNS Image to download an image from the internet right into a container field. Such a feature can be used to download webcam images, dynamic images of the earth, road maps, and even images to update the look of your solution. Imagine creating a new backdrop, header, or logo that is automatically downloaded when your users open a solution you have created. CNS Image also gives you the ability to apply a QuickTime filter to an image. QuickTime comes with several built in filters such as Brightness, ColorSync, HSL Balance, RGB Balance, Blur, Edge Detection, Emboss, Sharpen, Color Style, Color Tint, and more. There are also third party filters available on the net. Importing and Exporting CNS Image allows you to import images into FileMaker Pro container objects from any location on your hard drive. You can either specify the complete path to the image file in your calculation or you can use a standard Open File dialog to allow the user to select an image file. You can even specify the types of image files the user can select in the Open File dialog instead of all available files. CNS Image also allows you to export images from container objects to any location on your hard drive. Again, you can either use a hard coded path, or you can use a Save As type dialog to allow the user to specify a location. When you are exporting a File, you can even have CNS Image convert it to a specific format. Another method of pulling images into your database with CNS Image is with the GetFromURL function. This function allows you to download images from any website directly into FileMaker Pro. Image Information CNS Image allows you to get a variety of information about an image that is either in a container in FileMaker Pro or on the hard drive. The GetInfo function allows you to extract the Type of image, whether or not the container is stored or by reference, and what the full path and filename of the image is. You can also determine the width, height, resolution, bit depth, jpeg quality, and others. If the file is a Photoshop file or a PDF file, you can extract the number of layers or pages present in the file.

14

Image Manipulation The main focus for CNS Image is not getting images in and out of your database, but instead, it's focus is on what you can do with CNS Image to manipulate those images all from within FileMaker Pro. You can crop, reflect, rotate, and transform any image all from a calculation. If you need an image to be a different format or a different width and height, you can use the Convert function to do that as well as several other things. CNS Image also can take advantage of QuickTime filters to change color balance, brightness and contrast, and tint among other types of filters for adjusting the color of an image. QuickTime also includes filters for adding effects to your images like blur, emboss, and sharpen. Example Code

Utility Functions CNS Image has a number of utility functions to help you, the developer, create your databases. The SelectFileWithDialog and SelectFolderWithDialog functions can be used to present the user with a dialog asking them to select a file or a folder. You can use this to have the user select a file they want to manipulate in some way or a folder to export an image to. The plug-in also includes a GetPath function which will return the hard drive paths to certain system defined paths like the users's Desktop or Documents folder. You can also get the path to the FileMaker Application and other useful paths with this function.

Along with these functions, CNS Image includes the common utility /* functions from all of our plug-ins. The QuickTime To create a thumbnail image of a larger image, you can Version function returns the version of CNS Image uses QuickTime to use the Convert function to scale down an image. This the plug-in and can be used to check calculation will make a thumbnail image that is no bigger work with the images, so it does that the plug-in is actually installed. If than 64x64 pixels: need to be installed in order for you are using FileMaker Server's Auto */ CNS Image to function. Update feature, the Version function QuickTime is part of OS X, so the CNSImage_Convert( MyTable::Full Size Image ; "" ; 64 ; can even return the version number in plug-in will always work on the 64 ) an Auto Update Friendly format. CNS /* Mac. On Windows, QuickTime Image also includes the Register Want to pull in a graphic from a website? How about the has to be specifically installed. If function to allow you to register the current weather map for the United States: you install iTunes for Windows, */ plug-in from a script. You can either you have to install QuickTime for pass in all the registration information CNSImage_GetFromURL( "http://image.weather.com/ Windows as well. CNS Image directly, or you can have the Register images/maps/current/curwx_440x297.jpg" ) has a function named function present a dialog to the user CheckForQuickTime which will for them to enter in their own see if QuickTime has been registration information. Finally, the installed. If not, it can optionally ShowConfigDialog function can be used to bring up CNS prompt the user to download QuickTime from the internet and Image's Configuration Dialog from a script. install it. If the user does that, then CNS Image can load QuickTime in order to function correctly.

15

CNS MENU
CNS Menu is probably one of our most misunderstood plug-ins. We have always advertised it as "a dynamic popup menu" plug-in, because that is what it is, but most potential customers think that FileMaker Pro's popup menus are good enough. However, the people who have tried the plug-in and have tapped its full potential are no less than ecstatic about it and they will not hesitate to tell you how highly they regard the plugin. Example Code So, what is the big deal? Why are menus created with CNS Menu so much better than FileMaker Pro's built-in menu options? For starters, they are totally dynamic, meaning you can create menus on the fly, inserting and removing items at will. for entering data into a field, it's also a very useful tool for cleaning up your database interfaces. Imagine having one button that brings up a menu of actions for your users instead of having ten buttons taking up more space just to do the same thing. Interested yet? Great! Below you will find more in-depth information about the features already mentioned as well as many others. Creating Menus There are three quick and easy ways to define menus: • You can define a menu with any submenus using a visual menu creation tool called MenuBuilder through CNS Menu's Configuration Dialog. Each item you add will allow you to set all the possible values like the title of the menu item, its value, bullet or checkmark decoration next to the item, enabled or disabled, etc. All menus created through the MenuBuilder are automatically saved to your hard drive so that you can recall them at any time.

/* It's easy to take any list of items and turn it into a menu using the DefineQuickMenu function. One of the most useful FileMaker Pro calculation functions to use with this feature is the ValueListItems design function. Using this function you can quickly turn any existing value list into a CNS Menu: */

CNSMenu_DefineQuickMenu( CNS Menu does not stop there. "My New Menu" ; Creating the menus can be as easy ValueListItems( Get( FileName ) ; "My Value List") as specifying a return-delimited list of )&¶& menu items to the plug-in or as feature-rich as utilizing an easy-toCNSMenu_ShowMenu( "My New Menu" ) learn XML structure to define every aspect of the menu's appearance. Your menus can have any number of submenus cascading off the main menu, allowing you to • The DefineQuickMenu function takes a return or paragraph categorize the menu choices. You can also specify that delimited list of menu items. You can pass a value list to this checkmarks and bullets appear next to the menu items. function and immediately have a much nicer, more configurable What makes CNS Menu so great is when you select an item on a menu, you can have it call a script in your database. That means you can present a menu to your users and when they click on an item, you can do virtually anything. This is not just menu than FileMaker Pro's built-in menus. The DefineQuickMenu function even allows you to specify submenus for your menu items as well as custom values to return when the user selects an item.

16

• The DefineMenu and DefineMenuFile functions take an easyto-learn XML syntax for defining every aspect of a menu. Using the XML syntax allows you to define everything that you can through the MenuBuilder without having to go to the MenuBuilder. That means you can create menus on the fly from data in your database. Defining Menu Items

Updating Menu Items

Each menu item on a menu created by CNS Menu has a wealth of information that can be associated with it. The title of the menu item By default, a menu created by CNS Menu will If [ CNSMenu_GetMouseButton = 2 ] that your users see can be show up right below the mouse cursor, but you Set Variable [ $MenuResult ; completely different than the can define the exact location for the menu Value:"CNSMenu_ShowMenu( "Actions" )" ] value of the menu item. anywhere on the screen. You can specify Else That means you could, for coordinates anywhere in the full screen real estate, Perform Script [ "Default Action" ] example, show customer or you can instruct CNS Menu to show them at a Endif names on the menu, but use specific location within your layout. You can easily the customer id in the script make a menu appear to be attached to any side of you call. Each menu item a button or make it look like it comes off the can have a checkmark, bullet, or diamond associated with it. bottom of a field like a built-in popup menu. You can align the You can use this to visually indicate to your users which item or menu left, center, or right to the coordinates you provide. You items are currently selected. Menu items can also be can even define the minimum width of a menu to make it look selectively enabled or disabled. If some action does not make exactly like you want it. sense in the current context, you could present it as disabled and your users would not even be able to select it. You can Grabbing Mouse Information make items bold, italic, or underline to provide that extra CNS Menu also has functions for determining where the user emphasis or feedback the user needs to make the right last clicked the mouse button on your layout. You could use choice. Any menu item can have a script associated with it or this to determine what part of a picture the user clicked on. it can fall back on the script that was defined for all menu items You can also determine which mouse button the user pressed. on the entire menu or submenu. Finally, you can use modifier For example, a user could left click on a button to do a keys (control, shift, command, option) to selectively display or standard action. However, if the user right clicks the button, a change menu items and sub menus. menu of extra or alternative menu items could be displayed.

You can modify every aspect of a menu item at any time. You can disable a menu item to match the current context. You can update a menu item with a checkmark to indicate the item is selected. If some event occurs that would make one action more important than others, make that menu item Example Code bold or italic to make the user take notice of it. If the underlying value for a given menu item # If you want to make a button on your changes, you can update it so the next time that layout do some default action when the user item is chosen, the new value would be returned. presses the left mouse button, but present a custom menu with more options when they press the right mouse button, try this out: Showing Menus

17

CNS AUDIT
Safeguarding your data is an important, and often daunting, task. We at CNS Plug-ins want to help ease your mind. CNS Audit is a plug-in that takes the headache out of creating an Audit Trail of your data. Whether you just want peace of mind about being able to get a record back that you have accidently deleted or if you have to comply to regulatory mandates like HIPAA, you can use CNS Audit to create an Audit Trail of your data within minutes. No longer do you need complicated database structures using auto-enter calculations and countless fields just to add Audit Trails to your database. CNS Audit can perform a full field-level Audit Trail of your data all with adding only two fields to your table and adding a Limited Delete Privilege to any Privilege Set defined for your table. CNS Audit performs everything in the background, meaning your users will not notice any slow downs or odd screen flashes common with the complicated Audit Trail database structures of old. You can literally start keeping an Audit Trail of your data within a minute of installing CNS Audit, but the plug-in also provides you with an extensive Setup Dialog you can use to customize every aspect of the Audit Trail to your needs. In the Setup Dialog you can specify exactly which fields to include in the Audit Trail as well as any Custom Log Fields to include in the Audit Table. You can choose to Audit all fields in a table, only those fields on the current layout, only those fields on a specific layout, only those fields that match some specific pattern, or only those fields you specify. With the Custom Log Fields, you can add any number of custom fields and specify the name for the field as well as a calculation to perform for the value of the field. CNS Audit is your one stop shop for adding an Audit Trail to your databases on either the Windows or Mac platforms for any version of FileMaker 7.0v3 and above. Get your copy today and leave the data safeguarding to CNS Audit. Recording Field Modifications To set up an Audit Trail for any of your tables, you only have to add two fields to your database. The first field is a Timestamp field set to auto enter the Modification Time of any given record. The second field uses the one and only function for recording field modifications in your database, the CNSAudit_Record function. This function takes exactly two parameters which are the names of the two required fields you add to your database. The same autoenter calculation is used in every single table, so you can easily copy and paste these two fields to every table you have. After installing CNS Audit, open up your first table and add a Timestamp field with the name "CNS Audit Timestamp". In the Options for this field, choose the Auto Enter Modification Timestamp option. Choosing this option will tell FileMaker to update the CNS Audit Timestamp field with the current date and time any time the record is modified. Next, add a Text field with the name "CNS Audit Trigger". In the Options for this field, choose the Auto Enter Calculation option and specify the calculation "CNSAudit_Record( CNS Audit Timestamp ; CNS Audit Trigger )". Uncheck the "Do not replace existing value of field (if any)" checkbox and you are done. "That's it?" That's it. After saving these table modifications and getting back to your database, you can start editing your records. CNS Audit

18

will automatically create the CNS Audit Log table in the background and begin adding records to it. Recording User Actions CNS Audit can also be used to record user actions like logins, logouts, record views, or running scripts. One of the most important user actions you will probably want to record, though, is when a user deletes a record. The main set back to this is that you need to catch the delete action before it actually happens. To do this, you define a Limited Delete privilege in each of the Privilege Sets defined for your table. Within the Limited Delete privilege calculation, you call the CNSAudit_AccessLog function. This function takes one required parameter, the Action to log, and one optional parameter, any notes you want to add with the Action. For a Delete action, you can simply use "Delete" for the Action. After setting up this privilege, and delete a record, CNS Audit will create the CNS Access Log table and insert the log records into it. Custom Log Fields Out of the box, CNS Audit logs several very useful things with each Audit Trail record. It records a Timestamp for the local computer as well as the host computer to know exactly when the event occurred. It records the User Name, Account Name, and Privilege Set that was active at the time of the event. Then for keeping track of which field the Audit Trail Record is recording, it records the Field Name, Field ID, Field Type, and Field Value. Finally, it records the Record ID of the Record being audited, the Table Name and Table ID the

Record is in, and even the Layout Name and Layout ID the user was on at the time of the event. However, there are times when you may want more information stored with each Audit Trail Record. You might want to know the IP Address of the computer the event occurred on or you might want to keep some custom ID field related to the event. CNS Audit allows you to do this by setting up Custom Log Fields from the Setup Dialog. You define the name of the Custom Log Field and a calculation the plug-in should perform in the context of the record being audited to use as the value for the Custom Log Field. So, for instance, if you wanted to keep track of the IP Address of the user, you would set up a Custom Log Field naming it "IP Address" with the calculation "Get(SystemIPAddress)". You can add any number of Custom Log Fields for any table and they will be added to both the CNS Audit Log and CNS Access Log tables. Utility Functions CNS Audit includes the common utility functions found in all CNS Plug-ins. The Version function can be used with Auto Update. The Register function can be used to Register the plug-in via a script, either by providing the registration details in the script or having it bring up a dialog to enter the values. Finally, the ShowConfigDialog function can be used to bring up CNS Audit's Configuration Dialog.

19

MMQUERY
While we were developing CNS Audit, we created several internal helper functions for running queries against FileMaker Pro databases. We needed the ability to Add Tables; Find, Add, and Update Records; match Table, Layout, and Field names to their internal IDs; and many other things. After a while, we took a step back and thought, "we could make a plug-in out of these helper functions." MMQuery was born. This plug-in provides you with many easy-to-use functions to work with your data from any calculation and without creating any extraneous relationships. We have even provided a function for direct SQL access if you are fluent in SQL. So if you are ready to have access to your data like never before, download MMQuery today and begin your adventure.
Tables

Tables and Remove Tables. If you need to know what Tables are currently defined, you can get a list of Table Names and their internal IDs.
Records

Ever thought it would be neat to Add a Record from a Script or even from a Calculated Field? What about compiling a list of data from a Found Set inside a single Calculation? MMQuery has functions for Adding, Updating, and Removing Records as well as Performing Finds to return data from specific Fields. You can specify the Find Criteria by providing a list of Field Names with the Field Values they should have. You can even Sort the result.
Fields

The Set Field Script Step is a Script writer's best friend, until you need to specify the target field d y n a m i c a l l y. With MMQuery, you can not only Set and Get the Value of a Field dynamically, you can do it from any calculation including Calculated Fields or even Custom Functions. But that's not all. You can Add and Remove Fields in your Tables, as

Have you ever wished you could Add a Table to your database from a Script? MMQuery will let you do that and more. Adding a Table is as simple as providing a Table Name and a list of Field Names with their Field Types. As well, you can check for the existence of 20

Example Code /* Want to set a field in the current record from any calculation? Try this function: */ MMQuery_SetFieldValueByID( "" ; "My Field" ; "Some Value" ) /* Need to get a list of all the contacts in your database that have last names starting with the letter J? Need them sorted by Last Name and in the format "Last Name, First Name"? It's as easy as: */ MMQuery_FindRecords( "Contacts" ; "::Begins-With::Last Name=J" ; "Last Name ¶First Name" ; "Last Name" ; ", " )

connecting to external data sources, MMQuery lets you connect to your own FileMaker Tables and run queries against them. All the functions in MMQuery use an SQL interface to work with your FileMaker Tables but keep you from having to learn SQL. If you know SQL, though, and MMQuery does not have a helper function that solves your need, there is a function that will let you specify your own SQL statements. Oh, and if you think MMQuery is missing a helper function that would solve your need, let us know!
Utilities

well as check for the existence of Fields or get a list of Field Names. You can also get the internal IDs and the Field Types of any Field in your Tables.
Layouts

MMQuery has a few utility functions too. If you have text that you want to use with an SQL Statement, you'll probably need to pass it through the MMQuery_EscapeQuotes function to ensure that your SQL Statement will be valid. If you've ever needed to convert a FileMaker Error Number into human readable text, MMQuery_GetFMErrorText will come to your aid. And finally, MMQuery comes with all the standard utility functions common to all CNS Plug-ins, including getting the Version number (optionally as an Auto Update Friendly Version number), Registering the plug-in via a script, and showing MMQuery's Configuration Dialog from a script. 21

MMQuery has some helper functions for working with Layouts. You can get lists of Layout Names and their IDs, check for the existences of Layouts by Name, and get the Names of all the Fields on a Layout.
SQL

SQL has certainly become a hot topic with the release of FileMaker 9. While FileMaker 9 is all about

MMCOLOR
MMColor is a user interface plug-in that allows your users to work with color palettes more like they would in any professional design application. MMColor has functions for bringing up the system color picker as well as custom sliders for adjusting any Component of any Color Space used by MMColor right in FileMaker Pro. MMColor supports the RGB, HSV, HSL, CMY, and CMYK Color Spaces. The colors returned from MMColor can be used with FileMaker Pro's TextColor calculation function to colorize text in fields, or it can return color chips that can be stored in container fields. The color chips can be set to any RGB value, any width and height, and any level of alpha transparency. You can use these color chips to dynamically alter the entire appearance of your solution in a matter of seconds, or allow your users to define their own color schemes for the solution you created for them. you to set the different Components of those Color Spaces individually. MMColor allows you to work with the HSV Color Space made up of the Hue, Saturation, and Value Components. It also can use HSV's close cousin the HSL Color Space, which is made up of Hue, Saturation, and Luminance. Common Color Spaces for printing are the CMY and CMYK Color Spaces. The first is made up of the Cyan, Magenta, and Yellow Components, while the second adds the Black Component (denoted by the K).

The main GetColor function in MMColor will take the Component values of any of these Color Spaces and return the Hex Color value of the resulting color. You can quickly and easily generate on-screen color representations for any Color Space Component values using this function. You can also use the SetColorComponent function to modify a single Component of any Color Space for the color you are working with. For example, if you felt the color you are working with needs to MMColor was designed to be easy to use while providing be a little brighter, you could increase the Luminance your customers with the Color Space transformations and Component value from the HSL Color Space to accomplish color manipulation they desire. The following is a more inthat. You can also get the depth look at what this Mighty Mini plugExample Code value of any Component of in has to offer. any Color Space using the Color Spaces /* GetColorComponent Set the color of some text to a dark yellow: function. The most common Color Space for */ computers is the RGB Color Space, MMColor also provides TextColor( "some text" ; HexToDec( GetColor which is made up of the Red, Green, and some functions for testing ( "CMY" ; 0 ; 0 ; 50 ) ) ) Blue components. Everything from the whether or not a given pixels on computer monitors to the color color is "web safe" and for of text in html pages is defined by an returning the Grayscale equivalent of a color. Colors that are RGB value. But almost everything else in the world is deemed "web safe" are colors that are guaranteed not to defined by other Color Spaces, and MMColor allows you to dither on any screen that irrespective of the color depth transform colors between those Color Spaces and allows

22

calculation Function returns and turn it into a Hex Color, assigned to it. In other words, if someone is using a screen while the HexToDec color will take a value like what that is only set to 256 colors, a "web safe" color would MMColor's functions work with and turn it into a decimal appear as a solid block of color instead of a dithered mix of value that can be used with the TextColor calculation two or more colors that approximate the original color when function. combined together in a pattern. Converting a color its Grayscale equivalent could be used Color Picker and Sliders Example Code to create aesthetically pleasing transitions for your databases, or it MMColor's ShowColorPicker /* could be used to approximate what a function will bring up the Create a purple 50x50 pixel block of color: layout might look like printed out on a operating system's color */ black and white printer. picker dialog for the user to Working with Hex Colors CreateColorImage( "FF00FF", 50, 50 ) define and select a color using a color picker dialog they are used to seeing in other applications on their system. The Mac OS X color picker has several different types of palettes to use and more can be downloaded from the internet. The Windows color picker is a little on the boring side, but any Windows user has seen it a million times and will be familiar with it. The ShowColorSpaceSlider and ShowSlider functions in MMColor can be used to bring up special slider widgets on top of your FileMaker Pro layouts to adjust either whole Color Spaces or individual color Components respectively. The Color Space Slider widget can include a block of color that will update dynamically as you move the sliders allowing you to see exactly what color you are making before inserting it into the database. The individual color Component sliders can be used to modify just one Component of a Color Space in a quick and easy manner.

For MMColor, we chose to use a Hexadecimal Color format that mimics the color format used to color things on web pages. This is a common format where a color is defined by 3 pairs of hexadecimal digits where the first pair defines the Red Component, the second pair defines the Green Component, and the third pair defines the Blue Component. Since many FileMaker Developers also work with web pages, we thought this would be a fitting format. It is also extremely easy to learn and get used to, though with MMColor, you very rarely are directly modifying the actual hexadecimal values of a color. Most of the functions in MMColor either take a Hex Color value or return a Hex Color value. FileMaker Pro's TextColor calculation function also works with Hex Colors, but you would not know it if you ever looked at what the RGB calculation function returns. In reality, the RGB calculation function is returning the decimal equivalent of a Hex Color. To work with this, MMColor provides two functions for converting between a decimal representation and a hexadecimal representation of a color. The DecToHex function will take a value like what the RGB

23

MMSCRIPT
MMScript is our Mighty Mini FileMaker Pro Script triggering plug-in. You can use MMScript to set up any number of Script Events and it supports several types of Script Events based on how they are triggered. The most basic Script Event is the Immediate Script Event, which you can use to immediately call a script in the current database or in any other open database. The next step up from that is the Interval Script Event, which will call a script after a certain amount of time has passed. This type of Script Event can also be set to repeat every time the interval has passed. The third type of Script Event is the Date Time Script Event. This type of Script Event allows you to set the exact Date and Time the script should be triggered. The final kind of Script Event is the Idle Script Event, which will be triggered only after the user has been idle for a given amount of time. All of the Script Events will allow you to associate a name and a value with the Script Event. You can use the name to remove or update the Script Event and see the script events by name when you list them. The value of the Script Event is passed to the script that is being called as the Script Parameter, which you can retrieve using the Get(ScriptParameter) calculation function. If a value is not provided, MMScript will send the name of the Script Event as the Script Parameter. Immediate Script Events An Immediate Script Event is the simplest of the Script Events that MMScript handles. The CreateImmediateScriptEvent function has only one required parameter, which is the name of the script to trigger. The other optional parameters include a database name if the script to trigger is not in the current database as well as the name and the value for the Script Event. You can also set the priority of the Script Event and what to tell FileMaker Pro to do with any currently running script. The most common use for an Immediate Script Event is to use it to trigger a script when a user exits a field. This is usually done by creating an Auto Enter Calculation on a field. The Auto Enter Calculation would reference each field that needs to call the script when the user exits the field and set up an Immediate Script Event every time one of those fields is modified. Most people want to trigger a script when the user exits a field so that they can perform custom validation and perform various other actions in their database. Interval Script Events Interval Script Events are triggered after a certain amount of time has passed. This amount of time can be expressed in days, hours, minutes, and seconds. This type of Script Event requires that you give it a name in case you want to cancel the Script Event before it has been triggered or if its repeating and you want it to stop repeating. As with the other Script Events, you can also specify a different database and a value for the Script Event. Interval Script Events can also be delayed until a specific Date Time has come before starting the Interval. You can set this type of Script Event to repeat. After the Script Event has triggered, it will automatically set it self back up to trigger the script again once the Interval has passed again. It will continue to do this until it has been canceled or until FileMaker Pro is closed. You can also define that this Script Event is persistent, meaning it will be saved to the hard drive when FileMaker Pro closes and will restart when FileMaker Pro is started again. Date Time Script Events This type of Script Event allows you to specify the exact Date and Time the script should be triggered. This type of Script Event

24

requires a name so that you can remove the Script Event if you need to stop it before it triggers. You can also set an alternate Database for the script as well as a value for the Script Event. Also like the Interval Script Event, you can set Date Time Script Events to be persistent so that if they do not trigger while FileMaker Pro is open, they will be reloaded and trigger once the Date and Time has arrived. As with the other Script Events, you can set the priority of the Script Event and what to tell FileMaker Pro to do with the currently running script. Idle Script Events

again, the script would be triggered again. An Idle Script Event can also be set as persistent so that it will save and reload when FileMaker is closed and reopened. The most common use for an Idle Script Event is to either get an idle user out of a record they may have locked or to completely log the user out of a database.

The Idle Script Event is a script trigger that will run whenever the user has been idle for a given amount of time. A user is considered idle if they have not clicked the mouse or typed on the keyboard while in FileMaker. (If they are doing something else in a different application and have FileMaker running in the background, an Idle Script Event will still be triggered due to the user not doing anything in FileMaker.) This Script Event type Utility Functions // Call a script after the user has been idle for 5 minutes: requires a name and can be set to MMScript_CreateIdleScriptEvent( "5 Min Idle" ; "Log out The MMScript Configuration trigger a script in a different database user" ; "5m" ) Dialog has the Script Events and have a value just like the other tab, which will allow you to types of Script Events. Idle Script define Script Events using a set Events can also be set to repeat. of dialogs. MMScript also has functions for listing all the currently Unlike a repeating Interval Script Event, an Idle Script Event will defined Script Events as well as getting the name or value of the be reset when the user becomes active again. For example, if last Script Event that was triggered. Another utility function is the you have an Idle Script Event set to run after 30 seconds of UpdateScriptEventValue function which will allow you to redefine inactivity, MMScript will trigger the script event after 30 seconds the value for any currently defined Script Event. You can remove of the user becoming idle. It will then disable itself. When the Script Events by name as well as Disable and Enable all Script user starts working in FileMaker again, MMScript will re-enable Events at once. the Idle Script Event and if the user goes idle for 30 seconds

One use for an Idle Script Event is to allow the database to do some intensive background work only when the user has not done anything in FileMaker for a while. MMScript provides a Example Code helper function called IsUserIdle that allows you to test if the user // Call a script immediately in the current database: MMScript_CreateImmediateScriptEvent( "My Script" ) is still idle. While your database is doing some background //Call a script in another database in 10 minutes and 45 work, it could continually test to seconds: see if the user is wanting to do MMScript_CreateIntervalScriptEvent( "10 Min Script" ; something in FileMaker and if "My Script" ; "10m 45s" ; "My Database" ) they are, quit the background // Call a script at the end of the day: work and give control back to MMScript_CreateDateTimeScriptEvent( "5:00 Script" ; the user. "My Script" ; "5:00 PM" )

25

MMEMAIL
Our design goal for MMEmail was to have a simple, easy-touse plug-in that allows any developer to add Email sending capabilities to their databases with as little scripting as possible. MMEmail achieves this with its main ShowMessageDialog function. This function will bring up a dialog with standard email fields like To, From, Subject, Attachments and Body, allowing the user to type in an email much in the same way they would use a normal email client. The dialog includes a send button allowing the user to send the email immediately through the mail server that is set up for the plug-in to use. MMEmail does not require any email client to be installed and set up on the user's computer because it sends email directly to the mail server. This functionality allows developers to easily and quickly add email sending to their database without having to create special layouts for users to enter email information and without having to worry about whether or not the email client on the computer is set up correctly to handle FileMaker's Send Mail script step. MMEmail has more to offer than that though. Every field in the Message Window can be set before showing the dialog, giving the user a template to work from. You can provide a list of email addresses to the dialog for the user to choose from when assigning who the email is going to. You can also specify a list of attachments the user can choose from to attach to the email. Finally, you can specify a list of merge fields the user can insert into the email via a contextual menu. When the email is ultimately sent, those merge fields will be replaced with data from your database. But MMEmail is not just about the Message Dialog. We also provide a function to send an email immediately without any user interaction. Using this simple function, you could send emails from any part of your database at any time. For example, you could set up a script that runs when your invoicing database closes to send an email reporting how much profit was made that day. Or you could send out an email to a sales rep's cell phone every time a new lead was added to your sales database. This SendMessage function can also use merge fields within the Subject or Body of the message to automatically merge information from your database into the email. So, if you need a quick and easy way to add email sending capabilities to your database and you do not want to deal with those pesky email clients always being misconfigured, MMEmail is the answer. Message Dialog The MMEmail Message Dialog is shown using the ShowMessageDialog function. This function takes a list of email addresses to use for a menu allowing the user to select an email address to send the email to. It also takes the subject, body, and attachments for the email. The function also allows you to define a list of merge fields to include in the contextual menu. Finally, the last parameter to the function allows you to define whether or not the email should be sent immediately when the user presses the Send button, or if it should save the values so that you can extract them for further manipulation before sending the email. Whether or not the plug-in sends the email immediately when the user presses the Send button, you can use the GetDialogValue function to extract values out of any of the email fields on the Message Dialog. You can either use this to store a copy of the email that was sent, or if the Message Dialog was not set to send the email immediately, you could

26

extract the values to add things like signatures or extra attachments and send the email using the SendMessage function. Send Message MMEmail also allows you to send an email immediately from a script without presenting the Message Dialog to the user. This is done with the SendMessage function, which simply takes the To email address, the Subject, the Body, and optionally any attachments you want to add. The attachments can either be files on your hard drive or can come from container fields in your database. Just like the Message Dialog, the SendMessage function allows you to put merge fields within the Subject or Body of the email to have MMEmail automatically replace those merge fields with content from your database. Also, just like the Message Dialog, you can get the values of the email back out of the plug-in using the GetDialogValue function so that you can store a copy of the email in your database if you need to. Standard Features As with all of our plug-ins there are a few common utility functions to help you develop your databases. There is a Version function which you can use to get the version number or to test to make sure the plug-in is installed and running properly. The Version function can also return an Auto Update friendly version number to make it easier to use FileMaker Pro Server's Auto Update feature. MMEmail also includes a function to easily bring up the MMEmail Configuration Dialog which includes all the settings for which mail server to use, what the From email address is, and other relevant settings. You can easily add a button or script to your database to bring up this dialog for your users to configure the plug-in.

Finally, MMEmail provides a Register function so that you can register the plug-in from a script. The Register function allows you to either specify the registration details from the script or can be set to bring up a registration dialog for the user to enter their registration details. The function can also be used to check the plug-in registration status.

Example Code /* How easy is it to add email sending capabilities to your database with MMEmail? After installing and configuring the plug-in, you can do it as easily as calling this one function: */ MMEmail_ShowMessageDialog /* Sending an email straight from a script is just as easy. You still only need one plug-in function and you can specify all the email details in one shot: */ MMEmail_SendMessage( "contact@business.com" ; "Upcoming Business Meeting" ; "This is an email reminder to remind you of an upcoming business meeting:¶¶This month's business meeting will be on Thursday, July 17 at 2:00 PM. Please bring reports for all your current projects for review." )

27

PRICES
$5,000

CNS Image, CNS Menu, FTPit Pro, POP3it Pro, SMTPit Pro
User/Unit R ange Unit Price T al Price* ot 1-3 $65 $65 5-6 $4 5.60 $228 10-17 $31.90 $319 25-34 $22.32 $558 50-70 $15.62 $781 Site $1093 $1093 Dev $664 $664

$3,750 $2,500 $1,250 $0

Unit Price Total Price Without Savings

1-3

5-6

10-17

25-34

50-70

$7,000

CNS Audit
User/Unit R ange Unit Price T al Price* ot 1-3 $95 $95 5-6 $66.60 $333 10-17 $4 6.60 $4 66 25-34 $32.64 $816 50-70 $22.84 $114 2 Site $1599 $1599 Dev $971 $971

$5,250 $3,500 $1,750 $0

Unit Price Total Price Without Savings

1-3

5-6

10-17

25-34

50-70

$2,500

MMCol or, MMEmail, MMR egex, MMQuery, MMScript
User/Unit R ange Unit Price T al Price* ot 1-3 $35 $35 5-6 $24.60 $123 10-17 $17.20 $172 25-34 $12.04 $301 50-70 $8.4 2 $4 21 Site $589 $589 Dev $358 $358

$1,875 $1,250 $625 $0

Unit Price Total Price Without Savings

1-3

5-6

10-17

25-34

50-70

*Total Price represents 1, 5, 10, 25, and 50 unit license breakpoints.

28

MANUFACTURER'S COUPON

EXPIRES 9/30/07

MANUFACTURER'S COUPON

EXPIRES 9/30/07

SAVE $30
+
"Email Bundle" - Save $30 when you purchase both SMTPit Pro and POP3it Pro.

SAVE $20
+
"Image Bundle" - Save $20 when you purchase both CNS Image and MMColor.

MANUFACTURER'S COUPON

EXPIRES 9/30/07

SAVE $20
+
"Interface Bundle" - Save $20 when you purchase both CNS Menu and MMScript.

FREE CNS HAT
Free CNS Hat with the purchase of any CNS plug-in while supplies last. Offer valid during DevCon 2007 only.

Comm-Unity Networking Systems

JESSE TRAYNHAM
Director of Production, Product Testing, Documentation, Database Developer, Lasso Programing, Web Programming, Advertising, Husband, Father, Homeschooler, Older Brother......

JAKE TRAYNHAM
Lead Programmer, Database Developer, Business Manager, Husband,Younger Brother......

DANIEL SIMS
Tech Support, Product Testing, Documentation, Database Developer, Programmer in training, Husband, Friend of the Family......

Plug-ins.com
Comm-Unity Networking Systems • 6560 Lake Worth Blvd. Ste. 300 • Fort Worth, Texas 76135