diff --git a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java index 01d1ec89f5..f33e31cc32 100644 --- a/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java +++ b/app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayInfo.java @@ -17,6 +17,7 @@ import java.util.logging.Level; import org.csstudio.display.builder.model.DisplayModel; +import org.csstudio.display.builder.model.macros.MacroHandler; import org.phoebus.framework.macros.Macros; import org.phoebus.framework.util.ResourceParser; @@ -242,14 +243,25 @@ else if (path.contains(":")) } else buf.append('&'); + + String macroValue = macros.getValue(name); + // macro can be defined after component creation + // replace again macros by the correct value + try { + macroValue = MacroHandler.replace(macros, macroValue); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Internal error in MacroHandler.replace '" + macroValue + "'", ex); + } + buf.append(name) .append('=') - .append(encode(macros.getValue(name))); + .append(encode(macroValue)); } + String strBuffer = buf.toString(); try { - return new URI(buf.toString()); + return new URI(strBuffer); } catch (URISyntaxException ex) {