Как программно выполнить процедуру Ловкости?
Цель:
Я хочу программно сбросить пароль пользователя в Great Plains 2018,В наших целях программно НЕ используется следующее:
- Ручное нажатие кнопок в пользовательском интерфейсе, особенно после запуска Dynamics.exe
- Запуск макроса Great Plains 2018
Справочная информация:
- Единственно возможное поддерживаемое решение для того, чего я пытаюсь достичь, я считаю, должно опираться на Ловкость . Я понятия не имею, как выполнить процедуру Ловкости программно, поэтому это может быть невозможно.
- У меня есть определенный сценарий Ловкости (процедура Dynamics), который очень прост - он сбрасывает пароль пользователя GP через
Login_AlterLogin()
. Он не имеет параметров и основан на примерах, приведенных в Dex.chm
файле справки. Чтобы развернуть и использовать этот сценарий Ловкости, я сделал следующее:
- Создансловарь (
dev.dic
) - Создание и компиляция сценария Dexterity в моем редактируемом словаре (
dev.dic
) - Создание файла CNK (
dev.cnk
) - ЗапущенGP и выполнил отсоединение
- Сгенерировал DLL с помощью
Dag.exe
(Application.Dev.dll
) - Добавил сборку в мой проект Visual Studio (сборка
Application.Dev
добавлена в консольное приложение C #) - Попытка
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