Здесь показаны различия между двумя версиями данной страницы.
axapta:авторегистрацияactivex [2018/04/13 22:43] |
axapta:авторегистрацияactivex [2018/04/13 22:43] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | Раздел: [[Программирование | ]]>[[ВзаимодействиеСОкружением | ]]>ActiveX | ||
+ | ---- | ||
+ | Если ваши компоненты требуют внешних Com объектов и надо автоматически установить их на клиенте. | ||
+ | *разместить dll с компонентом в папке приложения Share\Include | ||
+ | *создать подкласc Класс/SysFileDelpoymentDll | ||
+ | *перекрыть метод filename - и написать в его теле return "имя_файла" (без пути) | ||
+ | *добавить classNum([[ИмяВашегоПодкласса]]) в перечень в методе Класс/SysFileDeployer/FilesToDeploy | ||
+ | *увеличить на 1 значение макроса #define.CurrentVersion(1) в Класс/SysFileDeployer/ClassDeclaration | ||
+ | |||
+ | После входа пользователя в систему осуществляется следующий набор действий: | ||
+ | *проверяется признак установленности файлов (он сохраняется в Таблица/SysLastValue) | ||
+ | *если он отсутствует, то проверяется наличие на клиенте всех файлов, которых надо устанавливать | ||
+ | *если есть файл, остутствующий на клиенте, запрашивается подтверждение установки у пользователя | ||
+ | *если установка подтверждена, он переписывается на клиент ("C:\Program Files\Navision\Client\Bin") и регистрируется | ||
+ | |||
+ | === [[Ax40 | ]] === | ||
+ | |||
+ | В версии 4 Microsoft Dynamics Ax данный механизм сломался ввиду новой функциональности -- CodeAccessSecurity (при работе на сервере с опасными API надо предварительно программно просить разрешение) и был отключен. | ||
+ | |||
+ | И в части вызовов demand() в новоиспеченном WinAPIServer все в порядке. А вот в классах SysFileDeployment* требования по вызову assert() соблюдены не везде - видимо, не хватило времени дотестировать. Если конкретно, то: | ||
+ | *в [[~SysFileDeploymentFile]].serverVersion() нет соотв. вызова assert() перед вызовом [[~WinAPIServer]]::getFileModifiedDate(); | ||
+ | *в [[~SysFileDeployment]].getServerFileTimeAccessed()/Modified()/Created() нет соотв. вызова assert() перед вызовом [[~WinAPIServer]]::getFileTime(); | ||
+ | *в [[~SysFileDeployment]].isNameValid() полный путь к файлу разбивается с помощью fileNameSplit() на составляющие, после чего между именем и расширением вставляется лишняя точка (fileNameSplit() и так возвращает расширение с начальной точкой) - в результате isNameValid() всегда возвращает false, из-за чего опять-таки не происходя соотв. вызовы assert(); | ||
+ | *ну и, наконец, [[~SysFileDeployment]].sourcePath() по умолчанию возвращает xInfo::directory(DirectoryType::Include), а как нам известно, результат этого вызова сильно различается в зависимости от того, происходит ли он на клиенте или на сервере; разумеется, по закону подлости работа [[~SysFileDeploy]]* построена так, что [[~SysFileDeployment]].sourcePath() вызывается в обоих контекстах и, соотв., выдает разные результаты, что окончательно рушит логику работы. | ||
+ | |||
+ | Во [[file:!/ax4_sysfiledeploymentfix.zip]] -- небольшие модификации, с помощью которых удалось заставить работать SysFileDeployer с тестовым классом-наследником SysFileDeploymentFile. | ||
+ | |||
+ | ---- | ||
+ | см.: | ||
+ | *[[ЗапускИОстановка]] | ||
+ | *[[:AxForum]]: | ||
+ | *[[http://www.axforum.info/forums/showthread.php?threadid=5131]] | ||
+ | *[[http://axforum.info/forums/showthread.php?p=140901#post140901]] |