Hallo,
ich fĂĽr meinen Teil habe GetData und SetData durch eigene Funktionen ersetzt, die meiner Meinung nach das Leben erheblich erleichtern.
- Code: Alles auswählen
Public Function GetArrayStr(ByVal What as String, ByVal Field as object) as String
return (What & "|" & iif(isnothing(Field),"",Replace(Field.tostring,"|","<|>"))) & "|"
End Function
Public Function GetRealVal(ByVal Value as String) as String
if (Value <> "") then
return Replace(Value,"<|>","|")
else
return Value
end if
End Function
Public Shared DataActPars As New System.Collections.Hashtable
Public Function SetDataValueArray(byval Data as object) as String
dim StrArray() as string
AfterTotal = false
if isnothing(Data) or (Cstr(Data) ="") then
return" "
end if
DataActPars.clear
if not isnothing(Data) then
StrArray = split(Cstr(Data),"|")
For index as integer = 0 To StrArray.GetUpperBound(0) Step 2
if StrArray(index)<>"" then
DataActPars(Strarray(index)) = GetRealVal(StrArray(index+1))
end if
next index
end if
Return " "
End Function
Public Function GetDataValue(ByVal What as string) as Object
if isnothing(DataActPars(What)) then
return("*XxXxXxXxXxXxX*")
' return(What)
else
return DataActPars(What)
end if
end Function
Der Aufruf von SetData erfolgt bei mir in der Expression einem sichtbaren Feld ganz oben Links im Boddy des Reports. Das hat zumindest ab NAV2015 den Vorteil, das man GetData sowohl in Header, Footer als auch im Boddy benutzen kann.
Der Aufbau des SetData ĂĽbergebenen Strings ist in der Form 'VARNAME|Wert|' also z.B. 'NameLbl|Name|Name2Lbl|Name 2|'
Da ich den String fĂĽr SetData zum groĂźen Teil schon im C/AL- Teil des Reports aufbaue (die ĂĽbergebenen Werte/Texte sind in fast jedem Beleg die gleichen) sieht die Expression dieses Feldes etwa so aus:
- Code: Alles auswählen
=Code.SetData(fields!DataText.Value+
GetArrayStr("CompanyInfo__Phone_No__Caption" , Fields!CompanyInfo__Phone_No__Caption.Value) +
GetArrayStr("CompanyInfo__Phone_No__" , Fields!CompanyInfo__Phone_No__.Value) +
GetArrayStr("CompanyInfo__Fax_No__Caption" , Fields!CompanyInfo__Fax_No__Caption.Value) +
GetArrayStr("CompanyInfo__Fax_No__" , Fields!CompanyInfo__Fax_No__.Value) +
GetArrayStr("CompanyInfo__VAT_Registration_No__Caption" , Fields!CompanyInfo__VAT_Registration_No__Caption.Value) +
GetArrayStr("CompanyInfo__VAT_Registration_No__" , Fields!CompanyInfo__VAT_Registration_No__.Value) +
GetArrayStr("CompanyInfo__Giro_No__Caption" , Fields!CompanyInfo__Giro_No__Caption.Value) +
GetArrayStr("CompanyInfo__Giro_No__" , Fields!CompanyInfo__Giro_No__.Value) +
GetArrayStr("CompanyInfo__Bank_Name_Caption" , Fields!CompanyInfo__Bank_Name_Caption.Value) +
GetArrayStr("CompanyInfo__Bank_Name_" , Fields!CompanyInfo__Bank_Name_.Value) +
GetArrayStr("CompanyInfo__Bank_Account_No__Caption" , Fields!CompanyInfo__Bank_Account_No__Caption.Value) +
GetArrayStr("CompanyInfo__Bank_Account_No__" , Fields!CompanyInfo__Bank_Account_No__.Value) +
GetArrayStr("Sales_Header___Bill_to_Customer_No__Caption" , Fields!Sales_Header___Bill_to_Customer_No__Caption.Value) +
GetArrayStr("Sales_Header___Bill_to_Customer_No__" , Fields!Sales_Header___Bill_to_Customer_No__.Value) +
GetArrayStr("VATNoText" , Fields!VATNoText.Value) +
GetArrayStr("Sales_Header___VAT_Registration_No__" , Fields!Sales_Header___VAT_Registration_No__.Value) +
GetArrayStr("ReferenceText" , Fields!ReferenceText.Value) +
GetArrayStr("Sales_Header___Your_Reference_" , Fields!Sales_Header___Your_Reference_.Value) +
GetArrayStr("Sales_Header___Shipment_Date_Caption" , Fields!Sales_Header___Shipment_Date_.Value)+
GetArrayStr("Sales_Header___No__Caption" , Fields!Sales_Header___No__Caption.Value) +
GetArrayStr("Sales_Header___No__" , Fields!Sales_Header___No__.Value) +
GetArrayStr("Sales_Header___Prices_Including_VAT_Caption" , CStr(Fields!PricesInclVAT_YesNo.Value) +
GetArrayStr("SalesPersonText" , Fields!SalesPersonText.Value) +
GetArrayStr("SalesPurchPerson_Name" , Fields!SalesPurchPerson_Name.Value) +
GetArrayStr("FORMAT__Sales_Header___Document_Date__0_4_" , Fields!FORMAT__Sales_Header___Document_Date__0_4_.Value))
"DataText" ist eine Variable, die den in C/AL aufbereiteten Text in der oben beschriebenen Form enthält. Die Funktion "GetDataArrStr" ermöglicht es SetData aus dem Report zusätzliche Parameter zu übergeben. Das Ergebnis von GetDataArrStr wird einfach als zusätzlicher Text SetData angehängt.
Der Zugriff auf die Daten erfolgt mit "GetData". Der ĂĽbergebene Parameter ist der VARNAME aus dem SetData ĂĽbergebenen ArrayString. z.B.
- Code: Alles auswählen
=GetData("Sales_Header___No__")
Wenn man sich an die Struktur hält, dann kann man mit dem Variablennamen auf das entsprechende Textfeld zugreifen, und man muss sich nicht mit irgendwelchen Indexen oder Gruppen herumschlagen.
Das mag zwar auf den ersten Blick mehr Schreibaufwand sein. Auf den zweiten Blick (Aufbereitung des ĂĽbergebenen Strings in C/AL und ein paar anderer Tricks erspart es sehr viel Arbeit)
Der größte Vorteil liegt aber darin, das man auch nach einem halben Jahr noch verstehen kann, was man da im RDLC angestellt hat.
Ein kleines Gimmick ist der Wert "*XxXxXxXxXxXxX*" der von GetData zurĂĽckgeben wird, wenn man eine Variable nicht ĂĽbergeben hat. Man sieht auf den Belegen relativ schnell, ob man etwas vergessen hat.
GruĂź Fiddi