PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : CrystalReports mit xml als DataSource


Elemental
2004-10-06, 10:38:36
Hallo allerseits,
ich teste gerade ein wenig mit CrystalReports und nem XML-File als Datasource. Klappt soweit auch wunderbar, nur krieg ich es nicht hin, ein Bild, das in dem xmlFile als base64String abgelegt ist, anzuzeigen.

Crystalreports zeigt das Bild immer als String an. Hat jemand schon sowas probiert?

Mein xml-file als Besispiel:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<SetupData>
<AdditionalComponentData>
<Component>8087539040</Component>
<Barcode>/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQH/wAARCAAMADQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKF hcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTl JWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+ Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkN OEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKk pOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+ Pn6/9oADAMBAAIRAxEAPwCP/g4M/wCcv/8A3Uz/AOE76+ANd/5RZf8ABeT/ALMA/wCDSv8A9Z1/Zsr+/wA/aD/4JcfsJ/tUf8Lg/wCF8/Az/hO/+F9/2n/wtj/i5vxi8Mf8JX/bH/DHf9pf8ib8QfD39hfaf+GBP2Sv+Ra/sfyf+FT/ALjyv+E7+Jf/AAmXn8//AARm/wCCbFz8LPjz8FJ/2b9/wy/ab+H/AOyV8Lfjh4Z/4XB8el/4TbwJ+wv4c8NeE/2WNC/tlPiiviDw3/wq3w/4Q8O6f/afhHVdA1jxt/Z32r4i6h4uvbu+ubkA/hD/AGqv+UWXxT/7MA+Af/rOv/BlTR8Of+RG/bI/7MA/4Jp/+wbX/BWKv7vPFf8AwRm/4JseNvhZqvwU8T/s3/2n8Mtb+H+gfC3U/DP/AAuD49WX2nwJ4X8OfsU+E9C0L+2dP+KNp4gh+w+H/wDgnb+x1p/9p2+qxaxc/wDCn/tV5qFxe/ED4pXPjY03/gjN/wAE2NIsfGWm6f8As3/Z7L4gfD/4afC3xdB/wuD49S/2v4E+D/7G3xZ/4J+/DrQvMn+KMs1h/wAI7+yL8cfil8JP7T0ySy1jV/8AhKP+E913UNT+JuieHfGekAH8oX7I/wDzZN/3i6/+EY6+APhz/wAiN+2R/wBmAf8ABNP/ANg2v+CsVf3+eEf+CXH7CfgT/hCf+EU+Bn9lf8K5/wCFXf8ACG/8XN+MV9/Y/wDwpf8A4YY/4Vp/yEviDef2h/wjX/Dtf9in/kK/bv7Y/wCFL/8AE/8A7V/4WN8Wf+E78/03/gjN/wAE2NIsfGWm6f8As3/Z7L4gfD/4afC3xdB/wuD49S/2v4E+D/7G3xZ/4J+/DrQvMn+KMs1h/wAI7+yL8cfil8JP7T0ySy1jV/8AhKP+E913UNT+JuieHfGekAHoH/BJ3/lFl/wTT/7MA/Y3/wDWdfhzRX1/8J/hb4E+B3ws+GnwU+Fuhf8ACL/DL4P/AA/8G/C34deGf7T1jW/+Ed8CfD/w5pvhPwjoX9s+ItQ1fxBq/wDZHh/SNP0/+09d1XU9Yv8A7P8AatT1C9vZZ7mUoA//2Q==</Barcode>
</AdditionalComponentData>
<AdditionalComponentData>
<Component>8170089042</Component>
<Barcode>/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQH/wAARCAAMADQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKF hcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTl JWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+ Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkN OEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKk pOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+ Pn6/9oADAMBAAIRAxEAPwD77/aq/wCUpvxT/wCz/wD4B/8ArRX/AAZU1+AOu/8AKLL/AILyf9mAf8Glf/rOv7Nlf6Hniv8AYK/ZO8bfFPVfjX4n+FP9p/E3W/iBoHxS1PxN/wAJ18SbL7T478L+I/2KfFmha7/Y2n+MbTw/D9h8Qf8ABO39jrUP7Mt9Ki0e5/4U/wDZbzT7iy+IHxStvG3z/P8A8EZv+CbFz8LPjz8FJ/2b9/wy/ab+H/7JXwt+OHhn/hcHx6X/AITbwJ+wv4c8NeE/2WNC/tlPiiviDw3/AMKt8P8AhDw7p/8AafhHVdA1jxt/Z32r4i6h4uvbu+ubkA/hD+Af/JxX7Kv/AGf/AP8ABlT/AOusvinR+1V/yiy+Kf8A2YB8A/8A1nX/AIMqa/u80D/gjN/wTY8L+I/CvizQv2b/ALD4g8E/ED9in4peGNQ/4XB8ern+zPHf/BO34War8FP2Otd+y3nxRuLK9/4U/wDDLW9T8M/2ZqFtd6P8QPtP9s/FLT/G3iCG31WI8V/8EZv+CbHjb4War8FPE/7N/wDafwy1v4f6B8LdT8M/8Lg+PVl9p8CeF/Dn7FPhPQtC/tnT/ijaeIIfsPh//gnb+x1p/wDadvqsWsXP/Cn/ALVeahcXvxA+KVz42AP4Q9d/5RZf8F5P+zAP+DSv/wBZ1/Zso+HP/Ijftkf9mAf8E0//AGDa/wCCsVf3eT/8EZv+CbFz8LPjz8FJ/wBm/f8ADL9pv4f/ALJXwt+OHhn/AIXB8el/4TbwJ+wv4c8NeE/2WNC/tlPiiviDw3/wq3w/4Q8O6f8A2n4R1XQNY8bf2d9q+IuoeLr27vrm5NN/4Izf8E2NIsfGWm6f+zf9nsviB8P/AIafC3xdB/wuD49S/wBr+BPg/wDsbfFn/gn78OtC8yf4oyzWH/CO/si/HH4pfCT+09MkstY1f/hKP+E913UNT+JuieHfGekAHoH/AASd/wCUWX/BNP8A7MA/Y3/9Z1+HNFfX/wAJ/hb4E+B3ws+GnwU+Fuhf8Iv8Mvg/8P8Awb8Lfh14Z/tPWNb/AOEd8CfD/wAOab4T8I6F/bPiLUNX8Qav/ZHh/SNP0/8AtPXdV1PWL/7P9q1PUL29lnuZSgD/2Q==</Barcode>
</AdditionalComponentData>
</SetupData>


