报价、合同、发票和事件模块不存在安全组子面板
Security Group subpanel doesn't exist for quotes, contrats, invoices, and events modules
我正在使用 suiteCRM 7.7.4(Sugar 版本 6.5.24),我需要在报价、合同、发票和事件模块中使用安全组子面板,但由于某些原因我找不到它!我做了一些研究,发现默认情况下自定义模块不会出现此子面板。一些开发人员建议不要使用工作室来建立这种关系,因为它根本行不通!对于 sugarCRM 的付费版本,他们说有一个名为 "hookup tool" 的工具可以为您创建关系...但是由于我使用的是免费版本,所以我不能使用它!
你有什么想法吗?
非常感谢!
按照以下步骤操作:
1.转到Admin
2.转到studio
3. Select 你想要的模块 subpanel
喜欢 "invoices"
4. 转到 relationship
5. 与 Security group
模块的多关系加 1。
6.现在修复重建你会在invoice
模块中找到子apnel。
当您与任何模块创建一对多关系时,它会创建子面板。
如果它不起作用,请转到自定义子面板。
Refer this linnk I put code from same link it worked for me
本教程有望帮助您使用自定义 link class 并由 SugarCRM 7 的新 SugarQuery API.[= 驱动,在 Sugar 的联系人模块下创建一个新的子面板。 30=]
- 新建 link class
这应该进入 custom/modules/<YourModule>/YourNewLink.php
,这个 class 将作为自定义功能,在两条记录之间构建您的 link。
<?php
/**
* Custom filtered link
*/
class YourNewLink extends Link2
{
/**
* DB
*
* @var DBManager
*/
protected $db;
public function __construct($linkName, $bean, $linkDef = false)
{
$this->focus = $bean;
$this->name = $linkName;
$this->db = DBManagerFactory::getInstance();
if (empty($linkDef)) {
$this->def = $bean->field_defs[$linkName];
} else {
$this->def = $linkDef;
}
}
/**
* Returns false if no relationship was found for this link
*
* @return bool
*/
public function loadedSuccesfully()
{
// this link always loads successfully
return true;
}
/**
* @see Link2::getRelatedModuleName()
*/
public function getRelatedModuleName()
{
return '<Your_Module>';
}
/**
*
* @see Link2::buildJoinSugarQuery()
*/
public function buildJoinSugarQuery($sugar_query, $options = array())
{
$joinParams = array('joinType' => isset($options['joinType']) ? $options['joinType'] : 'INNER');
$jta = 'active_other_invites';
if (!empty($options['joinTableAlias'])) {
$jta = $joinParams['alias'] = $options['joinTableAlias'];
}
$sugar_query->joinRaw($this->getCustomJoin($options), $joinParams);
return $sugar_query->join[$jta];
}
/**
* Builds main join subpanel
* @param string $params
* @return string JOIN clause
*/
protected function getCustomJoin($params = array())
{
$bean_id = $this->db->quoted($this->focus->id);
$sql = " INNER JOIN(";
$sql .= "SELECT id FROM accounts WHERE id={$bean_id}"; // This is essentially a select statement that will return a set of ids that you can match with the existing sugar_query
$sql .= ") accounts_result ON accounts_result.id = sugar_query_table.id";
return $sql;
}
}
参数 $sugar_query
是一个新的 SugarQuery object
,其详细信息记录在此处。您基本上需要做的是使用您希望添加的 join/filters 扩展此查询。这是在我指定的内部连接中完成的。
注意:内部连接可能会变得非常复杂,所以如果您想要一个真实的工作示例,请查看 modules/Emails/ArchivedEmailsLink.php
以及核心 sugar 团队如何使用它。不过,我可以确认这确实适用于自定义联接。
这是 getEmailsJoin,可帮助您了解通过此自定义加入实际可以产生什么。
/**
* Builds main join for archived emails
* @param string $params
* @return string JOIN clause
*/
protected function getEmailsJoin($params = array())
{
$bean_id = $this->db->quoted($this->focus->id);
if (!empty($params['join_table_alias'])) {
$table_name = $params['join_table_alias'];
} else {
$table_name = 'emails';
}
return "INNER JOIN (\n".
// directly assigned emails
"select eb.email_id, 'direct' source FROM emails_beans eb where eb.bean_module = '{$this->focus->module_dir}'
AND eb.bean_id = $bean_id AND eb.deleted=0\n" .
" UNION ".
// Related by directly by email
"select DISTINCT eear.email_id, 'relate' source from emails_email_addr_rel eear INNER JOIN email_addr_bean_rel eabr
ON eabr.bean_id = $bean_id AND eabr.bean_module = '{$this->focus->module_dir}' AND
eabr.email_address_id = eear.email_address_id and eabr.deleted=0 where eear.deleted=0\n" .
") email_ids ON $table_name.id=email_ids.email_id ";
}
- 为 link 字段添加一个新的 vardef 条目。
对于此示例,我将在联系人模块上创建自定义 link。所以这段代码进入 custom/Extension/modules/Contacts/Ext/Vardefs/your_field_name.php
<?php
$dictionary["Contact"]["fields"]["your_field_name"] = array(
'name' => 'active_other_invites',
'type' => 'link',
'link_file' => 'custom/modules/<YourModule>/YourNewLink.php',
'link_class' => 'YourNewLink',
'source' => 'non-db',
'vname' => 'LBL_NEW_LINK',
'module' => '<YourModule>',
'link_type' => 'many',
'relationship' => '',
);
- 将新的 link 添加为子面板
这属于 custom/Extension/modules/Contacts/Ext/clients/base/layouts/subpanels/your_subpanel_name.php
<?php
$viewdefs['Contacts']['base']['layout']['subpanels']['components'][] = array (
'layout' => 'subpanel',
'label' => 'LBL_NEW_LINK',
'context' =>
array (
'link' => 'your_field_name',
),
);
- 添加标签
低于
custom/Extension/modules/Contacts/Ext/Language/en_us.new_link.php
<?php
$mod_strings['LBL_ACTIVE_OTHER_INVITES'] = 'Your New Link';
- 快速修复和重建
这应该可以帮助您入门。在调试查询时留意 sugarlogs。我还发现使用 xdebug 和 SugarQueries compileSql 函数对于弄清楚我需要做什么才能获得有效的 INNER JOIN
语句非常有用。
我发现这是一个非常强大的解决方案,这意味着如果您需要显示与可能有几个连接的模块相关的信息,这允许您创建 links手动而不必在两者之间创建毫无意义的相关字段。
我终于找到了解决办法:
将这几行添加到 "modules/AOS_Contracts/metadata/subpaneldefs.php" :
'securitygroups' => array(
'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect'),),
'order' => 900,
'sort_by' => 'name',
'sort_order' => 'asc',
'module' => 'SecurityGroups',
'refresh_page' => 1,
'subpanel_name' => 'default',
'get_subpanel_data' => 'SecurityGroups',
'add_subpanel_data' => 'securitygroup_id',
'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
),
- 方形
- 正在验证权限。
我正在使用 suiteCRM 7.7.4(Sugar 版本 6.5.24),我需要在报价、合同、发票和事件模块中使用安全组子面板,但由于某些原因我找不到它!我做了一些研究,发现默认情况下自定义模块不会出现此子面板。一些开发人员建议不要使用工作室来建立这种关系,因为它根本行不通!对于 sugarCRM 的付费版本,他们说有一个名为 "hookup tool" 的工具可以为您创建关系...但是由于我使用的是免费版本,所以我不能使用它!
你有什么想法吗?
非常感谢!
按照以下步骤操作:
1.转到Admin
2.转到studio
3. Select 你想要的模块 subpanel
喜欢 "invoices"
4. 转到 relationship
5. 与 Security group
模块的多关系加 1。
6.现在修复重建你会在invoice
模块中找到子apnel。
当您与任何模块创建一对多关系时,它会创建子面板。
如果它不起作用,请转到自定义子面板。
Refer this linnk I put code from same link it worked for me
本教程有望帮助您使用自定义 link class 并由 SugarCRM 7 的新 SugarQuery API.[= 驱动,在 Sugar 的联系人模块下创建一个新的子面板。 30=]
- 新建 link class
这应该进入 custom/modules/<YourModule>/YourNewLink.php
,这个 class 将作为自定义功能,在两条记录之间构建您的 link。
<?php
/**
* Custom filtered link
*/
class YourNewLink extends Link2
{
/**
* DB
*
* @var DBManager
*/
protected $db;
public function __construct($linkName, $bean, $linkDef = false)
{
$this->focus = $bean;
$this->name = $linkName;
$this->db = DBManagerFactory::getInstance();
if (empty($linkDef)) {
$this->def = $bean->field_defs[$linkName];
} else {
$this->def = $linkDef;
}
}
/**
* Returns false if no relationship was found for this link
*
* @return bool
*/
public function loadedSuccesfully()
{
// this link always loads successfully
return true;
}
/**
* @see Link2::getRelatedModuleName()
*/
public function getRelatedModuleName()
{
return '<Your_Module>';
}
/**
*
* @see Link2::buildJoinSugarQuery()
*/
public function buildJoinSugarQuery($sugar_query, $options = array())
{
$joinParams = array('joinType' => isset($options['joinType']) ? $options['joinType'] : 'INNER');
$jta = 'active_other_invites';
if (!empty($options['joinTableAlias'])) {
$jta = $joinParams['alias'] = $options['joinTableAlias'];
}
$sugar_query->joinRaw($this->getCustomJoin($options), $joinParams);
return $sugar_query->join[$jta];
}
/**
* Builds main join subpanel
* @param string $params
* @return string JOIN clause
*/
protected function getCustomJoin($params = array())
{
$bean_id = $this->db->quoted($this->focus->id);
$sql = " INNER JOIN(";
$sql .= "SELECT id FROM accounts WHERE id={$bean_id}"; // This is essentially a select statement that will return a set of ids that you can match with the existing sugar_query
$sql .= ") accounts_result ON accounts_result.id = sugar_query_table.id";
return $sql;
}
}
参数 $sugar_query
是一个新的 SugarQuery object
,其详细信息记录在此处。您基本上需要做的是使用您希望添加的 join/filters 扩展此查询。这是在我指定的内部连接中完成的。
注意:内部连接可能会变得非常复杂,所以如果您想要一个真实的工作示例,请查看 modules/Emails/ArchivedEmailsLink.php
以及核心 sugar 团队如何使用它。不过,我可以确认这确实适用于自定义联接。
这是 getEmailsJoin,可帮助您了解通过此自定义加入实际可以产生什么。
/**
* Builds main join for archived emails
* @param string $params
* @return string JOIN clause
*/
protected function getEmailsJoin($params = array())
{
$bean_id = $this->db->quoted($this->focus->id);
if (!empty($params['join_table_alias'])) {
$table_name = $params['join_table_alias'];
} else {
$table_name = 'emails';
}
return "INNER JOIN (\n".
// directly assigned emails
"select eb.email_id, 'direct' source FROM emails_beans eb where eb.bean_module = '{$this->focus->module_dir}'
AND eb.bean_id = $bean_id AND eb.deleted=0\n" .
" UNION ".
// Related by directly by email
"select DISTINCT eear.email_id, 'relate' source from emails_email_addr_rel eear INNER JOIN email_addr_bean_rel eabr
ON eabr.bean_id = $bean_id AND eabr.bean_module = '{$this->focus->module_dir}' AND
eabr.email_address_id = eear.email_address_id and eabr.deleted=0 where eear.deleted=0\n" .
") email_ids ON $table_name.id=email_ids.email_id ";
}
- 为 link 字段添加一个新的 vardef 条目。
对于此示例,我将在联系人模块上创建自定义 link。所以这段代码进入 custom/Extension/modules/Contacts/Ext/Vardefs/your_field_name.php
<?php
$dictionary["Contact"]["fields"]["your_field_name"] = array(
'name' => 'active_other_invites',
'type' => 'link',
'link_file' => 'custom/modules/<YourModule>/YourNewLink.php',
'link_class' => 'YourNewLink',
'source' => 'non-db',
'vname' => 'LBL_NEW_LINK',
'module' => '<YourModule>',
'link_type' => 'many',
'relationship' => '',
);
- 将新的 link 添加为子面板
这属于 custom/Extension/modules/Contacts/Ext/clients/base/layouts/subpanels/your_subpanel_name.php
<?php
$viewdefs['Contacts']['base']['layout']['subpanels']['components'][] = array (
'layout' => 'subpanel',
'label' => 'LBL_NEW_LINK',
'context' =>
array (
'link' => 'your_field_name',
),
);
- 添加标签
低于
custom/Extension/modules/Contacts/Ext/Language/en_us.new_link.php
<?php
$mod_strings['LBL_ACTIVE_OTHER_INVITES'] = 'Your New Link';
- 快速修复和重建
这应该可以帮助您入门。在调试查询时留意 sugarlogs。我还发现使用 xdebug 和 SugarQueries compileSql 函数对于弄清楚我需要做什么才能获得有效的 INNER JOIN
语句非常有用。
我发现这是一个非常强大的解决方案,这意味着如果您需要显示与可能有几个连接的模块相关的信息,这允许您创建 links手动而不必在两者之间创建毫无意义的相关字段。
我终于找到了解决办法:
将这几行添加到 "modules/AOS_Contracts/metadata/subpaneldefs.php" :
'securitygroups' => array(
'top_buttons' => array(array('widget_class' => 'SubPanelTopSelectButton', 'popup_module' => 'SecurityGroups', 'mode' => 'MultiSelect'),),
'order' => 900,
'sort_by' => 'name',
'sort_order' => 'asc',
'module' => 'SecurityGroups',
'refresh_page' => 1,
'subpanel_name' => 'default',
'get_subpanel_data' => 'SecurityGroups',
'add_subpanel_data' => 'securitygroup_id',
'title_key' => 'LBL_SECURITYGROUPS_SUBPANEL_TITLE',
),
- 方形
- 正在验证权限。