Отправляет email-рассылки с помощью сервиса Sendsay

Navision - советы и секреты

  Все выпуски  

Советы и секреты - Navision


Добрый день!

Благодарим Вас за внимание, проявленное к нашей рассылке и надеемся, что она будет полезной и интересной, как для людей, которые только знакомятся с Navision, так и для профессионалов. Здесь мы делимся опытом, свежими идеями, тонкостями работы, т.е. тем, что знаем.
Ждем Ваших откликов, замечаний, предложений, вопросов. Welcome! :-)

А теперь непосредственно выпуск №1. В него вошла одна статья и пара tips & tricks.

Как установить на клиентскую машину компонент OCX/DLL в режиме Run-time?

Один из эффективных способов расширить функциональность Microsoft Business Solutions–Navision — использование внешних компонентов OCX/DLL. Однако, прежде чем начать использовать компоненты, их необходимо установить на все клиентские машины, которые подключены к системе. Например, если какой-то пользователь отсутствует в офисе в то время, когда вы их устанавливаете, то на следующий день Navision встретит его радостным сообщением об ошибке :-)
---------------------------
Microsoft Business Solutions-Navision
---------------------------
This message is for C/AL programmers:
Could not create an instance of the OLE control or Automation server identified by
GUID={506B4C1F-587D-4CD3-94A3-00354CF6EFEF} 1.0; 
{B0A632A5-B0D1-41E8-A84A-A502B3341363}:Unknown Automation Server.Unknown Class.
Check that the OLE control or Automation Server is correctly installed and registered.
---------------------------
ОК
---------------------------
Сообщение означает всего лишь, что нужный OCX/DLL не найден на компьютере. Пользователь этого, скорее всего, не знает, сообщения испугается :-)

А что делать, если машина вообще находится вне офиса?

Решение есть. Ставить OCX-компоненты в режиме Run-time.

Вам необходимо выяснить имя OCX/DLL, который используется в программе (пускай это будет «Navision pad21.dll») и скопировать его с компьютера, где он УЖЕ установлен, на тот, где его нет. Вообще-то не имеет значения, куда вы решите поместить файл, но хорошим тоном считается класть его либо в папку Navision (где находятся файлы fin.exe/finsql.exe), либо в папку \Program Files\Common Files\Navision. Затем надо запустить режим командной строки (cmd.exe), и использовать утилиту regsvr32.exe, чтобы зарегистрировать компонент в реестре Windows:

cd \Program files\Common Files\Navision
regsvr32 "navision pad21.dll"
Если регистрация компонента прошла успешно, на экран будет выведено следующее сообщение:

---------------------------
RegSvr32
---------------------------
DllRegisterServer in navision pad21.dll succeeded.
---------------------------
ОК
---------------------------
С этого момента, данный OCX/DLL можно использовать в вашем Navision-приложении.

Существует способ сделать то же самое, но прямо в коде Navision. Сперва в коде идет проверка, установлен ли уже необходимый OCX/DLL на клиентской машине. Если нет, то файл OCX/DLL (который мы импортируем в BLOB-поле таблицы базы данных) копируется на клиентскую машину. Затем вызывается regsvr32 для регистрации компонента.

Набор функций, которые можно использовать, ниже.
Для корректной работы вам необходимо создать таблицу OCX/DLL Setup – которая будет хранить компонент, и кодеюнит для регистрации компонента.

OBJECT Table 50000 OCX/DLL Setup
{
  FIELDS
  {
    { 1;Primary Key          ;Code10  }
    { 2;Notepad DLL          ;BLOB    }
    { 3;Notepad Name         ;Text30  }
    { 4;Notepad Registry Name;Text100 }
    { 5;Notepad Version      ;Text30  }
  }
}

OBJECT Codeunit 50000 OCX/DLL Check/Import
VAR
  recOcxDllSetup : Record 50000;
OnRun()
  fctStart;
PROCEDURE fctImportOCXDLL();
BEGIN
  WITH recOcxDllSetup DO BEGIN
    IF NOT(GET) THEN
      INSERT;
    "Notepad DLL".IMPORT('navision pad21.dll',TRUE);
    "Notepad Name" := 'navision pad21.dll';
    "Notepad Registry Name" := 'Navpad20';
    "Notepad Version" := '1.0';
    MODIFY;
  END;
END;

PROCEDURE fctIsOcxDllInstalled( ptxtRegistryName : Text[100]; ptxtVersion : Text[30]) : Boolean;
VAR
  lrecAutServers : Record 2000000046; // Automation Servers
BEGIN
  lrecAutServers.SETRANGE(Name, ptxtRegistryName);
  lrecAutServers.SETRANGE(Version, ptxtVersion);
  EXIT(lrecAutServers.FIND('-'));
END;

PROCEDURE fctInstallOcxDll();
VAR
  ltxtFile : Text[250];
  lintReturn : Integer;
BEGIN
  WITH recOcxDllSetup DO BEGIN
    GET;
    CALCFIELDS("Notepad DLL");
    IF NOT("Notepad DLL".HASVALUE) THEN
      ERROR('Не могу найти %1 in %2', "Notepad DLL", TABLECAPTION);
    ltxtFile := 'С:\Program Files\Common Files\Navision\' + "Notepad Name";
    "Notepad DLL".EXPORT(ltxtFile, FALSE);
    lintReturn := SHELL('regsvr32.exe /s ' + '"' + ltxtFile + '"');
    IF lintReturn <> 0 THEN
      ERROR('Unable to register %1', ltxtFile);
  END;   
END;

PROCEDURE fctStart();
BEGIN
  IF NOT(recOcxDllSetup.GET) THEN
    fctImportOcxDll;
  IF NOT(fctIsOcxDllInstalled(recOcxDllSetup."Notepad Registry Name", recOcxDllSetup."Notepad Version")) THEN
    fctInstallOcxDll;
END;
Этот выпуск представляет собой вольный перевод статьи «How To install an OCX/DLL on the client's PC when needed (at run-time)?» (Luc Van Dyck). Оригинал статьи находится здесь.  Скачать архив с примером можно здесь.

И напоследок - маленькие хитрости :-)

1. В Navision в сообщениях об ошибках можно нажать Ctrl+C и скопировать описание ошибки в буфер (так сделано в начале статьи). Очень удобная вещь – если у пользователя произошла ошибка, необязательно делать скриншот и прочая… :-) Достаточно вставить ее из буфера и послать письмо в поддержку.

2. Для самых начинающих - в Navision есть т.н. «виртуальные» таблицы (как например, таблица 2000000046 - «Automation Servers»). Их не видно в общем списке объектов, который открывается по Shift+F12. Однако, увидеть их можно, если указать их в качестве источника для новой формы. Тогда в режиме Preview вы увидите как наименования полей, так и содержимое самих таблиц. В следующем выпуске мы подробнее остановимся на некоторых из них.


На сегодня все.

С наилучшими пожеланиями,
Андрей Стрельников.

Группа «Technologies like Art».
Разработки в сфере ERP, SOP, B2B. Скоростные и суперскоростные оптимизации систем.
e-mail: likeart@mail.ru.

Технологии как искусство.
Что такое главное?


В избранное