这一章的代码主要演示如何通过Business Connector与Axapta交互
在Dynamics Axapta的客户端安装目录中找到Microsoft.Dynamics.BusinessConnectorNet.dll这个文件,添加到VS.NET的工程中.
1.HelloWorldBC.cs
class HelloWorldBC
{
static void Main(string[] args)
{
Axapta ax;
// Log on to Dynamics AX
ax = new Axapta();
try
{
ax.Logon(null, null, null, null);
}
catch (Exception)
{
Console.WriteLine("Exception occurred during logon");
}
Console.WriteLine("Hello World!");
// Log off from Dynamics AX
ax.Logoff();
}
}
好久没用VS2005了,今天用了一下,智能提示忒爽了,Axapta编辑器也快点好起来吧......{
static void Main(string[] args)
{
Axapta ax;
// Log on to Dynamics AX
ax = new Axapta();
try
{
ax.Logon(null, null, null, null);
}
catch (Exception)
{
Console.WriteLine("Exception occurred during logon");
}
Console.WriteLine("Hello World!");
// Log off from Dynamics AX
ax.Logoff();
}
}
搞不清楚四个参数都填null是怎么找到AOS的?本来想用Reflector反编译一下Microsoft.Dynamics.BusinessConnectorNet.dll,结果出来的是乱七八糟的东西,唉,忒不友好了......
2.AccessingDataBC.cs
遍历所有的料品,并打印料品Id和料品名称.
// Instantiate a Dynamics AX record object for the
// record we want to work with
AxaptaRecord axRecord = ax.CreateAxaptaRecord("InventTable");
// Execute a query against the record
axRecord.ExecuteStmt("select * from %1");
// Loop through the returned records
// Extract the data from two fields for each record
while (axRecord.Found)
{
invItemName = axRecord.get_Field(invItemNameField);
invItemId = axRecord.get_Field(invItemIdField);
Console.WriteLine(invItemId + "\t" + invItemName);
// Go to the next record
axRecord.Next();
}
3.InvokingBusinessLogicBC.cs// record we want to work with
AxaptaRecord axRecord = ax.CreateAxaptaRecord("InventTable");
// Execute a query against the record
axRecord.ExecuteStmt("select * from %1");
// Loop through the returned records
// Extract the data from two fields for each record
while (axRecord.Found)
{
invItemName = axRecord.get_Field(invItemNameField);
invItemId = axRecord.get_Field(invItemIdField);
Console.WriteLine(invItemId + "\t" + invItemName);
// Go to the next record
axRecord.Next();
}
调用Axapta中的静态方法.
// Invoke the CallStaticClassMethod managed class
// Provide the X++ class name and method to execute
// The return value is placed into returnValue
returnValue = ax.CallStaticClassMethod("InventoryManager",
"updateInventoryQty");
// Use the return value to take some action
if((Boolean)returnValue)
Console.WriteLine("Inventory quantity updated successfully");
else
Console.WriteLine("Inventory quantity update failed");
// Provide the X++ class name and method to execute
// The return value is placed into returnValue
returnValue = ax.CallStaticClassMethod("InventoryManager",
"updateInventoryQty");
// Use the return value to take some action
if((Boolean)returnValue)
Console.WriteLine("Inventory quantity updated successfully");
else
Console.WriteLine("Inventory quantity update failed");
其中的类InventoryManager在工程InsideDynamicsAXChapter8中定义.
这些连接和简单的操作倒还可以,不过Axapta的接口和SDK写得确实不甘恭维......