Tuesday, April 5, 2011

What's Cooking : Calendar Views in your Online Database for Google Apps

Yes, support for Calendar Views is what is cooking up at iFreeTools and it is already available in our labs deployment : iFreeTools Labs.

All records which have a date or a date-time field will now have an option to view the records in a Calendar View as shown below..



The calendar view will have options to view the records based on Month, Week or Day. The details view is also loaded via AJAX, as shown below, without you having to leave the calendar view.



The feature will be rolled into your affordable CRM for Google Apps and your favorite custom database app builder for Google Apps, in the coming days.

The current feature uses any one date/date-time field, at a time, for the Calendar View. We will be coming up with an option to specify start & end fields too, so that you can have the events span across hours and days too. And together with that you will have an option to export the data to Google Calendar in iCal format.

Hope you like the new feature. Do keep sending in your valuable suggestions.

Monday, March 21, 2011

Alphabetical indexing of database records for Quick filtering, now available in iFreeTools

We have just made an upgrade to our online database app creator and our online CRM apps, which have been built over Google App Engine for use with Google Apps.

This upgrade adds support for alphabetical indexing of database records and index links for quick filtering from the list views.



This has been enabled for the relevant fields in our default CRM application. For custom database applications built over iFreeTools Creator, you can enable them for String and Reference attributes, by editing the Attribute and selecting the indexing option, as shown below..



Multiple attributes can be configured to be indexed and they will all be available for filtering from the list views. If there are more than one alphabetical index, you will find a more.. button which you can click to view all filtering indexes.

For existing records (added to the database, before enabling the index), you will have to perform a re-indexing operation once, from under the list views More Actions > Re-Index.

Hope you find the new feature useful. Keep sending in your suggestions.

Friday, March 18, 2011

Attach Google Docs to Database Records in iFreeTools CRM & Creator

Our CRM for Google Apps and Online Database App Creator for Google Apps now support attaching of Google Docs to the records within the database.

Update :
We have upgraded this feature to support attaching any file / folder from within Google Drive. More details are available in this blog post : Attach files or folders from Google Drive to your database records.

Below the record details in the details page, there is now an option to attach a file from Google Docs. When you click on the Attach a Google Document button, you will be required to authorize the Google Docs account to use, this can be a Google Docs account associated with either Google user account or with a Google Apps user account.

After authorization you can view the list of files in that Google Docs account, with details like the file name, file type and the person who last modified it as shown in the image below..


Just click on the attach button and the file will now be linked to your database record.

All such attachments will be listed below the record details, as shown below..


Attaching a file in Google Docs does not duplicate the contents, but directly links to the document in your Google Docs, making sure the latest doc can be accessed from the record.

The security settings set in the Google Docs are still applicable and you need not have to duplicate those setting again. When someone clicks on the attachment link, they are taken to Google Docs directly which handles the security settings.

Update :When attaching files from Google Docs to your records, you now have the option to search for the required file based on text, to narrow down the files and attach the required file to your record, as shown in the image below.


Hope you find this new feature useful. Keep sending in your suggestions.

Tuesday, February 15, 2011

Google Contacts integration : Import-to / Export-from any database table, in iFreeTools

Having come a long way in our support for importing data into iFreeTools, today, we are glad to announce support for importing contact details from Google Contacts into any database table which has an email-id field, along with support for exporting contact details from such tables back into Google Contacts.

Using Field Mappings we have enabled mapping a virtual Google Contact entity to entities within iFreeTools database and use these Field Mappings to integrate with Google Contacts, with the help of Google Contacts API.

iFreeTools CRM will have out-of-the-box native field mappings defined for Contacts, Leads and Vendors. You can also add Field Mappings for your custom entities in iFreeTools Creator, to enable importing / exporting the contact details in your custom database tables.

When Field Mapping is not found for an entity with an email-id field in iFreeTools Creator, you will find a button to Enable import from Google Contacts, below the list views. Clicking on the button will take you to the Field Mapping form. Such a form loaded for mapping Owner entity in our sample database app over iFreeTools Creator is shown below. If the field names match the fields will be mapped by default, like the Notes field as shown in the below image..


You can proceed to complete further mapping of the fields. You can store value from more than one field into the same field. For example, Phone/Mobile will be the destination for Phone1, Phone2, Mobile Phone, Home Phone and Skype Id. Similarly Alternate Email Ids, Fax, Other Address, Home Address and Notes from Google Contact have all been mapped to Notes field in Owner..


The reverse mapping view shows the details on the multiple source fields getting mapped to a single destination field..


Adding such a field mapping enables importing the Google Contacts directly into the Owners database.

Like wise, it is necessary to add the mapping for exporting Owner details back to Google Contacts.

