将 Microsoft Dynamics Axapta 与温度转换 C# 应用程序集成 - 第二部分






4.86/5 (6投票s)
本文将演示如何将数据从 Axapta 发送到温度转换应用程序后,将转换后的温度回传到 Axapta。
引言
要理解本文,您需要先阅读 第一部分。这对于那些希望在第三方应用程序处理数据后将数据发送回 Axapta 的 ISV 或客户将非常有用。如 第一部分 中所述,当温度被转换后,就可以使用 C# 应用程序将温度数据发送回 Axapta。我开发和发布这些文章的主要目的是帮助 ISV 和客户对现有应用程序与 Axapta 的集成进行概念验证 (POC)。
为了理解本文的优势,请阅读以下场景
我们在 Axapta 中拥有需要通过某些流程操作的数据。客户或 ISV 已经拥有具备所有所需数据处理功能的第三方应用程序。我在本文 第一部分 中就发布过这种集成。现在,有一个更大的需求,即需要使用来自第三方应用程序的处理数据来更新 Axapta。这个功能通过温度转换应用程序得到了出色的演示。
为了演示这个 POC,我修改了我 第一部分 中开发的应用程序。
要理解这个 POC,您应该精通 C# 和 Axapta 的面向对象概念。您应该在 Axapta 和 C# 方面有丰富的实践经验。
在这里,我不仅会提供源代码,还会描述我添加到 第一部分 中的代码。
让我们开始这段有趣的旅程…
背景
要开发 Axapta 连接器,您需要掌握 X++ 和 C# 的丰富知识。这意味着您应该具备面向对象编程的实践知识。
要理解本文,您需要阅读 第一部分。此外,您的系统上还需要安装有 Axapta、SQL Server 2005 和 Visual Studio 2008 SP1。
修改 1:创建 AxHelper 类
此类包含从温度转换应用程序连接到 Axapta 的代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Dynamics.BusinessConnectorNet;
namespace CvrtC2Frnt
{ Microsoft.Dynamics.BusinessConnectorNet
class AxHelper:BC
{
BC bc = new BC();
Axapta ax;
string tableName = "SalesTable";
AxaptaRecord axRecord;
public void SetAxRec(Boolean Farenhite, double Temp, string SalesId)
{
ax = bc.GetAxConnection();
if (ax != null)
{
using (axRecord = ax.CreateAxaptaRecord(tableName))
{
ax.TTSBegin();
axRecord.ExecuteStmt("select forupdate *
from %1 where %1.SalesId ==" + "'" + SalesId + "'" );
axRecord.set_Field(50001, Temp);
if (Farenhite == true)
axRecord.set_Field(50002, 1);
else
axRecord.set_Field(50002, 0);
axRecord.Update();
ax.TTSCommit();
}
}
}
}
}
上面的代码清楚地表明,我们正在使用 Microsoft.Dynamics.BusinessConnectorNet DLL 将数据发送到 Axapta。
修改 2:创建 BC 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Dynamics.BusinessConnectorNet;
namespace CvrtC2Frnt
{
class BC
{
Axapta ax;
AxaptaRecord axRecord;
public Axapta GetAxConnection()
{
ax = new Axapta();
ax.Logon(null, null, null, null);
return ax;
}
}
}
以上有助于连接到 Axapta。
修改 3:修改 ConverTemp 类
namespace CvrtC2Frnt
{
public class ConvertTemp
{
public static double sourceTemp=0, destTemp=0;
public static bool Faren = false;
public static string SalesId = string.Empty;
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);
}
public void ShowResult( double Temperature,bool Farenhite, string salesId)
{
ShowTemperature sT = new ShowTemperature(Temperature, Farenhite, salesId);
sT.Show();
}
}
}
在上面的代码中,添加了 SalesID
,以便我们可以修改 Axapta 中的 SalesTable
以便进行转换后的温度。
修改 4:修改 Convert 按钮
private void btnConvert_Click(object sender, EventArgs e)
{
AxHelper axhlp = new AxHelper();
if (ConvertTemp.Faren == true)
{
txtDestTmp.Text = Convert.ToString(ConvertTemp.
ConvertFahrenheitToCelsius(double.Parse(txtSourceTmp.Text)));
axhlp.SetAxRec(false, ConvertTemp.ConvertFahrenheitToCelsius
(double.Parse(txtSourceTmp.Text)),ConvertTemp.SalesId);
}
if (ConvertTemp.Faren == false)
{
txtDestTmp.Text = Convert.ToString(ConvertTemp.
ConvertCelsiusToFahrenheit(double.Parse(txtSourceTmp.Text)));
axhlp.SetAxRec(true, ConvertTemp.ConvertCelsiusToFahrenheit
(double.Parse(txtSourceTmp.Text)), ConvertTemp.SalesId);
}
}
在上面的代码中,ConvertCelsiusToFahrenheit
现在接受三个参数,以便在转换温度后更新 SalesTable
。
修改 5:修改 ShowTemperature 构造函数
public ShowTemperature(double Temperature, Boolean Fahrenheit, string SalesId)
{
InitializeComponent();
txtSourceTmp.Text = Temperature.ToString();
ConvertTemp.Faren = Fahrenheit;
ConvertTemp.sourceTemp = Temperature;
ConvertTemp.SalesId = SalesId;
}
在上面的代码中,SalesID
也现在从 Axapta 初始化,以便我们可以使用 C# 应用程序将转换后的温度更新到 SalesTable
。
修改 6:修改 Axapta 中的 ConvertTemperature 类
void ConvertTemperature(real Temperature, Boolean Fahrenheit, str SalesId)
{
ct = new CvrtC2Frnt.ConvertTemp();
ct.ShowResult(Temperature, Fahrenheit, SalesId);
}
在上面,SalesID
被添加为第三个参数。
修改 7:修改 Axapta 中 SalesTable 上的 ConvertTemperature 按钮的 Clicked 函数
void clicked()
{
Temperature tem = new Temperature();
;
tem.ConvertTemperature( element.salesTable().Temperature,
element.salesTable().Farenhite, element.salesTable().SalesId);
super();
}
现在,让我们来看看演示…
演示 1
在上面的 SalesTable
Axapta 表单中,输入温度 45 并取消选中华氏度。这意味着温度是 45 摄氏度。单击上述表单上的“转换温度”按钮。
单击“转换温度 C#”表单上的“转换”按钮。
在上面的 Axapta 的销售订单表单中,温度已转换为华氏度。
就是这样了!
在本篇文章中,不仅转换了温度,还将其发布到了 Axapta 销售订单。
我还有另一个惊喜。到目前为止,我已经将 ConvertTemperature
应用程序与 SalesOrder
卡片表单集成,但在演示 2 中,您可以轻松地看到如何将其集成到 Axapta 的 SalesListPage
。
让我们开始…
演示 2
在上面的 SalesOrderList
页面中,您可以在“操作”页面上看到“温度附加组件”选项卡。可以看到两个命令按钮,即:
SalesOrderList
页面。转换温度 - 这将弹出与从 SalesCard
表单来的相同的“转换温度”表单(来自 C#)。
在上面的表单中,单击“转换”按钮将 45 摄氏度转换为华氏度。
我们可以看到 45 摄氏度被转换为 113 华氏度。转换后的温度也已更新到 SalesList
页面。要查看这一点,请单击 SalesList
页面上的刷新按钮。
您通过 C# 在 Axapta SalesList
页面上也能看到转换后的温度。
我提供了完整的 C# 代码和 Axapta 代码,以便任何 ISV、客户和开发人员都能理解如何使用 C# 中任何第三方应用程序的用户界面和逻辑与 Axapta 记录进行处理,然后将其发布回 Axapta。大大小小的组织总是寻求这种双向集成,以节省实施 ERP 新功能的时间和精力。与其在 ERP 中实施新功能,不如将第三方应用程序与 ERP 集成以实现所需的功能。
请注意,此温度转换应用程序也可以轻松集成到 Microsoft Dynamics Navision 中,只需编写 8 行代码。这意味着开发人员应具备 C# 和 Axapta 的实践知识。他们还应遵循产品所有者(在本例中为 Microsoft)制定的最佳实践。由于我曾为多家 ISV 的 Axapta 和 Navision 项目进行过大量集成工作,开发人员应该在技术上非常了解 ERP。如果 ERP 是 Axapta,那么您应该了解面向对象概念,至少有 2 年的 Axapta 经验,外加至少 1 年的 C# 经验。C# 很重要,因为对于只懂 Navision 或 Axapta 的开发人员来说,没有 C# 经验会让他们 95% 的时间处于闲置状态。如今,集成 Axapta 和 Navision 变得越来越容易,与任何其他应用程序的集成只需 8 小时。我们应该将所有功劳归于微软,因为他们通过 Web 服务暴露了 Axapta 和 Navision 的业务逻辑和代码。所以,各位,祝您编码愉快,但要非常小心,因为您将要处理对任何客户都至关重要的财务数据……