前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于PowerBuilder的搜索

PowerBuilder应用开发系列讲座(35)-CRM售后服务管理-我的搜狐 --> loading... CRM售后服务管理 http://blog.sohu.com/s/MzY2NTg2NzY/ 首页 日志 相册 视频 资料 首页 搜狐博客 > CRM售后服务管理 > 日志 搜狐博客 > CRM售后服务管理 > 日志 个人资料 cecilia2 博客年龄:2年11个月 访问:?次 文章:120篇 个人描述 数据加载中 --> 修改个性介绍 推荐给跟随 博主最新文章 经济危机的洗礼 高端oa自动化办公系统有没有必要存在? oa企业管理软件核心 oa管理软件完善工具 oa办公自动系统定价 移动办公软件方案优势 移动办公软件方案优势 oa办公系统作用 oa网络办公软件的必要性 CRM系统强调企业全员的参与和协同 应用CRM客户管理系统 更多文章>> 推荐博文 实拍墨西哥夜生活 实拍豪华迪拜 “东莞查黄”最该查谁抓谁刘昌松 邓文迪滥情颠覆中华文化姚树洁 国人除了移民海外还有其他路吗冯仑 喜马拉雅山日落唯美奇景飘雪坝上 降脂解腻菜:蚝油香菇油菜朵云3602 如何复制超模们最佳气场装扮AvaFoo 更多相关文章>> 日志正文 PowerBuilder应用开发系列讲座(35) 标签: 微软零售业解决 微软零售业解决 2013-06-13 11:17 阅读(?)评论(0)编辑删除 p align="center">分布式应用开发  在第8期中,我们曾经介绍了开发一个简单分布式应用的 步骤,这里我们不再赘述开发的全过程,只是就其中的主要内容再重点说明一下。不可视对象(NVO)及其代理对象(proxy)  不可视对象:不可视对象最早在3.0中引入,功能在以后的每一个版本中都得到一定的加强。简单的说,不可视对象是一个进程对象。在这个对象中,没有任何可视的成份,因此而得名。不可视对象可以是一个事务处理的对象。由一些事务处理函数组成,并有一个方法集作为外界访问接口。用户通过这个由函数和事件组成的方法集调用事务处理函数。在分布式PowerBuilder中,我们将这样的不可视对象放在了远端。使事务处理的函数在应用服务器中或者说在另外的一台计算机中运行。  代理对象:我们在不可视对象的外部增加了一层包装,把这一层作为编程的接口层(API)。这就是该不可视对象的代理对象(proxy),代理对象作为不可视对象的最外层包装,有与该对象相同的public访问特性的方法和属性。将实际的对象与代理对象分离开,这就形成了分布式的结构。不可视对象所进行的事务处理放在了应用服务器上,而它的代理对象放在了客户端。  在客户端,用户对代理对象进行操作,但这只是不可视对象的一个API接口,它并不包含真正的方法。代理在内部重新调用运行在远端的对象的方法。在服务器一端,运行着的是一 个真正的不可视对象,它同普通的不可视对象没有任何不同 之处,只是对这个不可视对象的调用是在客户端通过它的代理进行的。每一个运行在服务器端的对象在客户端都必须有 它的代理,这个对象才能够被该客户端的应用程序所调用。 一个应用服务器可能会有多个客户机,这样在一个服务器上的不可视对象就可能在客户机上有多个不同的代理。 连接对象(connection)及传输对象(transport)  介绍了服务器端的不可视对象和客户端的代理对象这两 个在分布式应用中的对等部分,接下来我们要考虑的是如何将这两个部分建立连接。在连接的过程中,我们就要涉及另两 个对等的对象,这就是在PowerBuilder5.0中新增加的两个对象类型:连接(connection)及传输(transport)对象。connection对象是在 客户端用以同服务器进行通讯的对象,反过来,transport对象是驻留在服务器端用以同客户端应用进行 兜亩韵蟆?/p>   connection对象:我们可以将这一对象同用在数据库事务的 transaction对象进行类比。我们通过定义transaction对象的属性连接某个数据库服务器。在客户端的应用中,用数据窗口或直 接使用SQL访问数据库服务器时,我们须使用SetTransObject()函数或USING关键词来指定这个数据窗口所使用的transaction对象。同 理,分布式事务中,客户端的代理对象就如同一个数据窗口,我们也应当指定代理对象同哪个服务器进行通讯。因为正如 一个数据窗口可以访问不同的数据库服务器一样,一个代理 对象也可以代理不同应用服务器上的不可视对象,而其中的connection对象就象transaction对象一样,它的属性就是用以区别 不同的服务器。在connection对象中最重要的三个属性是application、driver、location。driver属性是用以指定我们所使用的通讯 协议,目前支持的是TCP/IP和NamedPipes;location属性是应用服务器的名称。  象事务对象中使用CONNECTUSINGSQLCA一样,接下来我们调用 一个connection的对象函数ConnectToServer(),建立客户和应用服务器的连接。也正如事务对象一样,在调用这个函数后,我们应检验connection的返回值,以确认连接是否成功。connection对象同服务器建立连接后,客户端即可同服务器进行通话。下一步 我们指定代理对象使用哪一个连接对象。这就好比是在数据 窗口中使用SetTransObject函数将数据窗口和事务对象建立联系, 代理对象使用的的是SetConnect()函数。一个PowerBuilder的应用可 以同时连接多个数据库服务器,同样在分布式PowerBuilder中,您也可以同时建立多个连接对象,每个连接对象同不同的应 用服务器相连,使一个客户端应用可以同时访问多个应用服务器。  传输对象:在客户端我们使用的是connection对象同服务器 进行联系,而在服务器端我们使用的是transport对象同客户端进行连接。transport对象用以指示本应用服务器的一些属性值,微软零售业解决方案,并且?飧鲇τ梅?衿髌舳?鹄础?ransport也有着两个重要的属性application和driver。同样driver是指TCP/IP或NamedPipe协议, 而application是指正在监听的应用名称。启动服务器的函数是listen(),执行了这个函数后,在服务器端就增加了一个进程用 于监听任何客户端的请求。分布式PowerBuilder的工作原理  当一个connection对象调用了ConnectToServer函数成功后,服务器端将在内存中开辟一个用于该客户端应用的工作区,而在proxy对象调用了SetConnect函数后,系统将在服务器端初始化一个不可视对象的实例,注意系统并不是在用户初始化代理对象时初始化不可视用户对象的,而是在调用SetConnect函数后,在服务器端对NVO进行初始化的。  分布式PowerBuilder在服务器一端实现的是一个虚拟机模型。每当一个客户请求连接时,服务器就会在内存中建立一个新的区域用于该客户的请求,每一个内存空间都是相互独立。在PowerBuilder5.0中分布式应用只支持同步方式,也就是说,当您调用代理对象的一个函数时,系统实际将调用服务器端的不可视对象的函数。这时客户端应用将被挂起,直至服务器函数运行完毕,客户端才能继续工作。而在即将发布的6.0中将支持异步运算。  当您调用一个客户端函数时,您一定需要传递参数给这个函数。目前的分布式PowerBuilder版本可以支持多种数据类型的传递:所有简单的数据类型,结构和数组,使用传值法和传参法。还支持传递不可视对象。不过不能以引用方式传递对象,例如您不能在分布式中传递一个窗口或一个数据窗口的句柄 。  当我们在使用完一个代理对象后应注意在程序的结束前用destroy语句析构这个对象实例,否则将出现我们在第13期曾 经讨论过的内存漏洞(memoryleak)的问题。而这一点在分布式中尤为重要。因为对代理的析构将使远端的不可视对象同时 析构。如果您忘记了对代理对象的析构,不可视对象将不会在服务器端自动清除,这样您将在客户和服务器两端都造成了内存漏洞。此外connection对象还有一个DisconnectServer函数,这个函数用以取消客户与服务器的连接。服务器端将回收分配给 该用户的内存,在程序结束时不使用这个函数也将造成服务器器端的内存漏洞。在客户端产生了内存漏洞也许并不会造成多么恶劣的影响,在服务器端有一个10K左右的漏洞可能也 算不得什么,但是如果每一次的客户调用NVO函数都造成10K的漏洞,一个客户机每天有100次的调用,这个服务器如连接了100个客户机,那么一天之内就会造成102.4M的内存漏洞,这足以使任何强壮的服务器崩溃。开发分布式应注意的问题在本地进行分布式设计  我们在做数据库模型设计时,首先设计的是实体与实体之间关系,我们将不考虑每一个表、每一个字段的具体实现,这时我们称之为概念设计阶段,然后再考虑其物理实现。同样我们在设计分布式应用时也应首先考虑在本地上的实现,如过早地考虑网络的拓扑模型将会使得您的分布式应用失去未来重新分割应用的灵活性。应用在分布运行之前首先应当在 本地成功运行,使用Debug调试必须使用本地的接口。同产品相同的开发环境当开发环境与实际交付用户运行的环境有显著差别时,会使得这个应用在成为产品时,分布式应用部分根本不可用。例如,一个在小型的高速局域网环境中开发出来的应用,如工作在一个拨号网络或一个广域网中。也许就不会有象期望的那样有理想的运行效果。使网络通讯量最小化  在物理对象设计和实现过程中最基本的目标是减少分布式应用中代理之间的消息和代理对象的传递。函数调用,对远过程对象中实例变量的引用,触发远过程对象的事件等操作都要比引用本地对象花费更多的时间。PowerBuilder对象库的分布  一般建议在开发时,将不可视对象及其代理对象放在同一个pbl库中,这个库都包括在客户端应用和服务器端应用可搜索到路径中。这样在对象被修改后,运行时的两端的应用就可以使用同一个DLL或PBD。同时检入(checkin)和检出(checkout)NVO及其代理对象  在团队开发中,一个程序员检入NVO时,应当同时检入它的代理,即使您不打算修改这个对象的接口函数,PowerBuilder在保存NVO对象时,会同时重新修改保存在同一个pbl库中的这个对象的代理,因为代理对象不仅带有接口函数的信息,还包括了对象的实例变量等其它信息在内。建立一个远程控制机制  在一般情况下,应开发一个应用服务器的远程设置,控制新用户连接,启动,关闭和其它日常任务维护的控制功能,以便于管理员对应用服务器的管理。上期错误更正  在8月25日所刊出的第32期中,我们介绍了为下拉式数据窗口建立数据缓冲服务器,我们也可以使用分布式PowerBuilder将这个小应用分成两部分,把缓冲区建在应用服务器上。只要对原文中的部分代码稍加修改就可以完成这个分布式应用。不过在该文中的wf_find_dataobject函数却有一个严重的错误,笔者误将应当用在datawindow中的代码用在了这里。准确的代码应当是将原程序中第14行至第16行该为:lds_new_entry=createu_dsaIFIsNull(lds_new_entry)THENRETURN0ENDIF  衷心地感谢向我指出这一错误深圳现代计算机公司的刘伟青先生,同时,微软零售业解决方案,对该文的读者表示深深的歉意。 分享到: 阅读(?)评论(0)编辑删除 上一篇: 打造SQL Server2000的安全策略 下一篇:在DB2上建立database Partition 提示:“固定链接”为您显示此篇文章的固定不变链接,如果您有还有疑问请点击帮助 链接地址:http://blog.sohu.com/s/MzY2NTg2NzY/267541332.html 复制此地址 评论 想第一时间抢沙发么? 评论内容: 表  情: 加载中... 请各位遵纪守法并注意语言文明 爸妈,我想为你做件事 “爸妈,我想为你做件事”征文 动动你的笔,将自己内心最诚挚的感激之情向父母表达出来吧。 陪着父母去台湾 我们帮爸爸出书 盖一座大大的房子给爸妈 往期获奖征文:快乐是一盏灯 往期获奖征文:你终将破茧成蝶 帮助 - 客服中心 - 意见建议 - 举报 - 搜狐博客 - 搜狐首页 - 全部博文 - 新闻 Copyright © 2014 Sohu.com Inc. All rights reserved. 搜狐公司 版权所有