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

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

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (6投票s)

2010年11月30日

CPOL

5分钟阅读

viewsIcon

74449

downloadIcon

1159

本文将演示如何将数据从 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

Pic3.jpg

在上面的 SalesTable Axapta 表单中,输入温度 45 并取消选中华氏度。这意味着温度是 45 摄氏度。单击上述表单上的“转换温度”按钮。

单击“转换温度 C#”表单上的“转换”按钮。

Pic5.jpg

在上面的 Axapta 的销售订单表单中,温度已转换为华氏度。

就是这样了!

在本篇文章中,不仅转换了温度,还将其发布到了 Axapta 销售订单。

我还有另一个惊喜。到目前为止,我已经将 ConvertTemperature 应用程序与 SalesOrder 卡片表单集成,但在演示 2 中,您可以轻松地看到如何将其集成到 Axapta 的 SalesListPage

让我们开始…

演示 2

在上面的 SalesOrderList 页面中,您可以在“操作”页面上看到“温度附加组件”选项卡。可以看到两个命令按钮,即:

a) 刷新 - 刷新 SalesOrderList 页面。

转换温度 - 这将弹出与从 SalesCard 表单来的相同的“转换温度”表单(来自 C#)。

Pic7.jpg

在上面的表单中,单击“转换”按钮将 45 摄氏度转换为华氏度。

Pic8.jpg

我们可以看到 45 摄氏度被转换为 113 华氏度。转换后的温度也已更新到 SalesList 页面。要查看这一点,请单击 SalesList 页面上的刷新按钮。

Pic9.jpg

您通过 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 的业务逻辑和代码。所以,各位,祝您编码愉快,但要非常小心,因为您将要处理对任何客户都至关重要的财务数据……

© . All rights reserved.