使用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#代码如下  这里我用的是聚合数据的参考代码

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Net;
  6. using System.IO;
  7. using Xfrog.Net;
  8. using System.Diagnostics;
  9. using System.Web;
  10.  
  11. namespace ConsoleAPI
  12. {
  13. class Program
  14. {
  15. static void Main(string[] args)
  16. {
  17. string url = "http://apis.juhe.cn/mobile/get";
  18.  
  19. var parameters = new Dictionary<string, string>();
  20.  
  21. parameters.Add("phone" , ""); //需要查询的手机号码
  22. parameters.Add("key", "您申请的ApiKey");//你申请的key
  23.  
  24. string result = sendPost(url, parameters, "get");
  25.  
  26. // 代码中JsonObject类下载地址:http://download.csdn.net/download/gcm3206021155665/7458439
  27. JsonObject newObj = new JsonObject(result);
  28. String errorCode = newObj["error_code"].Value;
  29.  
  30. if (errorCode == "")
  31. {
  32. Debug.WriteLine("成功");
  33. Debug.WriteLine(newObj);
  34. }
  35. else
  36. {
  37. //Debug.WriteLine("请求异常");
  38. Debug.WriteLine(newObj["error_code"].Value+":"+newObj["reason"].Value);
  39. }
  40.  
  41. }
  42.  
  43. /// <summary>
  44. /// Http (GET/POST)
  45. /// </summary>
  46. /// <param name="url">请求URL</param>
  47. /// <param name="parameters">请求参数</param>
  48. /// <param name="method">请求方法</param>
  49. /// <returns>响应内容</returns>
  50. static string sendPost(string url, IDictionary<string, string> parameters, string method)
  51. {
  52. if (method.ToLower() == "post")
  53. {
  54. HttpWebRequest req = null;
  55. HttpWebResponse rsp = null;
  56. System.IO.Stream reqStream = null;
  57. try
  58. {
  59. req = (HttpWebRequest)WebRequest.Create(url);
  60. req.Method = method;
  61. req.KeepAlive = false;
  62. req.ProtocolVersion = HttpVersion.Version10;
  63. req.Timeout = ;
  64. req.ContentType = "application/x-www-form-urlencoded;charset=utf-8";
  65. byte[] postData = Encoding.UTF8.GetBytes(BuildQuery(parameters, "utf8"));
  66. reqStream = req.GetRequestStream();
  67. reqStream.Write(postData, , postData.Length);
  68. rsp = (HttpWebResponse)req.GetResponse();
  69. Encoding encoding = Encoding.GetEncoding(rsp.CharacterSet);
  70. return GetResponseAsString(rsp, encoding);
  71. }
  72. catch (Exception ex)
  73. {
  74. return ex.Message;
  75. }
  76. finally
  77. {
  78. if (reqStream != null) reqStream.Close();
  79. if (rsp != null) rsp.Close();
  80. }
  81. }
  82. else
  83. {
  84. //创建请求
  85. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url + "?" + BuildQuery(parameters, "utf8"));
  86.  
  87. //GET请求
  88. request.Method = "GET";
  89. request.ReadWriteTimeout = ;
  90. request.ContentType = "text/html;charset=UTF-8";
  91. HttpWebResponse response = (HttpWebResponse)request.GetResponse();
  92. Stream myResponseStream = response.GetResponseStream();
  93. StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
  94.  
  95. //返回内容
  96. string retString = myStreamReader.ReadToEnd();
  97. return retString;
  98. }
  99. }
  100.  
  101. /// <summary>
  102. /// 组装普通文本请求参数。
  103. /// </summary>
  104. /// <param name="parameters">Key-Value形式请求参数字典</param>
  105. /// <returns>URL编码后的请求数据</returns>
  106. static string BuildQuery(IDictionary<string, string> parameters, string encode)
  107. {
  108. StringBuilder postData = new StringBuilder();
  109. bool hasParam = false;
  110. IEnumerator<KeyValuePair<string, string>> dem = parameters.GetEnumerator();
  111. while (dem.MoveNext())
  112. {
  113. string name = dem.Current.Key;
  114. string value = dem.Current.Value;
  115. // 忽略参数名或参数值为空的参数
  116. if (!string.IsNullOrEmpty(name))//&& !string.IsNullOrEmpty(value)
  117. {
  118. if (hasParam)
  119. {
  120. postData.Append("&");
  121. }
  122. postData.Append(name);
  123. postData.Append("=");
  124. if (encode == "gb2312")
  125. {
  126. postData.Append(HttpUtility.UrlEncode(value, Encoding.GetEncoding("gb2312")));
  127. }
  128. else if (encode == "utf8")
  129. {
  130. postData.Append(HttpUtility.UrlEncode(value, Encoding.UTF8));
  131. }
  132. else
  133. {
  134. postData.Append(value);
  135. }
  136. hasParam = true;
  137. }
  138. }
  139. return postData.ToString();
  140. }
  141.  
  142. /// <summary>
  143. /// 把响应流转换为文本。
  144. /// </summary>
  145. /// <param name="rsp">响应流对象</param>
  146. /// <param name="encoding">编码方式</param>
  147. /// <returns>响应文本</returns>
  148. static string GetResponseAsString(HttpWebResponse rsp, Encoding encoding)
  149. {
  150. System.IO.Stream stream = null;
  151. StreamReader reader = null;
  152. try
  153. {
  154. // 以字符流的方式读取HTTP响应
  155. stream = rsp.GetResponseStream();
  156. reader = new StreamReader(stream, encoding);
  157. return reader.ReadToEnd();
  158. }
  159. finally
  160. {
  161. // 释放资源
  162. if (reader != null) reader.Close();
  163. if (stream != null) stream.Close();
  164. if (rsp != null) rsp.Close();
  165. }
  166. }
  167. }
  168. }

