Открытие диалогового окна с ошибками обновления пользователей.
Параметры команды передаются в свойстве Data. Для работы команды в данном свойстве необходимо указать следующие значения:
Параметр | Описание |
IMetabaseUsersUpdateErrors | Информация об ошибках, которые могли произойти при обновлении пользователей. Данную информацию можно получить в свойстве IMetabaseUsersUpdate.Errors. |
Команда доступна для использования после обновления пользователей. Обновление пользователей происходит при выполнении метода IMetabaseSecurity.UpdateUsers.
Для выполнения примера добавьте ссылки на системные сборки: Metabase, Ui, ForeSystem (для примера на Fore.NET).
Sub UserProc;
Var
MB: IMetabase;
MBSec: IMetabaseSecurity;
Users: IMetabaseUsers;
User: IMetabaseUser;
UserUpdate: IMetabaseUsersUpdate;
Result: IMetabaseUsersUpdateErrors;
Target: IUiCommandTarget;
Context: IUiCommandExecutionContext;
Lic: Object;
Begin
MB := MetabaseClass.Active;
// Получим лицензию для возможности работы с менеджером безопасности
Lic := MB.RequestLicense(UiLicenseFeatureType.Adm);
MBSec := MB.Security;
Users := MBSec.Users;
UserUpdate := MBSec.CreateUsersUpdate;
UserUpdate.Callback := New UsersUpdateCallback.Create;
For Each User In Users Do
UserUpdate.Add(User);
End For;
// Обновим всех пользователей, добавленных в менеджере безопасности
MBSec.UpdateUsers(UserUpdate);
// Получим список ошибок, которые могли возникнуть при обновлении
Result := UserUpdate.Errors;
Target := WinApplication.Instance.GetPluginTarget("Adm");
Context := Target.CreateExecutionContext;
Context.Data := Result;
Target.Execute("UpdateUsers_ShowErrorsDialog", Context);
// Освободим лицензию
Lic := Null;
End Sub Main;
Class UsersUpdateCallback: Object, IMetabaseUsersUpdateCallback
UpdateResult: MetabaseUsersUpdateCallbackResult;
Function RequestAction(ErrorInfo: IMetabaseUsersUpdateError): MetabaseUsersUpdateCallbackResult;
Begin
Return MetabaseUsersUpdateCallbackResult.SilentContinue;
End Function RequestAction;
Sub Process(Subject: ISecuritySubject);
Begin
Debug.WriteLine("Обновление пользователя: " + Subject.Name);
End Sub Process;
Function get_CallbackResult: MetabaseUsersUpdateCallbackResult;
Begin
Return UpdateResult;
End Function get_CallbackResult;
Sub set_CallbackResult(Value: MetabaseUsersUpdateCallbackResult);
Begin
UpdateResult := Value;
End Sub set_CallbackResult;
End Class UsersUpdateCallback;
Imports Prognoz.Platform.Interop.Metabase;
Imports Prognoz.Platform.Interop.Ui;
Imports Prognoz.Platform.Interop.ForeSystem;
…
Public Class Program
[STAThread]
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
MBSec: IMetabaseSecurity;
Users: IMetabaseUsers;
User: IMetabaseUser;
UserUpdate: IMetabaseUsersUpdate;
Result: IMetabaseUsersUpdateErrors;
Target: IUiCommandTarget;
Context: IUiCommandExecutionContext;
WinAppCls: WinApplicationClass = New WinApplicationClassClass();
Lic: Object;
Begin
MB := Params.Metabase;
// Получим лицензию для возможности работы с менеджером безопасности
Lic := Mb.RequestLicense(UiLicenseFeatureType.lftAdm);
MBSec := MB.Security;
Users := MBSec.Users;
UserUpdate := MBSec.CreateUsersUpdate();
UserUpdate.Callback := New UsersUpdateCallback();
For Each User In Users Do
UserUpdate.Add(User);
End For;
//
Обновим всех пользователей, добавленных в менеджере безопасности
MBSec.UpdateUsers(UserUpdate);
//
Получим список ошибок, которые могли возникнуть при обновлении
Result := UserUpdate.Errors;
Target := WinAppCls.Instance[Null].GetPluginTarget("Adm");
Context := Target.CreateExecutionContext();
Context.Data := Result;
Target.Execute("UpdateUsers_ShowErrorsDialog", Context, Null);
// Освободим лицензию
Lic := Null;
End Sub;
End Class;
Class UsersUpdateCallback: Object, IMetabaseUsersUpdateCallback
UpdateResult: MetabaseUsersUpdateCallbackResult;
Public Function RequestAction(ErrorInfo: IMetabaseUsersUpdateError): MetabaseUsersUpdateCallbackResult;
Begin
Return MetabaseUsersUpdateCallbackResult.muucrSilentContinue;
End Function RequestAction;
Public Sub Process(Subject: ISecuritySubject);
Begin
System.Diagnostics.Debug.WriteLine("Обновление пользователя: " + Subject.Name);
End Sub Process;
Public Property CallbackResult: MetabaseUsersUpdateCallbackResult
Get
Begin
Return UpdateResult;
End Get
Set
Begin
UpdateResult := Value;
End Set
End Property CallbackResult;
End Class;
После выполнения примера будет осуществлено обновление всех пользователей, добавленных в менеджере безопасности текущего репозитория. Если во время обновления какого-либо пользователя возникают ошибки, то обновление все равно будет продолжено. После обновления всех пользователей будет выведено окно с информацией обо всех возникших ошибках.
См. также: