Добрый день, решаю задачу записи данных в спецификацию T-FLex файлов. Для этого использовал пример "Экспорт данных спецификации в Excel.grb", после некоторых модификаций получил следующий код:
Код
public static void NewMacro()
{
Document document = TFlex.Application.ActiveDocument;
foreach (Text textobj in document.Texts)
{
if (textobj is BOMObject)
{
BOMObjectName = ((BOMObject)textobj).FriendlyName;
MessageBox.Show(BOMObjectName);
document.BeginChanges("Тест");
ModelObject textobject = document.GetObjectByID(((BOMObject)textobj).ReportID);
BOMObject bomobj = (BOMObject)textobject;
bomobj.Refresh(true);
bomobj.BeginEdit();
if (bomobj.MoveToFrontRecord())
{
do
{
bomobj.EditRecord();
BOMObjectName = "Тест";
bomobj.UpdateStandardFieldValue(BOMObject.StandardField.Desc, "123");
bomobj.EditRecord();
BOMObjectName = bomobj.GetStandardFieldValue(BOMObject.StandardField.Desc);
MessageBox.Show(BOMObjectName);
bomobj.UpdateRecord();
}
while (bomobj.MoveToNextRecord());
}
bomobj.EndEdit();
bomobj.Refresh(false);
document.EndChanges();
}
}
MessageBox.Show("Закрыт!");
}
После команды UpdateStandardFieldValue текущая запись должна обновиться, но этого не происходит.. Как работает механизм обновления или записи данных в спецификацию??
Я не могу найти этот пример...мне не понятно, где определение "BOMObjectName"?
string BOMObject; Вообще в отладчике не работают точки останова. Поэтому я использовал MessageBox. Из которого видно что UpdateStandardFieldValue и последующим считыванием GetStandardFieldValue значение не поменялось.. Очень странно все это ((((
1. Установите среду разработки Express 2013 for Windows Desktop 2. Создайте новый проект ( Visual C# / Class Library ) 3. В свойствах проекта, раздел "Build" задайте путь "C:\Program Files\T-FLEX CAD 14 x64\Program\" 4. В свойствах проекта, раздел "Debug" области "Start Action", установите опцию "Start external program" и укажите путь к программе "C:\Program Files\T-FLEX CAD 14 x64\Program\TFlex.exe" 5. Добавьте ссылку на сборку "TFlexAPI.dll" ( в свойствах ссылки, для параметра "Copy Local" установите "False" ) 6. Запустите отладку F5 ( должен запуститься T-FLEX CAD ) 7. Создайте модель, и новый модуль макрокоманды. 8. В редакторе макрокоманд добавьте ссылку на сборку ( в моем случае, я использовал наименование проекта "Test" ), и введите следующий код:
Код
using System;
using TFlex.Model;
using TFlex.Model.Model2D;
using TFlex.Model.Model3D;
using Test;
namespace NewMacroNamespace
{
public class NewMacroClass
{
public static void NewMacro()
{
Class1.Run();
}
}
}
9. Выполните макрос.
Если все сделано правильно, отладчик должен остановиться на точке останова
1. Установите среду разработки Express 2013 for Windows Desktop 2. Создайте новый проект ( Visual C# / Class Library ) 3. В свойствах проекта, раздел "Build" задайте путь "C:\Program Files\T-FLEX CAD 14 x64\Program\" 4. В свойствах проекта, раздел "Debug" области "Start Action", установите опцию "Start external program" и укажите путь к программе "C:\Program Files\T-FLEX CAD 14 x64\Program\TFlex.exe" 5. Добавьте ссылку на сборку "TFlexAPI.dll" ( в свойствах ссылки, для параметра "Copy Local" установите "False" ) 6. Запустите отладку F5 ( должен запуститься T-FLEX CAD ) 7. Создайте модель, и новый модуль макрокоманды. 8. В редакторе макрокоманд добавьте ссылку на сборку ( в моем случае, я использовал наименование проекта "Test" ), и введите следующий код:
Код
using System;
using TFlex.Model;
using TFlex.Model.Model2D;
using TFlex.Model.Model3D;
using Test;
namespace NewMacroNamespace
{
public class NewMacroClass
{
public static void NewMacro()
{
Class1.Run();
}
}
}
9. Выполните макрос.
Если все сделано правильно, отладчик должен остановиться на точке останова
Спасибо!! Дебаг заработал.. Во только так и не удается записать значение в спецификацию(( any ideas !?
Честно говоря я сам только начал осваивать Open API, и мне не совсем понятно что представляет собой класс BOMObject, ясно что это класс спецификации, но как с ним работать, нужно разбираться. Начнем с того, что такое "стандартная форма спецификации"?
Если следовать логике примера "Экспорт данных спецификации в Excel", то пример кода ниже, на момент выполнения, должен отобразить диалог с сообщением, но этого не происходит.
Код
using System;
using System.Windows.Forms;
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
namespace Test
{
public class Class1
{
public static void Run() {
Document document = TFlex.Application.ActiveDocument;
foreach (Text textobj in document.Texts)
{
if (textobj is BOMObject) // Условие на соответствие типа данных
{
MessageBox.Show("Test");
}
}
}
}
}
Если выполнить макрос "Экспорт данных спецификации в Excel", то спецификация не сохраняется. Диалог с предложением сохранить файл появляется, но также не выполняется условие на соответствие типа данных. Свойство "Texts" является устаревшим и возможно, необходимо заменить на метод "GetTexts()".
Либо макрос "Экспорт данных спецификации в Excel" является не рабочим примером, либо косяк в модели. Проверьте, пожалуйста, экспортируются данные спецификации на вашей модели?
Vite написал: Если следовать логике примера "Экспорт данных спецификации в Excel", то пример кода ниже, на момент выполнения, должен отобразить диалог с сообщением, но этого не происходит.
Код
using System;
using System.Windows.Forms;
using TFlex;
using TFlex.Model;
using TFlex.Model.Model2D;
namespace Test
{
public class Class1
{
public static void Run() {
Document document = TFlex.Application.ActiveDocument;
foreach (Text textobj in document.Texts)
{
if (textobj is BOMObject) // Условие на соответствие типа данных
{
MessageBox.Show("Test");
}
}
}
}
}
Если выполнить макрос "Экспорт данных спецификации в Excel", то спецификация не сохраняется. Диалог с предложением сохранить файл появляется, но также не выполняется условие на соответствие типа данных. Свойство "Texts" является устаревшим и возможно, необходимо заменить на метод "GetTexts()".
Либо макрос "Экспорт данных спецификации в Excel" является не рабочим примером, либо косяк в модели. Проверьте, пожалуйста, экспортируются данные спецификации на вашей модели?
Спасибо за комметарии!) Я нашел способ записи данных , как доделаю покажу что получилось!)
Макрос "Экспорт данных спецификации в Excel" отрабатывает, если спецификация создана из прототипа в отдельном файле. Что касается спецификации, созданной из прототипа "Отчеты/Спецификации" в модели, тут нужен другой подход.
Vite написал: Макрос "Экспорт данных спецификации в Excel" отрабатывает, если спецификация создана из прототипа в отдельном файле. Что касается спецификации, созданной из прототипа "Отчеты/Спецификации" в модели, тут нужен другой подход. Если бы разработчики прояснили ситуацию, дали бы пример, но боюсь что их этот вопрос мало интересует.
Цитата
Vite написал: Макрос "Экспорт данных спецификации в Excel" отрабатывает, если спецификация создана из прототипа в отдельном файле. Что касается спецификации, созданной из прототипа "Отчеты/Спецификации" в модели, тут нужен другой подход. Если бы разработчики прояснили ситуацию, дали бы пример, но боюсь что их этот вопрос мало интересует.