将 Microsoft Dynamics Axapta 与温度转换 C# 应用程序集成






4.93/5 (7投票s)
本文提供了一个 C# 代码 DLL,用于将华氏温度转换为摄氏温度,反之亦然。此外,我已在 Axapta 中使用此 DLL 将“转换温度”UI 集成到 Axapta 中。
引言
本文致力于 Microsoft Dynamics Axapta 和 C# 社区。Microsoft Dynamics Axapta 是一个适用于大型行业的 ERP。每个大型组织都有自己的遗留系统,他们希望将其与 Microsoft Dynamics Axapta 集成,以便在不付出太多努力的情况下利用 Microsoft Dynamics Axapta 和他们现有的 C# 应用程序。为了更好地理解,假设客户端的 C# 应用程序具有带有一些功能的 UI,我们希望在 Microsoft Dynamics Axapta 中利用该功能,而无需从头开始构建该功能,而只是从 Microsoft Dynamics Axapta 传递 C# 应用程序的所需输入,并反过来从 C# 应用程序获取输出。
为了理解本文的优势,请阅读以下场景。
假设客户端 A 有一个应用程序 B,该应用程序运行良好,可以实现其小业务目标。现在,过了一段时间,他们决定实施 ERP Microsoft Dynamics Axapta,以简化和增强其业务流程并获取利润。假设功能 B 不在 ERP Microsoft Dynamics Axapta 中,并且客户端确实希望在 Axapta 中实现该功能,因为他们已经对此感到满意,并且应用程序具有 DLL,因此可以被其他应用程序使用。因此,为了实现这一点,我们可以将客户端 A 的应用程序 B 集成到 Axapta 中,从而通过实现这种类型的集成,客户端不需要投入时间和金钱来更大程度地实现该功能。本文还将帮助 Microsoft Dynamics Axapta 的任何 ISV 合作伙伴了解如何将 Axapta 与 C# 应用程序集成。任何 ISV 合作伙伴都可以开发其附加组件,然后将其功能作为带有 API 的 DLL 暴露出来,反过来 Axapta 将被利用,以便 Axapta 功能与附加组件集成。
为了开发 POC,我开发了一个 C# DLL “CvrtC2Frnt.dll”,项目名称为 CvrtC2Frnt
。之后,"CvrtC2Frnt.dll" 被 Axapta 用于将温度转换应用程序与 Axapta 表和表单集成。
我提供了以下项目的源代码
- “CvrtC2Frnt.dll”
- 与温度转换应用程序集成的 Axapta 代码
此外,我还提供了一个示例应用程序,用于在不使用 Axapta 的情况下测试 CvrtC2Frnt.dll。
Axapta 与 .NET 应用程序的集成方式有很多种。在我即将发布的文章中,我将介绍 Axapta 与 .NET 应用程序集成的其他一些方面。
让我们开始...
第 1 步:“CvrtC2Frnt.dll”的创建
创建一个类型为类库的 C# 项目,其命名空间为 CvrtC2Frnt
。让我们假设我们将解决方案命名为 "CvrtC2Frnt
"。
步骤 A
首先,我们将创建“CovertTemp
”类。我们将按如下方式创建以下成员:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CvrtC2Frnt
{
public class ConvertTemp
{
public static double sourceTemp=0, destTemp=0;
public static bool Faren = false;
public static double ConvertCelsiusToFahrenheit(double c)
{
destTemp = 0;
destTemp = ((9.0 / 5.0) * c) + 32;
return ((9.0 / 5.0) * c) + 32;
}
public static double ConvertFahrenheitToCelsius(double f)
{
destTemp = 0;
destTemp = (5.0 / 9.0) * (f - 32);
return (5.0 / 9.0) * (f - 32);
}
}
}
以上代码清楚地指定了创建了两个函数,用于将温度从华氏度转换为摄氏度,反之亦然。
步骤 B
现在,我们将添加新的 Windows 窗体“ShowTemperature
”,其中将包含用于利用功能和与 Axapta 等应用程序接口的 UI。
在表单上添加以下控件
- 名为
txtSourceTmp
的文本框 - 名为
txtDestTmp
的文本框 - 名为
lblsrcTemp
的标签框,其文本属性为空值 - 名为
lbldesTemp
的标签框,其文本属性为空值 - 一个命令按钮,其文本为
Convert
,名称为btnConvert
注意:标签的文本将根据转换类型动态显示,例如,如果从华氏度转换为摄氏度,则标签 lblsrcTemp
将包含文本“华氏度”,而“lbldesTemp
”将包含文本“摄氏度”。

