본문 바로가기
  • Welcome!
Creo Reference Room/Windchill

객체 초기화 규칙 : File Name = Name = Number #1

by ToolBOX01 2024. 7. 28.
반응형

□ CAD 문서의 번호, 이름, 파일 이름이 서로 다르게 관리되어 불편함이 있습니다.

▷ 제안

  • 파일 이름은 사용자가 직접 입력합니다. (예: spring.prt, spring.drw, spring_expanded.prt)
  • 번호와 이름은 파일 이름에서 자동으로 생성됩니다.
  • 사용자가 번호와 이름을 직접 입력하지 못하도록 설정합니다.
  • 불필요한 정보는 화면에서 숨깁니다.
Creo 파일 (문서) 식별 방식에 있어 다음과 같은 중요한 변화를 해야 합니다.

1. CAD 문서 번호를 중심으로: CAD 문서의 고유 식별자로 CAD 문서 번호를 사용합니다.
2. 자동 생성되는 기본 번호: 부품 번호를 기반으로 CAD 문서 번호를 자동 생성합니다.
3. 고유성을 위한 접두사, 접미사: 파일 형식에 따른 확장자와 고유성을 위한 접미사를 추가합니다.
4. UI 간소화: 사용자 인터페이스에서 이름과 파일 이름 필드를 숨겨 사용자 오류를 줄입니다.

상세 내용

1. 파일 이름:

  • 사용자가 직접 입력하는 파일 이름을 기준으로 관리합니다.
  • 부품 번호, 이름 등을 포함하여 유연하게 사용할 수 있습니다.

2. 번호와 이름:

  • 파일 이름에서 자동으로 생성되는 OIR(Object Information Rule)을 사용합니다.
  • 서버 설정을 통해 사용자가 번호와 이름을 직접 입력하지 못하도록 합니다.

3. 화면 정리:

  • CAD 문서 정보 페이지, 새 문서 생성 화면 등에서 번호와 이름 필드를 제거합니다.
  • 작업 공간 목록, 체크인 화면 등의 테이블에서도 번호와 이름 열을 숨깁니다.
  • 사용자는 필요에 따라 테이블에서 원하는 열을 선택적으로 표시할 수 있습니다.

4. 이점

  • 작업 효율성 향상: 번호와 이름을 일일이 입력할 필요가 없어 시간을 절약할 수 있습니다.
  • 데이터 일관성 유지: 파일 이름, 번호, 이름이 항상 일치하므로 데이터 관리가 편리합니다.
  • 사용자 편의성 증대: 불필요한 정보가 화면에 표시되지 않아 작업이 간편해집니다

 

규칙 설정:

  1. CAD 문서의 번호와 이름이 파일 이름과 동일하게 설정되도록 규칙을 추가합니다.
  2. 번호와 이름 필드가 읽기 전용으로 설정되어 사용자가 직접 수정할 수 없도록 합니다.
  3. 번호와 이름 필드에 "(Generated)"라는 표시가 나타나도록 설정합니다.

  1. 모델과 도면의 이름을 어떻게 자동으로 생성하고 싶으신가요? (예: 부품 번호, 날짜, 프로젝트 코드 등을 기반으로)
  2. 설명은 어떤 정보를 포함하고 싶으신가요? (예: CAD 시스템에서 사용하는 설명, 추가적인 정보 등)
  3. 부품과 모델, 모델과 도면 사이에 어떤 관계를 설정하고 싶으신가요? (예: 포함 관계, 참조 관계 등)
  4. Windchill 화면에서 어떤 정보를 보고 싶으신가요?

 

참고

 Windchill 11.0에서는 CAD 문서의 번호, 이름, 파일 이름을 자동으로 일치시키는 기능이 크게 향상되었습니다.

주요 개선 사항

