这是关于Teamcenter Enterprise的开发文章,Teamcenter Enterprise是优秀的PLM软件。原属于UGS,先被Siemens收购。它的功能之强大非一半国内软件可比。
一、编写met文件定义用于排序的属性
具体过程是定义一个名为assmInstallNo的属性用来存放零部件的安装号。并把该属性附加到相关窗体和类。
代码如下:
/
//Attributes
/
define attribute assmInstallNo;
store assmInstallNo as string(10);
display assmInstallNo as "安装号";
//.TXT assmInstallNo
//.安装号
attach assmInstallNo to AssmStrc;
attach assmInstallNo to DAtcGetI usage is output;
attach assmInstallNo to DAtcCre;
attach assmInstallNo to DAtcUpd;
attach assmInstallNo to AsRevRev;
attach assmInstallNo to DArrGetI usage is output;
attach assmInstallNo to DPvvCre;
attach assmInstallNo to DSrrUpd;
attach assmInstallNo to DPesGetI usage is output;
attach assmInstallNo to DPesCre;
attach assmInstallNo to DPesUpd;
attach class message ExpandRelationWithCtxt to PERevRev in server shvsvr;
二、编写mth文件用于实现按assmInstallNo属性排序功能
具体过程是直接对系统单层Bom的查询结果进行排序。注意这里只能影响到BS的排序结果,对采用CS的情况无效。排序算法我用了插入算法。若要实现多关键字排序可以在这个框架的基础上发挥一下。
message PERevRev:ExpandRelationWithCtxt
(
input : string className ,
ObjectPtr object ,
string relationship ,
ObjectPtr genContextObj ,
integer scope ,
NULL ObjectPtr dialogObject : :
output : SetOfObjects * otherSideObjSet ,
SetOfObjects * relObjSet ,
integer * mfail ) code
{
MODNAME("PERevRev:ExpandRelationWithCtxt");
status dstat = OKAY;
SetOfObjects setObjs = NULL;
SetOfObjects setRels = NULL;
int size = 0, i, j;
ObjectPtr oItem1 = NULL, oItem2 = NULL;
string pStr1=NULL, pStr2 = NULL;
*mfail = USC_OKAY;
dstat = ExpandRelationWithCtxtAtParent(PERevRevClass, className, object, relationship,
genContextObj, scope, dialogObject, otherSideObjSet, relObjSet, mfail);
//Sorting by assmInstallNo
if(size = low_set_size(*otherSideObjSet)<=1) goto EXIT;
setObjs = low_set_create(size);
setRels = low_set_create(size);
for(j=0; j<low_set_size(*relObjSet); j++)
{
oItem1 = low_set_get(*relObjSet, j);
GetAtt(oItem1, assmInstallNoAttr, &pStr1);
for(i=0; i<low_set_size(setRels); i++)
{
oItem2 = low_set_get(setRels, i);
GetAtt(oItem2, assmInstallNoAttr, &pStr2);
nlsStrTrimLeadWhiteSpace(pStr1);
nlsStrTrimTrailWhiteSpace (pStr1);
nlsStrTrimLeadWhiteSpace(pStr2);
nlsStrTrimTrailWhiteSpace (pStr2);
if(low_atoul(pStr1) > low_atoul(pStr2) )
{
continue;
}
else
{
break;
}
}
low_set_insrt(setRels, i, oItem1);
oItem1 = low_set_get(*otherSideObjSet, j);
low_set_insrt(setObjs, i, oItem1);
}
for(j=low_set_size(*otherSideObjSet)-1; j>=0; j--)
{
low_set_remove(*otherSideObjSet, j);
low_set_remove(*relObjSet, j);
}
*otherSideObjSet = setObjs;
*relObjSet = setRels;
uiShowExternalString("###");
uiShowExternalString(GetTimeStamp());
for(j=0; j<low_set_size(*relObjSet); j++)
{
oItem1 = low_set_get(*relObjSet, j);
GetAtt(oItem1, assmInstallNoAttr, &pStr1);
uiShowExternalString(pStr1);
}
uiShowExternalString(GetTimeStamp());
CLEANUP:
EXIT:
CheckDstatAndReturn;
}
;
三、修改BS配置把系统的默认排序关闭
默认情况下,系统是按照DisplayName来对Part进行排序的,所以必须先行关闭否则看不到排序效果的。
具体做法是:搜索所有xml中的inSortPreference,把true改成false。注意只要修改与bom相关的配置就行。
版权所有:2005-2007 上海欧俊信息技术有限公司 和 郭宇