是不是很麻烦?当然现在可能你们公司都有大佬写好了一些东西 不用写这么多代码来调用但是相比于GeneXus调用 简单

  1. //拼接聚合API调用地址
  2. &vUrlStr = "apis.juhe.cn/mobile/get?"
  3. //拼接参数:手机号
  4. &vUrlStr = &vUrlStr +"phone="+&iPhone
  5. //拼接参数:APPKEY
  6. &vUrlStr = &vUrlStr +"&key=1234567890"
  7. //拼接参数:dtype(默认json)
  8. &vUrlStr = &vUrlStr +"&dtype="
  9. //调用聚合API调用地址
  10. &httpclient.Host = &vUrlStr
  11. &httpclient.Execute('GET', '')
  12. &result = &httpclient.ToString()
  13. //接口返回Json
  14. &oResult.FromJson(&result)

通过定义变量然后拼接接口需要的参数调用内置函数&httpclient以及他的一些属性最后用内置函数FromJson解析返回的Json数据就结束了  炒鸡简单

当然简简单单这么些篇幅完全不能够介绍完GeneXus所拥有的能力  接下来我会将一些东西慢慢展示给你们大家

GeneXus学习笔记——入门篇的更多相关文章

  1. PHP学习笔记 - 入门篇(5)

    PHP学习笔记 - 入门篇(5) 语言结构语句 顺序结构 eg: <?php $shoesPrice = 49; //鞋子单价 $shoesNum = 1; //鞋子数量 $shoesMoney ...

  2. PHP学习笔记 - 入门篇(4)

    PHP学习笔记 - 入门篇(4) 什么是运算符 PHP运算符一般分为算术运算符.赋值运算符.比较运算符.三元运算符.逻辑运算符.字符串连接运算符.错误控制运算符. PHP中的算术运算符 算术运算符主要 ...

  3. PHP学习笔记 - 入门篇(3)

    PHP学习笔记 - 入门篇(3) 常量 什么是常量 什么是常量?常量可以理解为值不变的量(如圆周率):或者是常量值被定义后,在脚本的其他任何地方都不可以被改变.PHP中的常量分为自定义常量和系统常量 ...

  4. PHP学习笔记--入门篇

    PHP学习笔记--入门篇 一.Echo语句 1.格式 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来) 如下代码 <?php echo "Hello world! ...

  5. PHP学习笔记 - 入门篇(2)

    PHP入门篇(2) 什么是变量 变量是用于存储值的容器,如下 $var = @"6666" 如何定义变量 定义变量就是像服务器的内存申请空间,用来存储数据,eg: <?php ...

  6. JavaScript学习笔记 - 入门篇(1)- 准备

    为什么学习JavaScript 一.你知道,为什么JavaScript非常值得我们学习吗? 所有主流浏览器都支持JavaScript. 目前,全世界大部分网页都使用JavaScript. 它可以让网页 ...

  7. android学习笔记(入门篇)

    +号只是当你第一次定义一个资源ID的时候需要, 告诉SDK此资源ID需要被创建出来 对于所有的View默认的权重是0,如果你只设置了一个View的权重大于0,那么这个View将占据除去别的View本身 ...

  8. Android攻城狮学习笔记—入门篇三

    第十章 CheckBox 与其他控件类似 有自己的监听方法 实现监听 并定义被选中或取消后的操作 第十一章 RadioGroup和RadioButton RadioGroup是RadioButton的 ...

  9. Android攻城狮学习笔记—入门篇二

    第七章  跑马灯 activity_main.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/an ...

