klimbronin

нужна помощь с PromotionNotice (Запрос на утверждение)

Если создать запрос на утверждения на некоторые объекты, то эти объекты отображаются как Утверждаемые объекты. Если эти объекты потом взять на изменение и сдать на хранение, то получим новую итерацию, но в списке Утверждаемых объектов все равно будут отображаться старые итерации этих объектов.

Хочу в workflow написать робота, который обновлял бы список Утверждаемых объектов, чтобы в нем отображались последние итерации.

Сейчас в роботе удаляю старые Утверждаемые объекты и сохраняю новые объекты в список Утверждаемых объектов. Эти объекты программно можно просмотреть, но Windchill их не отображает.

Пока получилось следующее:

Робот:

System.out.println( "KLIM KLIM" );

wt.maturity.PromotionNotice promotionnotice = (wt.maturity.PromotionNotice)primaryBusinessObject;

wt.fc.QueryResult queryresult1 = wt.maturity.MaturityHelper.service.getPromotionTargets(promotionnotice);

wt.fc.collections.WTHashSet set = new wt.fc.collections.WTHashSet();

wt.fc.collections.WTHashSet set2 = new wt.fc.collections.WTHashSet();

while ( queryresult1.hasMoreElements() )

{

java.lang.Object obj = queryresult1.nextElement();

set2.addElement( obj );

set.addElement( ext.elara.ElaraLastIteration.LastIteration(obj) );

}

wt.maturity.MaturityHelper.service.deletePromotionTargets(promotionnotice, set2);

wt.maturity.MaturityHelper.service.savePromotionTargets(promotionnotice, set);

System.out.println( "конец" );

Дополнительный класс, который берет последнюю итерации у объектов:

package ext.elara;

/*

windchill shell

D:\ptc\windchill\src

javac -d %wt_home%/codebase d:\PTC\Windchill\src\ext\elara\ElaraLastIteration.java

*/

import java.lang.*;

import wt.fc.QueryResult;

import wt.query.SearchCondition;

import wt.fc.PersistenceHelper;

import wt.epm.EPMDocument;

import wt.doc.WTDocument;

import wt.part.WTPart;

import wt.query.QuerySpec;

import wt.vc.Iterated;

import wt.fc.Persistable;

import wt.fc.PersistenceHelper;

import wt.fc.ObjectIdentifier;

import wt.util.WTException;

public class ElaraLastIteration

