65.9K
CodeProject 正在变化。 阅读更多。
Home

Dynamics AX 中的技巧和增强

2012年1月30日

CPOL

22分钟阅读

viewsIcon

150534

downloadIcon

1185

Dynamics AX 中的技巧和增强

引言

本文主要面向熟悉 X++MorphX 的中级 Microsoft Dynamics AX 用户。本文的目标是通过提供 Dynamics AX 中的提示和增强功能来帮助用户。

Microsoft Dynamics AX(以前称为 Axapta)是 Microsoft Dynamics ERP 主要产品之一。Microsoft 在 Microsoft Dynamics 旗下拥有多种产品(如 Navision、Axapta、Great Plains、Solomon、Concorde、销售点、零售管理系统、客户关系管理等),这些产品更适用于小型、中型和大型企业组织。

X++ 是用于构建 Dynamics AX 的语言。 MorphX 是 Microsoft Dynamics AX 中的一个集成开发环境,允许开发人员以图形方式设计 GUI。 MorphX 通过启动 X++ 代码编辑器来访问应用程序中可用的应用程序类。 Microsoft Dynamics AX 提供了一组网站,您可以通过 Web 表单访问数据,这些 Web 表单通过 Microsoft SharePoint Enterprise Portal 统一部署和访问。开发也可以使用 Visual Studio.Net 完成。

路线图

AXRoadmap.jpg

X++

X++ 是一种面向对象编程语言,也称为 OOP 语言。类是方法的集合。子类是使用关键字 extend 从其他类继承的类。在 X++ 中,一个新类只能扩展一个其他类,不支持多重继承。如果扩展一个类,它将继承父类(超类)中的所有方法和变量。子类使您能够将现有代码用于更具体的目的,从而节省设计、开发和测试的时间。要自定义超类的行为,请在子类中覆盖方法。

修饰符

静态修饰符通常用于需要频繁访问的方法的类中。

Final 修饰符将阻止类被覆盖。方法上的 final 修饰符同样不能被子类覆盖。

Abstract 修饰符与 Final 修饰符正好相反。使用抽象类是一种强制继承以使子类使用基类的方式。它阻止使用 new() 声明类。抽象方法必须作为抽象方法被覆盖,并且不能有代码块。抽象方法不能是静态的。

Display Edit 修饰符:通常这些修饰符不存在于其他语言中,它们只属于 X++。这些修饰符用于表单和报告中,以在用户界面中编辑和显示数据。有关更多信息,请参阅此处提供的在线文档:http://msdn.microsoft.com/en-us/library/aa595058.aspx

数据层

Dynamics AX 包含十六个应用程序对象层,其中包含 AOT 中的所有元素。

以下是 Microsoft Dynamics AX 2009 中应用程序对象层的描述

USR – 用户 – 企业内的单个公司或公司可以使用此层进行客户安装特有的自定义。

CUS – 客户 – 公司和业务合作伙伴可以修改其安装并将通用公司特定修改添加到此层。

VAR – 增值经销商 – 业务合作伙伴使用此层,该层没有业务限制,可以添加为其客户完成的任何开发。

BUS – 业务解决方案 – 业务合作伙伴开发并分发垂直和水平解决方案给其他合作伙伴和客户。

SL1-SL2-SL3 – 认证解决方案 – 经过 Microsoft Dynamics 行业解决方案 (MDIS) 计划认证的合作伙伴在 SL 层分发其解决方案。

HFX – 热修复 – Dynamics AX 团队使用 HFX 层提供关键热修复。

GLS – 全球解决方案 – Dynamics AX 全球开发和本地化团队提供了一组 GLS 层,其中包含 Dynamics AX 发布区域的特定国家/地区功能。

SYS – 系统 – 这是最低的模型元素层,也是标准 Dynamics AX 应用程序的位置。只有 Microsoft 才能访问此层中的元素定义。

分层应用程序对象文件(AOD 文件),其中一些已在不同版本的 Microsoft Dynamics AX 中用新前缀重命名,如下图所示。

AX_layers.jpg

Microsoft Dynamics AX 4.0 中的四个层 DIS / DIP / LOS / LOP 在 Microsoft Dynamics AX 2009 中已重命名为 HFX / SL1 / SL2 / SL3

