Дополнительные возможности Windchill > Управление производственным процессом > Настройка редактора структуры изделия (PSE) > Настройка PSE для управления смоделированными подклассами
  
Настройка PSE для управления смоделированными подклассами
Задача
Создан пользовательский смоделированный бизнес-объект; нужно настроить PSE так, чтобы он полностью поддерживал смоделированный подкласс.
Контекст, применимость и допущения
Отдельно создан смоделированный подкласс.
Ожидаемый результат
Экземпляры пользовательского смоделированного подкласса будут обнаружены и представлены в PSE так же, как и стандартные смоделированные объекты.
Решение
Сделайте изменения в следующих трех местах:
LogicalAttributes.xml
Таблицы и панели редактора структуры изделия
Настраиваемые действия-делегаты
Необходимые предварительные знания
Чтобы выполнить это техническое требование, необходимо иметь основные знания в следующих областях:
Управление настройками XML-файла
Управление настройками файла RBINFO
Элементы решения
Элемент
Тип
Описание
LogicalAttributes.xml
Файл XML
Используется для настройки сопоставлений моделируемого атрибута из "логической формы" во "внешнюю форму".
Процедура - настройка PSE для управления смоделированными подклассами
Этот раздел содержит следующие подразделы.
LogicalAttributes.xml
Таблицы и панели редактора структуры изделия
Настраиваемые действия-делегаты
LogicalAttributes.xml
Файл LogicalAttributes.xml, расположенный в <Windchill>/codebase/LogicalAttributes.xml, используется для настройки сопоставлений моделируемого атрибута из "логической формы" во "внешнюю форму". Сопоставление требуется для всех моделируемых атрибутов, которые представляют связь одного объекта с другим. Например, ниже показаны некоторые записи, определенные для ссылки WTPart на WTPartMaster:
<Class name="wt.part.WTPart">
<Property>
<LogicalForm>defaultUnit</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
wt.part.WTPartMaster~MBA|defaultUnit</ExternalForm>
</Property>
<Property>
<LogicalForm>masterReference</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
wt.part.WTPartMaster</ExternalForm>
</Property>
<Property>
<LogicalForm>name</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
wt.part.WTPartMaster~MBA|name</ExternalForm>
</Property>
<Property>
<LogicalForm>number</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
wt.part.WTPartMaster~MBA|number</ExternalForm>
</Property>
<Property>
<LogicalForm>organizationReference</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
wt.part.WTPartMaster~MBA|organizationReference^WCTYPE|
wt.org.WTOrganization</ExternalForm>
</Property>
<Property>
<LogicalForm>organizationName</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
wt.part.WTPartMaster~MBA|organizationReference^WCTYPE|
wt.org.WTOrganization~MBA|name</ExternalForm>
</Property>
<Property>
<LogicalForm>usedLineNumber</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
wt.part.WTPartMaster~MBA|uses@WCTYPE|
wt.part.WTPartUsageLink~MBA|
lineNumber.value</ExternalForm>
</Property>
<Property>
<LogicalForm>usedLink</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
wt.part.WTPartMaster~MBA|uses@WCTYPE|
wt.part.WTPartUsageLink</ExternalForm>
</Property>
</Class>
Используя пример, в котором ext.cust.CustPart расширяет wt.part.WTPart, а ext.cust.SubPartMaster расширяет wt.part.WTPartMaster, необходимо добавить следующее в специфический для сайта файл с именем <Windchill>/codebase/LogicalAttributesSite.xml:
<Class name="ext.cust.CustPart">
<Property>
<LogicalForm>defaultUnit</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
ext.cust.SubPartMaster~MBA|defaultUnit</ExternalForm>
</Property>
<Property>
<LogicalForm>masterReference</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
ext.cust.SubPartMaster</ExternalForm>
</Property>
<Property>
<LogicalForm>name</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
ext.cust.SubPartMaster~MBA|name</ExternalForm>
</Property>
<Property>
<LogicalForm>number</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
ext.cust.SubPartMaster~MBA|number</ExternalForm>
</Property>
<Property>
<LogicalForm>organizationReference</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
ext.cust.SubPartMaster~MBA|organizationReference^WCTYPE|
wt.org.WTOrganization</ExternalForm>
</Property>
<Property>
<LogicalForm>organizationName</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
ext.cust.SubPartMaster~MBA|organizationReference^WCTYPE|
wt.org.WTOrganization~MBA|name</ExternalForm>
</Property>
<LogicalForm>usedLineNumber</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
ext.cust.SubPartMaster~MBA|uses@WCTYPE|
wt.part.WTPartUsageLink~MBA|
lineNumber.value</ExternalForm>
</Property>
<Property>
<LogicalForm>usedLink</LogicalForm>
<ExternalForm>MBA|masterReference^WCTYPE|
ext.cust.SubPartMaster~MBA|uses@WCTYPE|
wt.part.WTPartUsageLink</ExternalForm>
</Property>
</Class>
Таблицы и панели редактора структуры изделия
Добавлять новые моделируемые атрибуты в файл LogicalAttributes.xml не нужно, но необходимо добавить их в подходящие XML-файлы конфигурации PSE. Дополнительные сведения см. в разделе Настройка PSE для подтипов.
* 
При указании новых моделируемых атрибутов, которые определены только для объектов подкласса, соответствующие элементы AttributeGroup, AttributeTable или Table, определенные в контексте wt.part.WTPart, необходимо скопировать в соответствующий контекст подкласса.
Перечислить нужно только новые моделируемые атрибуты. Существующие атрибуты наследуются. Например, наименование и номер будет наследоваться из WTPart.
Чтобы удалить атрибуты из панели с унаследованными подклассами, используйте <Placement remove="true"/>, например:
<AttributeDefinition id="contextName”>
<Placement remove="true"/>"
</AttributeDefinition>
При добавлении групп элементов для специализированных объектов рекомендуется не править существующие файлы, а поместить все сделанные изменения в отдельные файлы. Именуйте их согласованно, например CustomExplorerForTablesAndPanels.xml.
Используя предыдущий пример, в котором ext.cust. CustPart расширяет wt.part.WTPart, следующий элемент AttributeGroup
<ExplorerElementGroup>
<LogicContext application="ptc.wnc.StructureExplorer"
dataType="wt.part.WTPart"/>
<AttributeGroup id="ptc.wnc.exp.ViewPropertiesPanel" displayMode="view">
<CellDefinition id="number">
<AttributeDefinition attributeId="number"/>
</CellDefinition>
<CellDefinition id="organizationIdentifier">
<AttributeDefinition attributeId="organizationIdentifier"/>
</CellDefinition>
<CellDefinition id="name">
<AttributeDefinition attributeId="name"/>
</CellDefinition>
<CellDefinition id="versionIterationView">
<AttributeDefinition attributeId="versionIterationView"/>
</CellDefinition>
...
</AttributeGroup>
</ElementGroup>
необходимо скопировать в LogicContext для ext.cust. CustPart вот так:
<ExplorerElementGroup>
<LogicContext application="ptc.wnc.StructureExplorer"
dataType=" ext.cust.CustPart "/>
<AttributeGroup id="ptc.wnc.exp.ViewPropertiesPanel" displayMode="view">
<!-- name and number will inherit from WTPart -->
<!-- adding new modeled attributes here -->
<CellDefinition id="intMBA">
<AttributeDefinition attributeId="intMBA"/>
</CellDefinition>
...
</AttributeGroup>
</ElementGroup>
Настраиваемые действия-делегаты
PSE использует сопоставление Command-CommandDelegate для управления некоторыми своими операциями. Самый яркий пример - "действие дублирования". Чтобы "дублировать" специализированный класс, необходимо создать подкласс соответствующего делегата копии. В случае CustPart необходимо создать класс, который является подклассом wt.enterprise.CopyWTPartDelegate, и обработать копирование специализированных моделируемых атрибутов.
Запись делегата копии для пользовательского класса
Если стандартный бизнес-объект (такой как деталь) настроен для создания смоделированного подкласса, необходимо создать и настроить пользовательский класс делегата копии так, чтобы при копировании (или сохранении как) дополнительные моделируемые атрибуты были обработаны должным образом.
Этот документ иллюстрирует шаги с простым примером: пользовательский класс детали MyPart, который расширяет wt.part.WTPart единственным строковым атрибутом myAttr.
Создание делегата копии
Как показано на рисунке, можно просто расширить wt.enterprise.CopyWTPartDelegate и переопределить его метод newCopy(). Цель состоит в том, чтобы обработать любые пользовательские атрибуты, в данном конкретном случае это myAttr. Ниже показана реализация этого метода:
public final RevisionControlled newCopy( RevisionControlled object
)throws WTException {
//##begin newCopy%461E645C0050f.body preserve=yes
if (object == null) return null;
MyPart new_copy = (MyPart) super.newCopy(object);
MyPart original = (MyPart) object;
String my_attr = original.getMyAttr();
if (my_attr != null) {
try {
new_copy.setMyAttr(original.getMyAttr());
}
catch (WTPropertyVetoException e) {
throw new WTException(e);
}
return new_copy;
//##end newCopy%461E645C0050f.body
}
Создание делегата копии
Конфигурирование делегата копии
Чтобы дать Windchill команду использовать пользовательский делегат копии CopyMyPartDelegate как класс делегата копии для MyPart, в файл конфигурации <каталог-установки-windchill>/codebase/wt/enterprise/EnterpriseServerDelegate.properties необходимо вставить следующую строку:
wt.services/svc/default/wt.enterprise.CopyDelegate/null/<my-
package>.MyPart/0=<mypackage>.
CopyMyPartDelegate/singleton
Точки настройки
Настройка локализуемых меток и перечислений
С каждым смоделированным объектом связан создаваемый в процессе генерации файл RBINFO, содержащий локализованные строки, которые используются в PSE как метки для атрибутов и столбцов. Если нужно изменить метку, необходимо отредактировать соответствующий файл RBIFNO. Например, чтобы изменить метку для атрибута booleanMBA, отредактируйте в файле CustPartModelRB.rbInfo следующую строку:
CustPart.booleanMBA.value=New Label for booleanMBA
Смоделированные перечисления отображают внутренние значения перечислений, когда в PSE выводится на экран раскрывающееся меню. Чтобы изменить метки, показанные в раскрывающемся меню, необходимо отредактировать соответствующий файл RBINFO для перечисления. Например, если генерируется класс "public final class MyEnum extends EnumeratedType" со значениями apple, dog, cat и нужно изменить отображаемое значение в раскрывающемся меню, отредактируйте файл MyEnumRB.rbInfo подобно следующему:
# Entry Contents
apple.value=Apples
dog.value=Dogs
cat.value=Cats
Другие ресурсы
Настройка отображения таблицы PSE