Php 更改现有字段的定义在其他服务器上不起作用

Php 更改现有字段的定义在其他服务器上不起作用,php,sugarcrm,suitecrm,Php,Sugarcrm,Suitecrm,在此位置suiterm/custom/Extension/modules/Color/Ext/Vardefs/custom\u field\u level\u name.php 为了自定义现有字段定义,我正在尝试以下代码 $dictionary['Color']['fields']['level_name']['type'] = 'varchar'; $dictionary['Color']['fields']['level_name']['len'] = '255'; $dictionary[

在此位置
suiterm/custom/Extension/modules/Color/Ext/Vardefs/custom\u field\u level\u name.php

为了自定义现有字段定义,我正在尝试以下代码

$dictionary['Color']['fields']['level_name']['type'] = 'varchar';
$dictionary['Color']['fields']['level_name']['len'] = '255';
$dictionary['Color']['fields']['level_name']['audited'] = true;
$dictionary['Color']['fields']['level_name']['vname'] = 'LBL_LEVEL_NAME';
这是在本地工作在我的开发pc

但当我部署到生产环境中时,这种定制不起作用。当我修复和重建时,我希望sql脚本将vardef与数据库同步,但没有显示ALTER命令来修改颜色表中的level_name字段。我已经对其他字段执行了此操作,到目前为止没有问题

为什么现有字段定义的自定义在另一台服务器上不起作用

谢谢你的评论

更新

我逐渐了解到,问题与文件
suiterm/custom/modules/Color/Ext/Vardefs/Vardefs.Ext.php的生成方式有关。远程服务器上此文件的内容与本地开发pc上的不同。本地pc中字段中的自定义定义以及文件中修复后的自定义定义
suiterm/custom/modules/Color/Ext/Vardefs/Vardefs.Ext.php
位于文件末尾,因此它会覆盖字段的原始定义。在远程服务器上,自定义定义位于文件的开头,因此它们会被文件的原始定义覆盖

例如,在我的本地文件中,内容的顺序如下

//...

$dictionary['Color']['fields']['level_name'] = array(
    'required' => false,
    'name' => 'level_name',
    'vname' => 'LBL_LEVEL_NAME',
    'type' => 'varchar',
    'massupdate' => 0,
    'no_default' => false,
    'comments' => '',
    'help' => '',
    'importable' => 'true',
    'duplicate_merge' => 'disabled',
    'duplicate_merge_dom_value' => '0',
    'audited' => false,
    'inline_edit' => true,
    'reportable' => true,
    'unified_search' => false,
    'merge_filter' => 'disabled',
    'len' => '255',
    'size' => '20',
);

$dictionary['Color']['fields']['level_name']['type'] = 'varchar';
$dictionary['Color']['fields']['level_name']['len'] = '255';
$dictionary['Color']['fields']['level_name']['audited'] = true;
$dictionary['Color']['fields']['level_name']['vname'] = 'LBL_LEVEL_NAME';

//...
//...

$dictionary['Color']['fields']['level_name']['type'] = 'varchar';
$dictionary['Color']['fields']['level_name']['len'] = '255';
$dictionary['Color']['fields']['level_name']['audited'] = true;
$dictionary['Color']['fields']['level_name']['vname'] = 'LBL_LEVEL_NAME';

$dictionary['Color']['fields']['level_name'] = array(
    'required' => false,
    'name' => 'level_name',
    'vname' => 'LBL_LEVEL_NAME',
    'type' => 'varchar',
    'massupdate' => 0,
    'no_default' => false,
    'comments' => '',
    'help' => '',
    'importable' => 'true',
    'duplicate_merge' => 'disabled',
    'duplicate_merge_dom_value' => '0',
    'audited' => false,
    'inline_edit' => true,
    'reportable' => true,
    'unified_search' => false,
    'merge_filter' => 'disabled',
    'len' => '255',
    'size' => '20',
);

//...
而在遥控器中有这个命令

//...

$dictionary['Color']['fields']['level_name'] = array(
    'required' => false,
    'name' => 'level_name',
    'vname' => 'LBL_LEVEL_NAME',
    'type' => 'varchar',
    'massupdate' => 0,
    'no_default' => false,
    'comments' => '',
    'help' => '',
    'importable' => 'true',
    'duplicate_merge' => 'disabled',
    'duplicate_merge_dom_value' => '0',
    'audited' => false,
    'inline_edit' => true,
    'reportable' => true,
    'unified_search' => false,
    'merge_filter' => 'disabled',
    'len' => '255',
    'size' => '20',
);

$dictionary['Color']['fields']['level_name']['type'] = 'varchar';
$dictionary['Color']['fields']['level_name']['len'] = '255';
$dictionary['Color']['fields']['level_name']['audited'] = true;
$dictionary['Color']['fields']['level_name']['vname'] = 'LBL_LEVEL_NAME';

//...
//...

$dictionary['Color']['fields']['level_name']['type'] = 'varchar';
$dictionary['Color']['fields']['level_name']['len'] = '255';
$dictionary['Color']['fields']['level_name']['audited'] = true;
$dictionary['Color']['fields']['level_name']['vname'] = 'LBL_LEVEL_NAME';

$dictionary['Color']['fields']['level_name'] = array(
    'required' => false,
    'name' => 'level_name',
    'vname' => 'LBL_LEVEL_NAME',
    'type' => 'varchar',
    'massupdate' => 0,
    'no_default' => false,
    'comments' => '',
    'help' => '',
    'importable' => 'true',
    'duplicate_merge' => 'disabled',
    'duplicate_merge_dom_value' => '0',
    'audited' => false,
    'inline_edit' => true,
    'reportable' => true,
    'unified_search' => false,
    'merge_filter' => 'disabled',
    'len' => '255',
    'size' => '20',
);

//...
为了纠正远程服务器上的错误,我删除了文件
suiterm/custom/modules/Color/Ext/Vardefs/Vardefs.Ext.php
,在修复后,我希望订单能够得到纠正,但事实并非如此。我能做些什么来确保自定义定义位于最初定义的定义之后吗

再次感谢您的评论

我们所做的是

  • 始终在两个实例上创建字段,然后与git合并
  • 同步字段\u元数据+更改的文件,然后执行修复和重建
这是SuiteRM/SugarCRM开发的限制之一,您不能只使用代码,一些字段信息存储在
fields\u metadata
表中


有时它只适用于某些类型的字段,老实说,我不知道确切的原因。

您是否使用生产数据库用户检查了您在生产服务器中是否具有数据库权限(ALTER)?感谢您的回答,我正在以根用户身份访问生产数据库,我在其他领域也做了同样的事情,但在本例中,这种情况正在发生。我只是在问题中添加了新的信息。谢谢您的回答。我们使用customizevardef来创建字段或修改字段的定义,从而避免同步字段和元数据。因为定制vardefs的过程不会在字段元数据中创建字段,也不会创建cstm表。澄清一下,关于第一点,始终在两个实例中创建字段,然后与git合并您的意思是在本地(开发人员pc)和生产或测试中创建字段吗?studio中的自定义字段很麻烦,您只需从code.ie中创建字段即可,将您的vardef放入custom/Extension/modules/Leads/Ext/vardefs/any_field.phpyes@user615274,这就是我的意思。对于开发人员来说,从代码创建通常更快,但有些字段不能仅从代码创建,不记得我们在仅包含代码的字段(与API相关的字段)中发现了什么错误,但那是1年前,事情可能已经改变了。