Exporting of records will be possible once you have authorized iFreeTools to connect on your behalf with Google Contacts, using its data APIs. This will be done when you try to import from the Contacts, that is clicking on Import from Google Contacts and completing the authorization step.

Once authorization step has been completed, you will find a upload icon in the list views for each of records. You can then click on them to selectively export the required records to Google Contacts. Bulk export of contacts into Google Contacts will be supported subsequently. If a contact already exists in Google Contacts, it will be over-written with the full set of details from iFreeTools, based on the field mapping for export.

Hope you like the new feature.

----

A little bit of history, leading up to this feature.

iFreeTools initially had CSV import alone and that too without field mapping. That is, the fields in CSV file are supposed to have specific set of column names expected by our import system. So, to get contacts details from Google Contacts, one had to export the Google Contacts into CSV, map the header names manually in the CSV file and them import them into iFreeTools.

While our initial feature was good enough to help enable import process, we wanted to make things easier for our users. So we added CSV import field mapping feature, to enable mapping the fields in CSV file to those in the database records, enabling CSV files with proprietary column headers to be mapped and imported easily into the database. This mapping could also be saved for reuse in subsequent imports in the same format, typically from the same source.

As all our users have a Google user account or a Google Apps user account, we wanted to integrate well with Google services, particularly Google Contacts. So, we followed up with support for importing Google Contacts using Google’s APIs, directly into the Contacts database in iFreeTools CRM.

To import the contact details using Google APIs into some other database table - may be Leads, Vendors, or may be into a custom database table created in iFreeTools Creator - was still not possible. Uploading contact details back into Google Contacts was also not possible, until today's feature.

We strive to keep adding new features while also improving features to make them easier, for our users. Keep sending in your suggestions on how we can make things better for you. You may use the feedback form in the application or you may send a mail to raj@sahasvat.com

Tuesday, January 25, 2011

"List" data type, now supported in Online Database App Creator

Our online database app creator, which is built over Google App Engine for use with Google Apps, now allows users to define and use List fields.

In this blog post, we will showcase this new feature by adding 2 list attributes to our sample Property Management app.

List attribute without choice values

We will add a new attribute to list down the facilities available in the managed properties in our database. When adding the attribute select the Data Type as List (with String values).


Defining a new attribute with the List data-type will result in a simple text-box for data-entry where one can enter comma separated values. These values will be parsed and stored as a list in that entity instance.

In our case the facilities can be something like Covered Car Park, 24x7 Security. This will get stored internally within Google App Engine's data-store as a list value with two items, [Covered Car Park, 24x7 Security].

We will be coming up with auto-complete to help fill in list fields in forms, at a later date.

List attribute with choice values

One can also specify the choice values for the List. When choice values are provided, the form will have a list of check-boxes - one each for each choice value. Making use of choice values also enables creating Custom Views based on this attribute, as well as including them in automatic chart view options.

We will define a List attribute to store the preferred mode of payment for the Owners, as shown below.


The form generated, for this List property with choice values, will have check-boxes for each of those choice items. The user can select one or more values, each of which will be added to the List field of that record instance.


The chart view will make use of the choice values to generate the Bar charts.

Notice that the total need not match the number of records because each record may have more than one value. For this reason, the pie-charts have also been disabled.

Hope you find the List data-type useful in your online database app over iFreeTools Creator. Do let us know your suggestions and feedback.

Wednesday, December 8, 2010

Access Control up to Field-Level, now possible in iFreeTools CRM & Creator

Until now, iFreeTools CRM and iFreeTools Creator had role based access control alone.

In this mode, users can be associated to a role which can be admin / user / guest and access control can be specified (in Creator, for custom entities) to restrict read / write operations based on these roles. It was not possible to segment records based on departments (Sales / Marketing / Support / etc.,.) or based on territories (typically useful for geographically distributed offices). It was also not possible to have field-level permissions.

Not anymore.. we have now added support for adding authorization profiles to enable defining access control permissions and associating them with user accounts.

Using authorization profiles, you can..
  • allow / block access to specific modules (record types) as a whole,
  • allow / restrict access to specific operations alone, like controlling permission to View, Add, Edit, Delete, Export records or to Send Emails,
  • define scoping criteria to segment the records at operation-level. This scoping criteria can be based on any attribute which contains choice values (which include departments and territories, if you have enabled them) and based on user-reference attributes. One can define criteria to enforce access conditions like “Allow editing of records only if the user is the record owner”,
  • define permissions for access to fields at the operation-level, to enable conditions like “Allow viewing X, Y and Z fields, but restrict editing to X and Y fields alone”.

