• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

RefreshDocumentData ?

Автор l2qwe, 10.03.11, 15:30:50

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

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

l2qwe

Добрый день.
Пробую сделать следующие действия
1)Нахожу сборку.
2) Создаю объект спецификация
3)Создаю связь Сборка-Спецификация
4)Регистрирую файл Спецификации
5)Получаю информацию из файла

Первые 4 пункта выполняются отлична а вот с 5 проблема, метод выполняется без ошибок, но вот только в БД не чего не меняется, ХОТ ЕСЛИ НАЖАТЬ ПКМ на файл в Лоцмане и Получит информацию то состав заносится в БД.

//Создаем объект спецификация
    idNewDoc:=FPluginCall.RunMethod('NewObject',VarArrayOf([C_SPW,'Проектирование',SBProduct,0]));
    FPluginCall.RunMethod('InsertObject',VarArrayOf([C_ASM,SBProduct,SBVersion,C_SPW,
        SBProduct,SPVersion,C_DOCLINK,SPState,0]));
    //Прикрепляем к созданному объекту файл
    FPluginCall.RunMethod('RegistrationOfFile',VarArrayOf(['','','',idNewDoc,SPFileName,SPFilePath]));
   //Создаем модель для того что бы потом получить информацию из спецификации
   vaData := CreateOleObject('CommonModel.Model');

    vaObj := vaData.AddObj;
    vaProp := vaObj.AddProp('TYPE',C_ASM);
    vaProp := vaObj.AddProp('PRODUCT',SBProduct);
    vaProp := vaObj.AddProp('VERSION',SPVersion);
    vaProp := vaObj.AddProp('STATE',SBState);
    vaProp := vaObj.AddProp('obj_id',IntToStr(SBid));
    vaProp := vaObj.AddProp('GENERATE_SW','NO');

    vaLink := vaObj.AddLink(vaData.AddObj);
    vaLink.AddProp('TYPE',C_DOCLINK);
    vaObj := vaLink.Child;
    vaProp := vaObj.AddProp('TYPE',C_SPW);
    vaProp := vaObj.AddProp('PRODUCT',SBproduct);
    vaProp := vaObj.AddProp('VERSION',SPVersion);
    vaProp := vaObj.AddProp('STATE',SPState);
    vaProp := vaObj.AddProp('obj_id',IntToStr(LIDNewDoc));
    vaProp := vaObj.AddProp('DOCUMENT','TRUE');
    vaProp := vaObj.AddProp('WORKFOLDER',DriveLetter);

    vaLink := vaObj.AddLink(vaData.AddObj);
    vaLink.AddProp('TYPE','Document-File Link');
    vaObj := vaLink.Child;
    vaObj.AddProp('FILENAME',SPFileName);
    vaObj.AddProp('FILEPATH',SPFilePath);

    //Получаем информацию из файла
    LDataSet:=FPluginCall.GetDataSet('RefreshDocumentData',VarArrayOf([SBid,idNewDoc,C_DOCLINK,
        SPFileName,SPFilePath,vaData.SaveVariant,0]));





Chaa

Если вы хотите сделать то, что делает Лоцман по команде "Получить информацию", то нужно использовать интегратор. В файле Integrator.chm описан интерфейс IIntegrator для работы с ним.
Проще всего это сделать через RunMethod плагина, вызвав функцию клиента IntegratorReadDoc (это именно функция клиента, а не сервера приложений), описана в файле справки LoodsmanClientApi.chm.
Параметры:
       int ObjectID
               [in] Идентификатор объекта
       int DocumentID
               [in] Идентификатор документа
       string LinkName
               [in] Тип связи, которой связаны объект и документ
       string FileName
               [in] Имя файла
       string FileLocalName
               [in] Относительный путь к файлу (путь к файлу относительно диска из настройки "Буква рабочего диска")
       int IDUseCase
               [in] Идентификатор случая использования
       int Mode
               [in] Режим получения информации (соответствует параметру inMode метода RefreshDocumentData сервера приложений ЛОЦМАН)
       boolean ShowDialog
               [in] Равен true, если необходимо показать окно отображения процесса работы интегратора

Возвращаемое значение:
DataSet Result
               [out] Cписок объектов, свойства (атрибутика, файлы, связи) которые не удалось изменить вследствие отсутствия доступа к ним для записи. А также некритичные ошибки, которые произошли при обработке информации из файла.
Набор данных аналогичен результату метода RefreshDocumentData сервера приложений ЛОЦМАН.
Подробнее см. справку по методам сервера приложений ЛОЦМАН (ЛОЦМАН API.chm).

l2qwe

#2
К сожалению IntegratorReadDoc в Лоцмане 10 (Комплекс 2009) нету.
Но как я понимаю IntegratorReadDoc работает аналогична RefreshDocumentData.
Я подозреваю что у меня что то не то с моделью vaData. Я её создаю такой же что создается на первом шаге при получени информации через клиент. Но походу дела модель должна быт получена через интегратор, а как это сделать пока не разобрался.

Chaa

Примерно:
var
    LIntegrator: IIntegrator;
begin
    SetCurrentDir('C:\Program Files\ASCON\Loodsman\Client');
    LIntegrator := CreateComObject(CLASS_Integrator) as IIntegrator;
    LIntegrator.Connect('AS1', 'База', ACheckOutID, '', '');
    LIntegrator.ReadDocument(AObjID, ADocID, ALinkType, AFileName, AFilePath, 0, AUseCaseID);
end;

Без SetCurrentDir интегратор не может прочитать файл LoodsmanIntegrator.ini, если текущий каталог не C:\Program Files\ASCON\Loodsman\Client.
AUseCaseID получается из вызова GetProxyUseCases.
Объект интегратора не создается под отладчиком в Delphi, только в отдельно запущенной программе.

l2qwe

В очередной раз спасибо огромное, всё получилось.