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