Импорт из справочника СИ

Автор Riffky, 08.10.18, 23:38:15

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Riffky

Проблема:
При импорте неких структур изделий данных в Лоцман попадаются стандартные изделия. При подключенном справочнике СИ создать их обычным способом (методы NewObject и NewVersion) невозможно, очевидно предполагается только выбор из справочника.

Вопрос:
Каким API методом возможно добавить объект справочника СИ в структуру объекта Лоцман? Желателен пример, хоть на псевдоязыке, хоть описание примерного алгоритма по-русски. SyncBОData не подходит, возвращает "такой-то элемент не найден", видимо предназначен только для синхронизации свойств уже имеющегося в базе Лоцман объекта.

Поиском найдено http://forum.ascon.ru/index.php/topic,28061.0.html (вторая из задач), ответ не дан. Другие найденные темы либо про импорт в Компас, либо о создании элемента в самом справочнике.


Riffky

Спасибо, Location для NewObject получить удалось. В общем, в данном случае было достаточно узнать, что нужный идентификатор это именно Location.
Привожу пример кода на будущее.
Кстати, в справке есть похожий пример, в котором достаточно изменить лишь одну строку для получения Location.

Пример получения Location
IPARTLibProvider PLClient = null;

            try
            {
                PLClient = new BOSimpleProvider();

                var errorMsg = String.Empty;

                // Подключаемся к серверу приложений
                if (PLClient.Connect(ref errorMsg) == 0)
                {
                    try
                    {
                        // Получаем доступ к изделиям и папкам в справочнике
                        var commonData = PLClient.CreateCommonDataObj();

                        // Задаем режим работы справочника для всех видов поиска
                        commonData.SetFindOptions("3DSolid");

                        // Ищем подшипники в обозначении которых встречается 067 во всем хранилище. Поиск может быть долгим
                        var foundClasses = commonData.FindByDesignation("*067*", 17, "");
                       
                        // Получаем коллекцию классов с экземплярами, параметры которых настроены для соответствия использованной маске поиска
                        // Перебираем каждый класс этой коллекции и выводим обозначения экземпляров
                        for (int i = 0; i < foundClasses.Count(); i++)
                        {
                            var instance = foundClasses.plClass(i).Instances("", "3DSolid");
                            var PLPart = instance.plPart();
                            Console.WriteLine(PLPart.GetDesignation());
                            Console.WriteLine(PLPart.GetLocation(1));
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                    finally
                    {
                        // Отключаемся от сервера приложений
                        PLClient.Disconnect();
                    }
                }
                else
                    Console.WriteLine("Ошибка подключения к серверу приложений: {0}", errorMsg);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ошибка! Не удалось создать COM-объект. {0}", ex.Message);
            }


Для вставки в Лоцман нужен именно краткий Location, полученный с параметром 1. Полный будет вида "PART:Root±Pac-16±Pac10±GMC20±GMC30±GMC40±GMC80[Стандартный;7;24;12]", и Лоцман при создании объекта ругнется на "Стандартный".

Пример создания объекта в Лоцман (C#)
var res = (int)api.NewObject("Стандартное изделие", "Проектирование", "PART:Root±Pac-16±Pac10±GMC20±GMC30±GMC40±GMC80[7;24;12]", 0, out returnCode, out errorMessage);