Subido por Ronald Martinez

tomando el control de sugar

Anuncio
Tomando el control de Sugar CRM
Autor:
Fecha:
Licencia:
1
Joaquín "Everglades" Sorianello
24/05/2011
Esto son los Everglades
Esto son los Everglades
2
Disclaimer
Disclaimer
Sobre el Contenido
Todo el contenido de esta charla es resultado de investigaciones, suposiciones
y corazonadas sobre como el CRM funciona. Lo único que puedo asegurar es
que el contenido de estos slides permite trabajar de forma mas limpia y agrega
recursos a nuestra caja de herramientas.
Sobre los Slides
Hay mucho código, siéntanse libres de preguntar todo lo que necesiten
3
Elementos de un Módulo
Elementos de un Módulo
Beans
Son los objetos de negocio de la aplicación. En ellos se encuentran y deberían
agregarse, todos los métodos que modifican el Bean.
4
Vistas
Vistas
Nos proveen de distintas formas de visualizar la información
5
Controlador
Controlador
Permite crear acciones, que gobiernan el comportamiento global del Bean
6
Remojando el Bean
Remojando el Bean
Todos los Beans de la aplicación heredan de SugarBean
Algunos métodos útiles para sobreescribir:
• retrieve
recibe un id, y popula el bean con los datos de la DB Útil para agregar
fuentes de datos externas (webservices en nuestro caso)
<?php
function retrieve($id = -1, $encode=true, $deleted=true)
{
$this->webservice = new GcoopRestPlazosFijos();
try {
$this->array_plazosf = $this->webservice->plazos_fijos_array($id);
$this->name = "Plazos Fijos $id";
$this->id = $id;
} catch (Exception $e) {
$this->arrayplazosf = array();
$this->name = 'Ocurrio un Error'.$e->getMessage();
$this->id = 1;
}
return $this;
}
?>
7
Remojando el Bean
• save
actualiza o inserta los datos del Bean actual en la base de datos.
<?php
function save($check_notify=false)
{
if (empty($this->name))
{
$this->name = "Plazo Fijo";
}
return parent::save($check_notify);
?>
8
Descontrolando el controller
Descontrolando el controller
Hay varias formas de definir acciones en SugarCRM La forma mas práctica, y
fácil de definirlo es crear el archivo controller.php en la raíz del modulo.
• Los controllers heredan de SugarController
• Las nuevas acciones se definen con action_NombreAccion
• En la acción podemos crear lógica para definir que vista se debe mostrar
<?php
function action_validar()
{
$this->loadBean();
# Carga el bean, y llama al método validar del mismo
# Si la validación es satisfactoria muestra la vista de confirmación
if ($this->bean->validar())
{
$this->view = 'confirmar';
} else {
$this->view = 'error';
}
$this->bean->save();
}
?>
9
Avistando la Vista
Avistando la Vista
Las Vistas se definen en views/* y tienen nombre de la forma
view.nombrevista.php Las vistas heredan de ViewDetail, ViewEdit, o
SugarView, según el caso
<?php
class ViewConfirmar extends ViewDetail {
function ViewConfirmar() {
parent::ViewDetail();
$this->options['show_header'] = false;
$this->options['show_footer'] = false;
}
function preDisplay() {
$metadataFile = "modules/$this->module/metadata/confirmviewdefs.php";
$this->dv = new DetailView2();
$this->dv->ss =& $this->ss;
$this->dv->setup($this->module, $this->bean, $metadataFile,
'include/DetailView/DetailView.tpl');
}
function display() { //definimos los campos
readfile("modules/$this->module/views/custom_header.html");
parent::display();
readfile("modules/$this->module/views/custom_footer.html");
}
}
10
Avistando la Vista
En este caso, estamos usando una vista similar a un detail view, y definimos su
estructura en el archivo metadata/confirmviewdefs.php
<?php
$module_name = 'gcoop_PlazoFijo';
$viewdefs[$module_name]['DetailView'] = array(
'templateMeta' => array(
'form' => array(
'buttons'=> array('GCOOP_CONFIRM','GCOOP_CANCEL','EDIT',),
'hideAudit'=>true,),
'maxColumns' => '2',
'widths' => array(
array('label' => '10', 'field' => '30'),
array('label' => '10', 'field' => '30'),
),),
'panels' =>array ( 'default' =>
array (
array( 'cuenta_nroCuenta', 'moneda',),
array( 'saldo', 'titulares',),
11
Abotonando los Botones
Abotonando los Botones
En la definición anterior se utilizan los botones GCOOP_CONFIRM
GCOOP_CANCEL
Hay dos formas de definir nuevos botones:
• Usando html custom
<?php
$viewdefs['Accounts']['EditView'] = array(
'templateMeta' => array(
'form' => array(
'buttons'=>array(
'SAVE',
array('customCode'=>
'<input title="{$APP.LBL_CLOSE_AND_CREATE_BUTTON_TITLE}" ' .
' accessKey="{$APP.LBL_CLOSE_AND_CREATE_BUTTON_KEY}" ' .
' class="button" ' .
' onclick="alert(\'hello {$id} \')"; ' .
' type="submit" ' .
' name="button" ' .
' value="{$APP.LBL_CLOSE_AND_CREATE_BUTTON_LABEL}">')
)),
12
y
Abotonando los Botones
Agregamos el caso en el switch en:
include/Smarty/plugins/function.sugar_button.php
En el caso de que sean para Details Views hay que agregar el nombre del
boton en:
include/TemplateHandler/TemplateHandler.php
<?php
case "GCOOP_CONFIRM":
$view=($_REQUEST['action']=='EditView') ? 'EditView' : (($view=='EditView') ? 'EditView':$view);
return '{if $bean->aclAccess("save")}<input title="{$APP.LBL_CONFIRM_BUTTON_TITLE}"
accessKey="{$APP.LBL_SAVE_BUTTON_KEY}"
class="button" onclick="this.form.action.value=\'cerrar\';"
type="submit" name="button" value="{$APP.LBL_CONFIRM_BUTTON_LABEL}">{/if} ';
break;
13
Preguntas
Preguntas
http://www.flickr.com/photos/stu_p/
14
Descargar