【问题标题】:Dynamics AX 2012 Only One Copy of a Form OpenDynamics AX 2012 仅打开一个表单副本
【发布时间】:2013-10-25 12:56:26
【问题描述】:

谁有任何技巧/代码 sn-ps 来防止一次打开多个自定义 X++ 表单的副本?

最佳情况:尝试打开表单的另一个副本,原来的获得焦点

可接受:用户收到表单已打开的通知

【问题讨论】:

    标签: forms axapta x++ dynamics-ax-2012


    【解决方案1】:

    您可以将下面的代码插入到表单的init 方法中。 如果您对代码有任何疑问,请不要犹豫!

    public void init()
    {
        #define.CACHE_OWNER        ('MyForm')
        #define.CACHE_KEY_INSTANCE ('Instance')
    
        FormRun existingForm()
        {
            ;
    
            if (infolog.globalCache().isSet(#CACHE_OWNER, #CACHE_KEY_INSTANCE))
            {
                return infolog.globalCache().get(
                    #CACHE_OWNER, #CACHE_KEY_INSTANCE);
            }
            return null;
        }
    
        void registerThisForm()
        {
            ;
    
            infolog.globalCache().set(#CACHE_OWNER, #CACHE_KEY_INSTANCE, this);
        }
    
        boolean isAlreadyOpened()
        {
            ;
    
            return existingForm() ? !existingForm().closed() : false;
        }
    
        void activateExistingForm()
        {
            ;
    
            existingForm().activate(true);
        }
        ;
    
        super();
        if (isAlreadyOpened())
        {
            activateExistingForm();
            this.close();
        }
        else
        {
            registerThisForm();
        }
    }
    

    【讨论】:

    • 这很好用。我确实必须将激活方法更改为 element.existingForm().setActive(); activate() 命令没有将原始表单置于最前面。非常感谢!
    【解决方案2】:

    将以下代码添加到表单的init 方法中,如下所示。无需进行其他更改。

    public void init()
    {
        #define.CACHE_OWNER('MyForm')
        int hWnd;
    
        super();
    
        if (infolog.globalCache().isSet(#CACHE_OWNER, curUserId()))
        {
            hWnd = infolog.globalCache().get(#CACHE_OWNER, curUserId());
        }
    
        if (WinApi::isWindow(hWnd))
        {
            element.closeCancel();
            WinAPI::bringWindowToTop(hWnd);
        }
        else
        {
            infolog.globalCache().set(#CACHE_OWNER, curUserId(), element.hWnd());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      相关资源
      最近更新 更多