随机推荐

  1. mongodb的安装与启动(centos7)

    公司迁移mongodb,查了半天资料,各种考证,各种资讯,最后我选择很野蛮的直接把库和日志直接scp过来了....... 记录下如何安装和启动mongodb: 1.解压mongodb: [root@i ...

  2. SLAM拾萃(1):octomap

    前言 大家好,时隔多年之后,我又开始了博客旅程.经历了很多事情之后呢,我发现自己的想法真的很简单:好好读书做课题,闲下来时写写博客,服务大家.所以我会继续写SLAM相关的博客.如果你觉得它对你有帮助, ...

  3. 12 Overlap Graphs

    Problem A graph whose nodes have all been labeled can be represented by an adjacency list, in which ...

  4. deploy: [mkdir] Created dir: C:\Program Files\Java\apache-cxf-2.4.2\samples\java_first_pojo\build [loadfile] Do not set property srcbuild.classpath as its length is 0.

    使用CXF的错误,错误是说我的路径有错误,因为路径错误所以无法运行程序 (1)原因,我将其放入了Program Files文件夹下,所以,其不好使 分析原因: 目录路径错误,目录中不能有空格,否则其解 ...

  5. <网络攻防实践> 课程总结20169216

    课程总结20169216 每周作业链接汇总 第一周作业:Linux基础入门(1-5).基本概念及操作 第二周作业:linux基础入门(6-11).网络攻防技术概述网络攻防试验环境搭构.Kali教学视频 ...

  6. MFC中的一般经验之谈2

    MFC一般类成员m_iAge,命名原则,且MFC中类定义以C开头原则,这些原则便于理解以及增强代码的可读性.MFC是一个用窗口作为用户交互的方式,一般框架类.视图类.以及窗口上的控件都是继承CWnd类 ...

  7. 解决同一程序在并行同时调用时,出现资源等待错误-使用DBMS_LOCK.sleep

    解决同一程序被并行同时调用时,出现资源等待错误问题. 使用DBMS_LOCK.sleep (10); PROCEDURE prc_lock_test(v_engine_id in varchar, v ...

  8. NativeScript的开发体会

    上个月开始,国内的主流技术网站开始在推荐NativeScrpit,"js+xml写跨终端app"."原生体验挡不住",很多网站都拿这个当做宣传NativeScr ...

  9. DotNetBar.MetroTilePanel 样式、加载数据、获取数据

    描述下:MetroTilePanel包含子集ItemContainer  子集下面又包含子集MetroTileItem  目前我用到的就是这三层 因为需求所以整个模块全部由代码实现 1.ItemCon ...

  10. ASP.NET IIS 支持PUT、DELETE请求

    IIS 本身不支持PUT.DELETE请求,但可以通过一下方法修改进而达到目的 删除IIS安装的WebDav模块,选择你的项目,右边有个“模块”,双击它:找到WebDavModule,删除它(不推荐, ...