• 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里的数据。

  • 相关阅读:
    16进制与10进制
    npm模块管理器
    Vue2+VueRouter2+webpack 构建项目实战(四)接通api,先渲染个列表
    cross-env使用笔记
    webpack 运行提示“The ‘mode‘ option has not been set”的原因和解决方法
    cnpm install -S 与cnpm install -D (dependencies和devDependencies的区别)
    Webpack基础学习
    webpack入门——webpack的安装与使用
    npm init 之package.json
    入门 Webpack,看这篇就够了
  • 原文地址:https://www.cnblogs.com/guomingyt/p/8892209.html
Copyright © 2020-2023  润新知