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

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (7投票s)

2010 年 9 月 15 日

CPOL

9分钟阅读

viewsIcon

57013

downloadIcon

1112

本文提供了一个 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 表和表单集成。

我提供了以下项目的源代码

  1. CvrtC2Frnt.dll
  2. 与温度转换应用程序集成的 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。

在表单上添加以下控件

  1. 名为 txtSourceTmp 的文本框
  2. 名为 txtDestTmp 的文本框
  3. 名为 lblsrcTemp 的标签框,其文本属性为空值
  4. 名为 lbldesTemp 的标签框,其文本属性为空值
  5. 一个命令按钮,其文本为 Convert,名称为 btnConvert

注意:标签的文本将根据转换类型动态显示,例如,如果从华氏度转换为摄氏度,则标签 lblsrcTemp 将包含文本“华氏度”,而“lbldesTemp”将包含文本“摄氏度”。

image001.jpg

步骤 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 的引用。

现在按如下设计表单

image002.jpg

上述表单的工作方式如下:

如果“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);
        }

现在构建应用程序并运行它以测试结果。

image004.jpg

点击此处获取将华氏度转换为摄氏度的 UI。

image006.jpg

点击“转换”按钮将华氏度转换为摄氏度

image007.jpg

步骤 2:将 CvrtC2Frnt.dll 与 Axapta 集成

要执行步骤 2,您需要在系统中安装 Microsoft Dynamics Axapta。假设已安装并运行,请按照以下步骤操作:

步骤 A

  1. CvrtC2Frnt.dll 文件复制到 Microsoft Dynamics Axapta 安装文件夹下的 Bin 文件夹中。即 C:\Program Files\Microsoft Dynamics AX\50\Client\Bin
  2. 打开 AOT(应用程序对象树)。AOT 是 Axapta 中的开发环境。通过使用 AOT,我们可以自定义和开发 Axapta 中的新功能。

    image009.jpg

    点击打开 AOT 或按 CTRL+D

    image010.jpg

  3. 现在在 AOT 下,转到“References”并展开它。然后点击“Add Reference”。浏览 Microsoft Dynamics Axapta 安装文件夹下的“Bin”文件夹中的 CvrtC2Frnt.dll 文件。即 C:\Program Files\Microsoft Dynamics AX\50\Client\Bin

    image012.jpg

    点击“浏览”并选择文件 CvrtC2Frnt.dll
  4. 从 Microsoft Dynamics Axapta 安装文件夹下的 Bin 文件夹中选择 CvrtC2Frnt.dll 文件后,点击“打开”。即 C:\Program Files\Microsoft Dynamics AX\50\Client\Bin

    image014.jpg

    点击“打开”
  5. 点击“确定”添加引用。

    image015.jpg

    点击“确定”添加引用。

image016.jpg

步骤 B

  1. 现在在 Axapta 中创建一个名为 ConverTemp 的新项目。按 CTRL+SHIFT+P 打开项目窗口,然后右键单击项目窗口的 private 节点。选择“新建”->“项目”以创建新项目。

    image018.jpg

    点击“项目”创建新项目

    将新项目重命名为 ConverTemp

  2. 创建两个组,并将其重命名为 Form 和 Class。

    image020.jpg

    点击“组”两次以创建新组,并将其重命名为“表单”和“类”
  3. 现在右键单击 ConverTemp 项目下的 Class 节点,然后单击 New-> Class 创建新类。将其重命名为 Temperature

    image022.jpg

    点击“类”在 Axapta 中创建新类
  4. 现在转到“类声明”,它位于其下方,然后单击“编辑”打开它。

    image024.jpg

    点击“编辑”以编辑 ConvertTemp 类的类声明
  5. 在类声明中写入以下代码
    class Temperature
    {
    CvrtC2Frnt.ConvertTemp ct;
    }

    以上代码正在创建在 CvrtC2Frnt DLL 中定义的 ConvertTemp 类的对象。

    image025.jpg

  6. 在 Axapta 的 Temperature 类中添加一个新方法 ConvertTemperature。右键单击 Temperature 类,然后单击 OverideMethod->New 添加一个新方法。将新方法重命名为 ConvertTemperature

    image027.jpg

    点击“覆盖方法”下的“新建”以创建新方法。
  7. 右键单击 ConvertTemperature 方法并选择“编辑”以向其添加代码。

    image028.jpg

    点击“编辑”来编辑类

    将以下代码添加到编辑器中

    void ConvertTemperature(real Temperature, Boolean Fahrenheit)
    {
        ct = new CvrtC2Frnt.ConvertTemp();
        ct.ShowResult(Temperature, Fahrenheit);
    }

    image029.jpg

    上述函数接受 TemperatureFahrenheit 作为两个参数。这两个参数都传递给 CvrtC2Frnt DLL 中定义的 ShowResult API。

  8. 右键单击 Temperature 类并选择 Save 以保存并编译该类。

    image030.jpg

    点击“保存”以保存并编译温度类

步骤 C

  1. 我们将在 Axapta 的 SalesTable 中创建两个新字段
    1. 温度
    2. 华氏温度
  2. 打开 AOT 并转到数据字典。点击“表”并搜索 SalesTable

    image031.jpg

    选择 SalesTable

    image032.jpg

    选择 SalesTable

    image032.jpg

    转到字段,右键单击并选择类型为 real 的新字段。

    image033.jpg

    将其重命名为 Temperature。

    添加一个新字段,定义类型为 enum

    image035.jpg

    点击“枚举”

    将其重命名为 Farenhite。

    image036.jpg

    在扩展类型属性中选择值 Temp Type,它又是一个类型为 NoYes 的用户 enum。因此,在创建 Farenhite 字段之前,首先创建用户 Enum TempType

    要创建 TempType Enum,请转到数据字典中的“扩展数据类型”,然后右键单击“新建”->“Enum”。

    image038.jpg

    点击“扩展数据类型”->“枚举”

    将其重命名为 TempType,然后转到属性。选择 EnumType 属性值为 NoYes。

    image040.jpg

    选择“是/否”

    image040.jpg

    现在保存它,然后转到 DataDictionary 下的 SalesTable。搜索之前创建的 Farenhite 字段,然后转到 ExtendedData Type 属性并选择 TempType 作为值。

    选择 TempType

    image042.jpg

    现在保存它。

  3. 现在我们将把上面创建的两个字段添加到 SalesTable 表单中。

    转到 AOT 中“表单”部分下的 SalesTable 表单。选择“设计”->“设计”->“组:表”->“选项卡:选项卡标题”->“选项卡页:选项卡标题概览”->“网格:网格标题”,然后将 SalesTableForm数据源 中的 Temperature 和 Farenhite 字段拖放到其中。

    image043.jpg

    现在保存它。

  4. 现在将 AOT 中的 SalesTable 表单拖放到 Axapta 的 ConverTemp 项目下的 Form 组中。请注意,Form 组是在步骤 B 的第 2 点下创建的。

    image044.jpg

  5. 现在,我们将在 SalesTable 表单上创建“转换温度”按钮。

    转到 SalesTable->设计->设计->按钮组:标题按钮,然后右键单击以在 SalesTable 表单上选择新的 命令按钮 控件。

    image045.jpg

    点击 CommandButton 创建新 Command button
  6. 右键单击新命令按钮并点击属性以打开属性窗口。转到“Text”属性并输入值 ConverTemperature

    image047.jpg

    输入“转换温度”->点击“属性”。
  7. 现在我们将创建一个与 ConvertTemperature 按钮关联的新方法 clicked。我们将通过右键单击 ConvertTemperature 按钮下的 Methods,然后选择 Overide method,再选择 Clicked 来创建此方法。

    方法->覆盖方法->点击

    image048.jpg

    选择“已单击”以覆盖单击方法
  8. 在编辑器窗口中,复制以下代码
    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 的“应收账款”模块,然后点击“销售订单”。

    image049.jpg

步骤 D

点击“应收账款”

在 Axapta 的应收账款模块下,双击“销售订单”。在“销售订单网格”下,选择任意记录并双击,然后转到销售订单表单的概览选项卡。滚动以找到“温度”和“华氏度”字段。

image051.jpg

首先点击“销售订单”

image056.jpg

输入温度为 59,并勾选“华氏度”复选框。(如果“华氏度”被勾选,则“温度”字段中的温度为华氏度,点击“转换温度”命令按钮后会将其转换为摄氏度。如果“华氏度”复选框未勾选,则“温度”字段中的温度为摄氏度,点击“转换温度”命令按钮后会将其转换为华氏度)。

  • 点击销售订单表单上的“转换温度”命令按钮。

    image056.jpg

    点击“转换温度”按钮
  • 点击“转换温度”表单上的“转换”按钮。

    image057.jpg

    你得到了摄氏温度!!!

© . All rights reserved.