Sample Walk-through on using the Auth Profiles in iFreeTools

Let us take a sample application and walk-through the steps to enforce authorization rules for that application using this new feature. Our sample app will be a simple help desk application to hold the records for Customers, Solutions & Cases and will have the following authorization requirements..
  • Customer login :
    • Allowed to view available solutions
    • Raise new cases and edit them as required.
    • Edit their own customer record to update contact details (address, phone, etc.,)

  • Support staff login :
    • Allowed to view all solutions, add new solutions and edit the ones for which they are the owner.
    • Allowed to view all cases and edit to update the records to associate relevant solutions.
    • Full access to Customer records.
For our walk-through, we will define 3 record types : Customers, Solutions and Cases.

Note : While there is more to a full-fledged help-desk application than just maintaining the records - like say, notifying the Customer-owner (support staff) when the Customer adds a new Case, notifying the Customer when the support staff responds to cases and escalating to notify the manager when a case has not been closed for long - we will deal with the records part alone for now. We will come back to this walk-through to cover other use-cases when we add support for work-flows and triggers.


Concise representation of the data-model :

Customer (name*, company, $< phoneEmailEtc >, $< contactAddress >, owner, userAccount< User >*)
Solution (question*, answer*~~, owner*, status&)
Case (subject*, type&*, status&*, origin&, priority&, reason&,
reportedBy< Customer >*, reportedByUser< User >*, description~~*, owner, solution< Solution >)
* means the attribute is required
~~ refers to a Text attribute,
& means the attribute has choiceValues
$< phoneEmailEtc > and $ < contactAddress > add multiple attributes
attributeName< ReferenceClass > refers to a reference attribute, owner defaults to < User > reference


Pseudo-code representation of the data-model :

(useful if you want to add Entities and Attributes)

Customer (plural : Customers ) :
String name as Name required
String company as Company
String emailId as "Email Id" {isEmail:True}
String phone as Phone
String mobilePhone as "Mobile Phone"
String homePhone as "Home Phone"
String skypeId as "Skype Id"
String website as Website
String addressLine1 as "Address Line1"
String addressLine2 as "Address Line2"
String city as City
String zipCode as "Zip Code"
String state as State
String country as Country
GeoPoint addressOnMap as "Address on Map"
Reference owner as Owner {refersTo:User}
Reference userAccount as "User Account" required {refersTo:User}

Solution (plural : Solutions ) :
String question as Question required
Text answer as Answer required
Reference owner as Owner required {refersTo:User}
String status as Status {choiceValues:[Draft, Reviewed, Duplicate]}

Case (plural : Cases ) :
String subject as Subject required
String type as Type required {choiceValues: [Problem, Feature Request, Question] }
String status as Status required {choiceValues:[New, On Hold, Escalated, Closed]}
String origin as Origin {choiceValues:[Web, Email, Phone]}
String priority as Priority {choiceValues:[High, Medium, Low]}
String reason as Reason {choiceValues:[User did not attend any training,
Complex functionality, Existing problem,
Instructions not clear, New problem]}
Reference reportedBy as "Reported by" required {refersTo:Customer}
Reference reportedByUser as "Reported by User" required {refersTo:User}
Text description as Description required
Reference owner as Owner {refersTo:User}
Reference solution as Solution {refersTo:Solution}


You need not have to create these entities and attributes manually. Just use the following CSV files to import this data-model directly into iFreeTools Creator..
Once you have imported the Entities and Attributes to iFreeTools Creator, we can now proceed to defining the authorization profiles for the use in this help-desk application.

Note on additional segmentation : When adding/editing entities, you can configure the entities to use additional segmentation based on department and/or territory. You can choose not to segment the records (default option for empty value), or make it optional / required. Making it optional/required will result in a new attribute getting added to the entity, with selection values to choose from for department/territory. You can customize the values for this selection from under Admin > Enum.



This walk-through does not use additional segmentation. But feel free to add/edit entities, to include them if required.


First we will create an authorization profile for customer login. Proceed to Admin > Auth Profiles > Add Auth Profile.

The initial screen for adding the authorization profile will be like given below..


Customers need not have access to the User records, so we will not enable access for those records.

When customers access the Customer records, they should be able to view their own record and can have the facility to update their contact details themselves. The following image shows the authorization configuration for Customer records..



For Solutions, customers can be allowed to view all Solutions which are in Reviewed status. The fields to be made visible can be restricted to Question, Answer and Created On.




With respect to Case records, customers can be allowed to view only the cases reported by them. They can add new Case records and can edit Cases they had reported earlier. They will not have permission to delete or to export them. The following image shows the required auth-profile configuration to achieve the same..



Proceeding to save the Auth Profile, we get to see the following details page..