Microsoft Dynamics AX 4.0 中的六个层 DIS / DIP / LOS / LOP / BUS / BUP 在 Microsoft Dynamics AX 2012 中必须重命名为 FPK / FPP / SLN / SLP / ISV / ISP

AX 4.0 层 AX 2009 层 AX 2012 层
axbup.aod axbup.aod axisp.aod
axbus.aod axbus.aod axisv.aod
axlop.aod axsl3.aod axslp.aod
axlos.aod axsl2.aod axsln.aod
axdip.aod axsl1.aod axfpp.aod
axdis.aod axhfx.aod axfpk.aod

Microsoft Dynamics AX 2009 中的六个层 HFX / SL1 / SL2 / SL3 / BUS / BUP 在 Microsoft Dynamics AX 2012 中必须重命名为 FPK / FPP / SLN / SLP / ISV / ISP

模块

有些功能已分离到其他模块。以下是 Microsoft Dynamics AX 2012 中添加的新模块的一些比较。

AX 2009 模块 AX 2012 模块
总账 总账
固定资产(新增)
银行 现金和银行管理
应付账款 应付账款
采购和来源(新增)
应收账款 应收账款
销售和营销(新增)
库存管理 产品信息(新增)
库存和仓库管理
费用管理 差旅和费用管理
生产 生产控制
项目 项目管理和会计
合规性和内部控制(新增)

Microsoft Dynamics AX 2012 的用户界面已更改为更简单和用户友好。

在 Dynamics AX 中添加新维度的修复

SysDimensionAddWizard 类需要一个非常小的修复,以增强 Dynamics AX 4.0 和 Dynamics AX 2009 中的维度功能。Dynamics AX 2012 不需要此修复。

SysDimensionAddWizard 类运行财务维度向导,用于向系统添加新的财务维度。添加维度的数量由 Dynamics AX 许可证密钥控制。请确保您有足够的许可证用于要添加到 Dynamics AX 2009 的维度数量,因为用户定义的维度限制为七个

标准 AX 带有以下三个默认维度

  1. 部门
  2. 成本中心
  3. 目的

在 SysDimensionAddWizard 类中,需要在其 run()versionControlCheckOut() 方法中进行更改。

if 语句下的 run() 方法中添加代码,如下图所示。DimAX1.jpg

将代码添加到 versionControlCheckOut() 方法,如下图所示。

DimAX2.jpg

添加上述代码后,通过添加维度进行测试。

注意:如果您使用 Dynamics AX 2012,则创建用户定义维度没有限制,不需要上述修复和代码更改。

Dynamics AX 2009 中的数据一致性检查框架

一致性检查框架由名称以 "ConsistencyCheck" 结尾的类组成。

Dynamics AX 中的一致性检查仅验证每个模块的预定义表列表。此 ConsistencyCheck 框架是 Dynamics AX 的核心。不幸的是,关于这些主题的在线文档不多。目的是提供有关这些类的一些基本详细信息。

SysConsistencyCheck 类是基类,由不同模块中的几个类扩展。所有扩展它的类都覆盖 run 方法。在其中,它们指定与模块相关的表名,并通过 kernelCheckTablekernelCheckRecords 方法进行检查。有关 SysConsistencyCheck 类及其方法的更多信息,请参阅以下链接的在线文档:http://msdn.microsoft.com/en-us/library/aa674688(v=ax.50).aspx

要运行一致性检查,请转到 基本 > 定期 > 一致性检查

SysConsistencyCheckJob 类有助于运行和调度一致性检查批处理作业。

以下是 Dynamics AX 2009 中的 ConsistencyCheck 类,它们提供了有关类层次结构及其所属配置的信息。

