这两天折腾了一下 isight5.0 的 crack,总算能用上 optimization 模块了。
这段时间会做些二次开发方面的尝试,先占个位置,待这一两周内慢慢完善。
PS:github 也一直没怎么好好利用,就作为第一个 project 放上去吧。
建立简单模型的例子见:
isight5.0 二次开发之 Application (2)
============================分割线=================================================
2012年7月20日,折腾了半天,依然没有解决问题,甚至尝试了 ValueChangeListener 之类的方法。
很是无奈,之后发现了 RtUtils 可以写出各组件的结果信息,加入代码后确实可行。
但是这样只能输出到文件,如何得到变量值呢?最后祭出反编译大法,看行不行吧。
============================分割线=================================================
研究反编译的代码后,发现了关键所在:
1 需要建立变量的引用来获取最后的结果
ResultRequestMgrFactory.createInstanceWithVarRefs
2 Process 类型的组件需要用迭代的方式获取最新的结果集合
for (fiperresultset = resultrequestmgr.getResultSetSnapShot(); !resultrequestmgr.isComplete() && fiperresultset.next(); )
============================分割线=================================================
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: RtUtils.java
package com.engineous.sdk.runtime;
import com.engineous.common.SDKUtils;
import com.engineous.common.i18n.IString;
import com.engineous.common.io.IOUtil;
import com.engineous.sdk.exception.SDKException;
import com.engineous.sdk.frapi.*;
import com.engineous.sdk.frapi.exception.EmptyResultException;
import com.engineous.sdk.frapi.exception.ResultException;
import com.engineous.sdk.gui.ProgressRange;
import com.engineous.sdk.log.Log;
import com.engineous.sdk.log.SysLog;
import com.engineous.sdk.model.*;
import com.engineous.sdk.model.exceptions.DtModelException;
import com.engineous.sdk.model.path.DtComponentPathDescriptor;
import com.engineous.sdk.pse.*;
import com.engineous.sdk.resmgr.ResMgr;
import com.engineous.sdk.vars.*;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
// Referenced classes of package com.engineous.sdk.runtime:
// RunResultData, RtException, Context
public class RtUtils
{
private static class JobLogValueComparator
implements Comparator
{
public int compare(Object obj, Object obj1)
{
JobLogValue joblogvalue = (JobLogValue)obj;
JobLogValue joblogvalue1 = (JobLogValue)obj1;
return joblogvalue.getLoggingTime().compareTo(joblogvalue1.getLoggingTime());
}
JobLogValueComparator()
{
}
}
public RtUtils()
{
}
public static void mapContext(Context context, Context context1)
throws VariableException
{
mapContext(context, context1, ((List) (new ArrayList())));
}
public static void mapContext(Context context, Context context1, List list)
throws VariableException
{
if(context1 == null || context == null)
return;
Iterator iterator = null;
iterator = context1.getList().iterator();
do
{
if(!iterator.hasNext())
break;
Variable variable = (Variable)iterator.next();
if(list == null || !list.contains(variable.getName()))
{
int i = variable.getMode();
String s = variable.getID();
Variable variable1 = context.getVariableById(s);
if(i == 3 || i == 2)
{
if(variable.getStructure() == 2)
((ArrayVariable)variable1).setDimSize(((ArrayVariable)variable).getDimSize());
context.getVariableById(s).mapFrom(variable);
}
}
} while(true);
}
public static void mapContext(Context context, Context context1, VariableFilter variablefilter)
throws VariableException
{
if(context1 == null || context == null)
return;
Iterator iterator = null;
iterator = context1.getList().iterator();
do
{
if(!iterator.hasNext())
break;
Variable variable = (Variable)iterator.next();
int i = variable.getMode();
String s = variable.getID();
Variable variable1 = context.getVariableById(s);
if((i == 3 || i == 2) && varia