BOM页自定义排序的实现

    这是关于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 上海欧俊信息技术有限公司 和 郭宇

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值