기본 번호 자동 생성: 부품(WTPart) 번호와 동일한 기본 번호를 자동으로 생성할 수 있습니다.
파일 이름 확장자 유지: 파일 이름의 확장자를 번호에도 포함시킬 수 있습니다.
부품(WTPart)  자동 생성: CAD 문서의 번호를 기반으로 부품(WTPart) 을 자동 생성할 수 있습니다.
사용자 인터페이스 개선: 번호와 이름 필드를 숨기거나 표시하는 등의 사용자 인터페이스를 더욱 편리하게 사용할 수 있습니다.

 


부품 번호 : 00001234

부품 번호를 기반으로  CAD 문서 식별자는 모두 동일 합니다. 하지만 고유성을 위해 확장자와 접미사를 포함합니다.

  • 0001234.PRT
  • 00001234_FLEX001.PRT
  • 00001234.DRW
  • 00001234.MFG
  • etc.

이 정책을 최대한 활용하려면 UI에서 초점을 CAD 문서 번호로 변경해야 합니다. OIR을 사용하여 생성할 수 있는 유일한 값이기 때문입니다. 결과적으로 이름과 파일 이름을 숨기도록 표시를 변경해야 합니다.

 

  Windchill에서 자동 생성된 숫자를 기반으로 숫자, 이름 및 파일 이름을 지정하는 단계

 

1. Creo 문서 요구사항

  • Creo 문서 번호: 부품(WTPart) 번호와 동일한 알고리즘으로 생성
  • Creo  문서 이름: 파일 이름( Creo File Name)에서 가져옴
  • 번호 변경 불가: Creo 문서 번호는 수정 불가
  • 이름 표시: Creo 문서 이름은 "(Generated)"로 표시

 

2. 부품(WTPart) 요구사항

  • 부품 번호를 Creo 문서와 동일한 알고리즘으로 생성.
  • 부품 번호를 수동으로 수정 가능 하도록

 

▷ Windchill 서버 측 환경 설정

1. Operation > Auto Associate > Auto Associate Find and Create Part Using Base Number = Yes
 (작업 >자동 연결 > 기본 번호를 사용하여 부품 자동 연결 찾기 및 작성 = Yes)

더보기

## 정규 표현식을 이용한 CAD 문서와 부품 자동 연결 로직 분석 및 개선점 제안

### 로직 요약

* **CAD 문서 번호 기반 부품 자동 연결:** CAD 문서의 번호에 정규 표현식을 적용하여 일치하는 부품을 찾거나 새 부품을 생성합니다.
* **자동 연결 방식:**
  * **자동 연결 번호 지정 매개변수:** 설정된 값을 우선 사용합니다.
  * **CAD 문서 번호:** 확장자 유무에 따라 일치하는 부품을 검색합니다.
  * **기본 번호 정규 표현식:** 서버 설정에서 정의된 정규 표현식을 사용하여 CAD 문서 번호에서 기본 번호를 추출하여 일치하는 부품을 검색합니다.
* **새 부품 생성:** 일치하는 부품이 없을 경우, 추출된 기본 번호를 사용하여 새 부품을 생성합니다.

### 문제점 및 개선점

1. **정규 표현식의 유연성 부족:**
   * 고정된 정규 표현식으로는 다양한 번호 체계를 지원하기 어렵습니다.
   * 번호 체계가 변경될 경우 정규 표현식을 수정해야 하는 번거로움이 있습니다.
   * 사용자 정의 정규 표현식을 허용하여 유연성을 높일 수 있습니다.

2. **자동 연결 로직의 복잡성:**
   * 다양한 조건과 예외 처리 로직으로 인해 시스템이 복잡해질 수 있습니다.
   * 로직을 단순화하고 가독성을 높일 수 있는 방법을 모색해야 합니다.

3. **사용자 설정 부족:**
   * 사용자가 직접 정규 표현식을 설정하거나, 번호 추출 로직을 커스터마이징할 수 있는 기능이 부족합니다.
   * 사용자의 요구사항에 맞게 시스템을 유연하게 설정할 수 있도록 해야 합니다.

