Zurmo CRM

Our Blogs & Activities

Zurmo CRM Project

Today we have completed a Zurmo CRM Project. Having worked extensively on vTiger CRM, new development and customization in Zurmo seemed little complicated when we first started working on Zurmo. But more we are working on it, more we like it. I must appreciate the Zurmo development team for their commitment towards the community and holding a community/developer webcast every week. I will love to see Zurmo CRM growing from here and adding more & better features & modules in the project.

For all first timers, I will strongly suggest to look at following Article which details about setting up Zurmo CRM Development Environment. It will be challenging to do customization, without setting a Development Environment as explained below:


In this post, we thought of sharing a few customizations done by us in Zurmo CRM. We will be very delighted if it helps you:

A. Copy value from one pick list to another pick list while designing Workflow in Zurmo (Workflow Action):

In Zurmo 2.5.5 Workflow Action, one can only select from existing Pick list values of Pick List Field, as shown below. But we wanted to copy value from one picklist to another picklist.


Customization Done:

1. In Zurmo source, modified resolveValueAndSetToModel function in app\protected\modules\workflows\forms\attributes\DropDownWorkflowActionAttributeForm.php file, as shown below:

public function resolveValueAndSetToModel(WorkflowActionProcessingModelAdapter $adapter, $attribute)



if ($this->type == static::TYPE_STATIC)

//Begin Customization
$this->value = $this->resolveValueForMergeTags($this->value, $adapter);
//End Customization
$adapter->getModel()->{$attribute}->value = $this->value;


elseif ($this->type == static::TYPE_DYNAMIC_STEP_FORWARD_OR_BACKWARDS)

if ($adapter->getModel()->{$attribute}->value != null)

$data = unserialize($adapter->getModel()->{$attribute}->data->serializedData);
if (false !== $key = array_search($adapter->getModel()->{$attribute}->value, $data))

$newKey = $key + $this->value;
if (isset($data[$newKey]))

$adapter->getModel()->{$attribute}->value = $data[$newKey];





throw new NotSupportedException();



2. While designing workflow in Zurmo, in action page selected any fixed value (e.g., as per above example we selected Arabic) shown in the drop down for that field and saved the workflow.

3. Now we went to backend Zurmo DB and opened “savedworkflow” table and clicked edit for the workflow record which we saved in above step. We will modify “serializeddata” field for above mentioned workflow. Search of value you selected in above step (step 2) and replace that value with the Merge Tag. In our case we replaced ‘Arabic’ with ‘[[CLIENT^LANG1^CSTM]]’. Another important thing to notice here is that Arabic will have few prefix, as show below:


Here 6 is number of character in word ‘Arabic’. Since we replaced ‘Arabic’ with  ‘[[CLIENT^LANG1^CSTM]]’, we replaced 6 with 21 as there are 21 characters in  ‘[[CLIENT^LANG1^CSTM]]’. So, replaced with following value:


and Save.

Now, your Zurmo is ready such that value in a picklist will get copied from another picklist represented by the Merge Tag. You only need to make sure that the value getting copied in the picklist is already defined as Picklist Values for the field in Zurmo Designer.