ewp开发

hg/svn使用
代码部署
    1.代码下载 代码分支路径
    2.编译:代码库代码和生产环境区别
    3.编译:启动,项目模块之间的依赖,需要了解生产环境的区别,只有修改erl时才需要打包make。
代码备份和提交
    1.养成代码备份习惯 打包解压 tar-zcf tar-zxf。
ets
    erlang term storage的缩写,一个基于内存kv table,类似于汇编的编辑器,仅次于cpu

    
1.hg 上传下载修改删除。
2.app的页面的修改。
3.数据库和子表的操作。





ewp的基本流程
    1.写一个xhtml,里面有一些样式和空的div,用来填充一些数据。
    2.写一个erl,模块函数里面,定义了多个宏,先处理参数,而后请求接口,用一个函数
    Response1 = ebank_utils:ebank_invoke_procedure({"ebankhost","mzh024",?INSERT_DEFAULT(ParamList)})
    前面是接口后面是函数(这个应该是在adaptor.conf文件里的东西),最后是封装传过去的数据。返回一个结果response。
     CsKey = ewp_channel_util:channel_adapter_cs_key(Channel, TranCode),其中channel和trancode是传过来的数据。
    再获取一个cskey,这是一个html页面,把model放到view中,可以生成json数据,看如何填充到页面。
    3.写一个cs,把标签执行完生产json tree,lua中init()后生产完整页面(是在xhtml文件里拼接的,所以最后写一个xhtml)。
    注意:先生成处理的数据,后生成页面,最后把数据填充到里面去。这样会减少流量。有的是写死的不是动态写在xhtml中,
    如果是动态生成那就要写在数据中然后才处理。
    
    
