IDEMPIERE-5135 : Add a link in a Broadcast message to open a record (#1105)

* IDEMPIERE-5135 : Add a link in a Broadcast message to open a record

Credits go to devcoffee - sorry i didn't find Matheus Marcelino's github account

Co-Authored-By: muriloht <5605206+muriloht@users.noreply.github.com>

* IDEMPIERE-5135 : Add a link in a Broadcast message to open a record

fix suggested by hengsin

Co-authored-by: muriloht <5605206+muriloht@users.noreply.github.com>
This commit is contained in:
Nicolas Micoud 2022-01-05 03:19:55 +01:00 committed by GitHub
parent a74f76dcc2
commit 79763f8626
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 3 deletions

View File

@ -16,6 +16,7 @@ package org.adempiere.model;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.util.Properties; import java.util.Properties;
import org.compiere.model.PO;
import org.compiere.model.X_AD_BroadcastMessage; import org.compiere.model.X_AD_BroadcastMessage;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
@ -33,8 +34,8 @@ public class MBroadcastMessage extends X_AD_BroadcastMessage implements Immutabl
/** /**
* *
*/ */
private static final long serialVersionUID = -5402131480890468471L; private static final long serialVersionUID = 3124401616294213703L;
public final static String CLIENTINFO_BROADCAST_COMPONENT_ID = "#clientInfo_BroadcastComponentId";
static private ImmutableIntPOCache<Integer,MBroadcastMessage> s_cache = new ImmutableIntPOCache<Integer,MBroadcastMessage>("AD_BroadcastMessage", 30, 60); static private ImmutableIntPOCache<Integer,MBroadcastMessage> s_cache = new ImmutableIntPOCache<Integer,MBroadcastMessage>("AD_BroadcastMessage", 30, 60);
public MBroadcastMessage(Properties ctx, int AD_BroadcastMessage_ID, public MBroadcastMessage(Properties ctx, int AD_BroadcastMessage_ID,
@ -176,4 +177,29 @@ public class MBroadcastMessage extends X_AD_BroadcastMessage implements Immutabl
makeImmutable(); makeImmutable();
return this; return this;
} }
@Override
public String get_Translation (String columnName) {
String translation = super.get_Translation(columnName);
if (translation.indexOf('@') > 0)
return Env.parseContext(getCtx(), 0, translation, false, false);
return translation;
}
/** Returns a link to be used in broadcast messages to open a record
* @param PO po
* @param uuid of the window
* @param text of the link
* @return the text to set in the broadcast message
* */
public String getUrlZoom(PO po, String windowUUID, String text) {
StringBuilder url = new StringBuilder("");
url.append("<a href=\"javascript:void(0)\" class=\"rp-href\" onclick=\"window.idempiere.zoomWindow(@" + CLIENTINFO_BROADCAST_COMPONENT_ID + "@, '");
url.append(po.get_KeyColumns()[0]);
url.append("', '").append(po.get_ID()).append("','").append(windowUUID).append("')\">");
url.append(text);
return url.toString();
}
} }

View File

@ -21,12 +21,15 @@ import java.util.logging.Level;
import org.adempiere.exceptions.DBException; import org.adempiere.exceptions.DBException;
import org.adempiere.model.MBroadcastMessage; import org.adempiere.model.MBroadcastMessage;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.component.Button; import org.adempiere.webui.component.Button;
import org.adempiere.webui.component.Checkbox; import org.adempiere.webui.component.Checkbox;
import org.adempiere.webui.component.Label; import org.adempiere.webui.component.Label;
import org.adempiere.webui.component.Window; import org.adempiere.webui.component.Window;
import org.adempiere.webui.event.ZoomEvent;
import org.adempiere.webui.util.ZKUpdateUtil; import org.adempiere.webui.util.ZKUpdateUtil;
import org.compiere.model.MNote; import org.compiere.model.MNote;
import org.compiere.model.MQuery;
import org.compiere.util.CLogger; import org.compiere.util.CLogger;
import org.compiere.util.DB; import org.compiere.util.DB;
import org.compiere.util.Env; import org.compiere.util.Env;
@ -36,6 +39,7 @@ import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events; import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Borderlayout; import org.zkoss.zul.Borderlayout;
import org.zkoss.zul.Cell; import org.zkoss.zul.Cell;
import org.zkoss.zul.Center; import org.zkoss.zul.Center;
@ -114,11 +118,14 @@ public class BroadcastMessageWindow extends Window implements IBroadcastMsgPopup
//textMsgContent = new Label(); //textMsgContent = new Label();
htmlDiv.appendChild(textMsgContent); htmlDiv.appendChild(textMsgContent);
center.setAutoscroll(true); center.setAutoscroll(true);
Env.setContext(Env.getCtx(), MBroadcastMessage.CLIENTINFO_BROADCAST_COMPONENT_ID, pnlHead.getUuid());
textMsgContent.setContent(mbMessages.get(0).get_Translation(MBroadcastMessage.COLUMNNAME_BroadcastMessage)); textMsgContent.setContent(mbMessages.get(0).get_Translation(MBroadcastMessage.COLUMNNAME_BroadcastMessage));
pnlHead.addEventListener(ZoomEvent.EVENT_NAME, this);
htmlDiv.setFocus(true); htmlDiv.setFocus(true);
htmlDiv.setStyle("display: table-cell; vertical-align: middle; text-align: center;"); htmlDiv.setStyle("display: table-cell; vertical-align: middle; text-align: center;");
Div divAlign = new Div(); Div divAlign = new Div();
divAlign.setStyle("color:white; position: absolute; width: 370px; height: 120px; display: table;"); divAlign.setStyle("color:white; position: absolute; width: 370px; height: 120px; display: table;");
htmlDiv.setParent(divAlign); htmlDiv.setParent(divAlign);
center.appendChild(divAlign); center.appendChild(divAlign);
center.setBorder("rounded"); center.setBorder("rounded");
@ -248,6 +255,13 @@ public class BroadcastMessageWindow extends Window implements IBroadcastMsgPopup
hashMessages.put(mbMessages.get(currMsg).get_ID(), acknowledged.isChecked()); hashMessages.put(mbMessages.get(currMsg).get_ID(), acknowledged.isChecked());
} }
} }
else if(event.getName().equals(ZoomEvent.EVENT_NAME)) {
Clients.clearBusy();
ZoomEvent ze = (ZoomEvent) event;
if (ze.getData() != null && ze.getData() instanceof MQuery) {
AEnv.zoom((MQuery) ze.getData());
}
}
} }
/** /**