步骤 C
现在,创建 ShowTemperature
类的以下函数
public ShowTemperature(double Temperature, Boolean Fahrenheit)
{
InitializeComponent();
txtSourceTmp.Text = Temperature.ToString();
ConvertTemp.sourceTemp = Temperature;
ConvertTemp.Faren = Fahrenheit;
}
//Above code clearly specifies that we are initializing the label and text
//box with vales coming from user input.
private void btnConvert_Click(object sender, EventArgs e)
{
if (ConvertTemp.Faren == true)
txtDestTmp.Text = Convert.ToString
(ConvertTemp.ConvertFahrenheitToCelsius(ConvertTemp.sourceTemp));
if (ConvertTemp.Faren == false)
txtDestTmp.Text = Convert.ToString
(ConvertTemp.ConvertCelsiusToFahrenheit(ConvertTemp.sourceTemp));
}
// above code is triggered when Convert button is click to convert the temperature.
private void ShowTemperature_Load(object sender, EventArgs e)
{
if (ConvertTemp.Faren == true)
{
lblsrcTemp.Text = "Farenheit";
lbldesTemp.Text = "Celsius";
}
else
{
lblsrcTemp.Text = "Celsius";
lbldesTemp.Text = "Farenheit";
}
}
// above code specifies that form ShowTemperature is displayed dynamically
// by label values depending
// upon the type of conversion is selected from Axapta or any other application.
步骤 D
现在,在 ConverTemp
类中创建函数 ShowResult
,如下所示
public void ShowResult(double Temperature, bool Farenhite)
{
ShowTemperature sT = new ShowTemperature(Temperature, Farenhite);
sT.Show();
}
创建上述函数是为了首先调用 ShowTemperature
类的构造函数,并传入温度和温度类型(华氏度或摄氏度)值。然后,调用 ShowTemperature
UI 以显示相应的 UI。
步骤 E
此步骤是可选的,因为我们的 DLL 已经创建,但为了在实际用于 Axapta 之前进行测试,我们可以执行步骤 E。
向现有解决方案添加一个类型为 Windows 窗体应用程序的新项目。将项目名称设为 ShowUI
。在引用中添加 CvrtC2Frnt.dll
的引用。
现在按如下设计表单
上述表单的工作方式如下:
如果“Temperature
”文本框中的值为 50 且“Fahrenheit”复选框已选中,则表示温度以华氏度为单位。当用户单击“Show Convert Temperature UI
”按钮时,将显示在步骤 B 中创建的 UI。
现在“Show Convert Temperature UI
”按钮后面的代码如下:
private void btnShowUI_Click(object sender, EventArgs e)
{
ConvertTemp ct = new ConvertTemp();
if (chkFaren.Checked == true)
ct.ShowResult(Convert.ToInt32(txtTemperature.Text), true);
else
ct.ShowResult(Convert.ToInt32(txtTemperature.Text), false);
}
现在构建应用程序并运行它以测试结果。
步骤 2:将 CvrtC2Frnt.dll 与 Axapta 集成
要执行步骤 2,您需要在系统中安装 Microsoft Dynamics Axapta。假设已安装并运行,请按照以下步骤操作:
步骤 A
- 将 CvrtC2Frnt.dll 文件复制到 Microsoft Dynamics Axapta 安装文件夹下的 Bin 文件夹中。即 C:\Program Files\Microsoft Dynamics AX\50\Client\Bin。
- 打开 AOT(应用程序对象树)。AOT 是 Axapta 中的开发环境。通过使用 AOT,我们可以自定义和开发 Axapta 中的新功能。点击打开 AOT 或按 CTRL+D
- 现在在 AOT 下,转到“References”并展开它。然后点击“Add Reference”。浏览 Microsoft Dynamics Axapta 安装文件夹下的“Bin”文件夹中的 CvrtC2Frnt.dll 文件。即 C:\Program Files\Microsoft Dynamics AX\50\Client\Bin。点击“浏览”并选择文件 CvrtC2Frnt.dll
- 从 Microsoft Dynamics Axapta 安装文件夹下的 Bin 文件夹中选择 CvrtC2Frnt.dll 文件后,点击“打开”。即 C:\Program Files\Microsoft Dynamics AX\50\Client\Bin。点击“打开”
- 点击“确定”添加引用。点击“确定”添加引用。
步骤 B
- 现在在 Axapta 中创建一个名为
ConverTemp
的新项目。按 CTRL+SHIFT+P 打开项目窗口,然后右键单击项目窗口的private
节点。选择“新建”->“项目”以创建新项目。点击“项目”创建新项目将新项目重命名为
ConverTemp
。 - 创建两个组,并将其重命名为 Form 和 Class。点击“组”两次以创建新组,并将其重命名为“表单”和“类”
- 现在右键单击
ConverTemp
项目下的 Class 节点,然后单击 New-> Class 创建新类。将其重命名为Temperature
。点击“类”在 Axapta 中创建新类 - 现在转到“类声明”,它位于其下方,然后单击“编辑”打开它。点击“编辑”以编辑 ConvertTemp 类的类声明
- 在类声明中写入以下代码
class Temperature { CvrtC2Frnt.ConvertTemp ct; }
以上代码正在创建在
CvrtC2Frnt
DLL 中定义的ConvertTemp
类的对象。 - 在 Axapta 的
Temperature
类中添加一个新方法ConvertTemperature
。右键单击Temperature
类,然后单击 OverideMethod->New 添加一个新方法。将新方法重命名为ConvertTemperature
。点击“覆盖方法”下的“新建”以创建新方法。 - 右键单击
ConvertTemperature
方法并选择“编辑”以向其添加代码。点击“编辑”来编辑类将以下代码添加到编辑器中
void ConvertTemperature(real Temperature, Boolean Fahrenheit) { ct = new CvrtC2Frnt.ConvertTemp(); ct.ShowResult(Temperature, Fahrenheit); }
上述函数接受
Temperature
和Fahrenheit
作为两个参数。这两个参数都传递给CvrtC2Frnt
DLL 中定义的ShowResult
API。 - 右键单击
Temperature
类并选择Save
以保存并编译该类。点击“保存”以保存并编译温度类
步骤 C
- 我们将在 Axapta 的
SalesTable
中创建两个新字段 - 温度
- 华氏温度
-
打开 AOT 并转到数据字典。点击“表”并搜索
SalesTable
。选择
SalesTable
。选择 SalesTable转到字段,右键单击并选择类型为 real 的新字段。
将其重命名为 Temperature。
添加一个新字段,定义类型为
enum
。点击“枚举”
将其重命名为 Farenhite。
在扩展类型属性中选择值 Temp Type,它又是一个类型为 NoYes 的用户
enum
。因此,在创建 Farenhite 字段之前,首先创建用户Enum TempType
。要创建
TempType Enum
,请转到数据字典中的“扩展数据类型”,然后右键单击“新建”->“Enum
”。点击“扩展数据类型”->“枚举”将其重命名为
TempType
,然后转到属性。选择EnumType
属性值为 NoYes。选择“是/否”现在保存它,然后转到
DataDictionary
下的SalesTable
。搜索之前创建的 Farenhite 字段,然后转到ExtendedData
Type 属性并选择TempType
作为值。选择 TempType现在保存它。
- 现在我们将把上面创建的两个字段添加到
SalesTable
表单中。转到 AOT 中“表单”部分下的
SalesTable
表单。选择“设计”->“设计”->“组:表
”->“选项卡:选项卡标题
”->“选项卡页:选项卡标题概览
”->“网格:网格标题
”,然后将SalesTableForm
的数据源
中的 Temperature 和 Farenhite 字段拖放到其中。现在保存它。
- 现在将 AOT 中的
SalesTable
表单拖放到 Axapta 的ConverTemp
项目下的Form
组中。请注意,Form 组是在步骤 B 的第 2 点下创建的。 - 现在,我们将在
SalesTable
表单上创建“转换温度”按钮。转到
SalesTable
->设计->设计->按钮组:标题按钮
,然后右键单击以在SalesTable
表单上选择新的命令按钮
控件。点击 CommandButton 创建新 Command button - 右键单击新命令按钮并点击属性以打开属性窗口。转到“Text”属性并输入值
ConverTemperature
。输入“转换温度”->点击“属性”。 - 现在我们将创建一个与
ConvertTemperature
按钮关联的新方法 clicked。我们将通过右键单击ConvertTemperature
按钮下的 Methods,然后选择Overide
method,再选择 Clicked 来创建此方法。方法->覆盖方法->点击
选择“已单击”以覆盖单击方法 - 在编辑器窗口中,复制以下代码
void clicked() { Temperature tem = new Temperature(); ; tem.ConvertTemperature( element.salesTable().Temperature, element.salesTable().Farenhite); super(); }
上述代码正在创建在 Axapta 中创建的 Temperature
类的对象。然后,我们调用在 Axapta 的 Temperature
类中定义的 ConvertTemperature
函数,其参数为 Axapta 的 SalesTable
中的 Temperature 和 Farenhite。在步骤 C 的第 1 点中,我们之前在 Axapta 的 SalesTable
中创建了两个新字段,即:
- 温度(数据类型:实数)
- 华氏温度(数据类型:带布尔值的枚举)
- 保存代码并运行 SalesTable 表单。要运行,请转到 Axapta 的“应收账款”模块,然后点击“销售订单”。
步骤 D
点击“应收账款”
在 Axapta 的应收账款模块下,双击“销售订单”。在“销售订单网格”下,选择任意记录并双击,然后转到销售订单表单的概览选项卡。滚动以找到“温度”和“华氏度”字段。
首先点击“销售订单”
输入温度为 59,并勾选“华氏度”复选框。(如果“华氏度”被勾选,则“温度”字段中的温度为华氏度,点击“转换温度”命令按钮后会将其转换为摄氏度。如果“华氏度”复选框未勾选,则“温度”字段中的温度为摄氏度,点击“转换温度”命令按钮后会将其转换为华氏度)。
- 点击销售订单表单上的“转换温度”命令按钮。点击“转换温度”按钮
- 点击“转换温度”表单上的“转换”按钮。
你得到了摄氏温度!!!