adapter的意义所在把多个入口变成一个入口多个接口,不需要了解其中的协议了,自动帮你处理好。
adapter.conf 配置
    {adapter,[{name,"ebankhost"},
         {host,"10.3.129.174"},  %服务器的ip地址
         %% {host,"127.0.0.1"},   %这个应该是备用端口
          {protocol,http},       %对应的协议 http,tcp,rpc
          {port,7001},           %监听的端口
          {return_type,}            %返回类型,如果是xml就会自动转化成json。
          {res_convertor, xml2json}]}. %返回自动转换json数据,自动帮你转换
    {procedure, [{id, "ewm884"},            %id唯一标识
       {data, },                            %不会去发请求而是直接读文件(用来开发测试用的)
       {res_convertor, xml2term},            %转换的类型
       {path, "perbank/MB8884.mb"},    %传一些字段,定义字段的默认值
       {gen_log, false},                %是否打印日志
       {use_sample_data,false},        %和data配合,用来读假文件。
       {data_sample, "public/xmlData/MB8884.xml"},(用来做假的返回数据接口)
       {parameters, [{"tranCode","MB8884"}]}]  %传过来的参数
     }.

    ewp_adapter.incoke_procedure(AdapterName,Procedureid,Params)
    apapter的名字,procedure的id定位,params是参数列表。
                        ewp_adapter.incoke_procedure(AdapterName,Procedureid,Params,Options)
     Response = ebank_utils:ebank_invoke_procedure({"ebankhost","mzh032",?INSERT_DEFAULT(ParamList)}),
    Options传一些额外信息,传类似提供额外功能。
    Options传的参数
       res_convertor返回类型转化
       connect_timeout(tcp socket) 规定超时时间
       recv_timeout   (tcp socket) 出问题返回时间
       list                        请求第三方系统,去解析报文,改变一些选项
       http_options            请求维持http协议的参数
       active                内核缓存,为false一直放在操作系统级别,应用收不到。为true可以感应到,发太多会出现系统处理不过来就崩了,宏攻击。操作系统会出现拒绝收取太多的东西,可以定义为once,设置成合适的选项。
       options
    ewp_adapter.incoke_procedure(AdapterName,Procedureid,Params,Options,Extra)
    Extra额外的协议定制化另外的一些信息。   
    
    
    
    
    
    
    开发流程    1.上ewp平台配置一下 trancode和channelid
                2.编写erl文件
                3.写cs页面
                4.写xhtml
                5.注意目录结构
    
    app访问流程 1.前台获取数据走对应的channel的模块的函数
                2.根据需要调对应的接口返回响应
                3.根据传过来的生成对应的cs模板
                4.将m和v结合起来,也就是将数据填充到模板里,返回一个页面或者xhtml。
    返回的状态
            1.只返回数据  相当于刷新这个页面的数据
            2.返回数据和页面 相当于访问一个新的页面
            3.返回页面     返回一个固定写死的页面,比如说一些协议或者文本之类。
            
    //将频道和代码传过来
    'mzh021'(TranCode, Channel) ->
    %% 发送请求接口参数,相当于getparam(),根据参数获取数据
    AccountNo = ?param("accountNo"),
    //获取对应的accountAlias
    AccountAlias = ?param("accountAlias"),
    //将接口和接口里东西封装到一个参数list里
    ParamList = [{"accountNo",AccountNo},{"accountAlias",AccountAlias}],
    %%请求接口,更改账户别名,当前的网银系统的mzh021接口(adapter.conf里面配置的),以及前面传的参数列表
    Response = ebank_utils:ebank_invoke_procedure({"ebankhost","mzh021",?INSERT_DEFAULT(ParamList)}),
    //根据响应到root/errorCode找对应的错误码,只有0000是ok的,其他的会返回一个错误信息,抛出一个异常,最后一起异常处理
    [ErrorCode]= ?ewp_xpath("root/errorCode",Response),
    case  ErrorCode  of
        "0000" -> ok;
        _ ->
           [ErrorMessage]= ?ewp_xpath("root/errorMessage",Response),
           throw(?COM_ERR(ErrorMessage))
    end,
    %%     增加接口MB1053下挂账户信息查询 mzh030
    //开始出一个新的列表
    ParamList2 = [],
    //根据空的调对应的接口,返回响应码
    AccInfoRes = ebank_utils:ebank_invoke_procedure({"ebankhost","mzh030",?INSERT_DEFAULT(ParamList2)}),
     case hd(?ewp_xpath("root/errorCode", AccInfoRes)) of
         "0000" -> ok;
         _ -> pass
     end,
    //返回结果放在session里面去。
    Cards_list = ?ewp_xpath("root/cd/iAccountInfo/row",AccInfoRes),
    Cards_sessions = ebank_utils:get_card_session(Cards_list,[]),
    CardList = {"cardList",Cards_sessions},
    %%     更新session信息,根据前面的cardlist。
    ebank_utils:update_user_info_session("cardList",CardList),
    %%     重新获取下挂卡带金额的列表,并生成对应的页面。
    NewCards2 = ebank_utils:get_cardlist_balance(),
    CsKey = ewp_channel_util:channel_adapter_cs_key(Channel, TranCode),
    Res = ewp_channel_util:render(CsKey, [{root,ebank_utils:get_empty()}], [{userinfo, NewCards2}]),
    Res.

    
    
    
    1.在xhtml文件中存在这样结构,前面的trancode和channelid 从哪个页面去数据来的
                                    后面的trancode和channelid 传到后台决定用哪个web后台的文件
          local tranCode = "cep001";
                local channelId = "credit_enqupro";
                local submit = {
                    channelId = "credit_enqupro",
                    tranCode = "cep001",
                    postParams = {
                        id= "credit_enqupro",
                        tranCode = "cep001"
                    }
                };
    2.不跳页面,取数据。
        可以写一个回调函数,重写回调方法,实现不跳页面取数据。
    
    3.请求接口的具体
         ebank_utils:ebank_invoke_procedure({"ebankhost","mcx007",?INSERT_DEFAULT(ParamList1)})
         调用这个方法,请求adaptor里面对应的ebankhost的mcx007,会出现一个虚拟数据path, "perbank/MB9104.mb"
         是MB+四个数字.mb结尾的文件。
         检查返回的错误数据,返回错误日志。
          CsKey = ewp_channel_util:channel_adapter_cs_key(Channel, TranCode),
          按唯一标示拼接获取空白页面cskey,最后放入render。channel和trancode拼接成一个cs页面名
           Res = ewp_channel_util:render(CsKey, [{root,ebank_utils:get_empty()}], lists:append([[{url,Xinyongka_url}],[{certId,CertId}],[{cert_type,Cert_type}],[{phone,CustomerPhone}],[{customerName,CustomerName}],[{userinfo, NewCards}],[{userinfo1,Response}]])),
     Res.返回一个结果。
     4.throw(?COM_ERR("您的下挂卡列表为空!")) 抛出一个异常弹出这个话。
     5.零存整取有就生成瀑布流,没有就提示没有数据。
     6.流程 1.xhtml 2.erl  3.cs 4.adapter 5.先让流程走通不写数据,在写模拟数据进行操作。
     7.逻辑判断 数据格式,参数判断是否金额足够。
     8.常见错误 1.值去不到,页面比较 2.拼报文问题 3.写的规则
    


1.回调函数在xhtml,只返回数据
2.lookup_from_userinfo方法
3.开发先写通页面和后台,调用假数据或者mensia里的数据。

posted on 2018-04-20 17:14  国名老公yt  阅读(403)  评论(0编辑  收藏  举报