GeneXus學習筆記——入門篇


使用GeneXus做開發做了有一段時間了 卻發現一個問題(O_O)?就是除了相關的Wiki外 網上其他地方的相關資料都很少 於是乎我就想在這記錄一些東西 來幫助以后會用到的人(°ー°〃)

那么第一個問題:什么是GeneXus ?? w(゚Д゚)w?

這個問題我想大部分人都很陌生 首先可能先入為主的以為是一個技術 但是無論是從貼吧圈子里都很少或者說幾乎沒聽過這個詞語 對吧?其實這個GeneXus是一款從國外傳進來的開發工具ㄟ( ▔, ▔ )ㄏ

欸 Σ(⊙▽⊙"a 現在主流的語言都會有自己的一個配套的開發工具 Java有Idea  C#有Vs  安卓有自己的Android Studio 等等諸如此類的  那么這是不是某種語言的開發工具呢?

其實也不是-_-||使用它的話可以同時開發javaC# 以及安卓 IOS等應用程序 是不是聽得很奇怪 這都不是一個平台的東西     PS:(ˉ▽ ̄~) 切~~ C#天下第一!!破音!~( ̄0 ̄)/  請繼續往下看

首先傳統模式的開發由於受成本的控制,不可能所有開發人員都是經驗非常豐富的。人員能力參差不齊導致代碼 Bug非常多 其次就是隨着多元化的時代的腳步 公司人員投入的成本也很大

比如一個項目可能就需要公司的前端設計+后端開發服務然后是其他的公司的測試啊什么的  或者說一個人身上需要參與着幾個項目 比如這個項目還需要用到IOS開發 這時候公司又沒有 這類人員

公司招了一個 寫完這個項目又不需要了 然后踢了 哈哈哈哈哈╮(╯▽╰)╭ 又不是沒有這樣的事 這個時候GeneXus的作用就體現出來了 首先比如一個項目可能前后需要10個人參與 那么按照我們的要求 使用GeneXus的團隊只需要3個人 !!理由如下:

1.幾乎全自動化的代碼生成:我們使用的過程中只需要關注邏輯代碼的編寫 其底層的代碼完全由GeneXus替代 相當於你告訴它(我想吃雪糕 你從抽屜里拿錢 然后過馬路 過馬路時注意車輛  和店員說買個雪糕 藍莓味的 然后回來給我)剩下的事情不需要操心 它自動幫你完成 只要邏輯沒問題 那么就不會發生代碼層級的bug.

2.代碼的復用性: 我們只需要寫一套業務邏輯 這套代碼就能直接生成安卓、IOS 、C# 以及Java端的應用  Σ( ° △ °|||)︴ 沃日!唯一可能改變的就只有頁面的布局之類的 但是不用急請繼續往下看

3.提供各種Web及移勱端UI模板,模塊化配置 里面自帶了各種Web端的UI設計 不僅如此 移動端IOS 和安卓  WebForm  甚至到塞班系統都有集成 選個模板修修改改就可以了 當然 你完全可以自己找一個UI設計

畫出你想要的 然后 拖拉拽 OK  你沒看錯 是直接拖拉拽 然后改一下名字顯示 綁定一下變量或者Grid 然后把之前Web端寫好的邏輯挪過來 點擊安卓環境 生成 完事..... 超方便的說 (* ̄ω ̄)

4.最后就是簡單易學,學習GeneXus只要掌插各個對象的使用方法就可以,不用陷入各種不同技術的細節中。因為之前我就說過 GeneXus有自己的技術團隊 會把當下熱門的技術進行學習了解摸透 然后通過自己的方式集成到IDE中

我們要做的就只有調用就好了 這么說你可能還沒有明確的概念 我舉個簡單的例子吧 比如現在我調用一個接口獲取電話號碼的歸屬地  當然這里只是舉個例子 C#代碼如下  這里我用的是聚合數據的參考代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using Xfrog.Net;
using System.Diagnostics;
using System.Web;


namespace ConsoleAPI
{
    class Program
    {
        static void Main(string[] args)
        {
            string url = "http://apis.juhe.cn/mobile/get";

            var parameters = new Dictionary<string, string>();

            parameters.Add("phone" , "13429667914"); //需要查詢的手機號碼
            parameters.Add("key", "您申請的ApiKey");//你申請的key

            string result = sendPost(url, parameters, "get");
            
            // 代碼中JsonObject類下載地址:http://download.csdn.net/download/gcm3206021155665/7458439
            JsonObject newObj = new JsonObject(result);
            String errorCode = newObj["error_code"].Value;

            if (errorCode == "0")
            {
                Debug.WriteLine("成功");
                Debug.WriteLine(newObj);
            }
            else
            {
                //Debug.WriteLine("請求異常");
                Debug.WriteLine(newObj["error_code"].Value+":"+newObj["reason"].Value);
            }


        }

        /// <summary>
        /// Http (GET/POST)
        /// </summary>
        /// <param name="url">請求URL</param>
        /// <param name="parameters">請求參數</param>
        /// <param name="method">請求方法</param>
        /// <returns>響應內容</returns>
        static string sendPost(string url, IDictionary<string, string> parameters, string method)
        {
            if (method.ToLower() == "post")
            {
                HttpWebRequest req = null;
                HttpWebResponse rsp = null;
                System.IO.Stream reqStream = null;
                try
                {
                    req = (HttpWebRequest)WebRequest.Create(url);
                    req.Method = method;
                    req.KeepAlive = false;
                    req.ProtocolVersion = HttpVersion.Version10;
                    req.Timeout = 60000;
                    req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
                    byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8"));
                    reqStream = req.GetRequestStream();
                    reqStream.Write(postData, 0, postData.Length);
                    rsp = (HttpWebResponse)req.GetResponse();
                    Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
                    return GetResponseAsString(rsp, encoding);
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
                finally
                {
                    if (reqStream != null) reqStream.Close();
                    if (rsp != null) rsp.Close();
                }
            }
            else
            {
                //創建請求
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "?" + BuildQuery(parameters, "utf8"));
 
                //GET請求
                request.Method = "GET";
                request.ReadWriteTimeout = 5000;
                request.ContentType = "text/html;charset=UTF-8";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream myResponseStream = response.GetResponseStream();
                StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));

                //返回內容
                string retString = myStreamReader.ReadToEnd();
                return retString;
            }
        }

        /// <summary>
        /// 組裝普通文本請求參數。
        /// </summary>
        /// <param name="parameters">Key-Value形式請求參數字典</param>
        /// <returns>URL編碼后的請求數據</returns>
        static string BuildQuery(IDictionary<string, string> parameters, string encode)
        {
            StringBuilder postData = new StringBuilder();
            bool hasParam = false;
            IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
            while (dem.MoveNext())
            {
                string name = dem.Current.Key;
                string value = dem.Current.Value;
                // 忽略參數名或參數值為空的參數
                if (!string.IsNullOrEmpty(name))//&& !string.IsNullOrEmpty(value)
                {
                    if (hasParam)
                    {
                        postData.Append("&");
                    }
                    postData.Append(name);
                    postData.Append("=");
                    if (encode == "gb2312")
                    {
                        postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312")));
                    }
                    else if (encode == "utf8")
                    {
                        postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));
                    }
                    else
                    {
                        postData.Append(value);
                    }
                    hasParam = true;
                }
            }
            return postData.ToString();
        }
 
        /// <summary>
        /// 把響應流轉換為文本。
        /// </summary>
        /// <param name="rsp">響應流對象</param>
        /// <param name="encoding">編碼方式</param>
        /// <returns>響應文本</returns>
        static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
        {
            System.IO.Stream stream = null;
            StreamReader reader = null;
            try
            {
                // 以字符流的方式讀取HTTP響應
                stream = rsp.GetResponseStream();
                reader = new StreamReader(stream, encoding);
                return reader.ReadToEnd();
            }
            finally
            {
                // 釋放資源
                if (reader != null) reader.Close();
                if (stream != null) stream.Close();
                if (rsp != null) rsp.Close();
            }
        }
    }
} 

 是不是很麻煩?當然現在可能你們公司都有大佬寫好了一些東西 不用寫這么多代碼來調用但是相比於GeneXus調用 簡單

//拼接聚合API調用地址
&vUrlStr = "apis.juhe.cn/mobile/get?"
//拼接參數:手機號
&vUrlStr = &vUrlStr +"phone="+&iPhone
//拼接參數:APPKEY
&vUrlStr = &vUrlStr +"&key=1234567890"
//拼接參數:dtype(默認json)
&vUrlStr = &vUrlStr +"&dtype="
//調用聚合API調用地址
&httpclient.Host = &vUrlStr
&httpclient.Execute('GET', '')
&result = &httpclient.ToString()
//接口返回Json
&oResult.FromJson(&result)
        

通過定義變量然后拼接接口需要的參數調用內置函數&httpclient以及他的一些屬性最后用內置函數FromJson解析返回的Json數據就結束了  炒雞簡單

當然簡簡單單這么些篇幅完全不能夠介紹完GeneXus所擁有的能力  接下來我會將一些東西慢慢展示給你們大家

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM