На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

API и обработка семантик типа "Имя файла зарегистрированного типа"

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1
RSS
API и обработка семантик типа "Имя файла зарегистрированного типа"
 
Добрый день.
GTK13, GIS-сервер 9.6.1.2, delphi.

В самописной клиентской части понадобилось организовать работу с семантиками cTANYFILE etc.. Правильно ли я понимаю, что для управления данными следует использовать функции mapReadFileOnServer и mapSaveFileOnServer?
 
Семантика означает, что у Вас имя файла зарегистрированного типа. Тип не говорит, что файл на ГИС Сервере. Говорит о том, что его на Вашем компьютере можно попросить открыть зарегистрированной в ОС программой.
 
Значения семантик типа TANYFILE и т.п. - это не сам файл, а ссылка на него: абсолютный или относительный путь, либо алиас этого файла на ГИС Сервере.

Функции mapReadFileOnServer и mapSaveFileOnServer предназначены для скачивания файла с ГИС Сервера и загрузки его на сервер соответственно.

То есть, если карта у Вас на ГИС Сервере, Вы хотите добавить ссылку на файл в некий объект, так, чтобы это было видно всем пользователям этой карты, следует сначала загрузить файл на ГИС Сервер в виртуальную папку, затем, сформировав путь (алиас виртуальной папки на ГИС Сервер / имя файла), записать его в соответствующую семантику.
 
Это понятно.
Ситуация такая. На сервере заведено хранилище, сслылающееся на субдерикторию карты, оно, соответственно, указано в алиасе карты, и содержимое семантики при этом имеет форамат HOST#<server>#ALIAS#<alias.sitx>#DOC#<storage alias>#filename.ext.
И десктоповая Панорама, и вебсервер отрабатывают совершенно нормально. А каким образом получить файл из самописного клиента?

Если просто дать значение семантики на вход mapReadFileOnServer, она выдает 0 и ошибку ids_access, а к path приписывает все неразобранное значение alias.

P.S. И еще касательно хранилищ, пока не понимаю, каким образом, например, получить их список через API.
Изменено: Илья Рыбалко - 07.12.2021 11:34:33
 
Цитата

 // Прочитать файл на сервере (если есть доступ к виртуальной папке)
 // alias   - алиас файла на сервере, начиная с имени виртуальной папки (кроме выполняемых файлов,
 //           файлов карт, матриц и растров)
 // path    - путь, по которому будет сохранен файл (после записи путь дополняется именем файла)
 // size    - размер поля, содержащего путь
 // error   - поле для записи кода ошибки, если функция вернет ноль
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapReadFileOnServer(long int number, const WCHAR * alias, WCHAR * path, long int size, long int * error);

Обратите внимание на входные параметры.
В alias указывается все, что после "ALIAS#".
В path указывается директория, а не конечный файл (имя файла будет извлечено из алиаса).

При ошибке в переменной error должен быть код, по которому можно разобраться, что за ошибка произошла.
Перечень кодов ошибок есть в \include\maperr.rh

Пример вызова mapReadFileOnServer есть в SDK для ГИС Панорама (см. \mapexam\mapexam82.cpp),
а также в SDK для GIS WebService (см. метод TRestMethod::GetFileFromGisServerFolder в \SDK\restmethod\mapinfo.cpp).



Цитата
Илья Рыбалко написал:
И еще касательно хранилищ, пока не понимаю, каким образом, например, получить их список через API.

Цитата

 // Запросить список папок на сервере, доступных для записи файлов
 // number - номер активного подключения к ГИС Серверу от 1 до mapActiveServerCount()
 // folder - путь к виртуальной папке, в которой запрашивается список файлов и папок или 0
 // Например, "Data\\Maps"
 // Если folder равно 0, то запрашивается список алиасов всех доступных папок
 // allfiles - признак запроса всех файлов в папке folder, если не установлен,
 // то буден выдан список внутренних папок и файлов MAP,SIT,SITX,RSC,MTW,MTQ,RSW
 // parm   - адрес буфера для размещения списка запрошенных данных или 0
 // Если parm равно 0, то запрашивается размер буфера, требуемый для размещения списка
 // length - размер буфера для размещения списка
 // Список данных заполняется только для файлов и папок, непосредственно расположенных
 // в заданной папке без вложений
 // При успешном выполнении возвращает размер сформированного списка
 // Если размер списка превышает размер буфера, то данные считаны не полностью.
 // Тогда нужно выделить больший буфер и запросить данные повторно
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetFolderList(long int number, const WCHAR * folder, long int allfiles,
                                         TMCDATALIST * parm, long int size);

Код, как это вызывается непосредственно из ГИС Панорама приведен также в SDK(см. \ready\mapscena\folders.cpp, а также в примерах 55 и 56 - в \mapexam).
 
Описанное выше справедливо для всех файлов, размещаемых в виртуальных каталогах ГИС Сервера.

Для документов, на которые объекты могут ссылаться по алиасам формата HOST#СЕРВЕР#ALIAS#Карта#DOC#Папка#документ.расширение
следует использовать функцию mapReadSiteDocumentUn.
Строку с алиасом она разберет сама и отправит необходимый запрос на сервер.

Цитата

 // Считать документ на сервере
 // hMap   - идентификатор открытой основной карты
 // hSite  - идентификатор открытой пользовательской карты
 // alias  - алиас документа на сервере (может храниться в семантике
 //          объекта карты, начинается со строки "HOST#")
 // name   - полный путь к считанному документу, строка заполняется
 //          автоматически при считывании документа, имя документа и
 //          дата редактирования устанавливаются такими, какими они были
 //          при записи в mapSaveSiteDocument.
 // Например: HOST#WorkServer#ALIAS#Моя_Карта#DOC#MyFolder#schema.png
 // size   - размер буфера в байтах для записи пути (не менее 520 байт)
 // При успешном выполнении возвращает имя считанного файла документа в поле name
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapReadSiteDocumentUn(HMAP hMap, HSITE hSite,
                                              const WCHAR *alias,
                                              WCHAR *name, long int size);
 
О. На меня похоже. Когда логично идти sitapi и работать в контексте hmap, я ищу гвоздь в степи.
Спасибо за разъяснения.
Страницы: 1
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности