Archive for December, 2009

SugarCRM 5.5.1 Beta 1 Released

Tuesday, December 22nd, 2009

Last week, we released the first Beta of Sugar 5.5.1 as this is our commitment “release early, release often”.

Please help by testing for regressions in your modules or api clients.  Also, try out the functionality and usability.

Customers can download the 5.5.1 Beta 1 for Sugar Professional and Sugar Enterprise through the Download Manager.

The 5.5.1 Beta 1 of Sugar Community Edition Community can be downloaded through the Sugar project in SugarForge.

In 5.5.1 we improved the performance and design of the Emails module, as well as addressed the most significant emails issues and feedback reported by customers through SugarCRM Support.

As of the Beta 1 release, we addressed over 140 bugs related to Emails, Email Templates and Inbound Emails. A full listing of the bugs and features addressed in Sugar 5.5.1 Beta 1 can be found in the Bug Tracker.

Additional details about the new and enhanced features can be found in this forum thread and in the Release Notes. The Release Notes will be posted in the Documentation area on sugarcrm.com shortly.

The current plan is to release the first production-ready 5.5.1 Release Candidate early in January 2010. Please check for release schedule updates in this thread.

PHP 5.2 RPMs for Red Hat and CentOS

Wednesday, December 16th, 2009

PHP LogoOne of the new baseline system requirements for SugarCRM 5.5 is that you have one of the 5.2.x versions of PHP installed on your server. This requirement was added to not only simplify our support matrix, but also be able to use some of the newer PHP features to make SugarCRM faster and more stable than before. But this requirement has put an extra burden on systems administrators to upgrade their systems to the newer PHP version. With many Linux distributions this could require manually compiling code, which no sys admin ever wants to have to do.

Fortunately, the folks at Oracle have provided a set of RPMs for free that will upgrade any RHEL (Red Hat Enterprise Linux) 4 or 5 system ( as well as any system based upon RHEL such as CentOS or Oracle Enterprise Linux ) to the latest PHP 5.2 version, ( 5.2.10 as of this writing ). They provide the full set of modules, including the oci8 extension for connecting to Oracle databases, in both 32 and 64 bit versions. They are unsupported by Oracle, but definitely make it much easier to upgrade to PHP 5.2 without manually compiling packages by hand. You can check out the project and download the RPMs at http://oss.oracle.com/projects/php/.

My Multi-Monitor FireFox setup for SugarCRM

Tuesday, December 8th, 2009

After showing this to more than a few SugarCRM users I thought I’d share how I use FireFox and SugarCRM with a wider audience.  For my method, two FireFox add-ons are required as well as two or more monitors.  What I found is that I wanted to have a window open with tabs for all my reports and I didn’t want to open my Editviews and Detailviews in the same window and have to search through my tabs to get back to my reports (or listviews, although I don’t use any of the Listviews anymore, only reports).  I also didn’t want to open a new window for every record either.  What I want to do is to be able to click on a link in my reports window and have that link open up on my “Working” window on another monitor.  That means I can scroll through a report, open up a few links that interest me without losing focus on the report.  I also want some of my reports to auto-refresh so that I can see fresh data every time I go to them, for example my “Open Cases” report, so that when a new case arrives it automatically gets added to the report screen without me having to remember to refresh the page.  I also like to keep a auto-refreshing dashboard open on a third screen but for now lets concentrate on just the two monitors.

The Add-ins for Firefox are:

OpenInWindow 1.2.1 and ReloadEvery 3.5.1

Reload Every 3.5.1ReloadEvery, obviously, is the add-in that adds a menu option to automatically reload a page every so often.  It adds an entry to the context menu that allows you to refresh the page on a schedule that you set up.  I use every 5 minutes and every 30 minutes the most depending on what I am refreshing.  My Case list gets refreshed every 5 minutes and my dashboards get refreshed every 30 minutes.
OpenInWindowOpenInWindow adds an entry to the context menu that allows you to open a link in a different FireFox window.  So I open a window on my second monitor and I send all my work there.  This way the links that I open up to work on never get mixed up with my reports or Listviews.  If a new case comes in I can see it because that window remains visible on my first monitor while I work cases on my second monitor.  Each link I send to the second monitor opens a new tab in that window which is much better than opening up a new window for each new link.  It also beats the heck out of having dozens of tabs open and then havhing to look through them all looking for that case or the root report you work from.

The Cloud is the Next OS

Sunday, December 6th, 2009

Every decade or so, there is a dramatic shift in how people use computers. We’ve seen mainframes cede to personal computers which enable web applications which, in turn, have given rise to RIAs and mobile apps. We are on the cusp of the next revolution.

