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


Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Import Exel данных в спецификацию данных проекта
 
Добрый день, решаю задачу записи данных в спецификацию 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"?
Изменено: Vite - 31.03.2015 18:41:12
 
Цитата
Vite написал:
Что пишет отладчик?

Я не могу найти этот пример...мне не понятно, где определение "BOMObjectName"?
string BOMObject; Вообще в отладчике не работают точки останова. Поэтому я использовал MessageBox. Из которого видно что UpdateStandardFieldValue и последующим считыванием GetStandardFieldValue значение не поменялось.. Очень странно все это :(((((
 
Вы можете использовать для отладки Visual Studio Express

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. Выполните макрос.

Если все сделано правильно, отладчик должен остановиться на точке останова
Debug_macro.PNG (38.29 КБ)
Изменено: Vite - 01.04.2015 07:04:31
 
Цитата
Vite написал:
Вы можете использовать для отладки Visual Studio Express

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, ясно что это класс спецификации, но как с ним работать, нужно разбираться. Начнем с того, что такое "стандартная форма спецификации"?
Create_Report.PNG (44.44 КБ)
Изменено: Vite - 02.04.2015 07:47:38
 
Если следовать логике примера "Экспорт данных спецификации в 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 - 03.04.2015 16:41:04
 
Цитата
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 - 10.04.2015 23:06:49
 
Цитата
Vite написал:
Макрос "Экспорт данных спецификации в Excel" отрабатывает, если спецификация создана из прототипа в отдельном файле. Что касается спецификации, созданной из прототипа "Отчеты/Спецификации" в модели, тут нужен другой подход. Если бы разработчики прояснили ситуацию, дали бы пример, но боюсь что их этот вопрос мало интересует.

Цитата
Vite написал:
Макрос "Экспорт данных спецификации в Excel" отрабатывает, если спецификация создана из прототипа в отдельном файле. Что касается спецификации, созданной из прототипа "Отчеты/Спецификации" в модели, тут нужен другой подход. Если бы разработчики прояснили ситуацию, дали бы пример, но боюсь что их этот вопрос мало интересует.
Как доделаю выложу)
 
Вы получили доступ к внутренней спецификации, или с привязкой к внешней?
Изменено: Vite - 04.04.2015 13:46:55
 
Пример регенерации внутренней спецификации:
Код
using System;
using TFlex;
using TFlex.Model;

namespace Test
{
    public class Class1
    {
        public static void Run() {

            Document document = TFlex.Application.ActiveDocument;
            foreach (Page page in document.GetPages())
            {
                if (page.PageType == PageType.BillOfMatrials)
                {
                    document.BeginChanges("Регенерация встроенной спецификации");

                    RegenerateOptions options = new RegenerateOptions();
                    options.UpdateBillOfMaterials = true;

                    foreach (ProductStructure str in document.GetProductStructures()) // Обновление структуры изделия
                    {
                        str.UpdateStructure();
                    }
                    
                    document.Regenerate(options);
                    document.EndChanges();
                }
            }
        }
    }
}
Страницы: 1