В штампе маркировки можно использовать подстановки &[DEPARTMENT] и &[NAME], заполнить которые можно только из прикладного кода при создании подключения к репозиторию.
Для задания значений подстановкам используйте свойства ICredentials.PersonDepartment и ICredentials.PersonName доступные только в Fore .NET.
Свойство ICredentials.PersonDepartment соответствует подстановке &[DEPARTMENT], свойство ICredentials.PersonName соответствует подстановке &[NAME].
Ниже приведен пример задания значений для подстановок &[DEPARTMENT] и &[NAME] в штампе маркировки. Штамп маркировки будет выводиться для отчета независимо от применения мандатного доступа или доступа по уровням безопасности. Для корректной работы примера предполагается наличие репозитория PPRepository на сервере MSServer (СУБД - Microsoft SQL Server 2008). В репозитории создан регламентный отчет с идентификатором REPORT.
Для выполнения примера выполните шаги:
Создайте .NET-сборку, создайте в ней NET -форму.
Добавьте ссылки на системные сборки 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;
для модуля Program:
Imports Prognoz.Platform.Interop.ForeSystem;
Разместите на форме:
компонент Label с идентификатором label1. В инспекторе объектов для свойства Text задайте текст «Пользователь:»;
компонент Label с идентификатором label2. В инспекторе объектов для свойства Text задайте текст «Пароль:»;
компонент TextBox с идентификатором textBox1;
компонент TextBox с идентификатором textBox2. В инспекторе объектов для свойства PasswordChar задайте значение: *;
кнопку с идентификатором button1. В инспекторе объектов для свойства Text задайте текст «ОК»;
невизуальный компонент documentPrinterNet с идентификатором documentPrinterNet1.
В модуле 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;
Создайте обработчик для кнопки:
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(Null) As IPrxReport;
doc := rep As IGxDocument;
// Открываем документ на предпросмотр перед печатью, чтобы увидеть штамп маркировки
documentPrinterNet1.Document := doc;
documentPrinterNet1.DocumentPrinterUi.PrintPreview(0, New IWin32WindowForeAdapter(Self), True);
Lic := Null;
End Sub;
Запустите форму на выполнение, введите учетные данные пользователя для подключения к репозиторию и нажмите кнопку «ОК».
В результате будет открыт на просмотр отчет, внизу страницы которого будет отображаться штамп маркировки с заполненными значениями для подстановок &[DEPARTMENT] и &[NAME]:
См. также: