Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Интеграция с Компас 3d и вычисляемые столбцы
 
Можно ли настроить процедуру импорта файлов Kompas 3d в DOCs таким образом, чтобы данные из документа (Обозначение, Наименование, Разраб., Пров., Формат и др.) автоматически заносились в соответствующие столбцы в архиве документов DOCs 2010.
Данные Обозначение, Наименование и Версию документов Kompas 3d умеет читать даже Explorer . (можно выбрать для отбражения эти столбцы см. рис.)
Это хотелось бы извлекать в первую очередь.

С остальными данными из чертежа нужно использовать API Компас. Я, к примеру, эти данные извлекать умею, но вот как их ..... вставить автоматически?
Нет ли у вас модуля интеграции с системой Компас?
Уж очень не хочется вбивать данные вручную повторно.

Аналогичная задача возникает если мне необходимо видеть также еще и столбец "контольная сумма" к каждому файлу. Т.е. я могу создать "параметр", который будет отображаться, но как сделать, чтобы он был вычисляемым автоматически (хотя бы при импорте)?
shelldetails2.png (84.83 КБ)
 
Предлагается сделать так:
1. Создать в системном справочнике "Макросы" макрос, корректирующий добавление новых объектов (Файлов) с примерно таким содержимым:

using System;
using TFlex.DOCs.Model.Macros;
using TFlex.DOCs.Model.References.Files;
using System.IO;

public class Macro : MacroProvider
{
public Macro(MacroContext context)
: base(context)
{
}

public void Сохранение()
{
if (!Context.ReferenceObject.IsAdded)
{
return; //Это значит объект не является новым
}
//System.Windows.Forms.MessageBox.Show(Параметр["Наименование"].ToString());
FileObject file = Context.ReferenceObject as FileObject;
if(file == null)
{
System.Windows.Forms.MessageBox.Show("Не файл");
return;
}
//System.Windows.Forms.MessageBox.Show(file.LocalPath);
if(file.Class.Guid != new Guid("61581bbb-72d3-41f6-8aa7-7f3895bcf94b"))
{
return; //Работаем только с текстовыми файлами
}
StreamReader sr = new StreamReader(file.LocalPath);
string str = sr.ReadLine();
Параметр["Комментарий"] = str;

}
}

Данный макрос заполняет поле "Комментарий" у импортированного текстового файла содержимым его собственной первой строки.

2. Добавить обработчик события "Сохранение" в справочнике файлов. В обработчике выбрать этот макрос и имя метода "Сохранение" (набить руками).

3. Добавить нужные параметры либо в базовый тип файла, либо только в нужный тип (Файл "Компас" или один из них).

4. Исправить данный макрос, таким образом, чтобы заполнялись значения этих новых полей.

Подсказка: Нужно учесть, что из макроса никто не запрещает вызывать внешние DLL. Для этого его имя нужно указать на странице "Ссылки".
 
Цитата
T-FLEX DOCs пишет:
1. Создать в системном справочнике "Макросы" макрос, корректирующий добавление новых объектов (Файлов) с примерно таким содержимым:
...
А на вкладке ссылки у макроса что-нибудь должно быть?
Просто выдается ошибочка при компиляции.
Цитата
The type or namespace name 'Windows' does not exist namespace 'System' (are you missing an assembly reference?)
 
Да, забыл.
Туда следует добавить строчку:
System.Windows.Forms.dll
 
И ещё - после изменения макроса и перекомпиляции возможно нужно выйти из системы и снова войти. Обработчик события запоминает старую логику и не обновляет её после перекомпиляции.
 
Спасибо! Работает!
Только я бы предложил убрать эти строки
Цитата
T-FLEX DOCs пишет:

if (!Context.ReferenceObject.IsAdded) { return; //Это значит объект не является новым }
тогда, значение параметра будет меняться, после взятия на редактирование и сохранения файла.
 
Я бы поостерёгся убирать эту проверку.
Дело в том, что это событие будет возникать при любых изменениях объекта (его свойств например). Например, добавление комментария будет приводить к загрузке параметров из файла. Совершенно не факт, что это требуется.
Возможно, это стоит делать при операции "Применить изменения", т.е. при сохранении файла в хранилище. Но такого события пока нет.
 
Цитата
И ещё - после изменения макроса и перекомпиляции возможно нужно выйти из системы и снова войти. Обработчик события запоминает старую логику и не обновляет её после перекомпиляции.

все таки уточните когда логика запоминается, а когда нет
каждый раз выходить из клиента - сами понимаете, напрягает
 
здравствуйте, господа...
Изменено: Дмитрий Сласнов - 19.11.2009 09:23:36
Страницы: 1