pack/unpack

runbase Framwork用pack和unpack来保存用户上次操作的值,用户上次操作的值会存在SysLastValue表中,这个功能确实蛮酷,不过今天差点被这个东西给整死,在我机子运行上的好好的代码,弄到客户那边去死活run不起来,Application和DataBase都是一样的,认真地跟踪了一遍代码才知道,原来是由于我开发的机子是两层的,客户的环境是三层造成的,太大意了......
两层代码都运行在一个进程中,没有进程间通讯的问题,pack/unpack执行情况:
从数据库里取出上次的数据->调用unpack,并用取得的值初始化Dialog,用户看到上次操作时的值->pack,并把用户的数据写回数据库.
三层:
从数据库里取出上次的数据->调用unpack取出数据->调用pack,发送到client->调用unpack,并用取得的值初始化Dialog,用户看到上次操作时的值->取得用户本次操作所选择的值,调用pack将数据打包->发送到服务器端->调用unpack,进行数据操作->pack,将本次用户的选择存到数据库里.
下面是代码:

None.gif class  PackUnPackTest extends RunBase
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    NoYes ifDisplay;
InBlock.gif    NoYes ifDisplayNoSave;
InBlock.gif    DialogField dialogIfDisplay;
InBlock.gif    DialogField dialogIfDisplayNoSave;
InBlock.gif
InBlock.gif    #Define.CurrentVersion(
1)
InBlock.gif    #LocalMacro.CurrentList
InBlock.gif     ifDisplay
InBlock.gif    #EndMacro
InBlock.gif
ExpandedBlockEnd.gif}

其中一个DialogField  ifDisplayNoSave没有在CurrentList中.

None.gif static   void  Main(Args arg)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif     PackUnPackTest PUtest;
InBlock.gif     ;
InBlock.gif     PUtest 
= new PackUnPackTest();
InBlock.gif
InBlock.gif     
if(PUtest.prompt())
InBlock.gif        PUtest.run();
InBlock.gif
ExpandedBlockEnd.gif}

上面的Main方法,如果不加server修饰符(当然实际环境中应该用Menuitem的runon属性来定义的,这里论述方便直接在Main上添加),run方法的结果是正确的.

None.gif public   void  run()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    super();
InBlock.gif    
if(ifDisplay)
InBlock.gif        Box::info(
"选中俺了!");
InBlock.gif    
else
InBlock.gif        Box::info(
"没选中俺!");
InBlock.gif
InBlock.gif    
if(ifDisplayNoSave)
InBlock.gif        Box::info(
"选中俺了!");
InBlock.gif    
else
InBlock.gif        Box::info(
"没选中俺!");
InBlock.gif
ExpandedBlockEnd.gif}

如果都选中了,就会显示两次"选中俺了"这样的提示消息.
但是如果添加了server修饰符,无论选不选第二个checkbox,结果都是一样的,第二个提示消息输出"没选中俺".
原因就是因为第二个DialogField没有存到CurrentList中,也就不会从客户端发送到server端,这样每次判断的时候都是默认的No值,sigh.
还有个问题没搞懂,如果在三层模式下,不想保存第二个DialogField的上次输入值,是不是就玩不转了那?等有时间再看一下.
XPO文件也传上来,免得被格掉了.

转载于:https://www.cnblogs.com/Farseer1215/archive/2006/08/01/465221.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值