• pack/unpack


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

    class PackUnPackTest extends RunBase
    {
        NoYes ifDisplay;
        NoYes ifDisplayNoSave;
        DialogField dialogIfDisplay;
        DialogField dialogIfDisplayNoSave;

        #Define.CurrentVersion(
    1)
        #LocalMacro.CurrentList
         ifDisplay
        #EndMacro

    }

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

    static void Main(Args arg)
    {
         PackUnPackTest PUtest;
         ;
         PUtest 
    = new PackUnPackTest();

         
    if(PUtest.prompt())
            PUtest.run();

    }

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

    public void run()
    {
        super();
        
    if(ifDisplay)
            Box::info(
    "选中俺了!");
        
    else
            Box::info(
    "没选中俺!");

        
    if(ifDisplayNoSave)
            Box::info(
    "选中俺了!");
        
    else
            Box::info(
    "没选中俺!");

    }

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

  • 相关阅读:
    继承(二)
    抽象和封装(一)
    系统优化——建立linux回收站机制
    kvm-web管理工具webvirtmgr
    云产品类别及其特点(转)
    zabbix通过agent监控linux主机
    zabbix通过snmp监控linux主机
    zabbix通过snmp监控windows主机
    zabbix的安装
    运维各技术方向及其成熟的技术分支
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/465221.html
Copyright © 2020-2023  润新知