APP越来越流行,客户需要开发APP,对习惯了pb开发者来说,如何开发APP是个让人头大的问题。其实pb开发APP是完全可行的。
下面就通过示例,一步步都大家如何开发一个APP。先上几张最终的效果图
示例和后面的所有对象可以从 QQ群:345559891 下载
建立workspace命名为test, 建立一个application命名为plugin,创建一个全局函数satrda_service,导入n_satapi对象(对象用于与应用交互)
这些相信各位pb老司机都很熟悉,就不多说了。最后如图:
当我们在浏览器或者应用进行Http请求相应的资源时,会调用到satrda_service,我们在satrda_service里面实现对应的逻辑就行
新建一个不可视对象,这里我取名为n_apptest,用于统一处理APP相关的逻辑。
在satrda_service里面添加代码
/*
* 客户端请求服务器,会首先调用到该函数
* @as_url url地址
* @al_context http上下文,用于http相关操作
*/
//n_api.of_writejson( al_context, "test show")
n_apptest ln_test
ln_test = create n_apptest
ln_test.of_init( al_context)
ln_test.of_service(as_url)
destroy ln_test
of_init主要是保存al_context的值到n_apptest实例变量,便于后面函数调用。主要逻辑在of_service中,我们关心of_service代码就可以
当浏览器请求相应的文件如 浏览器输入 http://127.0.0.1:5555/pbtest/login.html,会调用到of_service方法里面,此时通过参数as_url的值 /pbtest/login.html可以判断出需要调用login.html,我们只要调用satrda提供的文件输出函数就行了,代码如下
//加载html,css,js等
string ls_path,ls_dir
ls_path = "myapp/" + as_url
n_api.ServeContent(il_context,ls_path)
当app或者浏览器通过http请求服务时,我们可以响应请求并给出回应,如请求 http://127.0.0.1:5555/pbtest/api/login.do进行登录,通过表单传入了account和password两个数据过来(如何调用的可以参考html或者pb示例)。
//处理登录
if as_url = "api/login.do" then
ls_user = n_api.of_formvalue( il_context, "account")
ls_pwd = n_api.of_formvalue( il_context, "password")
n_api.of_writeLog(n_api.log_debug,"account:" + ls_user)
//通过数据库查询ls_user,ls_pwd是否存在,建议通过satrda的连接去查询,更高效
//这里不进行查询,直接返回
// if ls_user = "satrda" and ls_pwd = "satrda" then
// lbl_login = true
// end if
ll_session = n_api.SessionStart(il_context)
if ll_session <> 0 then
n_api.SessionSet(ll_session,"user",ls_user)
ls_token = n_api.of_sessionid( ll_session)
end if
//返回json数据
ls_json = '{"success": true,"token":"' + ls_token + '"}'
n_api.of_writeLog(n_api.log_debug,"json:" + ls_json)
n_api.of_writeJson(il_context,ls_json)
return
end if
上面的代码通过
ls_user = n_api.of_formvalue( il_context, "account")
ls_pwd = n_api.of_formvalue( il_context, "password")
取出用户名和密码,可以数据窗口或者嵌入式sql语句判断用户名和密码是否正确,如果正确,那么我们生成一个session(后面讲解)
并给调用端返回一个代表成功的json语句具体见n_api.of_writeJson的定义,这里就不详细说明了
satrda中的session是保存在服务端的一些信息,实际业务中我们需要在服务端保存一些信息,由于http是无状态的,每次请求都是独立的,所以服务器信息通过session来保存。如每次请求时,如何知道是否已经登录过,某些操作需要登录后才能获取,我们就把登录信息保存在session里。
session相关的操作
ll_session = n_api.SessionStart(il_context) 会按照先后顺序分别从cookies,formdata和url参数中查找是否有存在key为"token"的值,如果存在就把相应的session取出来,如果不存在就会新建一个session
n_api.SessionSet(ll_session,"user",ls_user)把用户名存入到session中,key为user,下次可以通过key取出,见n_api中SessionGet说明
ls_token = n_api.of_sessionid( ll_session)取session的id,这里取出id并通过json方式告诉客户端