Итак, это мое первое знакомство с SuiteCRM или любым другим CRM. Мне нужно запросить базу данных в таблице, которая не используется CRM для нашей системы котировок. Итак, я создал модуль, используя построитель модулей, и изменил файл модуля так, чтобы он использовал правильную таблицу. Проблема заключается в том, что при выполнении запроса SuiteCRM по-прежнему добавляет свои предложения where по умолчанию и добавляет к запросу условие удалено = 0.
Итак, я попытался использовать метод, который описан на эта ТА страница. Это не работает, так как я получаю сообщение об ошибке, что я использую неопределенную переменную (db) и что я вызываю функцию-член fetchByAssoc () для необъекта. Теперь я помещаю код в файл moduleName.php. Может быть, это моя проблема. Я не знаю, поскольку я никогда не работал над любым другим проектом CRM. Если кто-то может указать мне правильное направление относительно того, что мне нужно будет сделать, чтобы иметь возможность запросить другую таблицу, отличную от таблицы CRM по умолчанию, а затем показать результаты этого запроса в дашлете, ваша помощь будет принята с благодарностью. ,
Я исправил ошибки. Они были моей ошибкой, так как я не ссылался на объект.
Итак, по запросу, вот часть моего кода. Это мой php файл.
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
require_once('include/Dashlets/Dashlet.php');
class FrtwQuotesDashlet extends Dashlet {
var $height = '200'; // height of the dashlet
var $quoteData = "";
/**
* Constructor
*
* @global string current language
* @param guid $id id for the current dashlet (assigned from Home module)
* @param array $def options saved for this dashlet
*/
function FrtwQuotesDashlet($id, $def) {
$this->loadLanguage('FrtwQuotesDashlet');
if(!empty($def['height'])) // set a default height if none is set
$this->height = $def['height'];
parent::Dashlet($id); // call parent constructor
$this->isConfigurable = true; // dashlet is configurable
$this->hasScript = false; // dashlet has javascript attached to it
// if no custom title, use default
if(empty($def['title'])) $this->title = $this->dashletStrings['LBL_TITLE'];
else $this->title = $def['title'];
}
/**
* Displays the dashlet
*
* @return string html to display dashlet
*/
function display() {
$sql = "SELECT QuoteNbr, crmname, ShipToCity FROM quotes.quotehdr LIMIT 10";
$result = $GLOBALS["db"]->query($sql);
$quoteData = "<table>";
while($quotes = $GLOBALS["db"]->fetchByAssoc($result)){
foreach ($quotes as $quote) {
$quoteData .="<tr><td>".$quote[0]."</td><td>".$quote[1]."</td><td>".$quote[2]."</td></tr>";
}
}
$ss = new Sugar_Smarty();
//assign variables
//$ss->assign('greeting', $this->dashletStrings['LBL_GREETING']);
$ss->assign('quoteData', $this->quoteData);
$ss->assign('height', $this->height);
$str = $ss->fetch('custom/modules/Home/FrtwQuotesDashlet/FrtwQuotesDashlet.tpl');
return parent::display().$str;
}
}
?>
Проблема была с циклом foreach. Я удалил его, и теперь он работает нормально. При анализе кода цикл while фактически выполняет необходимые итерации. Таким образом, добавляя foreach, получалось, что код перебирал каждую строку, возвращаемую из БД, а затем делал странные вещи — например, он возвращал только частичную строку того, каким должно быть каждое значение. Поскольку я выполняю запросы к 3 полям, он также будет циклически повторяться по каждой строке 3 раза, создавая тем самым 3 разных строки из каждой строки. Итак, для тех, у кого похожая проблема, так выглядит рабочий код.
<?php
if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
require_once('include/Dashlets/Dashlet.php');
class FrtwQuotesDashlet extends Dashlet {
var $height = '200'; // height of the dashlet
var $quoteData = "";
/**
* Constructor
*
* @global string current language
* @param guid $id id for the current dashlet (assigned from Home module)
* @param array $def options saved for this dashlet
*/
function FrtwQuotesDashlet($id, $def) {
$this->loadLanguage('FrtwQuotesDashlet');
if(!empty($def['height']))
$this->height = $def['height'];
parent::Dashlet($id);
$this->isConfigurable = true;
$this->hasScript = false;
// if no custom title, use default
if(empty($def['title'])) $this->title = $this->dashletStrings['LBL_TITLE'];
else $this->title = $def['title'];
}
/**
* Displays the dashlet
*
* @return string html to display dashlet
*/
function display() {
$sql = "SELECT QuoteNbr, revnbr, crmname, ShipToCity FROM quotes.quotehdr LIMIT 10";
$result = $GLOBALS["db"]->query($sql);
$this->quoteData = "Need headers here when we determine exact fields....";
while($quotes = $GLOBALS["db"]->fetchByAssoc($result)){
$this->quoteData .="<tr><td width = \"30%\">".$quotes["QuoteNbr"].' '.$quotes['revnbr']."</td><td width = \"30%\">".$quotes["crmname"]."</td><td width = \"30%\">".$quotes["ShipToCity"]."</td></tr>";
}
$ss = new Sugar_Smarty();
//assign variables
// $ss->assign('greeting', $this->dashletStrings['LBL_GREETING']);
$ss->assign('greeting', "This is the Greeting....");
$ss->assign('quoteData', $this->quoteData);
$ss->assign('height', $this->height);
$str = $ss->fetch('modules/Home/Dashlets/FrtwQuotesDashlet/FrtwQuotesDashlet.tpl');
return parent::display().$str; // return parent::display for title and such
}
}
?>
Других решений пока нет …