4. **오류 처리 부재:**
   * 정규 표현식 매칭 실패, 중복되는 부품 등 다양한 오류 상황에 대한 처리 로직이 부족합니다.
   * 오류 발생 시 사용자에게 명확한 메시지를 제공하고, 시스템 오류를 방지해야 합니다.

### 개선 방안

1. **유연한 정규 표현식 관리:**
   * 사용자가 정규 표현식을 직접 입력하거나, 미리 정의된 정규 표현식 목록에서 선택할 수 있도록 합니다.
   * 정규 표현식 검증 기능을 제공하여 오류를 방지합니다.
   * 정규 표현식을 프로젝트 또는 팀 단위로 관리할 수 있도록 합니다.

2. **모듈화된 로직:**
   * 정규 표현식 적용, 부품 검색, 새 부품 생성 등 각 기능을 별도의 모듈로 분리하여 관리합니다.
   * 각 모듈은 인터페이스를 통해 연결되어 유연성을 높입니다.

3. **사용자 설정 기능 강화:**
   * 번호 추출 로직, 매칭 기준 등을 사용자가 직접 설정할 수 있도록 합니다.
   * 설정 값을 저장하여 프로젝트별로 다른 설정을 적용할 수 있도록 합니다.

4. **오류 처리 강화:**
   * 정규 표현식 매칭 실패, 중복되는 부품 등 다양한 오류 상황에 대한 상세한 에러 메시지를 제공합니다.
   * 오류 발생 시 시스템 로그에 기록하여 문제 해결을 지원합니다.

5. **성능 개선:**
   * 정규 표현식 엔진을 최적화하여 성능을 향상시킵니다.
   * 대량 데이터 처리 시 인덱싱 기술을 활용하여 검색 속도를 높입니다.

### 추가 기능 제안

* **버전 관리:** 부품 번호 변경 이력을 관리하고, 특정 버전의 부품을 조회할 수 있는 기능을 제공합니다.
* **통계 기능:** 부품 사용 현황, 번호 생성 패턴 등을 분석하여 시스템 관리에 활용할 수 있는 통계 정보를 제공합니다.
* **연동 기능:** 다른 시스템과의 연동을 통해 데이터 일관성을 유지하고, 자동화된 작업을 수행할 수 있도록 합니다.

### 결론

정규 표현식을 이용한 CAD 문서와 부품 자동 연결 로직은 유연성과 확장성을 높이기 위해 지속적인 개선이 필요합니다. 사용자의 요구사항을 반영하여 다양한 기능을 추가하고, 시스템의 안정성과 성능을 향상시키는 것이 중요합니다.

**더 자세한 상담을 원하시면 다음과 같은 질문에 답변해주세요.**

* 현재 시스템에서 사용하고 있는 정규 표현식은 무엇인가요?
* 자동 연결 시 발생하는 주요 문제점은 무엇인가요?
* 시스템에 대한 어떤 추가 기능을 원하시나요?

**위 질문에 대한 답변을 바탕으로 더욱 구체적인 개선 방안을 제시해 드리겠습니다.**


2. Operation > Auto Associate > Auto Associate Truncate Number File Extension=Yes

3. Operation > Auto Associate > Force Autonumbered Part Creation=No

시스템이 "기본 번호"(확장자/접두사/접미사 없음)를 찾도록 구성되어 있는지 확인하십시오. 
기본 시스템은 모든 접미사와 확장자를 제거합니다.

4. Operation > General > Base Number Regular Expression
(작업 > 일반 > 기본 번호 정규 표현식)

접미사 또는 확장명이 없는 기본 번호를 찾기 위해 객체의 번호에 적용된 정규 표현식. [자동 연결] 및 
[이름 바꾸기] 작업에서 이 정규 표현식을 사용하여 객체의 기본 번호를 찾을 수 있습니다.

 

