Acumatica定制MS SQL MySql

Acumatica定制MS SQL MySql,acumatica,Acumatica,我们面临以下问题。 我们正在MySQL数据库系统下开发定制包。 所有数据库更改都已从“自定义”页面添加到“自定义” 现在,当我们在MS SQL数据库上的系统下发布此定制时,我们得到了与MySQL和MS SQL之间的差异相关的错误。 我已经回顾了Acumatica为数据库更改生成的xml,其中存在一些差异,例如: timestamp设置为从MySQL数据库生成xml时具有默认值 当从MySQL生成xml时,Primary key约束具有名称Primary 我们如何解决这个问题,使我们不必有两个不同

我们面临以下问题。 我们正在MySQL数据库系统下开发定制包。 所有数据库更改都已从“自定义”页面添加到“自定义”

现在,当我们在MS SQL数据库上的系统下发布此定制时,我们得到了与MySQL和MS SQL之间的差异相关的错误。 我已经回顾了Acumatica为数据库更改生成的xml,其中存在一些差异,例如:

  • timestamp设置为从MySQL数据库生成xml时具有默认值
  • 当从MySQL生成xml时,Primary key约束具有名称Primary
  • 我们如何解决这个问题,使我们不必有两个不同的包,一个用于MySQL,另一个用于MS SQL

    以下是Acumatica在MySql中如何为CS属性生成脚本:

      <Sql TableName="csattribute" TableSchemaXml="#CDATA">
      <CDATA name="TableSchemaXml"><![CDATA[<table name="csattribute">
      <col name="CompanyID" type="Int" default="Zero" />
      <col name="AttributeID" type="NVarChar(30)" />
      <col name="Description" type="NVarChar(60)" />
      <col name="ControlType" type="Int" />
      <col name="EntryMask" type="VarChar(60)" nullable="true" />
      <col name="RegExp" type="NVarChar(60)" nullable="true" />
      <col name="List" type="NVarChar(MAX)" nullable="true" />
      <col name="IsInternal" type="Bit" nullable="true" />
      <col name="tstamp" type="Timestamp" default="CurrentDateTime" />
      <col name="CreatedByID" type="UniqueIdentifier" />
      <col name="CreatedByScreenID" type="Char(8)" />
      <col name="CreatedDateTime" type="DateTime" />
      <col name="LastModifiedByID" type="UniqueIdentifier" />
      <col name="LastModifiedByScreenID" type="Char(8)" />
      <col name="LastModifiedDateTime" type="DateTime" />
      <col name="NoteID" type="UniqueIdentifier" />
      <index name="CSAttribute_NoteID">
        <col name="NoteID" />
        <col name="CompanyID" />
      </index>
      <index name="PRIMARY" clustered="true" primary="true" unique="true">
        <col name="AttributeID" />
        <col name="CompanyID" />
      </index>
    </table>]]></CDATA>
    </Sql>
    
    
    ]]>
    
    对于MS SQL,则使用相同的表:

        <Sql TableName="csattribute" TableSchemaXml="#CDATA">
            <CDATA name="TableSchemaXml"><![CDATA[<table name="csattribute">
      <col name="CompanyID" type="Int" default="Zero" />
      <col name="AttributeID" type="NVarChar(30)" />
      <col name="Description" type="NVarChar(60)" />
      <col name="ControlType" type="Int" />
      <col name="EntryMask" type="VarChar(60)" nullable="true" />
      <col name="RegExp" type="NVarChar(60)" nullable="true" />
      <col name="List" type="NVarChar(MAX)" nullable="true" />
      <col name="IsInternal" type="Bit" nullable="true" />
      <col name="tstamp" type="Timestamp"/>
      <col name="CreatedByID" type="UniqueIdentifier" />
      <col name="CreatedByScreenID" type="Char(8)" />
      <col name="CreatedDateTime" type="DateTime" />
      <col name="LastModifiedByID" type="UniqueIdentifier" />
      <col name="LastModifiedByScreenID" type="Char(8)" />
      <col name="LastModifiedDateTime" type="DateTime" />
      <col name="NoteID" type="UniqueIdentifier" />
      <index name="CSAttribute_NoteID">
        <col name="NoteID" />
        <col name="CompanyID" />
      </index>
      <index name="CSAttribute_PK" clustered="true" primary="true" unique="true">
        <col name="CompanyID" />
        <col name="AttributeID" />
      </index>
    </table>]]></CDATA>
        </Sql>
    
    
    ]]>
    
    如果使用以下关键字,您可以在项目中的自定义SQL脚本中指明脚本是否应专门针对MySQL或MS SQL运行

    对于MySQL语句,请使用以下命令:

    --[mssql: Skip]
    --[mysql: Native]
    -- include your MySQL Code here...
    
    --[mssql: Native]
    --[mysql: Skip]
    -- include your MS SQL Code here...
    
    对于MS SQL语句,请使用以下命令:

    --[mssql: Skip]
    --[mysql: Native]
    -- include your MySQL Code here...
    
    --[mssql: Native]
    --[mysql: Skip]
    -- include your MS SQL Code here...
    
    以下sql脚本属性可在Acumatica网站的帮助中找到: 自定义指南>管理项目中的项>数据库脚本>将自定义SQL脚本添加到项目中的步骤()

    此信息基于2017R2。您必须在6.1中测试并确认其使用

    下面是我目前在2017R2中使用的一个示例。请注意在6.1中需要按顺序运行脚本的重要性。您可能必须给脚本命名,使其按特定顺序运行(例如:使用“升级…”最后运行,或使用“升级…”首先运行)。在2017R2中,您可以设置控制执行顺序的优先级值,甚至在编辑脚本窗口中,您也有一个“指定数据库引擎”按钮,该按钮将为您添加属性


    如果使用以下关键字,您可以在项目中的自定义SQL脚本中指明脚本是否应专门针对MySQL或MS SQL运行

    对于MySQL语句,请使用以下命令:

    --[mssql: Skip]
    --[mysql: Native]
    -- include your MySQL Code here...
    
    --[mssql: Native]
    --[mysql: Skip]
    -- include your MS SQL Code here...
    
    对于MS SQL语句,请使用以下命令:

    --[mssql: Skip]
    --[mysql: Native]
    -- include your MySQL Code here...
    
    --[mssql: Native]
    --[mysql: Skip]
    -- include your MS SQL Code here...
    
    以下sql脚本属性可在Acumatica网站的帮助中找到: 自定义指南>管理项目中的项>数据库脚本>将自定义SQL脚本添加到项目中的步骤()

    此信息基于2017R2。您必须在6.1中测试并确认其使用

    下面是我目前在2017R2中使用的一个示例。请注意在6.1中需要按顺序运行脚本的重要性。您可能必须给脚本命名,使其按特定顺序运行(例如:使用“升级…”最后运行,或使用“升级…”首先运行)。在2017R2中,您可以设置控制执行顺序的优先级值,甚至在编辑脚本窗口中,您也有一个“指定数据库引擎”按钮,该按钮将为您添加属性


    该软件包应该是通用的,但是我们使用MSSQL构建软件包,它可以很好地发布MySQL。如果您在MS SQL上构建包,那么在MySQL上运行时会出现相同的错误还是没有错误?你能在你的问题中包括两者之间生成的XML差异吗?@Brendan在使用MS SQL构建包的情况下,我只得到Acumatica 6.1以下版本的自定义SQL脚本(而不是创建表)的错误,因为在该版本中,无法告诉Acumatica是否在MySQL下运行查询。啊,我明白了。我知道在2017R2中有,它可能适用于6.1-我也会发布一个答案,重新阅读你的帖子,你在5.3版中尝试这个吗?如果您使用MS SQL构建脚本,您可以在MySQL中使用它吗?也许计划是使用MS SQL作为基础,并以这种方式部署到我的SQL。我们在5年的《我的SQL》中使用了我们的MS SQL包。3@Brendan不,目前我需要这6.0和更高版本的软件包应该是通用的,但是我们使用MSSQL构建我们的软件包,它可以为MySQL发布。如果您在MS SQL上构建包,那么在MySQL上运行时会出现相同的错误还是没有错误?你能在你的问题中包括两者之间生成的XML差异吗?@Brendan在使用MS SQL构建包的情况下,我只得到Acumatica 6.1以下版本的自定义SQL脚本(而不是创建表)的错误,因为在该版本中,无法告诉Acumatica是否在MySQL下运行查询。啊,我明白了。我知道在2017R2中有,它可能适用于6.1-我也会发布一个答案,重新阅读你的帖子,你在5.3版中尝试这个吗?如果您使用MS SQL构建脚本,您可以在MySQL中使用它吗?也许计划是使用MS SQL作为基础,并以这种方式部署到我的SQL。我们在5年的《我的SQL》中使用了我们的MS SQL包。3@Brendan不,目前我在6.0和更高版本中需要它。如果我做的都正确,我会检查它--[mssql:Skip]不适用于6.10版本。但无论如何,我认为这个答案是正确的。或者,如果您不需要更改列数据类型或与SQL模式相关的内容,您可以直接用C#编写“脚本”,并使用CustomizationPlugin执行数据更新。这是我通常使用的,因为它更容易维护。这对于使用的任何DBMS都是通用的。看,如果我做的都正确,我会检查这个--[mssql:Skip]不适用于6.10版本。但无论如何,我认为这个答案是正确的。或者,如果您不需要更改列数据类型或与SQL模式相关的内容,您可以直接用C#编写“脚本”,并使用CustomizationPlugin执行数据更新。这是我通常使用的,因为它更容易维护。这对于使用的任何DBMS都是通用的。