With all the buzz around cloud computing it is difficult to get at what really matters. Will the Software – with all the bugs and deployment/management headaches – disappear? Will everyone shelve the notion of “deployment“ as an outdated concept from the 20th century? On the contrary, the rush to the Cloud is a dramatic validation that Software is more alive than ever; what has changed is the way we deploy it.

In the last decade we had two options: either deployment was easy but all systems were locked with no customer access (SaaS) or deployment was difficult but the systems were accessible to the customer (local systems).

At Sugar we believe that the decision about deployment- or the lack of thereof- belongs to the customer. We’ve always felt that our customers know how to run their business, and it is part of our job to accommodate. Here at Sugar, we recognize that every customer is unique with unique requirements. We are here to help our customers reach their goals, not to tell them how to run their business.

Cloud technologies are exactly what the doctor ordered to empower our customers. Suddenly the availability of low-cost computing resources has flipped the customer’s deployment decision on its head. An application that is written for the Cloud is truly capable of running anywhere- sometimes even across multiple clouds. Such applications offer the customer an option involving minimal deployment with full access to the customer’s data as if it were deployed locally. These applications are using the Cloud as their operating system. Distributed file systems, memory management, resource rebalancing, asynchronous notification mechanisms can be easily implemented and/or consumed using cloud APIs.

Next week I’ll dig in to the different cloud offerings and how to best utilize them in your applications.

Add a “Jump-to-page” control to SugarCRM

Sunday, December 6th, 2009

Recently I’ve seen more than a few queries about how to add a “Jump-to-page” control to SugarCRM.  Something like what is shown below

"Jump-to-page" Control

"Jump-to-page" Control

This control needs to be dynamic and it should also always know what page that is currently being shown.  I chose a dropdown control for this but you could write some other control like a YUI slider or just a string of numbers like 1 2 3 4 5 6 7.  It would only require a small change to a few lines of my code to use a different control.  I am going to stick to the dropdown for this tutorial however.