类名 父类 配置密钥
SysConsistencyCheck
SysConsistencyCheckJob
SysSecurityConsistencyCheck
BankConsistencyCheck 银行
CustConsistencyCheck
CustConsistencyCheck_BOE CustConsistencyCheck CustBillOfExchange
CustConsistencyCheck_LinkTable CustConsistencyCheck LogisticsBasic
docuConsistencyCheck
HRConsistencyCheck
EmplConsistencyCheck HRConsistencyCheck
CommissionConsistencyCheck HRConsistencyCheck Commission
InventConsistencyCheck LogisticsBasic
InventConsistencyCheck_Forecast InventConsistencyCheck_Table
InventConsistencyCheck_Journal InventConsistencyCheck LogisticsBasic
InventConsistencyCheck_Onhand InventConsistencyCheck_Table LogisticsBasic
InventConsistencyCheck_Setup InventConsistencyCheck LogisticsBasic
InventConsistencyCheck_Table InventConsistencyCheck LogisticsBasic
InventConsistencyCheck_Trans InventConsistencyCheck_Table
SalesConsistencyCheck SysConsistencyCheck LogisticsBasic
VendConsistencyCheck_LinkTable VendConsistencyCheck LogisticsBasic
ReqConsistencyCheck SysConsistencyCheck Req
JmgConsistencyCheck Jmg
JmgConsistencyCheck_data JmgConsistencyCheck Jmg
JmgConsistencyCheck_job JmgConsistencyCheck JmgJob
JmgConsistencyCheck_pay JmgConsistencyCheck Jmg
JmgConsistencyCheck_setup JmgConsistencyCheck Jmg
LedgerConsistencyCheck LedgerBasic
LedgerBudgetConsistencyCheck LedgerConsistencyCheck LedgerBasicBudget
LedgerConsistencyCheck_Trans LedgerConsistencyCheck LedgerBasic
TaxConsistencyCheck LedgerConsistencyCheck LedgerBasic
CurrencyConsistencyCheck LedgerConsistencyCheck 货币
PrintMgmtConsistencyCheck
BOMconsistencyCheck BOM
BOMConsistencyCheck_Setup BOMconsistencyCheck BOM
BOMconsistencyCheck_Table BOMconsistencyCheck BOM
ProdConsistencyCheck
ProdConsistencyCheck_Journal ProdConsistencyCheck Prod
ProdConsistencyCheck_Table ProdConsistencyCheck Prod
ProdConsistencyCheck_Setup ProdConsistencyCheck Prod
PurchConsistencyCheck Prod
RouteConsistencyCheck ProdRouting
RouteConsistencyCheck_Setup RouteConsistencyCheck ProdRouting
RouteConsistencyCheck_Table RouteConsistencyCheck ProdRouting
ProjConsistencyCheck ProjBasic
ProjConsistencyCheck_Forecast ProjConsistencyCheck ProjBasic
ProjConsistencyCheck_Invoice ProjConsistencyCheck ProjBasic
ProjConsistencyCheck_Journal ProjConsistencyCheck ProjBasic
ProjConsistencyCheck_Setup ProjConsistencyCheck ProjBasic
ProjConsistencyCheck_Table ProjConsistencyCheck ProjBasic
ProjConsistencyCheck_Trans ProjConsistencyCheck ProjBasic
VendConsistencyCheck
VendConsistencyCheck_PN VendConsistencyCheck VendPromissoryNote
WMSConsistencyCheck WMSBasic
WMSConsistencyCheck_BOL WMSConsistencyCheck SalesShipments
WMSConsistencyCheck_Journal WMSConsistencyCheck WMSAdvanced
WMSConsistencyCheck_Location WMSConsistencyCheck WMSBasic
WMSConsistencyCheck_Pallet WMSConsistencyCheck WMSPallet
WMSConsistencyCheck_PickingRoute WMSConsistencyCheck WMSAdvanced
WMSConsistencyCheck_Setup WMSConsistencyCheck WMSBasic
WMSConsistencyCheck_Shipment WMSConsistencyCheck WMSAdvanced
WMSConsistencyCheck_Transport WMSConsistencyCheck WMSPallet
WMSConsistencyCheck_WMSOrder WMSConsistencyCheck WMSAdvanced
WrkCtrConsistencyCheck WrkCtr

这些是上面列表中涵盖的 Dynamics AX 2009 中不同模块的 ConsistencyCheck 框架类。

要了解有关它们所属配置的更多信息,请访问此链接 此处

以下类中的小修复

LedgerConsistencyCheck 类负责验证总账模块。

LedgerConsistencyCheck 在其 run() 方法中检查以下这些表。

