zoukankan      html  css  js  c++  java
  • AX 2009 外部调用

    外部调用 AX 的表方法 类方法

    外部使用存储过程,或是SQL语句最多只能进行查询和删除的动作,不能增加和修改。

    因为AX,每一行都有一个Recid字段,是系统生成的,为了标识系统唯一行数据。

    通过BC连接来访问AX,调用AX的类,调用Job,使用AX的表,进行增,删,改,查。使用表的方法,Display等。

    引用Microsoft.Dynamics.BusinessConnectorNet,使用域票据,来访问AX。

    这新的一年共享一个,我瞎写的AXHelper,愿与君共勉。

    /************************************************
    *
    * Copyright(c) Kurodo
    *
    * CLR : 3.5
    *
    * FileName : AXHelper.cs
    *
    * Author : Kurodo
    *
    * CreatTime : 2011/11/29 15:28:43
    *           
    ************************************************
    */

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Windows.Forms;
    using Microsoft.Dynamics.BusinessConnectorNet;

    namespace AXLibrary
    {
        public class AXHelper
        {
            /// <summary>
            
    /// Create Method
            
    /// </summary>
            
    /// <param name="tableName">表名</param>
            
    /// <param name="dict">字段值字典</param>
            public static Boolean Create(String tableName, IDictionary<String, Object> dict)
            {
                Boolean ret = false;
                Axapta ax = new Axapta();
                NetworkCredential nc = new NetworkCredential("kurodo""abc@123""kurodo.cn");
                try
                {
                    ax.LogonAs("kurodo""kurodo", nc, nullnullnullnull);

                    IEnumerator<KeyValuePair<String, Object>> dem = dict.GetEnumerator();
                    using (AxaptaRecord axRecord = ax.CreateAxaptaRecord(tableName))
                    {
                        ax.TTSBegin();
                        axRecord.Clear();
                        axRecord.InitValue();
                        
                        while (dem.MoveNext())
                        {
                            String key = dem.Current.Key;
                            Object value = dem.Current.Value;

                            axRecord.set_Field(key,value);
                        }
                        if (axRecord.ValidateWrite())
                        {
                            axRecord.Insert();
                            ax.TTSCommit();
                            ret = true;
              
                        }
                        else
                        {
                            ax.CallStaticClassMethod("CAMErrorInfo""throwInfo");
                            ax.TTSAbort();
                        }
                    }
                    ax.Logoff();
                }
                catch (Exception ex)
                {
                    ax.Logoff();
                    MessageBox.Show(ex.Message);
                    //throw new Exception(ex.Message);
                }

                return ret;
            }

            /// <summary>
            
    /// Update Method
            
    /// </summary>
            
    /// <param name="tableName">表名</param>
            
    /// <param name="pkey">键名称</param>
            
    /// <param name="where">条件值</param>
            
    /// <param name="dict">字段值字典</param>
            public static Boolean Update(String tableName,String pkey,String where,IDictionary<String, Object> dict)
            {
                return Update(tableName, pkey, wherenullnull, dict);
            }

            /// <summary>
            
    /// Update Method
            
    /// </summary>
            
    /// <param name="tableName">表名</param>
            
    /// <param name="pkey">键名称</param>
            
    /// <param name="where">条件值</param>
            
    /// <param name="dict">字段值字典</param>
            public static Boolean Update(String tableName, String pkey1, String where1, String pkey2, String where2, IDictionary<String, Object> dict)
            {
                return Update(tableName, pkey1, where1, pkey2, where2,null,null, dict);
            }

            /// <summary>
            
    /// Update Method
            
    /// </summary>
            
    /// <param name="tableName">表名</param>
            
    /// <param name="pkey">键名称</param>
            
    /// <param name="where">条件值</param>
            
    /// <param name="dict">字段值字典</param>
            public static Boolean Update(String tableName, String pkey1, String where1,String pkey2,String where2,String pkey3,String where3,IDictionary<String, Object> dict)
            {
                Boolean ret = false;
                Axapta ax = new Axapta();
                NetworkCredential nc = new NetworkCredential("kurodo""abc@123""kurodo.cn");
                try
                {
                    ax.LogonAs("kurodo""kurodo", nc, nullnullnullnull);

                    IEnumerator<KeyValuePair<String, Object>> dem = dict.GetEnumerator();
                    using (AxaptaRecord axRecord = ax.CreateAxaptaRecord(tableName))
                    {
                        String sql = String.Empty;
                        ax.TTSBegin();
                        if (pkey3 != null)
                        {
                            sql = String.Format("select forupdate * from %1 where %1.{0} == '{1}' && %1.{2} == {3} && %1.{4} == {5}", pkey1, where1,pkey2,where2,pkey3,where3);
                        }
                        else if (pkey2 != null)
                        {
                            sql = String.Format("select forupdate * from %1 where %1.{0} == '{1}' && %1.{2} == {3}", pkey1, where1, pkey2, where2);
                        }
                        else
                        {
                            sql = String.Format("select forupdate * from %1 where %1.{0} == '{1}'", pkey1, where1);
                        }
                        axRecord.ExecuteStmt(sql);

                        if (axRecord.Found)
                        {

                            while (dem.MoveNext())
                            {
                                string key = dem.Current.Key;
                                Object value = dem.Current.Value;

                                axRecord.set_Field(key, value);
                            }

                            //if (axRecord.ValidateWrite())
                            
    //{
                                axRecord.Update();
                                ax.TTSCommit();
                                ret = true;
                            //}
                        }
                        else
                            ax.TTSAbort();
                    }
                    ax.Logoff();
                }
                catch (Exception ex)
                {
                    ax.Logoff();
                    throw new Exception(ex.Message);
                }

                return ret;
            }

            /// <summary>
            
    /// Select Method
            
    /// </summary>
            
    /// <param name="tableName">表名称</param>
            
    /// <param name="pkey">键名称</param>
            
    /// <param name="where">条件值</param>
            
    /// <param name="fieldList">字段列表</param>
            
    /// <returns></returns>
            public static IList<Object> Select(String tableName, String pkey, String where, IList<String> fieldList)
            {
                return Select(tableName, pkey, wherenullnull, fieldList);
            }

            /// <summary>
            
    /// Select Method
            
    /// </summary>
            
    /// <param name="tableName">表名称</param>
            
    /// <param name="pkey1">键名称1</param>
            
    /// <param name="where1">条件值1</param>
            
    /// <param name="pkey2">键名称2</param>
            
    /// <param name="where2">条件值2</param>
            
    /// <param name="fieldList">字段列表</param>
            
    /// <returns></returns>
            public static IList<Object> Select(String tableName, String pkey1, String where1,String pkey2,String where2, IList<String> fieldList)
            {
                IList<Object> ret;
                Axapta ax = new Axapta();
                NetworkCredential nc = new NetworkCredential("kurodo""abc@123""kurodo.cn");
                try
                {
                    ax.LogonAs("kurodo""kurodo", nc, nullnullnullnull);

                    ret = new List<Object>();

                    using (AxaptaRecord axRecord = ax.CreateAxaptaRecord(tableName))
                    {
                        String sql = String.Empty;
                        if (pkey2 != null)
                        {
                            sql = String.Format("select * from %1 where %1.{0} == '{1}' && %1.{2} == {3}", pkey1, where1, pkey2, where2);
                        }
                        else
                        {
                            sql = String.Format("select * from %1 where %1.{0} == '{1}'", pkey1, where1);
                        }
                        axRecord.ExecuteStmt(sql);

                        if (axRecord.Found)
                        {
                            foreach (String field in fieldList)
                            {
                                ret.Add(axRecord.get_Field(field));
                            }
                        }

                    }
                    ax.Logoff();
                }
                catch (Exception ex)
                {
                    ax.Logoff();
                    throw new Exception(ex.Message);
                }

                return ret;
            }

            /// <summary>
            
    /// Call Table Method
            
    /// </summary>
            
    /// <param name="tableName">表名称</param>
            
    /// <param name="callName">方法名称</param>
            
    /// <returns></returns>
            public static Object Call(String tableName, String callName)
            {
                return Call(tableName, callName, null);
            }

            /// <summary>
            
    /// Call Table Method
            
    /// </summary>
            
    /// <param name="tableName">表名称</param>
            
    /// <param name="callName">方法名称</param>
            
    /// <param name="parmList">参数列表</param>
            
    /// <returns></returns>
            public static Object Call(String tableName,String callName,params Object[] parmList)
            {
                Object ret = null;
                Axapta ax = new Axapta();
                NetworkCredential nc = new NetworkCredential("kurodo""abc@123""kurodo.cn");
                try
                {
                    ax.LogonAs("kurodo""kurodo", nc, nullnullnullnull);

                    using (AxaptaRecord axRecord = ax.CreateAxaptaRecord(tableName))
                    {
                        ret = axRecord.Call(callName, parmList);
                    }
                    ax.Logoff();
                }
                catch (Exception ex)
                {
                    ax.Logoff();
                    throw new Exception(ex.Message);
                }

                return ret;
            }

            /// <summary>
            
    /// Call Display Method 
            
    /// </summary>
            
    /// <param name="tableName">表名称</param>
            
    /// <param name="methodName">方法名称</param>
            
    /// <param name="findParam">参数列表</param>
            
    /// <returns></returns>
            public static Object CallDisplay(String tableName, String methodName, params Object[] findParam)
            {
                Object ret = null;
                Axapta ax = new Axapta();
                NetworkCredential nc = new NetworkCredential("kurodo""abc@123""kurodo.cn");
                try
                {
                    ax.LogonAs("kurodo""kurodo", nc, nullnullnullnull);
                    using (AxaptaRecord axRecord = ax.CallStaticRecordMethod(tableName, "find", findParam) as AxaptaRecord)
                    {
                        ret = axRecord.Call(methodName);
                    }
                    ax.Logoff();
                }
                catch (Exception ex)
                {
                    ax.Logoff();
                    throw new Exception(ex.Message);
                }

                return ret;
            }

            /// <summary>
            
    /// Call StaticClass Method
            
    /// </summary>
            
    /// <param name="className">类名称</param>
            
    /// <param name="methodName">方法名称</param>
            
    /// <returns></returns>
            public static Object CallStaticClass(String className, String methodName)
            {
                return CallStaticClass(className, methodName, null);
            }

            /// <summary>
            
    /// Call StaticClass Method
            
    /// </summary>
            
    /// <param name="className">类名称</param>
            
    /// <param name="methodName">方法名称</param>
            
    /// <param name="paramList">参数列表</param>
            
    /// <returns></returns>
            public static Object CallStaticClass(String className, String methodName, params Object[] paramList)
            {
                Object ret = null;
                Axapta ax = new Axapta();
                NetworkCredential nc = new NetworkCredential("kurodo""abc@123""kurodo.cn");
                try
                {
                    ax.LogonAs("kurodo""kurodo", nc, nullnullnullnull);

                    ret = ax.CallStaticClassMethod(className, methodName, paramList);

                    ax.Logoff();
                }
                catch (Exception ex)
                {
                    ax.Logoff();
                    throw new Exception(ex.Message);
                }

                return ret;
            }

            /// <summary>
            
    /// Call Job
            
    /// </summary>
            
    /// <param name="jobName">Job名称</param>
            public static void CallJob(String jobName)
            {
                CallJob(jobName, nullnull);
            }

            /// <summary>
            
    /// Call Job
            
    /// </summary>
            
    /// <param name="jobName">Job名称</param>
            
    /// <param name="className">类名称</param>
            public static void CallJob(String jobName, String className)
            {
                CallJob(jobName, className, null);
            }

            /// <summary>
            
    /// Call Job
            
    /// </summary>
            
    /// <param name="jobName">Job名称</param>
            
    /// <param name="className">类名称</param>
            
    /// <param name="paramList">参数列表</param>
            public static void CallJob(String jobName,String className,params Object[] paramList)
            {
                Axapta ax = new Axapta();
                AxaptaObject ao = null;

                if (className != null)
                {
                    ao = ax.CreateAxaptaObject(className,paramList);
                }

                NetworkCredential nc = new NetworkCredential("kurodo""abc@123""kurodo.cn");
                try
                {
                    ax.LogonAs("kurodo""kurodo", nc, nullnullnullnull);

                    ax.CallJob(jobName,ao);

                    ax.Logoff();
                }
                catch (Exception ex)
                {
                    ax.Logoff();
                    throw new Exception(ex.Message);
                }
            }
        }
    }
  • 相关阅读:
    Java实体书写规范
    Mybatis配置中遇到的问题和问题分析
    Ubuntu下eclipse的Extjs提示插件安装
    Ubuntu中root用户和user用户的相互切换
    ubuntu下启动和关闭tomcat的简单方法
    Ubuntu上安装Maven Eclipse以及配置
    IE8兼容<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
    心情
    更改Eclipse下Tomcat的部署目录
    Tomcat:IOException while loading persisted sessions: java.io.EOFException 解决
  • 原文地址:https://www.cnblogs.com/Kurodo/p/2309808.html
Copyright © 2011-2022 走看看