Gruss
Bernd

grakaman
2004-10-06, 21:04:29
Hallo allerseits,
ich teste gerade ein wenig mit CrystalReports und nem XML-File als Datasource. Klappt soweit auch wunderbar, nur krieg ich es nicht hin, ein Bild, das in dem xmlFile als base64String abgelegt ist, anzuzeigen.

Crystalreports zeigt das Bild immer als String an. Hat jemand schon sowas probiert?


Ich habe mit CR noch nichts gemacht, aber ich kann mir auch nicht vorstellen, dass das CR automatisch behandelt. Der Base64 String kann ja alles mögliche sein, woher soll denn CR wissen, dass es ein Bild ist? Wie gesagt, ich kenne mich mit CR nicht aus, aber dort hast du doch sicher die Möglichkeit Spalten einzeln an Datenfelder zu binden oder so etwas in der Art. Da musst du sicher zuerst den Base64 String in byte[] umwandeln und dann in ein Image Objekt laden.

MfG

Elemental
2004-10-07, 08:52:39
CrystalReports erkennt das Feld 'Barcode' automatisch als string. Ich müsste das jetzt irgendwie mittels 'Convert.FromBase64String()' in ein byte[] wandeln allerdings weiss ich (noch) nicht, wie ich das anstellen soll...

grakaman
2004-10-07, 13:23:36
CrystalReports erkennt das Feld 'Barcode' automatisch als string. Ich müsste das jetzt irgendwie mittels 'Convert.FromBase64String()' in ein byte[] wandeln allerdings weiss ich (noch) nicht, wie ich das anstellen soll...

Es ist ja auch ein String, warum sollte es CR also als etwas anderes erkennen? Nur kann in dem Base64 String genau so gut eine Windows EXE oder sonst was stehen. Deshalb frage ich mich, woher denn CR wissen soll, dass es sich dabei um ein Bild handelt? Oder bedeutet etwa das Element BarCode, dass es ein Bild ist? Schau doch mal nach, ob es im Report ein Ereignis, ähnlich dem ItemCreated eines DataGrids gibt. Dann könntest du für jedes zu erstellende Item die Datenbindung manuell vornehmen.

MfG

Crushinator
2004-10-07, 14:36:47
CrystalReports erkennt das Feld 'Barcode' automatisch als string. Ich müsste das jetzt irgendwie mittels 'Convert.FromBase64String()' in ein byte[] wandeln allerdings weiss ich (noch) nicht, wie ich das anstellen soll... Da Crystal Reports eine solche Formel nicht zur Verfügung stellt, mußt Du es ihm wohl mit einem Umweg über eine User Function Library (UFL) beibringen. Ein sehr passendes Beispiel dafür findest Du hier (http://codeproject.com/dotnet/DecryptForCrystal.asp). :)

Elemental
2004-10-07, 15:28:28
@grakaman: Schon klar. CR kann es nicht wissen. Aber es gibt auch keine Möglichkeit sowas manuell in CR zu tun.

@Crushinator: Hab auch zuert gedacht, dass es so funktionieren könnte. Aber das Problem sind die 2 letzten Sätze hier:


Building the UFL

I am going to limit the example here to Visual Basic, as C++ is not my best suit. First create a Visual Basic ActiveX DLL project and add the functions that you want to be exposed by the UFL and any private ones if necessary. All of the functions you want to be available in the Crystal Environment need to be declared as PUBLIC and must return one of the following data types only: Integer, Long, Single, Double, Currency, Date, Boolean and String. You cannot use the Variant type.


Ich müsste ein byte[] zurück geben.

Anscheinend geht es wirklich nicht mit einem XML file ein Bild in einen CR zu bringen.
Mit DataSets ist es ja kein Problem, aber das kommt für mich nicht in Frage. Unser Product hat schon viele Reports eingebaut, die mittels Datasets gefüttert werden. Der Kunde hat nun die Möglichkeit sich selber "custom reports" zu machen unter Verwendung der von unserer Applikation gefüllten Datasets (Datasets werden mit ausgeliefert). Die zusätzlichen gewünschten Daten muss der Kunde nun über eine zweite DataSource in den CrystalReport bekommen. Das sollte über ein XML file gehen, zumindest war es so gedacht...

Siehe Beispielbild! Der Kunde kann sich zusätzlich zum bestehenden Report noch einen Barcode anzeigen lassen, indem er ein xml-file als zweite Datenquelle verwendet. Wäre halt schön, wenn jetzt der Barcode direkt als Bild im Report wäre...

Gruss
Bernd

Crushinator
2004-10-07, 15:52:13
Aua! ;(

Wenn ich das richtig sehe, gibt es gar keine Möglichkeit außer dem theoretischen Weg über die Erstellung einer temporären Bilddatei pro Datensatz durch eine eigene UFL und Einbindung jener (mittels Übergabe des jeweiligen Pfades als String) im Report. Das wiederum würde ich weniger schön bis krank finden.