새 부품 마법사에서 부품과 CAD 문서를 모두 생성할 때 기본값이 부품 번호를 번호와 파일 이름으로 사용하는지 
확인하십시오.

5. Operation > New CAD Document > Set CAD Document Number Same As Part Number=Yes
(작업 > 새 CAD 문서 > CAD 문서 번호로 CAD 파일 이름 동기화 = Yes)

6. Operation > New CAD Document > Synchronize CAD File Name with CAD Document Number=Yes
(작업 > 새 CAD 문서 > CAD 문서 번호를 부품 번호와 동일하게 설정 = Yes)

 

업로드, 새 CAD 문서, 다른 이름으로 저장 및 이름 바꾸기를 사용할 때 CAD 문서의 이름과 번호에 파일 확장자가 
사용되었는지 확인하십시오. 연관된 환경 설정 입니다.
7. Operations > Upload Operation > Upload > Drop File Extension from Name=No



8. Save As > Inherit FileName from Number=Yes


새 CAD 문서 UI를 사용하여 CAD 문서 및/또는 파트를 만들 때 키 필드로 숫자를 사용하도록 설정합니다. 다음 이전 기본 설정은 올바르게 생성되도록 합니다.

1. Number

  • Drop File Extension from Number=No일 때 확장자는 숫자로 표시됩니다.
  • CAD 문서와 부품 번호를 생성하는 데 동일한 알고리즘을 사용하는 경우 생성된 숫자는 기존 부품 번호와 충돌하지 않습니다.
  • 접미사를 추가해야 하는 경우 숫자 필드는 생성된 숫자로 기본 설정되지만 OIR에서 불변 제약 조건을 제거한 경우 편집할 수 있습니다.

2. 이름은 OIR을 기반으로 파일 이름에 생성됩니다.

3. 파일 이름은 "Synchronize CAD File Name with CAD Document Number=Yes"에 따라 생성된 번호를 기반으로 합니다.

4. Part Number

  • " Operation > Auto Associate > Force Autonumbered Part Creation=No "이고 부품 번호 OIR이 불변이 아닌 경우, "부품 생성 및 연관" 체크박스는 CAD 문서의 기준 번호를 사용합니다. 부품 번호가 자동 생성되는 것이 아니므로, 사용자가 직접 부품 번호를 변경할 수 있습니다(Part’s number OIR is NOT immutable).
  • 기준 번호는 기준 번호 정규 표현식을 사용하여 찾습니다.

 

다른 이름으로 저장을 사용하여 CAD 문서 및/또는 부품을 생성할 때 기본 파일 이름(및 OIR을 통한 이름)을 숫자와 동일하게 설정하십시오. 확장자가 있는 숫자를 생성하거나 관련 부품의 숫자를 복사하게 되기 때문입니다.

1. Number

  • 자동 생성: "자동 생성" 옵션을 사용하고 "Drop File Extension from Number=No"
  • 관련 파트를 기준으로 문서 번호 생성:

        1) 기본 번호가 파트 번호로 대체됩니다.
        2) 기본 번호는 기본 번호 정규 표현식을 사용하여 찾습니다.

2. 이름은 OIR을 기반으로 파일 이름에 생성됩니다.

3. 파일 이름

Save As > "  Inherit FileName from Number=Yes "를 선택하면 파일 번호가 CAD 문서 번호와 동일하게 설정됩니다.

4. Part Number

  • 자동 생성될 가능성이 높습니다.
  • CAD와 부품 번호 매기기에 동일한 알고리즘을 사용하므로 번호 충돌이 발생하지 않습니다.

 

Creo에서 생성할 때

  • 참고: Creo 4에서는 이제 WS UI로 이동하지 않고도 파일 > 새 CAD 문서 메뉴를 사용하여 CAD 문서 및/또는 관련 파트를 만들 수 있습니다.
  • 참고: Drop File Extension from Number=No일 경우 이름은 확장자 없이 번호가 됩니다.
  • 어떤 이유로 Creo UI에서 "이름"에 자동 생성된 번호를 사용하지 않은 경우 WS에서 이름 바꾸기 작업을 사용할 수 있습니다.

 

