I would like to create a macro to apply in process models in order to change the default color of the objects present in the models based on the value of one attribute of these objects.
In the next example, in case the value of the Description attribute is 1, then the color of the object should be 'black'.
I executed the macro without errors but nothing has changed in the model, the objects still have the previous colors.
Could you help me and suggest what I'm doing wrong?
Thanks in advance a lot for your collaboration
Kind regards
function main() { var selModels = Context.getSelectedModels(); var nLocale = Context.getSelectedLanguage(); var selobjs = Context.getSelectedObjects(); for (var i = 0; i < selModels.length; i++) { var oModel = oSelectedModels[i]; var oObjOccs = Designer.getOccs(oModel); for ( rr = 0 ; rr < oObjOccs.length ; rr++ ) { var valuation = Designer.getAttribute(oObjOccs[rr], Constants.AT_DESC, nLocale); if (valuation == 0) { Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color.BLACK) } } } }
Thanks Torsten for your comments, but still is not working the macro :(
I have introduced a couple of changes, but any progress on it.
Thanks for your support
function main()
{
var selModels = Context.getSelectedModels();
var nLocale = Context.getSelectedLanguage();
var selobjs = Context.getSelectedObjects();
for (var i = 0; i < selModels.length; i++) {
var oModel = selModels[i];
if (!Designer.isOpen(oModel)) {
Designer.openModel(oModel,false,true,false);
var oObjOccs = Designer.getOccs(oModel);
// var oObjOccs = selobjs
for ( rr = 0 ; rr < oObjOccs.length ; rr++ ) {
// Constants.AT_NAME= 9
var valuation = Designer.getAttribute(oObjOccs[rr], 9 , nLocale);
if (valuation == 1) {
Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color.BLACK)
}
}
}
}
Designer.Save(oModel)
}
Hi there,
I am doing similar things as Jaime. However, for some object occurrences, calling "Designer.setFillColor" leads to an unsupported exception.
Also, Designer.Save(...) throws an exception "TypeError: Cannot find function Save in object Designer@372db5."
Any help is highly appreciated!
Stefan
Hi, Were you able to solve this issue? I have adapted the code but no refresh on colors occurs.
var valuation = Designer.getAttribute(oObjOccs[rr], Constants.AT_DESC, nLocale);
if (valuation == 0) {
Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color.BLACK);
}
else
Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color.RED);
}
Designer.refresh(oModel);
}
}
Designer.Save(oModel);
Could you please give me an hint how to solve it?
Thanks. Sofia
Hi Sofia
Please check with this code for the macro.
Regards
var selModels = Context.getSelectedModels();
var nLocale = Context.getSelectedLanguage();
var selobjs = Context.getSelectedObjects();
for (var i = 0; i selModels.length; i++) {
var oModel = selModels[i];
var oObjOccs = Designer.getAllOccs(oModel);
for ( rr = 0 ; rr oObjOccs.length ; rr++ ) {
var oOcc = oObjOccs[rr];
var oAttrDefObj = Designer.getDefinition(oOcc);
// attribute 9
var valuation = Designer.getAttributeWithFallback(oAttrDefObj, 9, null);
if (valuation == 0) {
Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color.RED)
}
if (valuation == 1) {
Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color.ORANGE)
}
if (valuation == 2) {
Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color(0.4,1,0))
}
if (valuation == 3) {
Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color(0,0.6,0))
}
if (valuation == 'n/a') {
Designer.setFillColor (oModel,oObjOccs[rr],java.awt.Color(1,1,1))
}
// }
}
}
Its been too late but check this code
function main()
{
var l_models = Context.getSelectedModels();
for (var i=0;i<l_models.length;i++)
{
var l_model_type = l_models[i];
Designer.openModel(l_model_type,false,true,false);
var l_ObjOccs = Designer.getOccs(l_model_type);
for(var j=0;j<l_ObjOccs.length;j++)
{
var l_attribute = Designer.getAttribute(Designer.getDefinition(l_ObjOccs[j]),Constants.AT_HIER_NUM ,null);
if(l_attribute==null)
{
Designer.setFillColor(l_model_type,l_ObjOccs[j],java.awt.Color(254/255, 87/255, 64/255));
}
}
}
Designer.Save(l_model_type)
}
main();
Thanks Krishna, for your contrubtion!
Yes, the question from seven years ago is hopefully resolved.
But if you'd like to share great ARIS script code snippets feel free to share them just as a new post, maybe not as a question but with something like "Did you know..." or "My tip for...".
Cheers
Rune