Windchill 2013 customization

Вот так я сделал Windchill красочнее.

Теперь задания на домашней страничке у пользователей подсвечиваютсья цветом в зависимости от того в какой WorkPakage они входят. А так же задания из одного пакета можно сворачивать/ разворачивать при помощи плюсика.
Это стало возможным благодаря добавления к атрибутам заданая вычисляемого атрибута «Пакет». На Java выполняеться выражение,
которое определяет с каким пакетом связан документ и выводит в атрибут наименование Пакета.
Цветовая гамма стала возможной благодаря созданию собственного рендера:

package ext.elm.kd;

import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import org.apache.log4j.Logger;

import wt.doc.WTDocument;
import wt.fc.PersistentReference;
import wt.log4j.LogR;
import wt.util.WTException;
import wt.workflow.work.WorkItem;

import com.ptc.core.components.descriptor.ModelContext;
import com.ptc.core.components.factory.dataUtilities.AbstractAttributeDataUtility;
import com.ptc.core.components.rendering.RenderingContext;
import com.ptc.core.components.rendering.RenderingException;
import com.ptc.core.components.rendering.guicomponents.Label;
import com.ptc.core.components.rendering.renderers.LabelRenderer;
import com.ptc.windchill.wp.WorkPackage;

import ext.elm.util.WorkPackageAssistent;

//ext.elm.kd.LinkedMPMResolverDataUtility

public class LinkedMPMResolverDataUtility extends AbstractAttributeDataUtility {
public static Map datas= new HashMap();

public Object getDataValue(String s, Object obj, ModelContext modelcontext)
throws WTException {

// log.info((new StringBuilder()).append(«getDataValue rowObject: «).append(obj).toString());

if(obj instanceof wt.workflow.work.WorkItem)
{
wt.workflow.work.WorkItem wi=(WorkItem)obj;
// System.out.println(«1= «+wi);
PersistentReference pr=wi.getPrimaryBusinessObject();
if (pr!=null&&pr.getObject()!=null)
{
if (pr.getObject() instanceof WTDocument)
{
WTDocument cherteg=(WTDocument)pr.getObject();
// System.out.println(«2= «+cherteg);
WorkPackage wp=WorkPackageAssistent.getRelatedPackage(cherteg);
if (wp!=null)
{
String res=wp.getName();
Label l= new Label(res);
l.setValue(res);
l.setRenderer(new StyleLabelRenderer());
return l;
}
}
}
}
return «»;
}

public LinkedMPMResolverDataUtility() {
super();
}

public String getLabel(String s1,
com.ptc.core.components.descriptor.ModelContext m2) {
return «workPakage»;
}

protected String getColumnId() {
return «workPakage»;
}

private static final Logger log;

static {
try {
log = LogR.getLogger(LinkedMPMResolverDataUtility.class.getName());
} catch (Throwable throwable) {
System.err.println((new StringBuilder())
.append(«Error initializing «)
.append(LinkedMPMResolverDataUtility.class.getName())
.toString());
throwable.printStackTrace(System.err);
throw new ExceptionInInitializerError(throwable);
}
}

public static String randomColor() {

String[] colors={«AAB0FF»,»A5CFFF»,»A5FFD3″,»D8FFCE»,»FFE3D1″,»FFC4CC»,»FFBCEE»,»E2B2FF»,»9D9BFF»,»9BC8FF»};
Random r= new Random();
return colors[r.nextInt(colors.length)];

}
public static void main(String[] args) {

/*System.out.println(LinkedMPMResolverDataUtility.randomColor());
System.out.println(LinkedMPMResolverDataUtility.randomColor());
System.out.println(LinkedMPMResolverDataUtility.randomColor());
System.out.println(LinkedMPMResolverDataUtility.randomColor());
System.out.println(LinkedMPMResolverDataUtility.randomColor());*/

}

}

class StyleLabelRenderer extends LabelRenderer
{

protected void renderObject(Object obj, PrintWriter printwriter, RenderingContext renderingcontext)
throws RenderingException
{
Label label = (Label)obj;
String color= LinkedMPMResolverDataUtility.datas.get(label.getValue());
if (color==null)
{
color=LinkedMPMResolverDataUtility.randomColor();
LinkedMPMResolverDataUtility.datas.put(label.getValue(), color);
}
write(printwriter,»

«+label.getValue()+»

«);
}
}

Добавить комментарий