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.

FAQ: What are the differences in events and support calls modules?

QUESTION: What are the differences in events and support calls modules?

ANSWER: That is a great question? A support call is a business event, so it can be a little confusing. I guess you would think of events as smaller action items that might be included within an event. For example, say a laser printer has stopped working and the support call record is created to fix it. It is possible that support call could have many smaller events that need to be handled by different staff members such as ...

- verify the printer is under warranty
- if not under warranty, make sure client know they are responsible for the repair bill
- if possible, get a warranty extension from the laser printer vendor
- pick up the machine from the clients onsite address
- fix the machine in the office
- deliver the machine back to the office

So it is possible that there is a one to many relationship between a support call and events.

FAQ: Can recurring event items be added or linked to staff?

QUESTION: Can recurring event items be added or linked to staff?

ANSWER: By all means, yes it can be added as a feature within InBizness. These would be daily recurring events and initialize when the database loads for the first time in a day. I would need to know more about the specifics of your recurring event needs but I don’t see any problem adding that feature at all.

Can We Import Orders From Emails Sent From Our Web Site?

We receive emails from our oscommerce website site, Amazon and google. Can an import be setup to import from several different emails directly into the orders module?

By all means yes, we would need to analyze the format of the incoming emails. Then we can use a plug-in such as the 360Works email plug-in to automatically download the emails into the database, parse the information within the email and then create the order records. One thing we will need to be sure to keep an eye on. Occasionally, both Google and Amazon may change the way the emails are formatted. If this happens, we will need to tweak the script to bring the messages in and parse them correctly.

Why Do You Need A Time Card Button On The Client Screen?

The timecard button on the clients screen serves a similar purpose as the invoice button. It allows you to create a new timecard record and automatically link it to that client. By default, it will also attach that timecard record to the staff member that clicked the button. In your workflow, it might make more sense to create the timecard record first and then assign it to the appropriate client.

How Does A User Go Back To The Main Screen / Dashboard / Clients

In the past, many FileMaker solutions had a button for everything. This has a large overhead in the time it takes to produce and update FileMaker layouts. For quite some time, FileMaker has offered one alternative to this in the form of custom menus. Custom menus can be created very quickly, easily customizable and can be laid out in a precise grid across the solution.

So much of InBizness still has buttons to navigate to other areas and perform actions. It also has a robust set of custom menus and that is the primary method of navigating from one record to another.

Here is a peek at the current navigation menu.

So we can add buttons to all the layouts to perform basic navigation but if you can train your users to embrace custom menus, it will save on the overall cost of migrating into InBizness.

Now there are some interesting possibilities with the recent release of FileMaker 10. The new Script Trigger feature can allow for all kinds of keyboard trigger options. I'm still researching (like most professional FileMaker developers) all the opportunities script triggers provide.