任何人都有任何提示/代码片段来防止一次打开多个自定义 X++ 表单的副本?
最佳情况:尝试打开另一个表单副本,而原始副本获得焦点
可接受:用户收到表单已打开的通知
任何人都有任何提示/代码片段来防止一次打开多个自定义 X++ 表单的副本?
最佳情况:尝试打开另一个表单副本,而原始副本获得焦点
可接受:用户收到表单已打开的通知
您可以将下面的代码插入到表单的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();
}
}
将以下代码添加到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());
}
}