您的位置:首页 > 其它

BOM页自定义排序的实现

2007-05-17 11:51 471 查看
这是关于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 上海欧俊信息技术有限公司 和 郭宇
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