xml 파일

더보기
  • CAD Documents OIR:

<AttributeValues objType="wt.epm.EPMDocument">

 

<!-- set the folder -->

<AttrValue id="folder.id" algorithm="com.ptc.core.foundation.folder.server.impl.FolderPathAttributeAlgorithm">

<Arg>/Default</Arg>

</AttrValue>

 

<!-- set the lifecycle -->

<AttrValue id="lifeCycle.id" algorithm="com.ptc.core.foundation.lifecycle.server.impl.LifeCycleTemplateAttributeAlgorithm">

<Arg>

<!-- Translation of the word "Basic" must be the same as the translation done in commonLifeCycles.xml -->

<?loc-begin key="BASIC_LIFECYCLE_NAME" maxlen="30" match="commonLifeCycles.xml:BASIC_LIFECYCLE_NAME"?>Basic<?loc-end?>

</Arg>

</AttrValue>

 

<!-- set the team template -->

<AttrValue id="teamTemplate.id" algorithm="com.ptc.core.foundation.team.server.impl.TeamTemplateAttributeAlgorithm">

<Arg>Default</Arg>

</AttrValue>

 

<!-- set the number to a generated number -->

<AttrValue id="number" algorithm="com.ptc.windchill.enterprise.revisionControlled.server.impl.NumberGenerator">

<Arg>{GEN:wt.enterprise.SequenceGenerator:WTPARTID_seq:10:0}</Arg>

</AttrValue>

 

<!-- set the name to a CAD Doc file name-->

<AttrValue id="name" algorithm="com.ptc.windchill.enterprise.revisionControlled.server.impl.NumberGenerator">

<Attr id="CADName"/>

</AttrValue>

 

<!-- set the version info to a generated version info -->

<AttrValue id="MBA|versionInfo" algorithm="com.ptc.core.foundation.vc.server.impl.VersionInfoGenerator">

<Arg>wt.series.HarvardSeries</Arg>

</AttrValue>

 

<!-- specify AttrConstraint tag -->

<AttrConstraint id="lifeCycle.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>

</AttrConstraint>

<AttrConstraint id="lifeCycle" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>

</AttrConstraint>

<AttrConstraint id="folder.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue"/>

</AttrConstraint>

<AttrConstraint id="number" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

</AttrConstraint>

<AttrConstraint id="name" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

</AttrConstraint>

<AttrConstraint id="teamTemplate.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>

</AttrConstraint>

<AttrConstraint id="teamTemplate" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>

</AttrConstraint>

<AttrConstraint id="organization.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue">

<Value algorithm="com.ptc.windchill.enterprise.org.server.impl.OwningOrgDefaultAlgorithm"/>

</Value>

</AttrConstraint>

</AttributeValues>

 

 

 

  • Parts OIR:

<AttributeValues objType="wt.part.WTPart">

 

<!-- set the folder -->

<AttrValue id="folder.id" algorithm="com.ptc.core.foundation.folder.server.impl.FolderPathAttributeAlgorithm">

<Arg>/Default</Arg>

</AttrValue>

 

<!-- set the lifecycle -->

<AttrValue id="lifeCycle.id" algorithm="com.ptc.core.foundation.lifecycle.server.impl.LifeCycleTemplateAttributeAlgorithm">

<Arg>

<!-- Translation of the word "Basic" must be the same as the translation done in commonLifeCycles.xml -->

<?loc-begin key="BASIC_LIFECYCLE_NAME" maxlen="30" match="commonLifeCycles.xml:BASIC_LIFECYCLE_NAME"?>Basic<?loc-end?>

</Arg>

</AttrValue>

 

