SlideShare a Scribd company logo
Intro
• Power Hour
– Developer / Admin Resource
– Promote Successful Implementations
• Ticomix
– SugarCRM “Advanced” Partner
– 2014 Rising Star
– Consulting, Development & Support
– www.ticomixcrm.com
– @TicomixCRM / @TicomixInc
• Webinar Logistics
About Jeff Bickart
• Sugar Developer since version 4.0a
• Director of Engineering of a Voice-Enabled CRM
startup
• Chief Technology Officer, NEPO Systems − SugarCRM
GOLD Partner
• CRM Evangelist, Ticomix
• Contact Information
– @bickart
– www.linkedin.com/in/bickart
Sugar Development 101
Sugar as a Platform
• MVC (Module View Controller)
– Server Side
– Client Side
• ORM (Object Relationship Mapping)
– Beans
– Relationships
• API (Application Programming Interfaces)
– REST
– SOAP
• How and where to add customizations
– Extension Framework
– Logic Hooks
• Debugging tips and techniques
– IDE – Xdebug
– Logging
Development 101
• Directories of Interest
– custom
– cache
– data
– Modules
– include
– vendor
– sidecar
• Where do my changes belong?
– custom
– custom
– custom
– modules
Model, View and Controller (MVC)
SuiteCRM, Sugar 6, Sugar 7 #bwc
• Model
– SugarBeans
• View (Sugar 6 and Sugar 7 #bwc)
– Displaying information to the browser
• Detail View
• Edit View
• List View
– Two parts to a view
• metadata
– Example: custom/modules/Accounts/metadata/editviewdefs.php
• class loader
– Example: custom/modules/Accounts/views/view.edit.php
• Controller
– actions such as
• Display
• Save
• Etc.
Model, View and Controller (MVC)
Sugar 7 (client)
• Model
– Backbone.js
• gives structure to web applications by providing models with key-value binding and custom events,
collections with a rich API of enumerable functions, views with declarative event handling, and
connects it all to your existing API over a RESTful JSON interface.
• View
– Layouts
• Layouts are components which render the overall page. They are used to define the rows, columns,
and fluid layouts that the content is displayed to the user in.
– Views
• Views are components which render data from a context and may or may not include field
components. Example views include not only record and list views but also widgets
• Utilizes HandleBars and Controllers
– Fields
• Fields render widgets for individual values pulled from the models and handle formatting (or
stripping the formatting of) field values. Just like Layouts and Views, Fields also extend Backbone
Views
• Utilizes HandleBars and Controllers
Object Relationship Mapping (ORM)
• Beans
– CRUD (Create, Read, Update, Delete)
– Defined via Variable Definitions (i.e., vardefs) and
Templates
• Relationships
– Are the basis for linking information within the system
Sugar Object Templates
• Basic
– The building blocks needed to communicate with the DB.
– Fields
• id, name, date_entered, date_modified, created_by, modified_user_id, created_by, description, deleted
– Associated Relationships
• Company
– Additional information that pertains to a company; addresses, industry, revenue, etc.
• File
– Addition logic in order to be able to upload and maintain files in a module
• Issue
– This is the basis of cases
• Person
– Additional information as it pertains to a person; first_name, last_name, email addresses, etc.
• Sale
– The building blocks of an Opportunity; amount fields
Object Relational Model
• 99.9% of the time you do NOT need to write SQL!
• If you think that you need SQL you are doing something
WRONG!
• Sugar is Object Oriented
• SugarBean
– Performs all operations with the DB
• Create, Retrieve, Update, Delete
– All Modules extend the SugarBean
– Examples
• Leads -> Person -> Basic -> SugarBean
• Accounts -> Company -> Basic -> SugarBean
• Opportunity -> Sale -> Basic -> SugarBean
SugarBeans
data/SugarBean.php
• SugarBean is a component, that represents persistent
data maintained in a database
• Types
– basic, company, file, issue, person, sale
• Examples
– Accounts, Documents, Cases, Contacts, Opportunities
• Basic SugarBean
– All Beans extend basic which provides the fields:
– id, name, date_entered, date_modified, modified_user_id,
created_by, description, deleted
Vardefs (variable definitions)
• Sugar uses a file based approach to store all of the
information to describe each field as it relates to a module
and how that information should be stored in the DB
• Every module that communicates to the DB will need a
vardefs.php file
– <module>/vardefs.php
– At the end of the file, you must tell Sugar which template to base
your module upon
• if (!class_exists('VardefManager')) {
require_once 'include/SugarObjects/VardefManager.php';
}
VardefManager::createVardef('TCX_Passwords', 'TCX_Passwords',
array('basic', 'team_security', 'assignable'));
Vardefs
Continued
• Quick Repair and Rebuild
– Builds the aggregated version of the Vardefs into
cache/modules/<mymodule>/<MyModule>Vardefs.php
• Sugar uses this file for
– communicating to the DB
– display subpanels
– Join field
– Adding fields to the DB
– Aggregated Version comes From
• modules/<mymodule>/vardefs.php
• Template
– Include/SugarObjects/templates/
• fields_meta_data (fields added via Studio)
• custom/Extension/modules/<mymodule>/Ext/Vardefs
– sugarfield_field_name.php – generated when using Studio
SugarBean
Tips & Tricks
• Obtain a Bean by ID
• $account = BeanFactory::getBean(‘Accounts’, $id);
• $account = BeanFactory::getBean(‘Accounts’, $id,
array(‘disable_row_level_security’ => true));
• Obtain a set of Beans with filter
– Sugar 6
• $account = BeanFactory::newBean(‘Accounts’);
• $results = $accounts->get_list("", "accounts.assigned_user_id = '1'", 0);
– Sugar 7
• $accounts = BeanFactory::newBean('Accounts');
• $query = new SugarQuery();
• $query->from($accounts)->where()->equals('assigned_user_id','1');
• $results = $accounts->fetchFromQuery($query);
SugarBean
Relationships
• $account = BeanFactory::getBean($id);
• Get All Related Objects
– $account->load_relationship(‘contacts’);
– $contactList = $accounts->contacts->getBeans();
– $contactIDs = $accounts->conacts->get();
• Get subset of Related Objects
– Sugar 6
• $contactList = $accounts->get_linked_beans(‘contacts’, ‘Contact’, array(‘date_entered’), 0, 5);
– Sugar 7
• $current = $accounts->contacts->query(
array(
'where' => array(
'lhs_field' => ’type',
'operator' => '=',
'rhs_value' => ’Customer’
)
)
APIs
• Sugar 6
– SOAP
• <sugarcrm>/service/v4_1/soap.php
– REST
• <sugarcrm>/service/v4_1/soap.php
• Sugar 7
– <sugarcrm>/rest/v10
– Documentation
• <sugarcrm/rest/v10/help
Customizations
Sugar 6 Root Directory Structure
• data - This directory contains files related to SugarCRM's Model. You will find information about SugarBean as well as how relationship
are connected to the SugarBean
• examples - In this directory you will find a variety of examples on how to connect external sources into SugarCRM. There is a SOAP
example and some example configurations about
• include -- SugarCRM's framework and 3rd party libraries, except Zend and Xtemplate, used by SugarCRM
• install -- Logic to install SugarCRM. Once installed the files in this directory are unused
• jssource -- Original JavaScript files before they have been minified.
• log4php -- Deprecated logger replaced with include/SugarLogger: SugarCRM no longer uses log4php but the directory remains
• metadata -- This directly contains "join table" definitions. For example the definition of the accounts_contacts table
• ModuleInstall --Utilized by Upgrade Wizard, Module Loader and silentUpgrade to update the SugarCRM environment
• modules -- SugarCRM MVC for each section of the application. Examples include accounts and contacts
• portal -- Customer Portal: This code only works for Sugar Enterprise and Sugar Ultimate
• service -- WebServices are supported from here both REST and SOAP
• soap -- Deprecated version of the SOAP WebService, see the service directory for updated versions
• themes -- User Interface definitions that Sugar supports are located in this directory
• upload -- new location in 6.4. This is where uploaded files will be stored. Prior to 6.4 this directory was under cache
• xtemplate -- A library by PHP Xtemplate that is provided for backward compatibility. SugarCRM now uses the smarty Template Engine.
smarty can be found at include/smarty
• zend -- Portions of the Zend Framework that are used by SugarCRM
• cache -- This directory is used by SugarCRM application to store converted metadata that can be displayed by the SugarCRM application.
Items include screens, and data
• custom --All upgrade safe customization will go into this set of directories. Anything that is in here is safe from SugarCRM upgrade wizard
Sugar 7 Directory Structure
• Ext
– The Extension Framework can now be used from the core of Sugar
including within the core modules. So it is now possible to create
system wide extensions in custom/Ext
• ModuleInstall
• api
• cache
• clients
– Sugar UX code;
– Sugar now supports multiple clients
• base – Standard UX
• portal – Portal UX
– UX Elements such as SugarFields, Layouts, View, Dashlets
• custom
• data
• examples
• include
• install
• jssource
– JavaScript source code
• metadata
• mobile
– Access to mobile view of the product for example:
https://crm.ticomix.com/mobile
• modules
• portal2
– Enterprise portal
• service
• sidecar
– files used by the new UX, sidecar. Document can be found here:
https://jsduck.test.ticomix.net/
• soap
• styleguide
– Files used by the sytleguide available in Sugar
https://crm.ticomix.com/#Styleguide
• themes
• upgrade
• upload
• vendor
– All code not created by sugar has been moved to the vendor directory
which is consistent with composer
Logic Hooks
• Similar in nature to Workflows
• Not limited in functionality
• Examples:
– Communicate with 3rd Party Web Services
– Update data by assignment
– Send Notification(s)
• Location
– Sugar’s documentation doesn’t specify where Logic Hooks should reside.
– Module Logic Hooks
• custom/modules/<module>/LogicHooks - keeps them all together
• Prefer if you have a separate file for each Logic Hook; Easier to update a single file without effecting other Logic
Hooks
– custom/modules/<module>logic_hooks.php
<?php
/ $hook_version = 1;
$hook_array = Array();
$hook_array['after_save'] = Array();
$hook_array['after_save'][] = Array(10, 'Assign Authorize.Net to the
Contact',
'custom/modules/Leads/LogicHooks/UpdateAuthorizeNet.php','UpdateAuthorize
Net', 'addContactToAuthorizeNet');
Logic Hooks
Sugar 6
• Application Hooks
– after_entry_point
– after_ui_footer
– after_ui_frame
– server_round_trip
• Module Hooks
– after_delete
– after_relationship_add
– after_relationship_delete
– after_restore
– after_retrieve
– after_save
– before_delete
– before_relationship_add
– before_relationship_delete
– before_restore
– before_save
– handle_exception
– process_record
• User Hooks
– after_login
– after_logout
– before_logout
– before_login
– login_failed
• Job Queue Hooks
– job_failure
– job_failure_retry
• SNIP Hooks
– after_email_import
– before_email_import
Logic Hooks
Sugar 7
• Application Hooks
– after_entry_point
– after_ui_footer
– after_ui_frame
– server_round_trip
• Module Hooks
– after_delete
– after_relationship_add
– after_relationship_delete
– after_relationship_update
– after_restore
– after_retrieve
– after_save
– before_delete
– before_relationship_add
– before_relationship_delete
– before_restore
– before_save
– handle_exception
– process_record
• User Hooks
– after_load_user
– after_login
– after_logout
– before_logout
– login_failed
• Job Queue Hooks
– job_failure
– job_failure_retry
• SNIP Hooks
– after_email_import
– before_email_import
• API Hooks
– after_routing
– before_api_call
– before_filter
– before_respond
– before_routing.
• Web Logic Hooks
– Web Logic Hooks allow for administrators to post
record and event information to a specified URL
when certain sugar events take place
LogicHook Example
custom/modules/Accounts/logic_hooks.php
$hook_version = 1;
$hook_array = Array();
$hook_array['before_save'] = Array();
$hook_array['before_save'][] =
Array( 100,
'Reassign All Related Records',
'custom/modules/Accounts/ReassignHandler.php',
'ReassignHandler',
'reassignRecords');
Reassign All Related Records
before_save LogicHook
$user = new User();
$user->disable_row_level_security = true;
$user->retrieve($bean->assigned_user_id);
foreach ($bean->field_defs as $field => $info) {
if ($info['type'] == 'link') {
switch ($field) {
default:
$bean->load_relationship($field);
foreach ($bean->$field->getBeans(new $info['bean_name']) as $focus) {
if ($focus->id != "") {
$focus->assigned_user_id = $bean->assigned_user_id;
$focus->team_set_id = $user->team_set_id;
$focus->team_id = $user->default_team;
/* DO NOT SAVE THE EMAIL ADDRESSES */
$focus->in_workflow = true;
$focus->save(false);
}
}
}
}
}
Debuging
Logging
• $GLOBALS[‘log’]->
– fatal
– error
– warn
– info
– debug
• _ppl
Debuging
• xdebug
Future Webinars
Topics Subject to Change
• Future Topics
– Using the SugarJobQueue
– LogicHooks
– Deploying Packages
– Layouts
– Views
– Fields
– Building a Wizard

More Related Content

Viewers also liked

школьные годы чудесные...
школьные годы чудесные...школьные годы чудесные...
школьные годы чудесные...olehka
 
Historia de-la-cultura-china-8540
Historia de-la-cultura-china-8540Historia de-la-cultura-china-8540
Historia de-la-cultura-china-8540
Andres Mana
 
342424
342424342424
342424
shakilmkcl
 
Sociocultural factors (1)
Sociocultural factors (1)Sociocultural factors (1)
Sociocultural factors (1)
Marifer13
 
Tcc genilson 07.06.16 vindo de gustavo com ajuste atual
Tcc genilson 07.06.16 vindo de gustavo com ajuste atualTcc genilson 07.06.16 vindo de gustavo com ajuste atual
Tcc genilson 07.06.16 vindo de gustavo com ajuste atual
Genilson Fagundes Fagundes
 
Puertas y-ventanas-en-madera
Puertas y-ventanas-en-maderaPuertas y-ventanas-en-madera
Puertas y-ventanas-en-madera
Andres Mana
 
Aac
AacAac
Puertas
PuertasPuertas
Puertas
Andres Mana
 
презентация ко дню матери
презентация ко дню материпрезентация ко дню матери
презентация ко дню материolehka
 
芸人を 目指すわけでは ないけれど…(n575)
芸人を 目指すわけでは ないけれど…(n575)芸人を 目指すわけでは ないけれど…(n575)
芸人を 目指すわけでは ないけれど…(n575)
Masataka Kondo
 
海外イベントの可能性を探ろう
海外イベントの可能性を探ろう海外イベントの可能性を探ろう
海外イベントの可能性を探ろう
Masataka Kondo
 

Viewers also liked (11)

школьные годы чудесные...
школьные годы чудесные...школьные годы чудесные...
школьные годы чудесные...
 
Historia de-la-cultura-china-8540
Historia de-la-cultura-china-8540Historia de-la-cultura-china-8540
Historia de-la-cultura-china-8540
 
342424
342424342424
342424
 
Sociocultural factors (1)
Sociocultural factors (1)Sociocultural factors (1)
Sociocultural factors (1)
 
Tcc genilson 07.06.16 vindo de gustavo com ajuste atual
Tcc genilson 07.06.16 vindo de gustavo com ajuste atualTcc genilson 07.06.16 vindo de gustavo com ajuste atual
Tcc genilson 07.06.16 vindo de gustavo com ajuste atual
 
Puertas y-ventanas-en-madera
Puertas y-ventanas-en-maderaPuertas y-ventanas-en-madera
Puertas y-ventanas-en-madera
 
Aac
AacAac
Aac
 
Puertas
PuertasPuertas
Puertas
 
презентация ко дню матери
презентация ко дню материпрезентация ко дню матери
презентация ко дню матери
 
芸人を 目指すわけでは ないけれど…(n575)
芸人を 目指すわけでは ないけれど…(n575)芸人を 目指すわけでは ないけれど…(n575)
芸人を 目指すわけでは ないけれど…(n575)
 
海外イベントの可能性を探ろう
海外イベントの可能性を探ろう海外イベントの可能性を探ろう
海外イベントの可能性を探ろう
 

Similar to June 10th: The SugarCRM Platform

Introduction to CakePHP
Introduction to CakePHPIntroduction to CakePHP
Introduction to CakePHP
mohamedsamirgalal
 
Introduction to CakePHP
Introduction to CakePHPIntroduction to CakePHP
Introduction to CakePHP
mohamedsamirgalal
 
SharePoint 2013 - What's New
SharePoint 2013 - What's NewSharePoint 2013 - What's New
SharePoint 2013 - What's New
AdventosConsulting
 
SilverStripe From a Developer's Perspective
SilverStripe From a Developer's PerspectiveSilverStripe From a Developer's Perspective
SilverStripe From a Developer's Perspective
ajshort
 
SQL Server 2019 Master Data Service
SQL Server 2019 Master Data ServiceSQL Server 2019 Master Data Service
SQL Server 2019 Master Data Service
Kenichiro Nakamura
 
Super Fast Application development with Mura CMS
Super Fast Application development with Mura CMSSuper Fast Application development with Mura CMS
Super Fast Application development with Mura CMS
ColdFusionConference
 
CDMI For Swift
CDMI For SwiftCDMI For Swift
CDMI For Swift
Mark Carlson
 
Real world rm in share point 2013
Real world rm in share point 2013Real world rm in share point 2013
Real world rm in share point 2013
C/D/H Technology Consultants
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Lucidworks
 
Ember - introduction
Ember - introductionEmber - introduction
Ember - introduction
Harikrishnan C
 
Oracle ADF Architecture TV - Design - MDS Infrastructure Decisions
Oracle ADF Architecture TV - Design - MDS Infrastructure DecisionsOracle ADF Architecture TV - Design - MDS Infrastructure Decisions
Oracle ADF Architecture TV - Design - MDS Infrastructure Decisions
Chris Muir
 
Architect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh ArchitectureArchitect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh Architecture
Databricks
 
Drupal: Reusing functionality
Drupal: Reusing functionalityDrupal: Reusing functionality
Drupal: Reusing functionality
Raymond Muilwijk
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
Oleksii Usyk
 
MongoDB Deployment Checklist
MongoDB Deployment ChecklistMongoDB Deployment Checklist
MongoDB Deployment Checklist
MongoDB
 
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USACloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Selvaratnam Uthaiyashankar
 
SplunkLive! Advanced Session
SplunkLive! Advanced SessionSplunkLive! Advanced Session
SplunkLive! Advanced Session
Splunk
 
Alfresco Records Management Tech Talk Live September 2015
Alfresco Records Management Tech Talk Live September 2015Alfresco Records Management Tech Talk Live September 2015
Alfresco Records Management Tech Talk Live September 2015
David Webster
 
CTDA MODS and Islandora XML Forms
CTDA MODS and Islandora XML FormsCTDA MODS and Islandora XML Forms
CTDA MODS and Islandora XML Forms
University of Connecticut Libraries
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructure
harendra_pathak
 

Similar to June 10th: The SugarCRM Platform (20)

Introduction to CakePHP
Introduction to CakePHPIntroduction to CakePHP
Introduction to CakePHP
 
Introduction to CakePHP
Introduction to CakePHPIntroduction to CakePHP
Introduction to CakePHP
 
SharePoint 2013 - What's New
SharePoint 2013 - What's NewSharePoint 2013 - What's New
SharePoint 2013 - What's New
 
SilverStripe From a Developer's Perspective
SilverStripe From a Developer's PerspectiveSilverStripe From a Developer's Perspective
SilverStripe From a Developer's Perspective
 
SQL Server 2019 Master Data Service
SQL Server 2019 Master Data ServiceSQL Server 2019 Master Data Service
SQL Server 2019 Master Data Service
 
Super Fast Application development with Mura CMS
Super Fast Application development with Mura CMSSuper Fast Application development with Mura CMS
Super Fast Application development with Mura CMS
 
CDMI For Swift
CDMI For SwiftCDMI For Swift
CDMI For Swift
 
Real world rm in share point 2013
Real world rm in share point 2013Real world rm in share point 2013
Real world rm in share point 2013
 
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
Challenges of Simple Documents: When Basic isn't so Basic - Cassandra Targett...
 
Ember - introduction
Ember - introductionEmber - introduction
Ember - introduction
 
Oracle ADF Architecture TV - Design - MDS Infrastructure Decisions
Oracle ADF Architecture TV - Design - MDS Infrastructure DecisionsOracle ADF Architecture TV - Design - MDS Infrastructure Decisions
Oracle ADF Architecture TV - Design - MDS Infrastructure Decisions
 
Architect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh ArchitectureArchitect’s Open-Source Guide for a Data Mesh Architecture
Architect’s Open-Source Guide for a Data Mesh Architecture
 
Drupal: Reusing functionality
Drupal: Reusing functionalityDrupal: Reusing functionality
Drupal: Reusing functionality
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
 
MongoDB Deployment Checklist
MongoDB Deployment ChecklistMongoDB Deployment Checklist
MongoDB Deployment Checklist
 
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USACloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
 
SplunkLive! Advanced Session
SplunkLive! Advanced SessionSplunkLive! Advanced Session
SplunkLive! Advanced Session
 
Alfresco Records Management Tech Talk Live September 2015
Alfresco Records Management Tech Talk Live September 2015Alfresco Records Management Tech Talk Live September 2015
Alfresco Records Management Tech Talk Live September 2015
 
CTDA MODS and Islandora XML Forms
CTDA MODS and Islandora XML FormsCTDA MODS and Islandora XML Forms
CTDA MODS and Islandora XML Forms
 
Architectures, Frameworks and Infrastructure
Architectures, Frameworks and InfrastructureArchitectures, Frameworks and Infrastructure
Architectures, Frameworks and Infrastructure
 

Recently uploaded

Business storytelling: key ingredients to a story
Business storytelling: key ingredients to a storyBusiness storytelling: key ingredients to a story
Business storytelling: key ingredients to a story
Alexandra Fulford
 
❼❷⓿❺❻❷❽❷❼❽ Dpboss Matka Result Satta Matka Guessing Satta Fix jodi Kalyan Fin...
❼❷⓿❺❻❷❽❷❼❽ Dpboss Matka Result Satta Matka Guessing Satta Fix jodi Kalyan Fin...❼❷⓿❺❻❷❽❷❼❽ Dpboss Matka Result Satta Matka Guessing Satta Fix jodi Kalyan Fin...
❼❷⓿❺❻❷❽❷❼❽ Dpboss Matka Result Satta Matka Guessing Satta Fix jodi Kalyan Fin...
❼❷⓿❺❻❷❽❷❼❽ Dpboss Kalyan Satta Matka Guessing Matka Result Main Bazar chart
 
一比一原版(QMUE毕业证书)英国爱丁堡玛格丽特女王大学毕业证文凭如何办理
一比一原版(QMUE毕业证书)英国爱丁堡玛格丽特女王大学毕业证文凭如何办理一比一原版(QMUE毕业证书)英国爱丁堡玛格丽特女王大学毕业证文凭如何办理
一比一原版(QMUE毕业证书)英国爱丁堡玛格丽特女王大学毕业证文凭如何办理
taqyea
 
Ellen Burstyn: From Detroit Dreamer to Hollywood Legend | CIO Women Magazine
Ellen Burstyn: From Detroit Dreamer to Hollywood Legend | CIO Women MagazineEllen Burstyn: From Detroit Dreamer to Hollywood Legend | CIO Women Magazine
Ellen Burstyn: From Detroit Dreamer to Hollywood Legend | CIO Women Magazine
CIOWomenMagazine
 
The Steadfast and Reliable Bull: Taurus Zodiac Sign
The Steadfast and Reliable Bull: Taurus Zodiac SignThe Steadfast and Reliable Bull: Taurus Zodiac Sign
The Steadfast and Reliable Bull: Taurus Zodiac Sign
my Pandit
 
TIMES BPO: Business Plan For Startup Industry
TIMES BPO: Business Plan For Startup IndustryTIMES BPO: Business Plan For Startup Industry
TIMES BPO: Business Plan For Startup Industry
timesbpobusiness
 
一比一原版新西兰奥塔哥大学毕业证(otago毕业证)如何办理
一比一原版新西兰奥塔哥大学毕业证(otago毕业证)如何办理一比一原版新西兰奥塔哥大学毕业证(otago毕业证)如何办理
一比一原版新西兰奥塔哥大学毕业证(otago毕业证)如何办理
taqyea
 
The latest Heat Pump Manual from Newentide
The latest Heat Pump Manual from NewentideThe latest Heat Pump Manual from Newentide
The latest Heat Pump Manual from Newentide
JoeYangGreatMachiner
 
Garments ERP Software in Bangladesh _ Pridesys IT Ltd.pdf
Garments ERP Software in Bangladesh _ Pridesys IT Ltd.pdfGarments ERP Software in Bangladesh _ Pridesys IT Ltd.pdf
Garments ERP Software in Bangladesh _ Pridesys IT Ltd.pdf
Pridesys IT Ltd.
 
Anny Serafina Love - Letter of Recommendation by Kellen Harkins, MS.
Anny Serafina Love - Letter of Recommendation by Kellen Harkins, MS.Anny Serafina Love - Letter of Recommendation by Kellen Harkins, MS.
Anny Serafina Love - Letter of Recommendation by Kellen Harkins, MS.
AnnySerafinaLove
 
Pitch Deck Teardown: Kinnect's $250k Angel deck
Pitch Deck Teardown: Kinnect's $250k Angel deckPitch Deck Teardown: Kinnect's $250k Angel deck
Pitch Deck Teardown: Kinnect's $250k Angel deck
HajeJanKamps
 
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Indian Matka
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Indian MatkaDpboss Matka Guessing Satta Matta Matka Kalyan Chart Indian Matka
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Indian Matka
➒➌➎➏➑➐➋➑➐➐Dpboss Matka Guessing Satta Matka Kalyan Chart Indian Matka
 
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Satta Matka
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Satta MatkaDpboss Matka Guessing Satta Matta Matka Kalyan Chart Satta Matka
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Satta Matka
➒➌➎➏➑➐➋➑➐➐Dpboss Matka Guessing Satta Matka Kalyan Chart Indian Matka
 
How to Buy an Engagement Ring.pcffbhfbfghfhptx
How to Buy an Engagement Ring.pcffbhfbfghfhptxHow to Buy an Engagement Ring.pcffbhfbfghfhptx
How to Buy an Engagement Ring.pcffbhfbfghfhptx
Charleston Alexander
 
Sustainable Logistics for Cost Reduction_ IPLTech Electric's Eco-Friendly Tra...
Sustainable Logistics for Cost Reduction_ IPLTech Electric's Eco-Friendly Tra...Sustainable Logistics for Cost Reduction_ IPLTech Electric's Eco-Friendly Tra...
Sustainable Logistics for Cost Reduction_ IPLTech Electric's Eco-Friendly Tra...
IPLTech Electric
 
Innovative Uses of Revit in Urban Planning and Design
Innovative Uses of Revit in Urban Planning and DesignInnovative Uses of Revit in Urban Planning and Design
Innovative Uses of Revit in Urban Planning and Design
Chandresh Chudasama
 
Registered-Establishment-List-in-Uttarakhand-pdf.pdf
Registered-Establishment-List-in-Uttarakhand-pdf.pdfRegistered-Establishment-List-in-Uttarakhand-pdf.pdf
Registered-Establishment-List-in-Uttarakhand-pdf.pdf
dazzjoker
 
Profiles of Iconic Fashion Personalities.pdf
Profiles of Iconic Fashion Personalities.pdfProfiles of Iconic Fashion Personalities.pdf
Profiles of Iconic Fashion Personalities.pdf
TTop Threads
 
Digital Transformation Frameworks: Driving Digital Excellence
Digital Transformation Frameworks: Driving Digital ExcellenceDigital Transformation Frameworks: Driving Digital Excellence
Digital Transformation Frameworks: Driving Digital Excellence
Operational Excellence Consulting
 
Industrial Tech SW: Category Renewal and Creation
Industrial Tech SW:  Category Renewal and CreationIndustrial Tech SW:  Category Renewal and Creation
Industrial Tech SW: Category Renewal and Creation
Christian Dahlen
 

Recently uploaded (20)

Business storytelling: key ingredients to a story
Business storytelling: key ingredients to a storyBusiness storytelling: key ingredients to a story
Business storytelling: key ingredients to a story
 
❼❷⓿❺❻❷❽❷❼❽ Dpboss Matka Result Satta Matka Guessing Satta Fix jodi Kalyan Fin...
❼❷⓿❺❻❷❽❷❼❽ Dpboss Matka Result Satta Matka Guessing Satta Fix jodi Kalyan Fin...❼❷⓿❺❻❷❽❷❼❽ Dpboss Matka Result Satta Matka Guessing Satta Fix jodi Kalyan Fin...
❼❷⓿❺❻❷❽❷❼❽ Dpboss Matka Result Satta Matka Guessing Satta Fix jodi Kalyan Fin...
 
一比一原版(QMUE毕业证书)英国爱丁堡玛格丽特女王大学毕业证文凭如何办理
一比一原版(QMUE毕业证书)英国爱丁堡玛格丽特女王大学毕业证文凭如何办理一比一原版(QMUE毕业证书)英国爱丁堡玛格丽特女王大学毕业证文凭如何办理
一比一原版(QMUE毕业证书)英国爱丁堡玛格丽特女王大学毕业证文凭如何办理
 
Ellen Burstyn: From Detroit Dreamer to Hollywood Legend | CIO Women Magazine
Ellen Burstyn: From Detroit Dreamer to Hollywood Legend | CIO Women MagazineEllen Burstyn: From Detroit Dreamer to Hollywood Legend | CIO Women Magazine
Ellen Burstyn: From Detroit Dreamer to Hollywood Legend | CIO Women Magazine
 
The Steadfast and Reliable Bull: Taurus Zodiac Sign
The Steadfast and Reliable Bull: Taurus Zodiac SignThe Steadfast and Reliable Bull: Taurus Zodiac Sign
The Steadfast and Reliable Bull: Taurus Zodiac Sign
 
TIMES BPO: Business Plan For Startup Industry
TIMES BPO: Business Plan For Startup IndustryTIMES BPO: Business Plan For Startup Industry
TIMES BPO: Business Plan For Startup Industry
 
一比一原版新西兰奥塔哥大学毕业证(otago毕业证)如何办理
一比一原版新西兰奥塔哥大学毕业证(otago毕业证)如何办理一比一原版新西兰奥塔哥大学毕业证(otago毕业证)如何办理
一比一原版新西兰奥塔哥大学毕业证(otago毕业证)如何办理
 
The latest Heat Pump Manual from Newentide
The latest Heat Pump Manual from NewentideThe latest Heat Pump Manual from Newentide
The latest Heat Pump Manual from Newentide
 
Garments ERP Software in Bangladesh _ Pridesys IT Ltd.pdf
Garments ERP Software in Bangladesh _ Pridesys IT Ltd.pdfGarments ERP Software in Bangladesh _ Pridesys IT Ltd.pdf
Garments ERP Software in Bangladesh _ Pridesys IT Ltd.pdf
 
Anny Serafina Love - Letter of Recommendation by Kellen Harkins, MS.
Anny Serafina Love - Letter of Recommendation by Kellen Harkins, MS.Anny Serafina Love - Letter of Recommendation by Kellen Harkins, MS.
Anny Serafina Love - Letter of Recommendation by Kellen Harkins, MS.
 
Pitch Deck Teardown: Kinnect's $250k Angel deck
Pitch Deck Teardown: Kinnect's $250k Angel deckPitch Deck Teardown: Kinnect's $250k Angel deck
Pitch Deck Teardown: Kinnect's $250k Angel deck
 
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Indian Matka
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Indian MatkaDpboss Matka Guessing Satta Matta Matka Kalyan Chart Indian Matka
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Indian Matka
 
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Satta Matka
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Satta MatkaDpboss Matka Guessing Satta Matta Matka Kalyan Chart Satta Matka
Dpboss Matka Guessing Satta Matta Matka Kalyan Chart Satta Matka
 
How to Buy an Engagement Ring.pcffbhfbfghfhptx
How to Buy an Engagement Ring.pcffbhfbfghfhptxHow to Buy an Engagement Ring.pcffbhfbfghfhptx
How to Buy an Engagement Ring.pcffbhfbfghfhptx
 
Sustainable Logistics for Cost Reduction_ IPLTech Electric's Eco-Friendly Tra...
Sustainable Logistics for Cost Reduction_ IPLTech Electric's Eco-Friendly Tra...Sustainable Logistics for Cost Reduction_ IPLTech Electric's Eco-Friendly Tra...
Sustainable Logistics for Cost Reduction_ IPLTech Electric's Eco-Friendly Tra...
 
Innovative Uses of Revit in Urban Planning and Design
Innovative Uses of Revit in Urban Planning and DesignInnovative Uses of Revit in Urban Planning and Design
Innovative Uses of Revit in Urban Planning and Design
 
Registered-Establishment-List-in-Uttarakhand-pdf.pdf
Registered-Establishment-List-in-Uttarakhand-pdf.pdfRegistered-Establishment-List-in-Uttarakhand-pdf.pdf
Registered-Establishment-List-in-Uttarakhand-pdf.pdf
 
Profiles of Iconic Fashion Personalities.pdf
Profiles of Iconic Fashion Personalities.pdfProfiles of Iconic Fashion Personalities.pdf
Profiles of Iconic Fashion Personalities.pdf
 
Digital Transformation Frameworks: Driving Digital Excellence
Digital Transformation Frameworks: Driving Digital ExcellenceDigital Transformation Frameworks: Driving Digital Excellence
Digital Transformation Frameworks: Driving Digital Excellence
 
Industrial Tech SW: Category Renewal and Creation
Industrial Tech SW:  Category Renewal and CreationIndustrial Tech SW:  Category Renewal and Creation
Industrial Tech SW: Category Renewal and Creation
 

June 10th: The SugarCRM Platform

  • 1.
  • 2. Intro • Power Hour – Developer / Admin Resource – Promote Successful Implementations • Ticomix – SugarCRM “Advanced” Partner – 2014 Rising Star – Consulting, Development & Support – www.ticomixcrm.com – @TicomixCRM / @TicomixInc • Webinar Logistics
  • 3. About Jeff Bickart • Sugar Developer since version 4.0a • Director of Engineering of a Voice-Enabled CRM startup • Chief Technology Officer, NEPO Systems − SugarCRM GOLD Partner • CRM Evangelist, Ticomix • Contact Information – @bickart – www.linkedin.com/in/bickart
  • 4. Sugar Development 101 Sugar as a Platform • MVC (Module View Controller) – Server Side – Client Side • ORM (Object Relationship Mapping) – Beans – Relationships • API (Application Programming Interfaces) – REST – SOAP • How and where to add customizations – Extension Framework – Logic Hooks • Debugging tips and techniques – IDE – Xdebug – Logging
  • 5. Development 101 • Directories of Interest – custom – cache – data – Modules – include – vendor – sidecar • Where do my changes belong? – custom – custom – custom – modules
  • 6. Model, View and Controller (MVC) SuiteCRM, Sugar 6, Sugar 7 #bwc • Model – SugarBeans • View (Sugar 6 and Sugar 7 #bwc) – Displaying information to the browser • Detail View • Edit View • List View – Two parts to a view • metadata – Example: custom/modules/Accounts/metadata/editviewdefs.php • class loader – Example: custom/modules/Accounts/views/view.edit.php • Controller – actions such as • Display • Save • Etc.
  • 7. Model, View and Controller (MVC) Sugar 7 (client) • Model – Backbone.js • gives structure to web applications by providing models with key-value binding and custom events, collections with a rich API of enumerable functions, views with declarative event handling, and connects it all to your existing API over a RESTful JSON interface. • View – Layouts • Layouts are components which render the overall page. They are used to define the rows, columns, and fluid layouts that the content is displayed to the user in. – Views • Views are components which render data from a context and may or may not include field components. Example views include not only record and list views but also widgets • Utilizes HandleBars and Controllers – Fields • Fields render widgets for individual values pulled from the models and handle formatting (or stripping the formatting of) field values. Just like Layouts and Views, Fields also extend Backbone Views • Utilizes HandleBars and Controllers
  • 8. Object Relationship Mapping (ORM) • Beans – CRUD (Create, Read, Update, Delete) – Defined via Variable Definitions (i.e., vardefs) and Templates • Relationships – Are the basis for linking information within the system
  • 9. Sugar Object Templates • Basic – The building blocks needed to communicate with the DB. – Fields • id, name, date_entered, date_modified, created_by, modified_user_id, created_by, description, deleted – Associated Relationships • Company – Additional information that pertains to a company; addresses, industry, revenue, etc. • File – Addition logic in order to be able to upload and maintain files in a module • Issue – This is the basis of cases • Person – Additional information as it pertains to a person; first_name, last_name, email addresses, etc. • Sale – The building blocks of an Opportunity; amount fields
  • 10. Object Relational Model • 99.9% of the time you do NOT need to write SQL! • If you think that you need SQL you are doing something WRONG! • Sugar is Object Oriented • SugarBean – Performs all operations with the DB • Create, Retrieve, Update, Delete – All Modules extend the SugarBean – Examples • Leads -> Person -> Basic -> SugarBean • Accounts -> Company -> Basic -> SugarBean • Opportunity -> Sale -> Basic -> SugarBean
  • 11. SugarBeans data/SugarBean.php • SugarBean is a component, that represents persistent data maintained in a database • Types – basic, company, file, issue, person, sale • Examples – Accounts, Documents, Cases, Contacts, Opportunities • Basic SugarBean – All Beans extend basic which provides the fields: – id, name, date_entered, date_modified, modified_user_id, created_by, description, deleted
  • 12. Vardefs (variable definitions) • Sugar uses a file based approach to store all of the information to describe each field as it relates to a module and how that information should be stored in the DB • Every module that communicates to the DB will need a vardefs.php file – <module>/vardefs.php – At the end of the file, you must tell Sugar which template to base your module upon • if (!class_exists('VardefManager')) { require_once 'include/SugarObjects/VardefManager.php'; } VardefManager::createVardef('TCX_Passwords', 'TCX_Passwords', array('basic', 'team_security', 'assignable'));
  • 13. Vardefs Continued • Quick Repair and Rebuild – Builds the aggregated version of the Vardefs into cache/modules/<mymodule>/<MyModule>Vardefs.php • Sugar uses this file for – communicating to the DB – display subpanels – Join field – Adding fields to the DB – Aggregated Version comes From • modules/<mymodule>/vardefs.php • Template – Include/SugarObjects/templates/ • fields_meta_data (fields added via Studio) • custom/Extension/modules/<mymodule>/Ext/Vardefs – sugarfield_field_name.php – generated when using Studio
  • 14. SugarBean Tips & Tricks • Obtain a Bean by ID • $account = BeanFactory::getBean(‘Accounts’, $id); • $account = BeanFactory::getBean(‘Accounts’, $id, array(‘disable_row_level_security’ => true)); • Obtain a set of Beans with filter – Sugar 6 • $account = BeanFactory::newBean(‘Accounts’); • $results = $accounts->get_list("", "accounts.assigned_user_id = '1'", 0); – Sugar 7 • $accounts = BeanFactory::newBean('Accounts'); • $query = new SugarQuery(); • $query->from($accounts)->where()->equals('assigned_user_id','1'); • $results = $accounts->fetchFromQuery($query);
  • 15. SugarBean Relationships • $account = BeanFactory::getBean($id); • Get All Related Objects – $account->load_relationship(‘contacts’); – $contactList = $accounts->contacts->getBeans(); – $contactIDs = $accounts->conacts->get(); • Get subset of Related Objects – Sugar 6 • $contactList = $accounts->get_linked_beans(‘contacts’, ‘Contact’, array(‘date_entered’), 0, 5); – Sugar 7 • $current = $accounts->contacts->query( array( 'where' => array( 'lhs_field' => ’type', 'operator' => '=', 'rhs_value' => ’Customer’ ) )
  • 16. APIs • Sugar 6 – SOAP • <sugarcrm>/service/v4_1/soap.php – REST • <sugarcrm>/service/v4_1/soap.php • Sugar 7 – <sugarcrm>/rest/v10 – Documentation • <sugarcrm/rest/v10/help
  • 18. Sugar 6 Root Directory Structure • data - This directory contains files related to SugarCRM's Model. You will find information about SugarBean as well as how relationship are connected to the SugarBean • examples - In this directory you will find a variety of examples on how to connect external sources into SugarCRM. There is a SOAP example and some example configurations about • include -- SugarCRM's framework and 3rd party libraries, except Zend and Xtemplate, used by SugarCRM • install -- Logic to install SugarCRM. Once installed the files in this directory are unused • jssource -- Original JavaScript files before they have been minified. • log4php -- Deprecated logger replaced with include/SugarLogger: SugarCRM no longer uses log4php but the directory remains • metadata -- This directly contains "join table" definitions. For example the definition of the accounts_contacts table • ModuleInstall --Utilized by Upgrade Wizard, Module Loader and silentUpgrade to update the SugarCRM environment • modules -- SugarCRM MVC for each section of the application. Examples include accounts and contacts • portal -- Customer Portal: This code only works for Sugar Enterprise and Sugar Ultimate • service -- WebServices are supported from here both REST and SOAP • soap -- Deprecated version of the SOAP WebService, see the service directory for updated versions • themes -- User Interface definitions that Sugar supports are located in this directory • upload -- new location in 6.4. This is where uploaded files will be stored. Prior to 6.4 this directory was under cache • xtemplate -- A library by PHP Xtemplate that is provided for backward compatibility. SugarCRM now uses the smarty Template Engine. smarty can be found at include/smarty • zend -- Portions of the Zend Framework that are used by SugarCRM • cache -- This directory is used by SugarCRM application to store converted metadata that can be displayed by the SugarCRM application. Items include screens, and data • custom --All upgrade safe customization will go into this set of directories. Anything that is in here is safe from SugarCRM upgrade wizard
  • 19. Sugar 7 Directory Structure • Ext – The Extension Framework can now be used from the core of Sugar including within the core modules. So it is now possible to create system wide extensions in custom/Ext • ModuleInstall • api • cache • clients – Sugar UX code; – Sugar now supports multiple clients • base – Standard UX • portal – Portal UX – UX Elements such as SugarFields, Layouts, View, Dashlets • custom • data • examples • include • install • jssource – JavaScript source code • metadata • mobile – Access to mobile view of the product for example: https://crm.ticomix.com/mobile • modules • portal2 – Enterprise portal • service • sidecar – files used by the new UX, sidecar. Document can be found here: https://jsduck.test.ticomix.net/ • soap • styleguide – Files used by the sytleguide available in Sugar https://crm.ticomix.com/#Styleguide • themes • upgrade • upload • vendor – All code not created by sugar has been moved to the vendor directory which is consistent with composer
  • 20. Logic Hooks • Similar in nature to Workflows • Not limited in functionality • Examples: – Communicate with 3rd Party Web Services – Update data by assignment – Send Notification(s) • Location – Sugar’s documentation doesn’t specify where Logic Hooks should reside. – Module Logic Hooks • custom/modules/<module>/LogicHooks - keeps them all together • Prefer if you have a separate file for each Logic Hook; Easier to update a single file without effecting other Logic Hooks – custom/modules/<module>logic_hooks.php <?php / $hook_version = 1; $hook_array = Array(); $hook_array['after_save'] = Array(); $hook_array['after_save'][] = Array(10, 'Assign Authorize.Net to the Contact', 'custom/modules/Leads/LogicHooks/UpdateAuthorizeNet.php','UpdateAuthorize Net', 'addContactToAuthorizeNet');
  • 21. Logic Hooks Sugar 6 • Application Hooks – after_entry_point – after_ui_footer – after_ui_frame – server_round_trip • Module Hooks – after_delete – after_relationship_add – after_relationship_delete – after_restore – after_retrieve – after_save – before_delete – before_relationship_add – before_relationship_delete – before_restore – before_save – handle_exception – process_record • User Hooks – after_login – after_logout – before_logout – before_login – login_failed • Job Queue Hooks – job_failure – job_failure_retry • SNIP Hooks – after_email_import – before_email_import
  • 22. Logic Hooks Sugar 7 • Application Hooks – after_entry_point – after_ui_footer – after_ui_frame – server_round_trip • Module Hooks – after_delete – after_relationship_add – after_relationship_delete – after_relationship_update – after_restore – after_retrieve – after_save – before_delete – before_relationship_add – before_relationship_delete – before_restore – before_save – handle_exception – process_record • User Hooks – after_load_user – after_login – after_logout – before_logout – login_failed • Job Queue Hooks – job_failure – job_failure_retry • SNIP Hooks – after_email_import – before_email_import • API Hooks – after_routing – before_api_call – before_filter – before_respond – before_routing. • Web Logic Hooks – Web Logic Hooks allow for administrators to post record and event information to a specified URL when certain sugar events take place
  • 23. LogicHook Example custom/modules/Accounts/logic_hooks.php $hook_version = 1; $hook_array = Array(); $hook_array['before_save'] = Array(); $hook_array['before_save'][] = Array( 100, 'Reassign All Related Records', 'custom/modules/Accounts/ReassignHandler.php', 'ReassignHandler', 'reassignRecords');
  • 24. Reassign All Related Records before_save LogicHook $user = new User(); $user->disable_row_level_security = true; $user->retrieve($bean->assigned_user_id); foreach ($bean->field_defs as $field => $info) { if ($info['type'] == 'link') { switch ($field) { default: $bean->load_relationship($field); foreach ($bean->$field->getBeans(new $info['bean_name']) as $focus) { if ($focus->id != "") { $focus->assigned_user_id = $bean->assigned_user_id; $focus->team_set_id = $user->team_set_id; $focus->team_id = $user->default_team; /* DO NOT SAVE THE EMAIL ADDRESSES */ $focus->in_workflow = true; $focus->save(false); } } } } }
  • 26. Logging • $GLOBALS[‘log’]-> – fatal – error – warn – info – debug • _ppl
  • 28. Future Webinars Topics Subject to Change • Future Topics – Using the SugarJobQueue – LogicHooks – Deploying Packages – Layouts – Views – Fields – Building a Wizard

Editor's Notes

  1. Why – we are experts in the field of SugarCRM and have been doing this for a long time and we recognize that its sometimes challenging to the the support you need, specifically for developers. Given our investment in the Sugar community we think its important to make sure that ALL users of sugar are finding success, deploying solutions that provide true value for your business… That said, we know we have a user group here that have varying technical backgrounds, some of you are admins and some are developers. When initially conceived, this Power Hour was designed with the Developer in mind, but due to the response we’ve received from this, we are considering creating two separate tracks, one for developers and one for admins. Regardless of your position, I would encourage you to stay connected today to get a sense of how these webinars will be conducted moving forward… So, what I’d like to do real quick, is have everyone simply answer this one poll question so we can get a better sense of our demographic. Ticomix was founded in 2000 and has locations and people across the country. We are currently an “Advanced” SugarCRM partner, making us one of the top 20 partners in the North America and we have a relationship with Sugar dating back to 2009. Last year we received the sole “Rising Star” award from Sugar, which demonstrates their confidence in Ticomix to continue to develop as one of the top Sugar providers in the world… We provide a full suite of services ranging from Sugar consulting through to on-going support. So, I know that was brief, but we want to turn this over to Jeff as quickly as possible to try and give you as much value from this hour as possible.. So just a couple of logistics.