Friday, February 27, 2009

FAQ: Protecting Credit Card Data Information

QUESTION: What is the most straight forward to remove access within InBizness for a majority of the users to clients credit card data?

ANSWER: The most straight forward way is to remove the field access permissions to the credit card related fields in the Clients module. This is done for each privilege set that corresponds to the business role of a staff member.

First up, open up the privilege set dialog box for one of the privilege set.

Under the records data access settings, choose the Custom Privileges option.

Next we want to choose the "limited" option for field access for the CLIENT table. This will allow us to target options for fields in the Client module.

From here, we want to remove the access for the privilege set for the credit card field. In the case of InBizness, these fields are have a prefix of cc_ .

So when you are done, it should look something like this.

Thursday, February 19, 2009

Google And MapQuest Directions For InBizness

From Dwayne Wright - Certified FileMaker 9 Developer
WEB: www.dwaynewright.com
EMAIL: info@dwaynewright.com
TWITTER: dwaynewright

A while back (January 27th 2009, to be exact) a custom function popped up on briandunning.com to allow you to do MapQuest directions for a FileMaker record. At that time, I did what many of us do, mentally filed it away as something to check out during the mythical free time moments. About a week later, someone emailed me and they wondering about how to integrate google maps into a FileMaker record. I passed them the custom function link for the MapQuest function, recommended they search there for google map features as well and again filed the topic away for later review.

As fate would have it, on Saturday morning, I received 27 new feature requests from a client that purchased my FileMaker based CRM product called InBizness. The first item on the list was integration of service calls module to google maps so that technicians could print out map directions to call locations.

Well, I could no longer keep this topic in the “check out someday” file, so I cruised over to the briandunning.com site and did some poking around. I came up with the following ...

