Заполнение значений &[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. Добавьте ссылки на системные сборки Drawing, ForeSystem, Metabase, Report. Импортируйте эти сборки из системной сборки Prognoz.Platform.Interop:

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

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;
        pcreds: IPasswordCredentials;
        ld: ISecurityPackageLogonData;
    
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";
        ld := def.LogonData;
        ld.ParamValue[
"SERVER"] := "ms2008a";
        ld.ParamValue[
"DATABASE"] := "pprepository";
        
// Создадим учетные данные с заданным типом аутентификации
        creds := package.CreateCredentials(AuthenticationMode.amPassword);
        
// Зададим логин и пароль для входа в репозиторий
        pcreds := creds As IPasswordCredentials;
        pcreds.UserName := Login;
        pcreds.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;
    Lic: Object;
    Security: IMetabaseSecurity;
Begin
    MB := Self.Metabase;
    Lic := MB.RequestLicense(UiLicenseFeatureType.lftAdm);
    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);
    Lic := 
Null;
End Sub;

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

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

См. также:

Примеры | IMetabaseLinkBase | Штамп маркировки