<!-- set the team template -->

<AttrValue id="teamTemplate.id" algorithm="com.ptc.core.foundation.team.server.impl.TeamTemplateAttributeAlgorithm">

<Arg>Default</Arg>

</AttrValue>

 

<!-- set the number to a generated number -->

<AttrValue id="number" algorithm="com.ptc.windchill.enterprise.revisionControlled.server.impl.NumberGenerator">

<!-- add a V prefix for variant parts -->

<Value algorithm="wt.rule.algorithm.BooleanBranch">

<Value algorithm="wt.rule.algorithm.EqualsTest">

<Attr id="genericType"/>

<Arg>variant</Arg>

</Value>

<Arg>V</Arg>

<Arg></Arg>

</Value>

<!-- the sequence -->

<Arg>{GEN:wt.enterprise.SequenceGenerator:WTPARTID_seq:10:0}</Arg>

</AttrValue>

 

<!-- set the version info to a generated version info -->

<AttrValue id="MBA|versionInfo" algorithm="com.ptc.core.foundation.vc.server.impl.VersionInfoGenerator">

<Arg>wt.series.HarvardSeries</Arg>

</AttrValue>

 

<!-- name of variant parts -->

<AttrValue id="name" algorithm="wt.rule.algorithm.BooleanBranch">

<Value algorithm="wt.rule.algorithm.EqualsTest">

<Attr id="genericType"/>

<Arg>variant</Arg>

</Value>

<!-- assign a name only for variant parts. for others return null.

name should be assigned by the client -->

<Value algorithm="wt.generic.rule.VariantNameGenerator">

<Arg>{GEN:wt.enterprise.SequenceGenerator:variantnameseq:10:0}</Arg>

</Value>

<Value algorithm="wt.rule.algorithm.StringConstant">

<Arg/>

</Value>

</AttrValue>

<AttrValue id="organization.id" algorithm="com.ptc.windchill.enterprise.org.server.impl.OwningOrgDefaultAlgorithm">

</AttrValue>

 

 

<!-- specify AttrConstraint tag -->

<AttrConstraint id="name" algorithm="wt.rule.algorithm.BooleanBranch">

<Value algorithm="wt.rule.algorithm.EqualsTest">

<Attr id="genericType"/>

<Arg>variant</Arg>

</Value>

<Value algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

</Value>

<Value algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

</Value>

</AttrConstraint>

<AttrConstraint id="lifeCycle.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>

</AttrConstraint>

<AttrConstraint id="lifeCycle" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>

</AttrConstraint>

<AttrConstraint id="folder.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue"/>

</AttrConstraint>

<!-- Add handling for ProjectLink and PdmLink differently OOTB for wt.part.WTPart object number field

For end items in PDMLink context, turn the autonumbering off -->

<AttrConstraint id="number" algorithm="wt.rule.algorithm.BooleanBranch">

<Value algorithm="com.ptc.core.rule.server.impl.IfContainerTypeEqualsProjectTest"/>

 

<Value algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

</Value>

 

<Value algorithm="wt.rule.algorithm.BooleanBranch">

<Value algorithm="wt.rule.algorithm.StringEqualsTest">

<Attr id="endItem"/>

<Arg>true</Arg>

</Value>

 

<Value algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints"/>

 

<Value algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

</Value>

</Value>

</AttrConstraint>

 

<AttrConstraint id="teamTemplate.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>

</AttrConstraint>

<AttrConstraint id="teamTemplate" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerAssignedConstraint"/>

<Value algorithm="com.ptc.core.rule.server.impl.GetImmutableConstraint"/>

</AttrConstraint>

<AttrConstraint id="organization.id" algorithm="com.ptc.core.rule.server.impl.GatherAttributeConstraints">

<Value algorithm="com.ptc.core.rule.server.impl.GetServerPreGeneratedValue"/>

</AttrConstraint>

</AttributeValues>