Команда UpdateUsers_ShowErrorsDialog

Назначение

Открытие диалогового окна с ошибками обновления пользователей.

Параметры использования

Параметры команды передаются в свойстве 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;

После выполнения примера будет осуществлено обновление всех пользователей, добавленных в менеджере безопасности текущего репозитория. Если во время обновления какого-либо пользователя возникают ошибки, то обновление все равно будет продолжено. После обновления всех пользователей будет выведено окно с информацией обо всех возникших ошибках.

См. также:

IUiCommandTarget.Execute