表列表

  1. LedgerTable
  2. LedgerJournalTable
  3. LedgerTableAlternative
  4. LedgerTableAlternativeTrans
  5. LedgerParameters
  6. AssetLedgerAccounts (缺失)

AssetLedgerAccounts 表添加到 LedgerConsistencyCheck 类的 run() 方法末尾,如下图所示。账户图表中的固定资产账户持有对“过账配置文件中的固定资产”数据的引用。通过将上述表包含在类中,将有助于检查和提高数据一致性。

AX2.jpg

LedgerConsistencyCheck 类在 AX 2009 中应该如上图所示。

注意 :Dynamics AX 2012 不需要上述修复。

从 X++ 代码执行存储过程

要从 X++ 执行存储过程,请使用 Server 方法,Client 方法没有权限。以下是 Server 方法的代码截图。您不需要任何特殊权限即可执行存储过程。如果使用 Server 方法以外的方法,则会出现“请求类型为 'SqlStatementExecutePermission' 的权限失败”这样的消息。

AX4.jpg

创建一个作业并编写如图像中所示的代码。

在 Dynamics AX 中从 AOT 创建表时,开发人员经常忘记右键单击并保存表,特别是习惯于 SQL Server 的开发人员。如果未在 AOT 中保存,可能会出现列名冲突,最终可能会丢失更改并导致其他问题。

注意:如果在 Dynamics AX 中从 AOT 创建表,则您的表中会添加几个默认列,例如 RECIDRECVERSIONDATAAREAID 等。请确保包含并将值插入这些字段。

使用 ODBC 连接从 X++ 代码执行外部数据库存储过程

这旨在展示一种从 X++ 代码执行外部数据库存储过程的方法。在 AOT 中使用以下代码创建一个作业。按照代码中解释的步骤操作,例如替换服务器名称、数据库名称、存储过程名称。以下代码通过 ODBC 连接执行。

static void execExternalDatabase(Args _args)
{
    LoginProperty loginProperty;
    ODBCConnection odbcConnection;
    Statement statement;
    ResultSet resultSet;
    ResultSetMetaData resultSetMetaData;
    Counter counter;
    str sql;
    SqlStatementExecutePermission perm;
    ;

    loginProperty = new LoginProperty();
    loginProperty.setServer("SERVERNAME Here"); // Replace your Database Server Name here

    loginProperty.setDatabase("DemoDB"); //Replace your Database name here
     
    odbcConnection = new ODBCConnection(loginProperty); // setting odbc connection here.

     // ODBC Connection to create Statement
     statement = odbcConnection.createStatement();

    // Replace the StoredProcedure you want to execute.
    sql = strfmt('EXEC [myStoredProcedureName]');

    // Set code access permission to Execute
    perm = new SqlStatementExecutePermission(sql);
    perm.assert();

    try
    {
    // if Stored Procedure has Select query use executeQuery method.
       resultSet = statement.executeQuery(sql);
       resultSet.next();
       resultSetMetaData = resultSet.getMetaData();
        for (counter=1; counter <= resultSetMetaData.getColumnCount(); counter++)
        {
            switch (resultSetMetaData.getColumnType(counter))
            {
            case 0,1 :
            info(resultSet.getString(counter));
            break;
            case 3 :
            info(date2StrUsr(resultSet.getdate(counter)));
            break;
            }
        }
    }
    catch (exception::Error)
    {
        print "An error occured in the query.";
        pause;
    }

    // Code access permission scope ends here.
    CodeAccessPermission::revertAssert();
   }  

在存储过程中使用一个简单的选择查询,结果将显示在 infolog 中。

更改对象 ID

在将 .XPO 文件从 DEV 导出/导入到另一个环境(如 QA)时,Dynamics AX 中的对象 ID 有时可能会冲突。然后会提示消息,例如此对象 ID 已被使用,并在 infolog 中抛出错误。它不会导入某些对象。以下是导入表时显示错误和警告的示例。

ImportErrors.jpg

创建对象(如表和类)时,Dynamics AX 会自动为每个对象分配一个 ID。用户认为 ID 无法更改,但也可以通过编辑 .XPO 文件并使用查找和 全部替换 来更改,以便在所有引用使用的地方,现有 ID 号将被新 ID 号替换。它基本上会更改 XPO 文件中的 IDUTILOBJECTID。手动过程有时可能会导致问题。最好的方法是让 Dynamics AX 处理它。

ChangeID.jpg

导入 XPO 文件时,请取消选中导入 ID 值”,并在选项下选择为具有更改 ID 的表启用数据恢复”,如上图所示。Dynamics AX 会自动分配新的 ID。它会自动同步对象。此过程在导入与项目相关的多个 XPO 文件时变得容易。很少情况下,您可能会遇到一些警告,这可以通过调查解决。

直接在 X++ 中使用 .NET 框架

这为具有 .Net Framework 知识的开发人员提供了便利。他们可以直接在 X++ 中使用它们来增强 Dynamics AX 中的自定义功能。

static void main(Args args)
{
//  System.DateTime is from .Net Framework
//  This is a sample to show how the Framework can be used along with X++ coding.

    System.DateTime     now;
    str                 getDateStr;
    ;
    
    now = System.DateTime::get_Now();
    getDateStr = now.ToString();
    info("It is now : "+getDateStr);
}  

开发人员还可以开发和使用在 Visual Studio 2008 中设计的自定义 DLL。为了使用自定义 DLL,应将其复制到 Dynamics AX 安装路径“Client\Bin”文件夹中。在 Dynamics AX 中添加对这些自定义 DLL 的引用后,您就可以在 X++ 中使用它们了。部署新 .Net DLL 的默认路径如下:

[驱动器]:\Program Files\Microsoft Dynamics AX\50\Client\Bin

注意:Dynamics AX 2012 仅支持更高版本的 Visual Studio 2010 和 .Net Framework 4.0。

数据迁移

Dynamics AX 中的 SystemSequences 有助于为每张表的 RECID 分配不同的数字集。

Dynamics AX 中有几种数据迁移方法。我注意到内存、性能和故障排除方面存在一些问题,因为通常 Dynamics AX 中的内存由 Kernel(Windows 系统 DLL)管理。

有一些迁移工具也有助于迁移,毫无疑问它们非常棒。但开发人员仍然可以在不使用任何第三方工具的情况下迁移数据。这可以通过仅使用 SSIS 2005/2008 来实现。这是一个非常强大的 ETL 工具,Microsoft 已经提供。开发人员只需要知道一些处理 RECID 的技巧,然后就可以轻松地从任何源数据库中提取数据并迁移到 Dynamics AX 目标数据库。开发人员需要创建表的 RECID 号并将其与 SystemSequences 中的 NEXTVAL 同步。

以下是示例 T-SQL 代码,用于了解特定表的下一个 RECID 号。表的 ID 可以从表属性中识别。

--The below TSQL code will help to know the next RECID number for a Particular table.

DECLARE @TableIdNumber varchar(150) 
SET @TableIdNumber = 1   -- This ID Number belongs to [Address] table and is provided as a sample.

Select Convert(Varchar(50),NextVal) NextRecID from SystemSequences where name = 'SeqNo' and tabid = @TableIdNumber   

上面 Excel 表中提供了一些 ID 列表。在 SQL Server 中测试上述代码。

注意 :Dynamics AX 2012 仅支持 SQL Server 2008。

以下这些表非常重要,因为它们并非特定于一个模块。整个 Dynamics AX 都依赖于这些表,并且它们用于每个模块。

VendGroup 表包含所有供应商组的定义。

VendTable 表包含应付账款的供应商信息。

CustGroup 表包含所有客户组的定义。

CustTable 表包含应收账款和客户关系管理系统的客户列表。

DirPartyTable 包含客户、供应商等的所有地址,这也被称为 全局地址簿

DirPartyTable 包含全局地址簿中的所有条目。全局地址簿存储系统中使用的所有人员和组织信息。

代理

创建并生成代理以在 Enterprise Portal 中调用 X++ 类和方法。此功能有助于为 Visual Studio Web 应用程序项目提供可用的 X++ 代码资源。Enterprise Portal 提供了一些预定义代理。

AX11.jpg

代理可以在开发网站的根目录中找到。(例如,[驱动器]:\ Intepub\wwwroot\wss\VirtualDirectories\80\App_code\Proxies\)

在 AOT 的 [Web]-[Web Files]-[Static Files]-[Proxies] 节点下,您可以查看所有代理。

要提供对类的访问,请在编辑器中提及类和方法名称,如上所示。下面提供了一个示例。

/ Class:[SampleClassName]

/[method:MethodName]

添加后,您需要生成代理,现在转到 [工具]-[Web 开发]-[代理] 并单击生成代理。您将看到新类已添加到代理节点,并且一个类已添加到根目录。

要在 C# 中使用代理类,需要使用以下程序集

using Microsoft.Dynamics.BusinessConnectorNet;  

跟踪

跟踪功能允许用户识别耗时的 SQL 查询、事务以及在 AOS 上执行的不同代码。可以测量性能,并识别和避免不必要的负载和进程。

AX10.jpg

RPC 到服务器的往返行程:这允许用户跟踪从客户端到服务器的所有 RPC 往返行程。

X++ 方法:此调用跟踪服务器上调用的所有 X++ 方法。

嵌套调用数量:将跟踪限制为指定数量的嵌套方法调用。

函数调用:允许用户跟踪服务器上调用的所有函数调用。

SQL 语句:允许用户跟踪服务器上调用的所有 SQL Server 语句。

绑定变量:允许用户跟踪所有用作输入绑定变量的列。

行获取:允许用户跟踪使用 SQL Server 获取的所有行

行获取摘要(计数和时间):计算所有获取的行,并记录获取所花费的时间

连接和断开连接:此选项跟踪 AOS 每次连接和断开与数据库的连接。

事务:ttsBegin、ttsCommit、ttsAbort 此选项允许跟踪所有使用 TTSBegin、TTSCommit 和 TTSAbort 语句的事务。

Tom Stumpf 在以下链接中提供了关于跟踪的详细解释:http://blogs.msdn.com/b/axinthefield/archive/2011/03/25/dynamics-ax-tracing-part-1.aspx http://blogs.msdn.com/b/axinthefield/archive/2011/03/25/dynamics-ax-tracing-part-2.aspx

Microsoft Dynamics 性能分析器

Dynamics 的性能分析器是一个工具,它从多个数据管理视图 (DMV) 收集数据,并能够

  • 调查阻塞
  • 调查 SQL 语句
  • 调查索引
  • 调查 SQL Server 配置

有关此工具的更多信息,请访问此网站:http://archive.msdn.microsoft.com/DynamicsPerf

代码分析器

代码分析器用于计算 X++ 代码执行时间和数据库活动时间。当您启动分析器并在执行后停止时,信息将与 RunID 一起存储在数据库中。当您单击分析器运行时,它将显示所有 RunID 和已执行的任务。

cp1.jpg

为了避免不必要的任务干扰,只想将其用于特殊任务,可以使用以下代码。要执行此示例代码,请更改表名和列名。

// This is a sample to show how to use code profiler for a specific user task.
static void execCodeProfiler(Args _args)
{
// replace YourTableName with Original Table Name
    YourTableName tableName; 
    Counter counter;
    ;

// profile start point.
#profileBegin("Test of profiler")
    while select tableName
    {
    // replace ColumnName with the Orginal Column Name
    info(strFmt("Table name: %1", tableName.ColumnName)); 
    counter++;
    if (counter >= 10)
    break;
    }
#profileEnd
// profile stop point.

} 

现在您可以在分析器运行屏幕中看到运行 ID 和其他信息,基本上这种场景用于通过多次运行和检查持续时间结果来检查对象的性能。

cp.jpg

Kerberos 协议

Kerberos 是一种网络身份验证协议。如果没有设置 Kerberos 身份验证,SSAS 报告和 SSRS 报告将无法在企业门户中加载。

要验证 Kerberos 身份验证是否已正确设置,请使用以下命令。

setspn –L <account name>   

要验证 HTTP 服务是否配置正确,请使用以下命令

setspn –L domain\bcproxy 

如果结果指向正确的服务器,则 SPN 已为 HTTP 服务正确配置。

在所有 .odc 文件中,必须存在以下值。

