Перейти к публикации

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


klimbronin

Рекомендованные сообщения

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

Хочу в 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 будет всегда последняя итерация объекта (не ревизия -- она будет именно той на которую выпускается извещение).

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

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

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

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

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

 

 

 

в wt.properties всё по default

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

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

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

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




  • Сообщения

    • soldo
      @maxx2000 Спасибо за развернутый ответ, очень помогли! @ak762 Благодарю, хороший вариант.
    • ak762
      holder - держатель, и так как узел используется для закрепления инструмента, в адаптированном на русский я бы использовал резцедержатель  в конкретном случае похоже sleeve эквивалент collet т.е. цанга получается 5 spindle sleeve holder = 5-ти местный цанговый держатель/резцедержатель
    • ДОБРЯК
      А что еще остается делать. В Ансис точно частоты будут разные, даже не сомневайтесь...
    • ДОБРЯК
      Кроме собственных чисел нужно еще и собственные вектора найти. Вы даже не понимаете задачи. Надо решить квадратное уравнение, чтобы найти два собственных числа и вектора для задачи любой размерности. Такой глупости я еще не слышал. Поэтому и смеюсь над вашими знаниями, которые вы еще в детском саду получили. И этим гордитесь... :=)
    • maxx2000
      прямо по чертежу 1. инструмент 2.гайка цангового патрона типа ER 3. хвостовик цангового патрона 4 многоместный держатель 5. Фиксирующие винты   Открутите гайку цангового патрона и установите в неё цангу нужного размера, накрутите на место; Установите в цангу инструмент и затяните гайку цангового патрона; Ослабьте крепёжные винты на многоместном держателе и отрегулируйте положение инструмента; Затяните фиксирующие винты;
    • Ander
    • ak762
      я бы попросил у заказчика дать конкретную марку применяемого материала и использовать эти данные для расчета судя по данным с MatWeb https://www.matweb.com/search/DataSheet.aspx?MatGUID=08fb0f47ef7e454fbf7092517b2264b2 там разброс механических свойств материала существенный включая зависимость от наполнителя и способа изготовления    
    • Jesse
      потестил со смещённым колесом.. Если коротко, то печаль)) В модальнике прикладываю вращение в разные сторона, частота та же. Пробовал даже "гнуть в разные стороны" - извлекать деформированные модели, когда уск. своб. падения направлено вверх и вниз. В модальниках частота та же, без изменения.. @Борман@AlexKazну что ж, если выкрутиться никак, будем осваивать Ansys. Чё ещё остаётся делать?!)))) Вроде какие-то видосики есть на ютюбе. Спс за овтеты)
    • soldo
      Приветствую всех! Часто искала информацию на форуме, связанную с переводом, но кое-что не могу найти и хочу попросить о помощи. Я перевожу инструкцию для токарного автомата продольного точения и не очень хорошо понимаю все, что связано с креплением инструмента к станку. Конкретно меня интересуют следующие вопросы. Станок оснащен разными инструментальными блоками, есть суппорт с резцами, блок с инструментами для поперечного сверления и т.д.  И есть один блок, который на корявом английском называется 5 spindle sleeve holder, На этом блоке 5 шпинделей и на них можно закрепить инструмент для сверления, нарезания резьбы и растачивания. В названии этого блока фигурируют какие-то втулки (sleeve), предполагаю, что это патроны? Вот, что примерно написано в инструкции по поводу установки инструмента в этом блоке: (1) Ослабьте стопорный винт ② и установите режущий инструмент ① на втулку ③. (2) Затяните стопорный винт ② и закрепите режущий инструмент ① на втулке ③. (3) Ослабьте резьбу ⑤ и вставьте втулку ③ в блок ④ . (4) Переместите втулку ③ в направлении длины и отрегулируйте прямоугольное положение режущего инструмента ①. (5) После регулировки затяните резьбу ⑤ и зафиксируйте втулку ③. Мой вопрос: как можно назвать этот блок и что это за "втулка"?  Прикрепляю ссылку, на ней скриншоты из инструкции с общим видом инструментальной системы, 5-шпиндельного блока и соответствующих инструментов для сверления. https://imgur.com/a/fpBgmLA
    • Snake 60
      @alek77  У меня норм, просто надо соблюсти условия: 1) масштаб вида 1:1 2) масштаб листа 2:1 почему такие условия хз.
×
×
  • Создать...