Инструменты пользователя

Инструменты сайта


axapta:авторегистрацияactivex

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

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]] ​   ​
axapta/авторегистрацияactivex.txt · Последние изменения: 2018/04/13 22:43 (внешнее изменение)