SSPI=Kerberos; 

注意 :Kerberos 身份验证已在 Dynamics AX 2012 中弃用。

报告

以下链接提供了大约 30 个关于使用 VisualStudio.Net 创建 .moxl 报告的视频演示

http://blogs.msdn.com/b/dynamicsaxbi/archive/2010/12/01/ax-ssrs-reporting-screencast-list.aspx

注意 :经典的 MorphX 报告和 .moxl 报告在 AX 2012 中已弃用

Sharepoint 页面的故障排除

当您知道 SharePoint 页面抛出什么类型的错误时,就可以处理这些问题。通常,消息会关闭,不向最终用户显示。

要检查 SharePoint 2007 的以下路径下的日志文件。

[驱动器]:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\LOGS

sp2007.gif

上图是 SharePoint 2007 发生错误时的示例。

SharePoint 2010 的日志文件位于以下路径下。

[驱动器]:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\LOGS

sp2010.png

上图是 SharePoint 2010 发生错误时的示例。

在网页上显示错误消息的步骤。

打开位于“ [驱动器]: \inetpub\wwwroot\wss\VirtualDirectories\80\web.config”的相应 Web 应用程序的 web.config 文件,并更改以下值。

只需完全关闭自定义错误模式

<customerrors mode="Off" />  ' Add under system.web  

将调试设置为 true。

<compilation batch="false" debug="true" optimizeCompilations="true"> 

将 CallStack 设置为 true

<SafeMode MaxControls="200" CallStack="true" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false">   

进行更改后,重置 IIS 以反映所做的更改。现在您应该会在网页上看到错误消息。在识别问题后,修复问题会变得容易。

修复问题后,将上述值设置改回。

测试

使用 Microsoft Visual Studio,我们可以对 Dynamics AX 进行压力和性能测试,有一个负载测试软件可用,称为 Microsoft Dynamics AX 应用程序基准测试工具包。有几种场景以及示例测试用例。源代码完全使用 C# 开发。

ABMToolkit1.jpg

上图是 Visual Studio 2008 解决方案资源管理器中显示不同场景的示例。负载测试软件可以从以下网站下载,需要设置和运行某些参数。 http://benchmarktoolkit.codeplex.com/

Dynamics AX 问题解决 – 快速检查清单

有时,在开发过程中,AX 无法按预期工作,或者行为异常。

如果您没有其他办法,可以尝试以下一些方法。

尝试重现: 您可能已经做过了,但请确保您可以重现问题。如果只发生一次,那就不是问题。

再次检查您的代码:仔细检查您的代码是否存在错误,也许可以征求同事的意见。

编译: 您的项目可能包含编译错误,因此请编译以确保。

关闭调试器:有时,当调试器处于活动状态时,AX 会继续执行“旧”代码。关闭调试器以确保执行最新代码。

向前编译:当您修改了被其他类继承的类时,您可能希望向前编译此类。

同步数据字典:您可能已经对尚未与数据库同步的应用程序对象进行了更改。打开 AOT,右键单击数据字典节点并选择同步。

重启 AX 客户端: 就这么简单,关闭 AX 客户端并重新启动它。

重置使用数据:转到选项屏幕(AX 按钮 > 额外 > 选项),然后单击使用数据按钮。单击重置以删除此数据。

检查应用程序事件日志以获取线索: 打开 AOS 上的事件查看器,查看 AOS 服务是否在其中记录了某些内容。此处的日志消息可以为您提供很大帮助。您还可以检查数据库服务器或客户端电脑上的事件日志。

使用互联网搜索引擎:如果您收到错误,只需将其复制并粘贴到互联网搜索引擎中。很可能您不是唯一遇到该问题的人。

检查您的 AX 客户端版本: 例如,您可能正在使用 SP0 客户端连接到 SP1 应用程序。您可以在“关于”屏幕中检查此信息:AX 按钮 > 帮助 > 关于。内核版本表示客户端版本,其下方是应用程序版本。

刷新 AOD、字典和数据: 您可以使用“工具”>“开发工具”菜单中的三个选项刷新缓存信息:刷新 AOD、刷新字典和刷新数据。这在您刚刚导入 XPO 文件或为企业门户开发时非常有用。

