Как Выполнить Процедуру Ловкости Программно - PullRequest
0 голосов
/ 02 октября 2019

Как программно выполнить процедуру Ловкости?

Цель:

Я хочу программно сбросить пароль пользователя в Great Plains 2018,В наших целях программно НЕ используется следующее:

  • Ручное нажатие кнопок в пользовательском интерфейсе, особенно после запуска Dynamics.exe
  • Запуск макроса Great Plains 2018

Справочная информация:

  • Единственно возможное поддерживаемое решение для того, чего я пытаюсь достичь, я считаю, должно опираться на Ловкость . Я понятия не имею, как выполнить процедуру Ловкости программно, поэтому это может быть невозможно.
  • У меня есть определенный сценарий Ловкости (процедура Dynamics), который очень прост - он сбрасывает пароль пользователя GP через Login_AlterLogin(). Он не имеет параметров и основан на примерах, приведенных в Dex.chm файле справки.
  • Чтобы развернуть и использовать этот сценарий Ловкости, я сделал следующее:

    1. Создансловарь (dev.dic)
    2. Создание и компиляция сценария Dexterity в моем редактируемом словаре (dev.dic)
    3. Создание файла CNK (dev.cnk)
    4. ЗапущенGP и выполнил отсоединение
    5. Сгенерировал DLL с помощью Dag.exe (Application.Dev.dll)
    6. Добавил сборку в мой проект Visual Studio (сборка Application.Dev добавлена ​​в консольное приложение C #)
    7. Попытка Invoke() процедуры (Dexterity.Applications.Dev.Procedures.Dev.Invoke();).
  • Приложение C # пытается сделать GPConnection перед вызовом процедуры, как показано ниже,Я подтвердил, что мой GPConnection успешно подключается (gpConn.ReturnCode = 1).

Код (Ловкость):

Этопример сценария Dexterity, взятый из файла справки Dex.chm:

"В следующем примере показано, как администратор SQL может установить пароль для конкретного входа в систему. В этом случае пароль для входа в систему«STEVE »изменяется на« GreenRoutine5 »."

local integer status;
local long retcode;
local long login_options;

{Retrieve the existing login options}
status = Login_GetLoginSettings("STEVE", login_options); 

status = Login_AlterLogin("RST", "STEVE", login_options, retcode, "GreenRoutine5");

case status
in [STATUS_SUCCESS]
    warning "Login successfully updated.";
in [STATUS_MEMORY_ERROR]
    warning "Memory error.";
in [STATUS_LOGIN_FAILED]
    warning "Login failed.";
in [STATUS_TOO_MANY_CONNECTIONS]
    warning "Too many connections.";
in [STATUS_DATASOURCE_REJ]
    warning "Datasource rejection.";
in [STATUS_UNABLE_TO_CONNECT]
    warning "Unable to connect.";
in [STATUS_LOGIN_INVALID]
    warning "Login invalid.";
in [STATUS_INVALID_PERMISSIONS]
    warning "Invalid permissions.";
in [STATUS_NOT_LOGGED_IN]
    warning "Not logged in.";
in [STATUS_LOGIN_PASSWORD_SIMPLE]
    warning "Password is too simple.";
in [STATUS_LOGIN_PASSWORD_SHORT]
    warning "Password is too short.";
in [STATUS_LOGIN_PASSWORD_LONG]
    warning "Password is too long.";
in [STATUS_LOGIN_PASSWORD_HISTORY]
    warning "Password violates password history.";
end case;

Код (C #):

using Microsoft.Dexterity;
using System.Data.SqlClient;

class Program {
    static void Main(string[] args) {
        SqlConnection sqlConn = new SqlConnection();
        sqlConn.ConnectionString = "Data Source=DEV1;Initial Catalog=RST;";

        int resp = GPConnection.Startup();
        GPConnection gpConn = new GPConnection();
        gpConn.Init("CompanyName", "1234_special_keys_for_vstools_5678");
        gpConn.Connect(sqlConn, "DEV1", "sa", "Secret_pwd678");

        Microsoft.Dexterity.Applications.Dev.Procedures.Dev.Invoke(); //exc thrown here
        resp = GPConnection.Shutdown();
    }
}

Ошибка:

System.TypeInitializationException HResult = 0x80131534 Сообщение = Инициализатор типа для «Microsoft.Dexterity.Applications.root» вызвал исключение. Source = Application.Dev StackTrace: в Microsoft.Dexterity.Applications.DevDictionary.DevProcedure.get_WrappedScript () в Microsoft.Dexterity.Applications.DevDictionary.DevProcedure.Invoke ()
в Program.Main (аргументы String []) в C: \ Users \ administrator.ROCKSOLID \ source \ repos \ gp_test \ gp_test \ Program.cs: строка 14

Внутреннее исключение 1: NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта.

StackTrace "в Microsoft.Dexterity.Bridge.AppDispatchProxy.get_LaunchFileName () \ r \ n
в Microsoft.Dexterity.Bridge.DictionaryRoot..ctor (Int32 productId, логический isFormsDictionary) \ r \ n в Microsoft.Dexterity.Applications.root..cctor () "string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...