1. 程式人生 > >Asp.net程式碼實現AML查詢並返回使用者實體

Asp.net程式碼實現AML查詢並返回使用者實體

1、首先建立Innovator連線。

HttpServerConnection conn = IomFactory.CreateHttpServerConnection("http://localhost/InnovatorServer/", "InnovatorSolutions", "admin", "innovator");

Item login = conn.Login();

Innovator inn = IomFactory.CreateInnovator(conn);

2、拼接AML字串。

string aml = "<AML><Item type='User' action='get'><id>3C70CC6FD09B480092E49C12D4845392</id></Item></AML>"; //單條資料

//string aml = "<AML><Item type='User' action='get'></Item></AML>"; //多條資料

3、執行applyAML方法並返回Item物件。

Item item = inn.applyAML(aml);

if (item != null)

{

}

 4、處理返回soap結果。 通常情況下處理 dom.InnerXML內容即可。另外可以用node及nodeList來判斷。當item.node != null時得到的是一條資料,當tem.nodeList != null返回多條資料。

 if (item.node != null)

                {

                    //提取一個物件

                    string result = item.dom.InnerXml;

                    ModelHelper helper = new ModelHelper();

                    //UserModel userModel = helper.GetUserModel(result);

                    UserModel user = helper.GetModelFromXml<UserModel>(result);

                }

                else if (item.nodeList != null)

                {

                    //提取多個物件

                    string result = item.dom.InnerXml;

 

                    ModelHelper helper = new ModelHelper();

                    List<UserModel> list = helper.GetModelListFromXml<UserModel>(result);

                }

                else

                {

                    string cc = "no data";

                }

5、使用實體類生成工具。將SQL Server表自動生成實體類的工具很多,我使用過的包括 Entity Framework、動軟.net程式碼生成器、Code Smith程式碼生成工具等。其中cnblogs上的鋼鋼大神寫了一個小工具,非常好用,有興趣的可以去下載

https://www.cnblogs.com/xugang/archive/2010/05/19/1739474.html

 

6、儲存使用者實體類。

 

7、呼叫返回使用者實體方法(泛型)。

UserModel user = helper.GetModelFromXml<UserModel>(result);

8、讀取soap字串引數。

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.LoadXml(xml);

XmlNodeList nodeList = xmlDoc.GetElementsByTagName("Item");

9、取得使用者實體屬性列表。

PropertyInfo[] propertyList = typeof(T).GetProperties(); 

10、建立實體類例項。

T obj = Activator.CreateInstance<T>();//建立指定型別例項

11、迴圈實體屬性及soap節點。當屬性名稱和節點名稱相同時,給實體類例項賦值。 

foreach (PropertyInfo property in propertyList)

            {

                for (int i = 0; i < node.ChildNodes.Count; i++)

                {

                    if (node.ChildNodes[i].Name.ToLower() == property.Name.ToLower())

                    {

                        property.SetValue(obj, node.ChildNodes[i].InnerText, null);

                        break;

                    }

                }

            }

BTW,如果需要得到使用者列表,在迴圈soap節點時把實體類例項obj儲存在List中即可。