For many new programmers, the hardest thing to figure out in a new project is where to put your code.  Some changes can be made in an upgrade safe way, in the custom directory, and some cannot.  To find out which this will be I will first have to find the files that will need to be altered.  First I choose where my new dropdown control will be located.  I chose right beside the pagination controls (the “VCR” buttons).  So I need to find the file where that control is drawn.  The first thing I did was look at the HTML that is in that section.  I pulled up a “View Source” (actually I used a FireFox add-on called “Web Developer” to inspect that section but a view source will do just fine.  When I found the pagination control in the HTML it started like this.

<td class="paginationChangeButtons" nowrap="nowrap" width="1%" align="right">

So from that I use my source code editor (I use Zend Studio 5.5.1 myself) to search all the files in SugarCRM for the phase “paginationChangeButtons”, that search returned one file,  /include/ListView/ListViewPagination.tpl.  Files that end in TPL are smarty templates.  Smarty is the utility that SugarCRM uses to render the HTML on the different screens.  So this template file is the template file that draws the pagination section of a listview page.  Sounds perfect. So that fileis where I am going to put my code.  Now I am not going to go into how smarty works in this blog but basically there is a template and a PHP script that fills that template.  In this template I am going to put a “Smarty Variable”, I will call it $loopNavButtons.  I want to place this variable right before the start button of the pagination control as shown in the image above.  So I find the bit in the code that draws that button and place my variable

<td  nowrap='nowrap' width='1%' align="right" class='paginationChangeButtons'>
 {$loopNavButtons}
{if $pageData.urls.startPage}
 <button type='button' name='listViewStartButton' title='{$navStrings.start}' class='button' {if $prerow}onclick='...
 <img src='{sugar_getimagepath file='start.gif'}' alt='{$navStrings.start}' align='absmiddle' border='0' width='13' height='11'>
 </button>
 {else}
 <button type='button' name='listViewStartButton' title='{$navStrings.start}' class='button' disabled>
 <img src='{sugar_getimagepath file='start_off.gif'}' alt='{$navStrings.start}' align='absmiddle' border='0' width='13' height='11'>
 </button>
 {/if}

After that I need to add the code that will fill in that variable.  That code goes in the file /include/ListView/ListViewSmarty.php.  This is where I find that this modification cannot be made upgrade safe.  The TPL files are loaded from a static path so there is no way to get around having to edit the core files.  Some modifications are just that way.  Anyway moving on….

In ListViewSmarty.php I know I am going to have to calculate the number of pages that the drop down will show.  I have to take the number of records, divide that by the number shown on each screen.  Then I will need to draw my drop down and fill that with the correct number of options.  I will also need to figure out what page I am on already and make that the default selection of the dropdown.  All that code looks like this, I start after all the code needed to do my math around line #106.  The first 10 lines already exist in the file, I show them only for reference.

$this->ss->assign('bgHilite', $hilite_bg);
$this->ss->assign('colCount', count($this->displayColumns) + 1);
$this->ss->assign('htmlVar', strtoupper($htmlVar));
$this->ss->assign('moduleString', $this->moduleString);
$this->ss->assign('editLinkString', $app_strings['LBL_EDIT_BUTTON']);
$this->ss->assign('viewLinkString', $app_strings['LBL_VIEW_BUTTON']);
$this->ss->assign('allLinkString',$app_strings['LBL_LINK_ALL']);
$this->ss->assign('noneLinkString',$app_strings['LBL_LINK_NONE']);
$this->ss->assign('recordsLinkString',$app_strings['LBL_LINK_RECORDS']);
$this->ss->assign('selectLinkString',$app_strings['LBL_LINK_SELECT']);
//kbrill - pagination steps
// Step 1: Do the math
 $tStep=$this->data['pageData']['offsets']['next'] - $this->data['pageData']['offsets']['current'];
 $tPages=$this->data['pageData']['offsets']['end'] / $tStep;
// Step 2: Draw the control with the needed javascript
 $control="<select name=pSteps onChange='return sListView.save_checks(this.options[this.selectedIndex].value , \"{$this->moduleString}\")'>";
 for ($loopNumber=0;$loopNumber<=$tPages;$loopNumber++) {
 $currentPageNumber=$loopNumber*$tStep;
 $loopPageNumber=$loopNumber+1;
 if($this->data['pageData']['offsets']['current']==$currentPageNumber) {
 $selected="SELECTED /";
 } else {
 $selected = "/";
 }
 $control .= "<option value='{$currentPageNumber}' {$selected}>Page {$loopPageNumber}</option>";
 }
 $control .= "</select>";

//Step 3: Render the control
 if($tPages>0) {
 $this->ss->assign('loopNavButtons', $control);
 } else {
 //If there is only one page then dont draw the control
 $this->ss->assign('loopNavButtons', "");
 }

So with that code in place, we run a quick repair to replace the cached smarty template and we are done.

SugarCRM 5.5.0 Generally Available

Wednesday, December 2nd, 2009

SugarCRM 5.5.0 GA

We are excited to announce announce the general availability of version 5.5!

Sugar Community Edition 5.5 GA

Download the Sugar CE 5.5 GA

Install Sugar 5.5 GA, or upgrade your system from a previous version to Sugar 5.5.
Note: If your Sugar database is larger than 1GB, use the Silent Upgrade package to upgrade to Sugar 5.5. Read more about this here.

Sugar Professional & Enterprises Edition 5.5 GA

Sugar 5.5 Professional & Enterprise offers the following new and enhanced features:

Product Features

  • Dynamic Teams: Ability for users to add multiple teams and users to a record to provide extra visibility and enhance collaboration on complex projects without compromising security.
  • Studio for Sugar Mobile: Sugar administrators can now customize the EditView, DetailView, ListView and Search layouts of the Sugar modules appearing in the mobile view.
  • Password Management: P

rovides admins with greater control over how passwords are created and enforced in the system.

Platform Enhancements

  • New Web Services: We are updating our web services API’s to make them easier to retrieve related items and perform better under heavy loads
  • New Themes Framework: We have rewritten how themes are handled in the Sugar platform. Themes will be easier/quicker for developers to create.

The Sugar 5.5 GA release can now be downloaded within the Download Manager.
In addition, over 1900 bugs were fixed in Sugar 5.5! This is our highest-quality, most stable release to date! You can view the bugs that were fixed in Sguar 5.5 within the Bug Tracker.

For further details about this release, please read the Release Notes, which are available within the Download Manager, as well as in the Documentation area of the SugarCRM website.

Thanks to all of you who helped us make Sugar 5.5 a success!

The Definitive Guide to SugarCRM now available

Tuesday, December 1st, 2009

Definitive Guide to SugarCRMThe Definitive Guide to SugarCRM: Better Business Applications is now available in paperback form. This book does an in-depth look at the SugarCRM platform, from the MVC and Metadata frameworks to Web Services, and many bits in between. It then walks the user through customizing SugarCRM out-of-the-box using Studio, Logic Hooks, Workflows, and custom PHP code. It then follows up by showing how to build new functionality on top of Sugar using Module Builder and custom PHP code, and then finishes by showing how to build a complete solution on the platform.

It is a unique book in that it is the first and only official SugarCRM book on the market. Written by myself, John Mertic, it comes with all of the engineering expertise of Sugar, giving developers, IT administrators, systems integrators, and consultants a unique insight into the platform and how to use it to build complete business applications and solutions. It’s a definite must read for anyone here that follows this blog.

You can buy the book from Amazon now, or look for it at your local book retailer.

Have feedback for us? Drop us a line.
Terms & Conditions | Privacy | Trademark Info | Contact Info | FAQs | SugarCRM Inc.© 2004 - 2009 All rights reserved.