Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

开发了一个二代身份证的验证系统,和大家交流一下



  • 开发这么一个系统可能会和大家常用的功能会有点差别,因为这个系统会设计到硬件的接入。还好厂商提供了ActiveX控件给我们使用,但是ActiveX使用是有局限性的,他只能在IE中运行,不过CHOME浏览器还有火狐浏览器可以通过安装ActiveX的支持插件来支持。<br />这套系统的重点在于js和xml以及python之间的通讯,下面和大家分享一下:(第一次发布OE的技术贴,不好的地方大家请多多指教)<br /><br />首先利用了xml文件建立一个菜单项,并创建该菜单项的动作<br />[code]<record model="ir.actions.client" id="action_detection"><br /> <field name="name">认证系统</field><br />     <field name="tag">detection.action</field><br /> </record>[/code]<br /><br />这时候会调用js文件中对应的事件:<br />[code]openerp.kerry_visitor = function(session){<br /> var detection = session.detection = {};<br /> KerryObj=new session.web.Model('kerry.visitor');<br />    session.web.client_actions.add('detection.action','session.detection.action');<br />    detection.action = session.web.Widget.extend({<br />    //使用的XML模板<br />    template:"detection.action",<br />    //每次载入时的处理<br />    start: function () {<br /> },<br />    });<br />};[/code]<br />在这里创建了一个web.client的对象,并指定了一个XML的模板文件“template:"detection.action"”,在这个模板文件中添加了身份证读卡器的activex<br />[code]<br /><OBJECT id="CVR_IDCard" classid="clsid:10946843-7507-44FE-ACE8-2B3483D179B7"<br /> codebase="IDCardReader.cab" name="CVR_IDCard" width="0" height="0" ><br />    </OBJECT><br />[/code]<br />这时候就可以在js中创建这个activex的对象了<br />[code]<br />CVR_IDCard  = document.getElementById("CVR_IDCard");<br />[/code]<br />创建完对象后就可以使用这个对象的方法了,也就是身份证读卡器的方法。<br />例如:[code]var strReadResult = CVR_IDCard.ReadCard();[/code]执行一次读卡操作<br /><br />既然可以获取到身份证的数据了,我们如何和数据库进行通讯呢?这时候有两种方式可以选择,一种是在JS中通过ODBC操作postgresql,不过这种方式比较麻烦,而且容易出错,所以最终放弃了。第二种是通过JS与PYTHON的通讯,将数据传入python并通过python与postgresql进行操作,这时候我们可以使用很多OE自带的方法去操作数据库,比较方便可靠。下面介绍一下JS与python通讯的方式:<br />[code]KerryObj.call('writeRecords',[,"_StrandedPersonnel",message]).then(function(result){<br /> });[/code]<br />KerryObj:是一个功能模块的实例,通过如下语句创建的:[code]KerryObj=new session.web.Model('kerry.visitor');[/code]大家可以看到里面有一个类名“'kerry.visitor”,其实就是调用该类下的一个方法,方法名为“writeRecords”,_StrandedPersonnel是我自定义的一个控制ID,message是一个数组,里面存放了一些字符串数据。好了 现在来看一下kerry.visitor'类下的writeRecords方法的头部:<br />[code]def writeRecords(self,cr,uid,_ids,ctrl,info,context=None):[/code]<br />ctrl对应了JS传过来的_StrandedPersonnel,是一个控制码<br />而info对应了js传过来的message<br />[code]elif ctrl == '_StrandedPersonnel':<br />            v_name = info[0]<br />            v_sex = info[1]<br />            v_class = info[2]<br />            v_birthday = info[3]<br />            v_address = info[4]<br />            v_cardid = info[5]<br />            v_img = info[6]<br />            _computer_name = info[7]<br />            _pos = ''[/code]<br />在这里把info的数据分别传给了一些变量进行操作。<br />到这里其实已经完成这个系统整个的通讯了,剩余部分就是判断认证,以及数据库的操作了,还有从python返回给js的数值了,返回的值会通过js中的[code]function(result)[/code]语句获取到。<br /><br />应JEFF老师的要求第一次发帖子,和大家交流一下,如果发现问题,希望大家提出宝贵的意见。



  • 开发这么一个系统可能会和大家常用的功能会有点差别,因为这个系统会设计到硬件的接入。还好厂商提供了ActiveX控件给我们使用,但是ActiveX使用是有局限性的,他只能在IE中运行,不过CHOME浏览器还有火狐浏览器可以通过安装ActiveX的支持插件来支持。<br />这套系统的重点在于js和xml以及python之间的通讯,下面和大家分享一下:(第一次发布OE的技术贴,不好的地方大家请多多指教)<br /><br />首先利用了xml文件建立一个菜单项,并创建该菜单项的动作<br />[code]<record model="ir.actions.client" id="action_detection"><br /> <field name="name">认证系统</field><br />     <field name="tag">detection.action</field><br /> </record>[/code]<br /><br />这时候会调用js文件中对应的事件:<br />[code]openerp.kerry_visitor = function(session){<br /> var detection = session.detection = {};<br /> KerryObj=new session.web.Model('kerry.visitor');<br />    session.web.client_actions.add('detection.action','session.detection.action');<br />    detection.action = session.web.Widget.extend({<br />    //使用的XML模板<br />    template:"detection.action",<br />    //每次载入时的处理<br />    start: function () {<br /> },<br />    });<br />};[/code]<br />在这里创建了一个web.client的对象,并指定了一个XML的模板文件“template:"detection.action"”,在这个模板文件中添加了身份证读卡器的activex<br />[code]<br /><OBJECT id="CVR_IDCard" classid="clsid:10946843-7507-44FE-ACE8-2B3483D179B7"<br /> codebase="IDCardReader.cab" name="CVR_IDCard" width="0" height="0" ><br />    </OBJECT><br />[/code]<br />这时候就可以在js中创建这个activex的对象了<br />[code]<br />CVR_IDCard  = document.getElementById("CVR_IDCard");<br />[/code]<br />创建完对象后就可以使用这个对象的方法了,也就是身份证读卡器的方法。<br />例如:[code]var strReadResult = CVR_IDCard.ReadCard();[/code]执行一次读卡操作<br /><br />既然可以获取到身份证的数据了,我们如何和数据库进行通讯呢?这时候有两种方式可以选择,一种是在JS中通过ODBC操作postgresql,不过这种方式比较麻烦,而且容易出错,所以最终放弃了。第二种是通过JS与PYTHON的通讯,将数据传入python并通过python与postgresql进行操作,这时候我们可以使用很多OE自带的方法去操作数据库,比较方便可靠。下面介绍一下JS与python通讯的方式:<br />[code]KerryObj.call('writeRecords',[,"_StrandedPersonnel",message]).then(function(result){<br /> });[/code]<br />KerryObj:是一个功能模块的实例,通过如下语句创建的:[code]KerryObj=new session.web.Model('kerry.visitor');[/code]大家可以看到里面有一个类名“'kerry.visitor”,其实就是调用该类下的一个方法,方法名为“writeRecords”,_StrandedPersonnel是我自定义的一个控制ID,message是一个数组,里面存放了一些字符串数据。好了 现在来看一下kerry.visitor'类下的writeRecords方法的头部:<br />[code]def writeRecords(self,cr,uid,_ids,ctrl,info,context=None):[/code]<br />ctrl对应了JS传过来的_StrandedPersonnel,是一个控制码<br />而info对应了js传过来的message<br />[code]elif ctrl == '_StrandedPersonnel':<br />            v_name = info[0]<br />            v_sex = info[1]<br />            v_class = info[2]<br />            v_birthday = info[3]<br />            v_address = info[4]<br />            v_cardid = info[5]<br />            v_img = info[6]<br />            _computer_name = info[7]<br />            _pos = ''[/code]<br />在这里把info的数据分别传给了一些变量进行操作。<br />到这里其实已经完成这个系统整个的通讯了,剩余部分就是判断认证,以及数据库的操作了,还有从python返回给js的数值了,返回的值会通过js中的[code]function(result)[/code]语句获取到。<br /><br />应JEFF老师的要求第一次发帖子,和大家交流一下,如果发现问题,希望大家提出宝贵的意见。



  • ;D谢谢分享



  • 技术性很强的贴子,我现在用的比较简单:身份证读卡器自带程序可以设置快捷键:例F2 姓名  F3 身份证号……,操作时打开读卡器程序,身份证往读卡器一放,程序显示身份证信息,这时回到OE,在录入姓名的地方按F2……,几个快捷键录入完毕。



  • 很棒的技术分享!



  • [quote author=winson97 link=topic=14626.msg25310#msg25310 date=1384561000]<br />技术性很强的贴子,我现在用的比较简单:身份证读卡器自带程序可以设置快捷键:例F2 姓名  F3 身份证号……,操作时打开读卡器程序,身份证往读卡器一放,程序显示身份证信息,这时回到OE,在录入姓名的地方按F2……,几个快捷键录入完毕。<br />[/quote]<br />如果自己用ActiveX去开发的话,完全可以达到全自动的,无需按任何按键,我们的保安每天只要坐着,然后有人进出的话让访客自己刷一下卡就可以自动录入啦。


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待