Заполнение значений &[DEPARTMENT] и &[NAME] для штампа маркировки

В штампе маркировки можно использовать подстановки &[DEPARTMENT] и &[NAME], заполнить которые можно только из прикладного кода при создании подключения к репозиторию.

Для задания значений подстановкам используйте свойства ICredentials.PersonDepartment и ICredentials.PersonName доступные только в Fore .NET.

Свойство ICredentials.PersonDepartment соответствует подстановке &[DEPARTMENT], свойство ICredentials.PersonName соответствует подстановке &[NAME].

Ниже приведен пример задания значений для подстановок &[DEPARTMENT] и &[NAME] в штампе маркировки. Штамп маркировки будет выводиться для отчета независимо от применения мандатного доступа или доступа по уровням безопасности. Для корректной работы примера предполагается наличие репозитория «PPRepository» на сервере «MSServer» (СУБД - Microsoft SQL Server 2008). В репозитории создан регламентный отчет с идентификатором «REPORT».

Для выполнения примера выполните шаги:

  1. Создайте .NET-сборку, создайте в ней NET -форму.  

  2. Добавьте ссылки на системные сборки Report, Drawing, ForeSystem. Импортируйте эти сборки из системной сборки Prognoz.Platform.Interop:

Imports Prognoz.Platform.Interop.Report;
Imports Prognoz.Platform.Interop.Drawing;

Imports Prognoz.Platform.Interop.ForeSystem;

  1. Разместите на форме:

  1. В модуле Program .NET-сборки создайте публичный класс Test:

Public Class Test
    
    Public Function getMB(name: string; depart: string; Login: string; Password: string;): IMetabase;
    Var mb : IMetabase;
        factory : MetabaseManagerFactoryClass;
        manager : IMetabaseManager;
        def : IMetabaseDefinition;
        defs : IMetabaseDefinitions;
        package : StandardSecurityPackage;
        creds : ICredentials;
    Begin
        // Создаем объект для работы с описанием репозитория
        factory := New MetabaseManagerFactoryClass.Create();
        manager := factory.Active;
        // Создаем стандартный пакет безопасности
        package := New StandardSecurityPackage.Create();
        // Получим коллекцию описаний репозиториев 
        defs := manager.Definitions;
        // Добавим новое описание соединения с репозиторием
        def := defs.Add();
        // Зададим параметры соединения с репозиторием
        def.Name := "Test_connect";
        def.SecurityPackage := package.Id;
        def.Authentication := AuthenticationMode.amPassword;
        def.DeferredLoading := False;
        def.DriverId := "MSSQL2008";
        def.LogonData.ParamValue["SERVER"] := "MSServer";
        def.LogonData.ParamValue["DATABASE"] := "PPRepository";
        // Создадим учетные данные с заданным типом аутентификации
        creds := package.CreateCredentials(def.Authentication);
        // Зададим учетные данные для входа в репозиторий
        (creds As IPasswordCredentials).UserName := Login;
        (creds As IPasswordCredentials).Password := Password;
        // Определим имя пользователя, которое будет выводиться в штампе 
        creds.PersonName := name;
        // Определим подразделение, которое будет выводиться в штампе
        creds.PersonDepartment := depart;
        // Подключение к репозиторию в соответствии с заданными параметрами
        mb := def.Open(creds,ApplicationMode.amWin,LocaleCodeID.lcidRussian);
        Return mb;
    End Function getMB;
    
End Class Test;

  1. Создайте обработчик для кнопки:

    Private Sub button1_Click(sender: System.Object; e: System.EventArgs);
    Var
        MB, MB_new : IMetabase;
        Obj: Test=New Test();
        User, Department, Login, Password : String;
        rep : IPrxReport;
        doc : IGxDocument;
        Security : IMetabaseSecurity;       
    Begin
        MB := Self.Metabase;
        Security:= MB.Security;
        // Задаем использование штампа маркировки независимо от настроек
        Security.Policy.AlwaysPrintDocumentLabel := True;
        // Применяем заданные настройки политики
        Security.Apply();
        // Определяем имя пользователя для штампа маркировки
        User := "Иванов Иван Петрович";
        // Определяем подразделение для штампа маркировки
        Department := "Отдел кадров";
        // Логин 
        Login := textBox1.Text;
        // Пароль
        Password := textBox2.Text;
        // Вызываем метод getMB пользовательского класса Test
        MB_new := Obj.getMB(User,Department,Login,Password) As IMetabase;
        // Получаем отчет, для которого будет применяться штамп маркировки
        Rep := MB_new.ItemById["Report"].Open(NullAs IPrxReport;
        doc := rep As IGxDocument;
        // Открываем документ на предпросмотр перед печатью, чтобы увидеть штамп маркировки 
        documentPrinterNet1.Document := doc;
        documentPrinterNet1.DocumentPrinterUi.PrintPreview(0New IWin32WindowForeAdapter(Self), True);
    End Sub button1_Click;

  1. Запустите форму на выполнение, введите учетные данные пользователя для подключения к репозиторию и нажмите кнопку «ОК».  

В результате будет открыт на просмотр отчет, внизу страницы которого будет отображаться штамп маркировки с заполненными значениями для подстановок &[DEPARTMENT] и &[NAME]:

См. также:

Примеры