{

public static Object LastIteration(Object obj) throws WTException

{

System.out.println ( "ElaraLastIteration !!!" );

if ( obj instanceof WTPart)

{

WTPart part = (WTPart)obj;

System.out.println( "полученный объект WTPart: "+part );

QuerySpec qs = new QuerySpec(WTPart.class);

qs.appendWhere( new SearchCondition(WTPart.class, WTPart.NUMBER, SearchCondition.EQUAL, part.getNumber()) );

qs.appendAnd();

qs.appendWhere( new SearchCondition(WTPart.class, "iterationInfo.latest", SearchCondition.IS_TRUE) );

QueryResult qr = PersistenceHelper.manager.find(qs);

WTPart lastpart = part;

long id = 0;

while (qr.hasMoreElements())

{

WTPart iterpart = (WTPart)qr.nextElement();

Iterated iterated = (Iterated)iterpart;

Persistable pers = (Persistable)iterated;

wt.fc.ObjectIdentifier oid = wt.fc.PersistenceHelper.getObjectIdentifier(pers);

if( oid.getId()>id ) { id = oid.getId(); lastpart = iterpart; }

}

if( id != 0 )

{

System.out.println( "последняя итерация = "+lastpart );

return (Iterated)lastpart;

}

else

{

System.out.println( "не удалось получить последнюю итерацию, возвращаем часть обратно");

return obj;

}

}

else if ( obj instanceof WTDocument)

{

WTDocument doc = (WTDocument)obj;

System.out.println( "полученный объект WTDocument: "+doc );

QuerySpec qs = new QuerySpec(WTDocument.class);

qs.appendWhere( new SearchCondition(WTDocument.class, WTDocument.NUMBER, SearchCondition.EQUAL, doc.getNumber()) );

qs.appendAnd();

qs.appendWhere( new SearchCondition(WTDocument.class, "iterationInfo.latest", SearchCondition.IS_TRUE) );

QueryResult qr = PersistenceHelper.manager.find(qs);

WTDocument lastdoc = doc;

long id = 0;

while (qr.hasMoreElements())

{

WTDocument iterdoc = (WTDocument)qr.nextElement();

Iterated iterated = (Iterated)iterdoc;

Persistable pers = (Persistable)iterated;

wt.fc.ObjectIdentifier oid = wt.fc.PersistenceHelper.getObjectIdentifier(pers);

if( oid.getId()>id ) { id = oid.getId(); lastdoc = iterdoc; }

}

if( id != 0 )

{

System.out.println( "последняя итерация = "+lastdoc );

return (Iterated)lastdoc;

}

else

{

System.out.println( "не удалось получить последнюю итерацию, возвращаем документ обратно");

return obj;

}

}

else if ( obj instanceof EPMDocument)

{

EPMDocument epm = (EPMDocument)obj;

System.out.println( "полученный объект EPMDocument: "+epm );

QuerySpec qs = new QuerySpec(EPMDocument.class);

qs.appendWhere( new SearchCondition(EPMDocument.class, EPMDocument.NUMBER, SearchCondition.EQUAL, epm.getNumber()) );

qs.appendAnd();

qs.appendWhere( new SearchCondition(EPMDocument.class, "iterationInfo.latest", SearchCondition.IS_TRUE) );

QueryResult qr = PersistenceHelper.manager.find(qs);

EPMDocument lastepm = epm;

long id = 0;

while (qr.hasMoreElements())

{

EPMDocument iterepm = (EPMDocument)qr.nextElement();

Iterated iterated = (Iterated)iterepm;

Persistable pers = (Persistable)iterated;

wt.fc.ObjectIdentifier oid = wt.fc.PersistenceHelper.getObjectIdentifier(pers);

if( oid.getId()>id ) { id = oid.getId(); lastepm = iterepm; }

}

if( id != 0 )

{

System.out.println( "последняя итерация = "+lastepm );

return (Iterated)lastepm;

}

else

{

System.out.println( "не удалось получить последнюю итерацию, возвращаем epmdocument обратно");

return obj;

}

}

else

{

System.out.println( "полученный объектс: "+obj+" - не WTPart, WTDocument, EPMDocument - возвращаем его обратно");

return obj;

}

}

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть подозрение что идеологически вы неверно интерпретируете Promotion Notice. Он на то и нужен чтобы зафиксировать конкретные ревизии и итерации утверждаемых объектов. Ведь, по сути, они подписываются. А если вы их меняете -- подписи то пропадают -- и объекты надо утверждать заново.

Другое дело если вы будете оперировать Enterprise Change Notice. В этом случае в ECN будет всегда последняя итерация объекта (не ревизия -- она будет именно той на которую выпускается извещение).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему может в не работать рабочем процессе продвижения робот с выражением?

wt.maturity.TransitionHandlerFactory.getInstance().transitionTargets(primaryBusinessObject,wt.lifecycle.Transition.toTransition(“REWORK"),false);

в жизненных циклах basic и PromotionRequest сочтояния Rework есть.

сообщение об ошибке не выводит. проверка синтаксиса Ок. проходит через этот шаг с состоянием выполнено, но состояние вложенных документов не меняет.

 

 

 

в wt.properties всё по default

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

  • реклама

  • Реклама

  • Ближайшие события

    Предстоящих событий не найдено
  • Дни рождения сегодня

    1. barbos
      barbos
      (43 года)
    2. cnc_expert
      cnc_expert
      (28 лет)
    3. Fraser
      Fraser
      (50 лет)
    4. Grom1
      Grom1
      (37 лет)
    5. Kord77
      Kord77
      (40 лет)
    Просмотреть все