答案 0 :(得分:1)
根据我的经验,自动填写字段的目标通常是创建一个人性化的ID字段,例如案例ID,报价ID,帐号。这与CRM系统的GUID不同,但两者都是有效的唯一标识符。简单来说,人性化的ID字段更容易与同事沟通(“嘿吉姆,提起帐户1505”比“提起帐户6ccd780c-baba-1026-9564-5b8c656024db”更容易)。
考虑到这一点,这里的目标是完全添加一个新的整数字段,并确保它自动递增。 SugarCRM支持开箱即用的自动递增整数字段,但它是一个代码级别的自定义。这不适用于默认的 id 字段,因为这是一个varchar字段。
让我们看一下专业版的报价字段“报价编号”,
因此,modules/Quotes/vardefs.php
:
<?php
$dictionary['Quote']['fields'][] =
'quote_num' => array(
'name' => 'quote_num',
'vname' => 'LBL_QUOTE_NUM',
'type' => 'int',
'auto_increment' => true,
'readonly' => true,
'required' => true,
'unified_search' => true,
'full_text_search' => array('enabled' => true, 'boost' => 3),
'disable_num_format' => true,
'enable_range_search' => true,
'options' => 'numeric_range_search_dom',
);
vardefs进一步定义了一个索引,用于在数据库级别设置自动增量功能:
<?php
$dictionary['Quote']['indices'][] =
array(
'name' => 'quote_num',
'type' => 'unique',
'fields' => array('quote_num', 'system_id')
);
请注意,自定义字段的索引可能不需要system_id
引用,更常见的是将其定义为'fields' => array('quote_num')
另一个开箱即用的示例位于带有字段case_number
的案例模块中。它还使用了vardef和index定义。
可以将此策略提取到任何开箱即用或自定义模块上的新自定义字段。可以在custom/Extension/modules/MyModule/Ext/Vardefs/customfield.php
中定义字段和索引。请注意,在使用Extension框架时,Studio将在此目录中创建一个字段,如sugarfield_myfield.php
,最好不要在同一文件中定义vardef,因为Studio会覆盖它们。此外,最好不要在Studio中尝试生成的文件中定义冲突,否则将覆盖一个更改或另一个更改。仅在customfield.php
中定义实现目标所需的内容,并格式化数组,使其在执行代码时不会完全重新定义,例如。
$dictionary['Quote']['fields']['quote_num']['auto_increment'] = true;
$dictionary['Quote']['fields']['quote_num']['disable_num_format'] = true;
答案 1 :(得分:0)
我在SuiteCRM中实现自动增量字段的方式如下:
使用SuiteCRM Studio创建TextField
类型的自定义字段。例如,将字段product_number
添加到模块Products
。这将在数据库表product_number_c
中创建字段aos_products_cstm
。该字段应不。
从模块product_number
的EditView中删除新创建的字段Products
。
在您的数据库中,创建表product_number_seq
,其中只有字段id
,这是一个自动增量字段。名称product_number_seq
可以更改为您喜欢的名称。
在表aos_products_cstm
上创建触发器:
CREATE DEFINER=`root`@`localhost` TRIGGER product_number_insert
BEFORE INSERT ON aos_products_cstm
FOR EACH ROW
BEGIN
INSERT INTO product_number_seq VALUES (NULL);
SET NEW.product_number_c = LAST_INSERT_ID();
END
如果执行此操作,则在表aos_products_cstm
上的每次插入之前,触发器将插入表product_number_seq
并提供NULL
作为值,因此下一个int将是插入(因为它是一个自动增量字段)。然后,它会将product_number_c
中插入的记录的字段aos_products_cstm
设置为LAST_INSERT_ID()
的结果 - 这将是最近插入product_number_seq
的值。< / p>
这显然是黑客攻击,所以你可能不喜欢它,但我已经使用它并且它可以工作。