Skip to main content
17-Peridot
December 28, 2021
Solved

How add a prefix to an autogenerated number?

  • December 28, 2021
  • 1 reply
  • 5718 views

Hello everyone, can you please tell me how can I add a prefix from business attr to an autogenerated number?
How to get this number: ABC.0000185268?

 

<AttributeValues objType="wt.part.WTPart">
	<AttrConstraint id="number" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints"> 	 
		<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/> 
	</AttrConstraint> 
</AttributeValues>

 

VladiSlav_0-1640693933339.png

 

Best answer by BenLoosli

Wrong part of the OIR to modify.

Look for:

<!-- set the number to a generated number -->
<AttrValue id="number" algorithm="com.ptc.windchill.enterprise.revisionControlled.server.impl.NumberGenerator">
<Arg>
ABC.
</Arg>
<Arg>
{GEN:wt.enterprise.SequenceGenerator:WTPARTID_seq:10:0}
</Arg>
</AttrValue>

 

You can put anything you like in the first ARG statement for your prefix and then let the system generate the 10 character number to follow.

1 reply

BenLoosli23-Emerald IIIAnswer
23-Emerald III
December 28, 2021

Wrong part of the OIR to modify.

Look for:

<!-- set the number to a generated number -->
<AttrValue id="number" algorithm="com.ptc.windchill.enterprise.revisionControlled.server.impl.NumberGenerator">
<Arg>
ABC.
</Arg>
<Arg>
{GEN:wt.enterprise.SequenceGenerator:WTPARTID_seq:10:0}
</Arg>
</AttrValue>

 

You can put anything you like in the first ARG statement for your prefix and then let the system generate the 10 character number to follow.

VladiSlav17-PeridotAuthor
17-Peridot
December 28, 2021
, thanks for your reply. It turned out to add constant values. But it does not work, it turns out to add a value from a global attribute (soft attribute or IBA).

Please tell me how this can be done?

VladiSlav17-PeridotAuthor
17-Peridot
January 6, 2022
,
d_graham thank you very much for your help.
 
 This article also helped me (If it is allowed to specify links to third-party sources here). If someone encounters this problem, then I post the final code:
import wt.enterprise.EnterpriseHelper;
import wt.iba.value.DefaultAttributeContainer;
import wt.iba.value.IBAHolder;
import wt.iba.value.IBAValueUtility;
import wt.iba.value.litevalue.AbstractValueView;
import wt.iba.value.service.IBAValueHelper;
import wt.inf.container.WTContainerRef;
import wt.rule.algorithm.RuleAlgorithm;
import wt.util.WTContext;
import wt.util.WTException;

import java.rmi.RemoteException;
import java.util.Locale;

public class CustomNumberRule implements RuleAlgorithm {
 @Override
 public Object calculate(Object[] args, WTContainerRef wt_container_ref) {
 String iba_name = "ИНДЕКС_ТС";
 String iba_value = "";
 String num = "ОШИБКА ГЕНЕРАЦИИ";
 try {
 num = EnterpriseHelper.getNumber(args);
 String name;

 IBAHolder obj_iba_holder = (IBAHolder) wt_container_ref.getObject();
 IBAHolder iba_holder = IBAValueHelper.service.refreshAttributeContainer(obj_iba_holder, null, WTContext.getContext().getLocale(), null);
 DefaultAttributeContainer default_attribute_container = (DefaultAttributeContainer) iba_holder.getAttributeContainer();

 for (AbstractValueView abstract_value_view : default_attribute_container.getAttributeValues()) {
 name = abstract_value_view.getDefinition().getName();
 if (iba_name.equalsIgnoreCase(name)) {
 iba_value = IBAValueUtility.getLocalizedIBAValueDisplayString(abstract_value_view, Locale.getDefault());
 break;
 }
 }
 } catch (RemoteException | WTException e) {
 e.printStackTrace();
 }

 return iba_value + "." + num;
 }
}​