Similarly we can add an Auth Profile for support-staff, as per the authorization requirements we listed earlier. The details page of the Auth Profile for support-staff is shown below..



That is it, we have completed the Auth Profile configurations. Now you can add or edit users, from under Admin > Users, and associate the Auth Profiles to the User records.

Note: Auth Profiles take effect only for non-admin users, that is users having role as user or guest.


When the user logs-in into the application, the authorization profile we configured and associated with their user-account will take effect automatically.

Hope you like the our new feature. Such fine-grained access control features are part of the “premium” plans in almost all other online CRM apps / online-database-app builders, if at-all available. We at iFreeTools are glad to offer it as part of our free version at iFreeTools CRM and iFreeTools Creator.

Wednesday, November 3, 2010

Building a Store Locator type Google Maps app over GAE, using iFreeTools

Our free CRM app over Google App Engine and our online database application builder now support geo-location features and integrate well with Google Maps.

For iFreeTools CRM, we have added the geo-location features to all records which have address values. So, you could now store and search for Leads, Contacts, Accounts and Vendors based on geo-location criteria and view them in a map view based on Google Maps.

iFreeTools Creator, which is our online app builder, also supports the geo-location features.

In this blog post, we will walk-through the steps in creating a simple store locator type application using iFreeTools Creator, to showcase the geo-location and Google Maps integration features.

We will also upload a sample CSV file, reusing a CSV file from Google's tutorial on building a similar store locator type app (that tutorial, by the way, details about building such an app using PHP and MySQL).

The overall steps involved are as given below..
  1. Login into iFreeTools Creator.
  2. Edit App Settings to change the time-zone and branding. (optional)
  3. Create Entity (or "table") to represent Stores.
  4. Create Attributes (or "fields"/"columns") for the Entity.
  5. Start using the app.
    1. Uploading data from sample CSV file. (optional)
    2. Create custom views to filter based on geo-location . (optional)

Step 1 : Login into iFreeTools Creator

This is simple. No sign-up forms. Just login using your Google user account or your Google Apps user account into iFreeTools Creator.

Step 2 : Edit App Settings to change the time-zone and branding. (optional)

You can re-brand & customize your app from under Admin > App Settings, providing your time-zone and also change the app names from their defaults. The below image shows the changes I have made : choosing PST8PDT as the time-zone and changing the app name to Store Locator.


Step 3 : Create Entity (or "table") to represent Stores

Proceed to Admin > Entities > Add Entity and provide details of the entity which will hold our data. Let us call the entity Restaurant..


Step 4 : Create Attributes (or "fields"/"columns") for the Entity

Once you add the entity, you can then add the attributes for that entity - either from the Entity details page, which you get after completing step 3 or from Admin > Attributes > More Actions > Add multiple Attributes to add them in one shot. For our demo we will use 3 attributes Name, Address and Address on Map, the first 2 being string (or text input fields) while the 3rd is a GeoPoint, which enables us to refer to a specific location on a map and store that value in the database..
The Property Index helps in specifying the order of the attributes. Name comes first, followed by Address and 3rd is Address on Map.

Step 5 : Start using the app

That is it !!
You could just start using the app, adding restaurant entries using the automatically generated form, as shown below..


Step 5.1 : Uploading data from sample CSV file. (optional)

We will now try to upload a sample CSV file. Save this sample CSV file to your disk and edit it to add the column headers, which for this CSV file are..
Name,Address,Latitude,Longitude


Now proceed to import this CSV file from Restaurants > More Actions > Import from CSV and provide the CSV file and proceed to mapping of fields. The initial mapping will be something like given below..


Now provide the mapping for the latitude and longitude, with both being mapped to Address on Map attribute..


The reverse mapping shows that both the latitude and longitude fields will be combined together for the geo-location value to be stored in Address on Map attribute..


Proceed to import all data into the database. The resulting list view after upload will be like given below..


And the map view (when you click on the View Map link below the table list) will be like given below..


Step 5.2 : Create custom views to filter based on geo-location . (optional)

You can also create multiple custom views to filter data based on nearness criteria.

For example, following are the entries to create a custom view to find stores near Miami Beach, Florida..
One can provide an approximate address and automatically have the marker placed in that location. Also notice that I have modified the columns that are to be displayed in the list view.

After saving the view, the resultant list view will be something like given below, with the records sorted based on the nearness to the location we specified when creating the custom view (that is, near Miami Beach, Florida)..


And the corresponding map view will be like the one given below..


You can also do a quick search without having to create a custom views, by following the links from the details page, to find other records near a particular location.

Hope you like the new geo-location and Google Maps integration features. Do let us know your feedback.