Dodawanie własnych atrybutów do protokołów (FastReport)
Dodawanie własnych atrybutów do protokołu zasobu
Aby dodać do protokołu zasobu samodzielnie zdefiniowane atrybuty, należy w wybranym protokole dodać sekcję oraz pola tekstowe, które będą odpowiadały za wyświetlanie szczegółów atrybutu.

WAŻNE: Po dodaniu pola tekstowego należy zamienić go w placeholder, dodając klamry:
W tym przypadku, z Text43 na [Text43]
Następnie należy zaznaczyć nowo utworzoną sekcję oraz dodać do niej zdarzenie, za pomocą ikony błyskawicy po prawej stronie programu:

Po kliknięciu program przeniesie nas do zakładki “Kod”. Konieczne jest wklejenie poniższego kodu do metody, która została utworzona.
DataSourceBase ds = Report.GetDataSource("Assets.AttributeValues");
ds.Init();
string NazwaZmiennej = null;
while(ds.HasMoreRows)
{
var name = ds["Name"] as string;
var v = ds["Value"] as string;
if(name == "NazwaNaszegoAtrybutu" && !string.IsNullOrEmpty(v))
{
NazwaZmiennej = v;
}
ds.Next();
}
if(!string.IsNullOrEmpty(NazwaZmiennej))
Text38.Text = NazwaZmiennej;
Docelowo, kod źródłowy powinien wyglądać następująco:

Kolorem żółtym oznaczona jest nazwa zmiennej. Może ona być nazwana dowolnie, ważne natomiast jest, aby była ona identyczna we wszystkich oznaczonych miejscach.
Kolorem czarnym oznaczona jest nazwa metody powiązana z sekcją formularza (
Data2)"NazwaNaszegoAtrybutu"→ nazwa musi być identyczna jak nazwa atrybutu w systemieText38.Text→ nazwa musi odpowiadać placeholderowi z formularza ([Text43])
Koniecznym jest zapisanie protokołu:

Aby dodać kolejne atrybuty do protokołu, trzeba dodać kolejne pola tekstowe, zmienne, warunki oraz zmodyfikować ich nazwy - analogicznie jak wyżej.
//nowa zmienna
string zmienna = null;
//kolejny warunek
if(name == "Nazwa_Kolejnego_Atrybutu" && !string.IsNullOrEmpty(v))
{
zmienna = v;
}
//przypisanie zawartości zmiennej do pola tekstowego/placeholdera
if(!string.IsNullOrEmpty(zmienna))
Nazwa_Kolejnego_Pola_Tekstowego.Text = zmienna;


Dodawanie własnych atrybutów do protokołu zgłoszenia
W celu dodania własnego atrybutu do protokołu zgłoszenia, należy przejść do szczegółów protokołu, dodać wybraną sekcję do strony, oraz pole tekstowe, które będzie odpowiadało za wyświetlanie szczegółów atrybutu:

Uwaga: Pole tekstowe, które odpowiadać ma za wyświetlanie szczegółów atrybutu musi zostać zmodyfikowane w placeholder:
W tym przypadku Text51 na [Text51]
Następnie należy zaznaczyć nowo dodaną sekcję oraz dodać do niej zdarzenie za pomocą Ikony błyskawicy po prawej stronie Online Designera.

Program przeniesie nas po kliknięciu w ikonę do zakładki “Kod”. W tej zakładce, do metody która została utworzona należy wkleić poniższy kod:
DataSourceBase ds = Report.GetDataSource("Issues.AttributeValues");
ds.Init();
string NazwaZmiennej = null;
while(ds.HasMoreRows)
{
var name = ds["Name"] as string;
var v = ds["Value"] as string;
if(name == "Nazwa_Atrybutu" && !string.IsNullOrEmpty(v))
{
NazwaZmiennej = v;
}
ds.Next();
}
if(!string.IsNullOrEmpty(NazwaZmiennej))
Nazwa_Pola_Tekstowego.Text = NazwaZmiennej;
W kodzie należy podmienić dwie wartości:"NazwaAtrybutu" oraz Nazwa_Pola_Tekstowego.Text
Docelowo, kod powinien wyglądać w następujący sposób:

Oraz zapisać raport, przechodząc do zakładki “Raport” oraz “Zapisz”

Aby dodać kolejne atrybuty do protokołu, trzeba zdublować dodać kolejną zmienną, warunek oraz przypisanie zawartości zmiennej do pola tekstowego w kodzie:
//nowa zmienna
string zmienna = null;
//kolejny warunek
if(name == "Nazwa_Kolejnego_Atrybutu" && !string.IsNullOrEmpty(v))
{
zmienna = v;
}
//przypisanie zawartości zmiennej do pola tekstowego/placeholdera
if(!string.IsNullOrEmpty(zmienna))
Nazwa_Kolejnego_Pola_Tekstowego.Text = zmienna;
Analogicznie jak wcześniej należy dodać kolejne pola tekstowe do protokołu oraz podmienić w kodzie nazwę atrybutu oraz pola tekstowego.