Получение информации из файла Вертикаль в Лоцмане

Автор EinRoterStern, 03.12.25, 13:51:33

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

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

EinRoterStern

Добрый день!

Я массово обновляю справочные данные в архиве техпроцесса в Лоцмане.

Как программно из плагина(плагин на C#) получить информацию с файла Вертикаль в Лоцман чтобы обновился состав технологии? Получается обновить файл, вторичное представление но не получается обновить состав.

В документации решение данной задачи не нашел.

Ниже привел фотографию с кнопкой "Получение информации", возможно ли вызвать ее программно?

Chipollino

А Вы как именно обновляете, через IntegratorReadDoc ?

В интерфейсе, чтобы обновить структуру нужно из файла документа получать информацию когда в дереве этот документ будет открыт в структуре с родителем.
На скрине родителя нет, соответственно у какого процесса обновлять структуру, если документ будет привязан к нескольким?

Возвращаясь к IntegratorReadDoc - передаёте туда ObjectID и LinkName правильные?

EinRoterStern

Что такое IntegratorReadDoc?
После изменения файла Вертикаль(.vtp) я создаю файл отчета(.vrp) и вторичного представления(.pdf). Потом для файла отчета провожу проверку его имени на наличие в Лоцман:
var fileIsLoodsman = sapi.GetDataSet("CheckFileNameEx", new object[] { Path.GetFileName(reportFileNameVRP), string.Empty });
if (fileIsLoodsman != null && !fileIsLoodsman.IsEmpty())
{
    checkFileInLoo = true;
}
если данного файла еще нет то я его регистрирую:
if (!checkFileInLoo)
{
    sapi.RunMethod("RegistrationOfFile", new object[] { string.Empty, string.Empty, string.Empty, id, Path.GetFileName(reportFileNameVRP), string.Empty });
}
если он есть то обновляю:
 else
 {
     sapi.RunMethod("UpFileById", new object[] { id, Path.GetFileName(reportFileNameVRP), null, null, null, true, inReturnCode, stErrorMessage });
     if (inReturnCode is int returnCode && returnCode != 0)
     {
         MessageBox.Show($"Ошибка UpFileById: код {returnCode}, сообщение: {stErrorMessage}");
     }
 }

а для вторичного представления просто использую сохранение вторичного представления:
 sapi.RunMethod("SaveSecondaryView", new object[] { id, newFilePath });

и все файлы в Лоцман обновлены но информация с Вертикали не знаю как получить чтобы обновить дерево.

Все документы обновляются в контексте: Типы (Механообработка, Сборка, Сварка) => Архив техпроцесса. Соответственно мне и нужно, чтобы у типа технологии обновилось дерево.

Chipollino

Цитата: EinRoterStern от Вчера в 11:17:45Что такое IntegratorReadDoc?
После изменения файла Вертикаль(.vtp) я создаю файл отчета(.vrp) и вторичного представления(.pdf). Потом для файла отчета провожу проверку его имени на наличие в Лоцман:

У Вас последовательность в логике нарушена.
Чтобы пользователь получил структуру в базе ему нужно:
1. Сохранить/Изменить файл *.vtp в базе
2. Выполнить команду "Получить информацию ..." для этого файла
3. Библиотека интеграции сама создаст нужный *.vrp и *.pdf, добавит их в базу и дополнит структуру по метаданным из файла.

Чтобы сделать это программно, нужно в программе:
1. добавить/обновить файл *.vtp в базе
2. Вызвать в вашем плагине/программе команду соответствующую получению информации с нужными параметрами.


Если пишите плагин, то почитайте справку "ЛОЦМАН Клиент API" - метод IntegratorReadDoc
Вызываете его так же через RunMethod и передаёте в него все требуемые параметры.
IntegratorReadDoc
Запускает интегратор ЛОЦМАН:PLM для получения информации из файла.
Параметры
int ObjectID
[in] Идентификатор объекта.

int DocumentID
[in] Идентификатор документа.

string LinkName
[in] Тип связи, которой связаны объект и документ.

string FileName
[in] Имя файла.

string FileLocalName
[in] Путь к файлу относительно диска из настройки базы данных ЛОЦМАН:PLM «Буква рабочего диска».

int IDUseCase
[in] Идентификатор случая использования.

int Mode
[in] Режим получения информации (соответствует параметру inMode метода RefreshDocumentData сервера приложений ЛОЦМАН:PLM).

boolean ShowDialog
[in] Равен true, если необходимо показать окно отображения процесса работы интегратора.

Возвращаемое значение
DataSet Result

[out] Cписок объектов, свойства (атрибуты, файлы, связи) которых не удалось изменить вследствие отсутствия к ним доступа для записи, а также некритичные ошибки, которые произошли при обработке информации из файла.

Набор данных аналогичен результату метода RefreshDocumentData сервера приложений ЛОЦМАН:PLM (см. справку по методам API ЛОЦМАН:PLM (файл ЛОЦМАН API.chm), раздел «Методы сервера приложений»).

Примечание
Действие метода аналогично команде Получить информацию фрейма «Файлы» в «ЛОЦМАН Клиент».

Поддерживается в версии -«ЛОЦМАН Клиент» 2011 или более поздней.
 
+ Благодарностей: 1

EinRoterStern

Спасибо большое!

А то из примеров которые находил было только через ручную замену файлов отчета и вторичного представления

можете еще пожалуйста подсказать что за Идентификатор случая использования(int IDUseCase), не нашел в справке подробную информацию об этом параметре

Chipollino

Цитата: EinRoterStern от Вчера в 13:25:12можете еще пожалуйста подсказать что за Идентификатор случая использования(int IDUseCase), не нашел в справке подробную информацию об этом параметре
Когда в конфигураторе настраиваете прокси, там можно указать разные настройки для работы интегратора (в т.ч. при разных родителях у документа, расширениях файлов, ...)

Программно можно получить через
Variant GetProxyUseCases(
long inIdProxy,        // идентификатор прокси
long inIdType,        // идентификатор типа
long inIdDocument,        // идентификатор документа
Variant * inReturnCode,        // код возврата
Variant * stErrorMessage        // сообщение об ошибке
);

Либо в таблице самой базы посмотреть идентификаторы
select * from dsProxyUseCase
+ Благодарностей: 2