GOOGLEDIRECTIONS
Added GoogleDirections from briandunning.com (http://www.briandunning.com/cf/724 ) and submitted by Chris Pye, Mactec, http://www.mactec.com.au. Takes two addresses and returns text formatted as a URL to display a Google Map with directions. This can be used to open a URL or Web Viewer window.

MAPQUEST_DIRECTIONS
from briandunning.com (http://www.briandunning.com/cf/959 ) and submitted by Robert Schaub, Starr Data, http://starrdata.com. Use your start and end address fields from you database or enter your custom find.

I tested both of these out and they seemed to work OK. The google map function seemed to have a problem when there is a comma in the street address. So I thought I’d warn my client about that and see if they want me to program around the possible issue.

ADDING AS A WEB VIEW IN A LOWER TAB PANEL
The first thing I tried was adding the feature as a web viewer within a lower tab in the tab panel. This worked OK but I still had the classic web viewer problem. The web viewer is like an oversized dresser that never really fits in the bedroom. You can move it around and around but it still never fits snugly.

You will need to click on this image to see it in detail. This is the tab panel setup I went with. You can see that I have an opening tab that explains the process, directions for both Google & MapQuest and then tab for maps of the location (sans the directions). These are setup to auto resize with FileMaker 9 but the Web Viewer still takes up a lot of screen real estate.

Pondering how to use the power of the Web Viewer, you may consider ripping out a wall to resolve the issue (and in FileMaker, that is what you do sometimes). However you realize that is a real pain and a huge productivity whole. You consider bringing up a new layout window with the web viewer viewer only but that also is a productivity hole and doesn’t net you much more than what you can do with the Open URL script step.

FYI ... The Open URL Script Step opens a specified Internet URL address or performs other specified URL protocol commands. This means that you can have a combination of web and FileMaker actions within a script that you use in your database solution. Here are some links to other posts that might be of interest in regards to this topic... The Open URL Script Step and EXAMPLE: Open URL Via Portal Records.

COMBINATION PLATE APPROACH FOR THE MAP TAB IN SERVICE
Since custom menus are so flexible and functional, I decided to use this method for utilizing similar mapping features across multiple modules. Of course, this would be much faster for me to implement if FileMaker would support copy and paste features for entire custom menus but that feature hasn’t been added as yet. (hint - hint - hint)

As I mentioned, I started off by implementing this feature in the Service/Support module of my InBizness product. I then added the Google/MapQuest directions Go To URL (via a custom menu) feature into the Clients module using my current set of recycling techniques from my tool bag. I found a couple tweaks that I needed to go and quickly implemented those changes. Now I have the map direction features in two InBizness modules (Support & Clients). Next up, I wanted to do a test to see how long it would take me to add this feature to another module. So I started the timer for the implementation into the Leads module.

I started at 7:58 AM and finished up the implementation at 8:06 AM. So within 8 minutes I was able to duplicate / edit existing script steps for leads, build the two custom menus for leads, test, troubleshoot, tweak and test again. I did run across a problem with the MapQuest function in that it did not like the entry of “United States” for the country data. A quick change of the county value list to “USA” fixed the problem and seemed to play well with Google Maps as well.

SUMMING THIS UP
InBizness (as with most robust CRM packages) has many independent modules that work together in concert. Using a modular design method, you can implement a feature in one module and invest the normal amount of development time. Written properly, the underlying code can quickly be implemented into multiple modules and this has multiple benefits (the least of which is a consistent feature set across modules that users can leverage during the business day).

ADVERTISEMENT ==================
Help support this blog by considering a donating to its ongoing growth. For more details, please visit http://www.dwaynewright.com/donate.html

Wednesday, February 11, 2009

Thank You For Your InBizness Money Purchase

I’m still evolving what I send to customers that purchase my framework products but don’t hire me to do the customizations. Here is a quick peek at my last quick message to a recent purchase of InBizness Money. If you have any suggestions about things I should add, I would love to hear from you!

**********

Thank you for your order. Here is a copy of our FileMaker framework application InBizness Money. As with most framework applications, this one ships without any data (so that you can add your own data, of course). There are some value lists that look for data, so you may need to create a few records to build this up or change the value lists to be in a typical list format. There may be a few other things that might seem unfamiliar, please feel free to email me with any questions you might have.

Thursday, January 29, 2009

After You Have Purchased InBizness

When you purchase a copy of InBizness and you want customizations, we recommend that you allow us to host your new "under construction" customized version of InBizness on our web site. We offer this as a no charge service for the first 60 days. If you want to continue to use a hosting service, we recommend you investigate any number of the current hosting providers such as thedroolingdog.com.

ITEMIZE THE CUSTOMIZATIONS YOU WANT TO INBIZNESS

Before we get started, be sure to have a list of the customizations you would like to have for your new InBizness solution. It is best if this list can be hosted on an internet service, that way we can work on this together. Some customers like something as basic as Google Docs and some like something more robust like BaseCamp.

LISTING OF USERS YOU WANT

In order to hit the ground running, please be sure to send me a list of the users you want to test the solution. It would be best if we have the full name of the user and their email address. Then we can automate the process of sending them the access settings for the file and the testing goals.

THE LAUNCHER FILE
When we upload the database, we will send you a FileMaker file called a launcher. This file will open the hosted InBizness solution using embedded settings and then close itself. This way you do not have to memorize a series of steps to open the hosting InBizness file.

CHANGING PASSWORD ON FIRST LOGIN

When you open your new InBizness solution, the first thing it will want you to do is to change your password. If you forget the password you changed, let us know. We cannot tell you the password but we can reset it to a different value. You can then change the password on your next login. If you don't want users to be able to change passwords, let us know and we can remove that ability.

YOUR NEW INBIZNESS SOLUTION MAY BE EMPTY
Unless you are wanting us to migrate your existing database data, InBizness will be an empty shell. So do not be alarmed when you cannot perform some actions because there are no records in the file to perform them.

Wednesday, January 28, 2009

FAQ: InBizness CRM Hosted Performance

QUESTION:
We’ve been testing remote hosting with one of our own solutions with appalling results – over 3 minutes to open the main file – it’s a separation model database. Your solution, on the other hand opened smartly and seemed quite quick to use.

My first question is ..... is this the speed we could expect from inBiziness in a production environment or have you kept the file(s) particularly small? Lots of relationships seem to be one factor in our slow responding solution. Even when loaded our solution is very slow when moving between layouts while yours seems to be quite quick, and yes, we have kept graphics to an absolute minimum. I’m quite happy to admit here that your programming skills may well outshine ours!

ANSWER:
These are all great performance related questions and my answers might seem a little bit rambling. This is similar to my experiences with FileMaker performance issues, the causes sometimes seem to ramble. In fact, I’ll probably break up my answers into multiple blog posts because I really want to share my thoughts to you in these areas.

ABOUT INBIZNESS DEMO SPEEDS
There isn’t anything different about the demo from the production database system. I simply take the production version, use FileMaker Advanced to protect its code and upload it to the server to host it. It doesn’t have an extensive amount of data in it but it does have data in almost every table. As a company adds thousands of records, there may be areas that may need to be tweaked for performance issues. Since InBizness is simply a single FileMaker file that has optimized for customization, performance hurdles should be somewhat easy to fix (if and when they may arise).

InBizness does have a lot of relationships and that can be a red flag for future performance (but not really). InBizness uses Anchor / Buoy religiously and this walled garden approach pays huge dividends for performance and customization. In my experience, a lot of relationships isn’t so much of a problem as the other factors that might ride shotgun in the same vehicle. Things that come to mind are ...

- lots of relationships that interact among multiple table occurrences
- lots of relationships that have complex operators or calculated match fields
- lots of data in those table occurrences (this is basically a multiplier)

I utilize “walled garden” techniques everywhere inside of InBizness and always look for more opportunities to do so. If I have a customer that will not use some of the InBizness modules, I quickly delete them from their copy. It may take me a hour or so to clean up the table occurrences, layouts, value lists or scripts. After I’m done, I run it by BaseElements to see what schema dust bunnies I might have left behind. After I clean out those dust bunnies, I run BaseElements again and repeat the process until BaseElements reports “looks pretty trouble free to me”!

SO ABOUT THE SPEED
I haven’t ever had a complaint about InBizness speed in a core implementation. However, I’m quite prepared for it. Speed issues should be approached with a surgical approach and my walled garden approach supports that very well. The place I would expect a problem to come up is when going from one client record to another. This is because I’ve added too much functionality there and I’m OK with that. Again, after doing a needs analysis with a client, I can quick customize the client module for the best of both worlds (speed and power).

ABOUT THE SEPARATION MODEL
The separation model has advantages and disadvantages. I did a full separation model for InBizness a couple years ago and never brought that product to market. It just didn’t have the payoff that made the extra coding overhead worthwhile. Since then, I’ve done smaller versions of the separation model, using just the tables that made sense. For example, the leads module is something I’ve separated for some customers. This is because of the sheer number of records it may contain, the rather limited amount of schema needed to support it and because the customer wanted to have the leads module available on the outside web.

Sunday, January 18, 2009

Go To Layout By Using A Custom Function

From Dwayne Wright - Certified FileMaker 9 Developer
WEB: www.dwaynewright.com
EMAIL: info@dwaynewright.com
TWITTER: dwaynewright

I'm beginning to add more logic to my InBizness package to handle found set a bit better. This type of granular control would likely be "a touch" too much for consulting projects (that bill out at standard rates of $100 + per hour). However for open framework applications such as InBizness or in house projects, these tweaks have a better return on the time invested to build them.

In this particular point, I want scripts that go to found sets to have the logic to ...

- show an error message if there are no records in the found set to go to and exit gracefully
- go to the form view layout if there is only one record in the found set
- go to the list view layout if there are more than one record in the found set

Now InBizness has over 50 tables and many of them have both form and list views (there are a few join tables that I can ignore for these purposes). Manually coding each decision branch would be a bit overwhelming. On the surface, using the feature to go to a layout by a calculated value seems the way to go. I could choose to go to the layout by its name or by its position in the layout order. Now going by the layout order is not an option in a database that is under constant construction and InBizness is definitely one of those. Manually typing in the layout name again and again and again for each script step that will use this found set option is also not an option because of the time involved to create and maintain.

Here you can see the top of the specify options for the Go To Layout script step.

Here are some posts about the Go To Layout script step that you mind find interesting, if you are unfamiliar with the various aspects of it.

The Go To Layout Script Step
EXAMPLE: Go to Layout Example
Go To Layout - Via Account Name

Any Go To Layout script step that uses the layout name in the calculation has an element of danger involved. If you ever change the name of the layout, the script step will be broken. This is one reason why I have stayed away from this method in my open framework products. In an open framework, I sell the package open to modification by the owner. So it is quite possible they might get themselves into a problem by doing something as seemingly innocent as changing a layout or table name. I wanted to have one place were we can synch things up if these names are changed.

So I decided to create a custom function that will look at the found count of records, then look at the base table and then return the layout needed. Here is a small sample of the custom function I wrote ...

Case(
Get ( FoundCount ) = 1 and Get ( LayoutTableName ) = "Campaign"; "FORM_Campaign";
Get ( FoundCount ) > 1 and Get ( LayoutTableName ) = "Campaign"; "LIST_Campaign";
Get ( FoundCount ) = 1 and Get ( LayoutTableName ) = "Client"; "FORM_clients";
Get ( FoundCount ) > 1 and Get ( LayoutTableName ) = "Client"; "LIST_clients";
etc...
"")

The actual calculation had over 50 lines and will likely grow when I integrate a planned manufacturing module to InBizness. I should also note that this function has even one more element of danger because it looks at the name of the table occurrence (not the table name itself) that is assigned to the layout. I wouldn't have even tried to do this if I wasn't working with a solution that totally embraces the Anchor / Buoy relationship design method.

Now it is challenging to maintain a rock solid naming convention for a robust database that has been evolving for well over a decade. That being said, I would feel comfortable that my InBizness product would compete quite well against any similar robust CRM product. In my case, I had only one thing that would drive the anal television detective Adrian Monk crazy. Sometimes I named my tables singular and sometime I named them plural. Does this matter to any degree from a database performance aspect, certainly not. However, it did require an extra 30 minutes while I checked and tweaked my custom function.

Now you might wonder how I'm going to handle the advance notice of no records in the found set. Well, this is going to be something I address in the header (a name often given to script steps at the top of a script) of the overall script itself. I try to add that as a posting later on.

That being said, my calculated go to layout script step will be at the bottom of the script. This is because I will have to go to the appropriate layout first and then analyze what my base table occurrence is and what my found set count is.

So I'm going to wrap up this blog post for now but I'll try to update you on the overall progress of this implementation plays out.


=
More info about the author and FileMaker in general, contact me at info@dwaynewright.com.

© 2009 - Dwayne Wright - dwaynewright.com

The material on this document is offered AS IS. There is NO REPRESENTATION OR WARRANTY, expressed or implied, nor does any other contributor to this document. WARRANTIES OF MERCHANT ABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY DISCLAIMED. Consequential and incidental damages are expressly excluded. FileMaker Pro is the registered trademark of FileMaker Inc.

ADVERTISEMENT ==============================
Looking for a robust FileMaker CRM template to manage your business? Check out the InBizness product line at http://www.dwaynewright.com/solutions.html.

Tuesday, January 13, 2009

FAQ: Can Barcodes Be Implemented Within InBizness?

QUESTION: Can Barcodes Be Implemented Within InBizness?

ANSWER: I’ve implemented barcode scanning many times within FileMaker solutions in the past. Since InBizness is simply a robust and well written FileMaker database, barcode integration should be a snap.