IDEMPIERE-647 Error when drilling from idempiere table report.

This commit is contained in:
Heng Sin Low 2013-02-21 16:01:23 +08:00
parent cba45f139b
commit a539fde713
4 changed files with 79 additions and 62 deletions

View File

@ -28,18 +28,14 @@ import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.apps.WReport;
import org.adempiere.webui.apps.graph.WGraph;
import org.adempiere.webui.apps.graph.WPerformanceDetail;
import org.adempiere.webui.component.ToolBarButton;
import org.adempiere.webui.dashboard.DashboardPanel;
import org.adempiere.webui.dashboard.DashboardRunnable;
import org.adempiere.webui.event.DrillEvent;
import org.adempiere.webui.event.ZoomEvent;
import org.adempiere.webui.part.WindowContainer;
import org.adempiere.webui.report.HTMLExtension;
import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.window.FDialog;
import org.adempiere.webui.window.ZkReportViewerProvider;
import org.compiere.Adempiere;
import org.compiere.model.I_AD_Menu;
@ -50,10 +46,7 @@ import org.compiere.model.MMenu;
import org.compiere.model.MPInstance;
import org.compiere.model.MPInstancePara;
import org.compiere.model.MProcess;
import org.compiere.model.MQuery;
import org.compiere.model.MRole;
import org.compiere.model.MSysConfig;
import org.compiere.model.MTable;
import org.compiere.model.X_AD_CtxHelp;
import org.compiere.print.ReportEngine;
import org.compiere.process.ProcessInfo;
@ -268,30 +261,6 @@ public class DashboardController implements EventListener<Event> {
{
String processParameters = dc.getProcessParameters();
embedReport(content, AD_Process_ID, processParameters);
content.addEventListener("onZoom", new EventListener<Event>() {
public void onEvent(Event event) throws Exception {
if (event instanceof ZoomEvent)
{
ZoomEvent ze = (ZoomEvent) event;
if (ze.getData() != null && ze.getData() instanceof MQuery) {
AEnv.zoom((MQuery) ze.getData());
}
}
}
});
content.addEventListener(DrillEvent.ON_DRILL_DOWN, new EventListener<Event>() {
public void onEvent(Event event) throws Exception {
if (event instanceof DrillEvent)
{
DrillEvent de = (DrillEvent) event;
if (de.getData() != null && de.getData() instanceof MQuery) {
MQuery query = (MQuery) de.getData();
executeDrill(query);
}
}
}
});
Toolbar toolbar = new Toolbar();
content.appendChild(toolbar);
@ -706,7 +675,8 @@ public class DashboardController implements EventListener<Event> {
Iframe iframe = new Iframe();
iframe.setSclass("dashboard-report-iframe");
File file = File.createTempFile(re.getName(), ".html");
re.createHTML(file, false, AEnv.getLanguage(Env.getCtx()), new HTMLExtension(Executions.getCurrent().getContextPath(), "rp", parent.getUuid()));
re.createHTML(file, false, AEnv.getLanguage(Env.getCtx()), new HTMLExtension(Executions.getCurrent().getContextPath(), "rp",
SessionManager.getAppDesktop().getComponent().getUuid()));
AMedia media = new AMedia(re.getName(), "html", "text/html", file, false);
iframe.setContent(media);
parent.appendChild(iframe);
@ -717,22 +687,6 @@ public class DashboardController implements EventListener<Event> {
new ZkReportViewerProvider().openViewer(re);
}
/**
* Execute Drill to Query
* @param query query
*/
public void executeDrill (MQuery query)
{
int AD_Table_ID = MTable.getTable_ID(query.getTableName());
if (!MRole.getDefault().isCanReport(AD_Table_ID))
{
FDialog.error(0, dashboardLayout.getParent(), "AccessCannotReport", query.getTableName());
return;
}
if (AD_Table_ID != 0)
new WReport(AD_Table_ID, query);
} // executeDrill
private void fillParameter(MPInstance pInstance, String parameters) {
if (parameters != null && parameters.trim().length() > 0) {
Map<String, String> paramMap = new HashMap<String, String>();

View File

@ -29,10 +29,13 @@ import org.adempiere.util.ServerContext;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.apps.BusyDialog;
import org.adempiere.webui.apps.ProcessDialog;
import org.adempiere.webui.apps.WReport;
import org.adempiere.webui.component.Tabpanel;
import org.adempiere.webui.component.ToolBarButton;
import org.adempiere.webui.event.DrillEvent;
import org.adempiere.webui.event.MenuListener;
import org.adempiere.webui.event.ZKBroadCastManager;
import org.adempiere.webui.event.ZoomEvent;
import org.adempiere.webui.panel.ADForm;
import org.adempiere.webui.panel.BroadcastMessageWindow;
import org.adempiere.webui.panel.HeaderPanel;
@ -43,8 +46,12 @@ import org.adempiere.webui.session.SessionManager;
import org.adempiere.webui.util.IServerPushCallback;
import org.adempiere.webui.util.ServerPushTemplate;
import org.adempiere.webui.util.UserPreference;
import org.adempiere.webui.window.FDialog;
import org.compiere.Adempiere;
import org.compiere.model.GridField;
import org.compiere.model.MQuery;
import org.compiere.model.MRole;
import org.compiere.model.MTable;
import org.compiere.model.X_AD_CtxHelp;
import org.compiere.util.CLogger;
import org.compiere.util.Env;
@ -149,6 +156,9 @@ public class DefaultDesktop extends TabbedDesktop implements MenuListener, Seria
}
else
layout.setPage(page);
layout.addEventListener("onZoom", this);
layout.addEventListener(DrillEvent.ON_DRILL_DOWN, this);
North n = new North();
layout.appendChild(n);
@ -306,8 +316,42 @@ public class DefaultDesktop extends TabbedDesktop implements MenuListener, Seria
if (change)
updateUI();
}
else if (event instanceof ZoomEvent)
{
Clients.clearBusy();
ZoomEvent ze = (ZoomEvent) event;
if (ze.getData() != null && ze.getData() instanceof MQuery) {
AEnv.zoom((MQuery) ze.getData());
}
}
else if (event instanceof DrillEvent)
{
Clients.clearBusy();
DrillEvent de = (DrillEvent) event;
if (de.getData() != null && de.getData() instanceof MQuery) {
MQuery query = (MQuery) de.getData();
executeDrill(query);
}
}
}
/**
* Execute Drill to Query
* @param query query
*/
private void executeDrill (MQuery query)
{
int AD_Table_ID = MTable.getTable_ID(query.getTableName());
if (!MRole.getDefault().isCanReport(AD_Table_ID))
{
FDialog.error(0, null, "AccessCannotReport", query.getTableName());
return;
}
if (AD_Table_ID != 0)
new WReport(AD_Table_ID, query);
} // executeDrill
/**
*
* @param page

View File

@ -76,10 +76,12 @@ import org.zkoss.util.media.AMedia;
import org.zkoss.util.media.Media;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.ext.render.DynamicMedia;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.A;
import org.zkoss.zul.Borderlayout;
import org.zkoss.zul.Center;
@ -190,20 +192,31 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
this.onClose();
}
m_isCanExport = MRole.getDefault().isCanExport(m_AD_Table_ID);
try
{
m_ctx = m_reportEngine.getCtx();
init();
dynInit();
if (!ArchiveEngine.isValid(m_reportEngine.getLayout()))
log.warning("Cannot archive Document");
}
catch(Exception e)
{
log.log(Level.SEVERE, "", e);
FDialog.error(m_WindowNo, this, "LoadError", e.getLocalizedMessage());
this.onClose();
setTitle(Util.cleanAmp(Msg.getMsg(Env.getCtx(), "Report") + ": " + m_reportEngine.getName() + " " + Env.getHeader(Env.getCtx(), 0)));
}
@Override
public void onPageAttached(Page newpage, Page oldpage) {
super.onPageAttached(newpage, oldpage);
if (newpage != null) {
try
{
m_ctx = m_reportEngine.getCtx();
init();
dynInit();
if (!ArchiveEngine.isValid(m_reportEngine.getLayout()))
log.warning("Cannot archive Document");
}
catch(Exception e)
{
log.log(Level.SEVERE, "", e);
FDialog.error(m_WindowNo, this, "LoadError", e.getLocalizedMessage());
this.onClose();
}
}
}
@ -351,6 +364,7 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
public void onEvent(Event event) throws Exception {
if (event instanceof ZoomEvent) {
Clients.clearBusy();
ZoomEvent ze = (ZoomEvent) event;
if (ze.getData() != null && ze.getData() instanceof MQuery) {
AEnv.zoom((MQuery) ze.getData());
@ -364,6 +378,7 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
public void onEvent(Event event) throws Exception {
if (event instanceof DrillEvent) {
Clients.clearBusy();
DrillEvent de = (DrillEvent) event;
if (de.getData() != null && de.getData() instanceof MQuery) {
MQuery query = (MQuery) de.getData();
@ -383,6 +398,7 @@ public class ZkReportViewer extends Window implements EventListener<Event>, ITab
public void onEvent(Event event) throws Exception {
if (event instanceof DrillEvent) {
Clients.clearBusy();
DrillEvent de = (DrillEvent) event;
if (de.getData() != null && de.getData() instanceof MQuery) {
MQuery query = (MQuery) de.getData();

View File

@ -1,16 +1,19 @@
function zoom(cmpid, column, value){
zAu.cmd0.showBusy(null);
var widget = zk.Widget.$(cmpid);
var event = new zk.Event(widget, 'onZoom', {data: [column, value]}, {toServer: true});
zAu.send(event);
}
function drillAcross(cmpid, column, value){
zAu.cmd0.showBusy(null);
var widget = zk.Widget.$(cmpid);
var event = new zk.Event(widget, 'onDrillAcross', {data: [column, value]}, {toServer: true});
zAu.send(event);
}
function drillDown(cmpid, column, value){
zAu.cmd0.showBusy(null);
var widget = zk.Widget.$(cmpid);
var event = new zk.Event(widget, 'onDrillDown', {data: [column, value]}, {toServer: true});
zAu.send(event);