如何在模块默认ID字段中添加自动增量适合CRM

时间:2017-04-04 09:23:42

标签: php sugarcrm suitecrm

是否可以在 Suite CRM 中的模块默认ID字段中添加自动增量。 ID字段包含 36 char 类型。

SuiteCRM 中是否有可用的设置选项?

enter image description here

2 个答案:

答案 0 :(得分:1)

根据我的经验,自动填写字段的目标通常是创建一个人性化的ID字段,例如案例ID,报价ID,帐号。这与CRM系统的GUID不同,但两者都是有效的唯一标识符。简单来说,人性化的ID字段更容易与同事沟通(“嘿吉姆,提起帐户1505”比“提起帐户6ccd780c-baba-1026-9564-5b8c656024db”更容易)。

考虑到这一点,这里的目标是完全添加一个新的整数字段,并确保它自动递增。 SugarCRM支持开箱即用的自动递增整数字段,但它是一个代码级别的自定义。这不适用于默认的 id 字段,因为这是一个varchar字段。

让我们看一下专业版的报价字段“报价编号”,

因此,modules/Quotes/vardefs.php

中定义了vardef
<?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>

这显然是黑客攻击,所以你可能不喜欢它,但我已经使用它并且它可以工作。