删除 AUC 文件:应用程序 Unicode 对象缓存文件(如果存在)位于 XP 系统的 [DRIVE]:\Documents and Settings\[USERNAME]\Local Settings\Application Data,或 Vista 系统的 [DRIVE]:\Users\USERNAME\AppData\Local。在 AX 客户端关闭时删除此文件。

检查其他用户是否遇到相同问题: 了解您是否是唯一遇到该问题的人,或者这是否是一个普遍问题,是解决问题的一大步。例如,如果只有您遇到问题,重新启动 AOS 可能无法解决问题,但删除使用数据可能会。

检查安全设置: 如果只有某些用户有问题,很可能是与安全设置有关。安全设置可以在“管理”>“设置”>“安全”的“权限”选项卡中进行设置。

检查配置密钥设置: Dynamics AX 的某些功能在禁用配置密钥时无法工作,请注意这一点。

完全编译:打开 AOT,右键单击 AOT 节点并选择编译。

重启 AOS: 有时重启 AOS 可以很好地解决您的问题。如果可以的话,值得一试,因为这不需要很长时间。

删除 .aoi 文件: 当 AOS 停止时,您可以从应用程序文件中删除 .aoi 文件。此文件将在 AOS 启动时重建。

检查日志文件: 有一些日志非常重要。

  • AIF 异常日志
  • Windows 事件日志
  • 端点日志

AIF 异常日志可以在 Dynamics AX 中通过以下路径访问:

基本 | 定期 | 应用程序集成框架 | 异常

包含客户端跟踪的文件位于 客户端日志 目录中。在默认配置中,它设置为:

[驱动器]:\Users\Public\Microsoft\Dynamics Ax\Log\

[驱动器]:\Document and Settings\All Users\Microsoft\Dynamics Ax\Log\

[驱动器]:\Program Files\Microsoft Dynamics AX\6.0\Client\Bin\DynamicsInfologTrace.log

结论

Dynamics AX 2009 和 Dynamics AX 2012 在模块、用户界面、报告和许多其他功能方面存在差异。X++ MorphX 报告已完全弃用并推荐使用 SSRS,BizTalk 适配器已弃用并由符合 WCF 的服务取代。作为开发人员,我看到的是使用 Visual Studio.Net 进行开发在 MS Dynamics AX 2012 中最终增加了。本文的目标是提供一些有用的提示并帮助开发人员,并鼓励新手熟悉 Dynamics AX。

其他来源可能也有类似的作品。但是,本文的目的是讨论 Dynamics AX 版本中的提示、解决方案和一些差异。据我们所知,没有发现匹配/引用的类似作品。

参考文献

http://benchmarktoolkit.codeplex.com/

http://www.artofcreation.be/2009/05/13/problem-solving-in-ax/

http://blogs.msdn.com/b/palle_agermark/archive/2007/01/11/missing-datatype-in-the-fincancial-dimension-wizard.aspx

http://blogs.msdn.com/b/axinthefield/archive/2011/03/25/dynamics-ax-tracing-part-1.aspx

http://blogs.msdn.com/b/axinthefield/archive/2011/03/25/dynamics-ax-tracing-part-2.aspx

http://www.microsoft.com/download/en/details.aspx?id=7225

http://blogs.msdn.com/b/dynamicsaxbi/archive/2010/12/01/ax-ssrs-reporting-screencast-list.aspx

上述附件文件 (Microsoft_Dynamics_AX_Changed_Elements_40sp2_2009.zip) 提供了有关 Dynamics AX 4.0 和 Dynamics AX 2009 之间所有更改的一些有用信息。它是从以下链接按原样下载的。

http://dynamicsuser.net/cfs-filesystemfile.ashx/__key/CommunityServer.Components.UserFiles/00.00.06.28.52/Microsoft-Dynamics-AX-Changed-Elements_5F00_40sp2_5F00_2009.xlsx

有关 Microsoft Dynamics AX 2012 新增、更改和弃用功能的更多信息,请参阅以下链接的在线文档 http://www.microsoft.com/download/en/details.aspx?id=7225

历史

2012年2月11日

© . All rights reserved.