Voraussetzungen
Zur erfolgreichen Durchführung dieser Aufgabe benötigen Sie eine On-Premise-Version von VertiGIS Studio Reporting, Version 5.1.0 oder höher. Sie benötigen außerdem Zugriff auf einen Feature Service, der Features mit Bildanhängen enthält. Außerdem benötigen Sie ein grundlegendes Verständnis der Programmiersprache C#.
Instruktionen
Melden Sie sich zunächst bei Ihrer VertiGIS Studio Reporting On-Premise Edition an und fügen Sie den gewünschten Feature Service als ArcGIS Datenquelle zur Anwendung hinzu.
Anschließend müssen Sie einen Bericht erstellen, der auf diese Datenquelle verweist. Dies kann mit Hilfe eines Layer Report Wizards oder anderen Methoden durchgeführt werden. Anweisungen zum Erstellen eines Layer Reports finden Sie im Doc Center (https://docs.geocortex.com/reporting/latest/help/Default.htm#rpt5/help/get-started.htm).
Sobald die grundlegenden Komponenten Ihres Reports eingerichtet sind, sollten Sie ein Picture Box-Element in den Entwurfsbereich einfügen und dessen Größe auf die gewünschten Maße anpassen. Notieren Sie sich die ID der von Ihnen gewählten Picture Box (z. B. pictureBox1), da Sie später darauf zurückgreifen müssen. Es empfiehlt sich ebenfalls, die Größe Ihrer Picture Box zu bearbeiten und sie von Normal in Zoom Image zu ändern. Wenn Ihr Bild nicht genau mit der Größe des Elements übereinstimmt, wird es so angepasst, dass es in die Rahmen des Elements passt. Ausführlichere Anweisungen zum Picture Box-Element finden Sie im Doc Center (https://docs.geocortex.com/reporting/latest/help/Default.htm#rpt5/help/images.htm).
Als Nächstes können wir zum Skriptbereich des Designers navigieren und den Code in das Skript-Template einfügen. In den Zeilen 2, 31 und 32 wird ein Verweis auf pictureBox1 gesetzt. Wenn dies nicht die ID Ihres Elements ist, sollten Sie sie jetzt in diesen drei Zeilen ändern.
In Zeile 2 verweisen wir auf die URL eines Bildes, das angezeigt werden soll, wenn das ausgewählte Merkmal keine Bildanhänge hat. Sie sollten diesen Verweis so ändern, dass er auf ein Platzhalterbild Ihrer Wahl verweist.
Zeile 3 enthält die URL zu unserem Feature-Layer. Sie müssen diese so ändern, dass sie auf Ihre Datenquelle verweist. Beachten Sie, dass die URL mit einem "/" enden muss.
In Zeile 4 verwenden wir OBJECTID als Feldname für die Objekt-ID unseres Features. Wenn der Feldname der Objekt-ID Ihres Dienstes anders lautet, ersetzen Sie OBJECTID durch den von Ihnen verwendeten Feldnamen.
Als letzten Schritt im Skriptbereich des Designers können wir den Code mit dem Button Validieren in der Symbolleiste überprüfen. Wenn die Validierung abgeschlossen ist, können Sie zum Hauptbereich des Designers zurückkehren und Ihr Picture Box-Element auswählen. Klappen Sie unter Eigenschaften den Abschnitt Verhalten und darin den Abschnitt Skripte auf. Verwenden Sie das Dropdown-Menü neben Before Print, um Detail1_BeforePrint auszuwählen. Das ist der Name der Funktion, die wir gerade geschrieben haben.
Sie können nun Ihren Bericht speichern und ihn im Designer testen, indem Sie die Objekt-IDs von Features verwenden, die Bildanhänge enthalten. Setzen Sie ihn in Ihren Geocortex Viewer für HTML5 oder Web AppBuilder für ArcGIS Anwendungen ein. Eine Anleitung zur Konfiguration von Host-Anwendungen finden Sie auch im Doc Center (https://docs.geocortex.com/reporting/latest/help/Default.htm#rpt5/help/hosting.htm).
Skript Template
private void Detail1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { pictureBox1.ImageUrl = "http://YourNoImageAvailableURLGoesHere.jpg"; var serviceUrl = "https://YourMapServiceURLGoesHere/MapServer/0/"; var fid = GetCurrentColumnValue("OBJECTID"); var attachmentsUrl = serviceUrl + fid + "/attachments?f=json"; using (var wc = new System.Net.WebClient()) { using (var stream = wc.OpenRead(attachmentsUrl)) { var serializer = new Newtonsoft.Json.JsonSerializer(); using (var sr = new System.IO.StreamReader(stream)) using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(sr)) { var response = serializer.Deserialize<Newtonsoft.Json.Linq.JObject>(jsonTextReader); var infos = response["attachmentInfos"] as Newtonsoft.Json.Linq.JArray; if (infos != null) { var info = System.Linq.Enumerable.FirstOrDefault(infos, (x) => { var contentType = (string)x["contentType"]; if (!string.IsNullOrEmpty(contentType) && contentType.StartsWith("image/")) { return true; } return false; }); if (info != null) { var imageUrl = serviceUrl + fid + "/attachments/" + info["id"].ToString(); pictureBox1.ImageUrl = imageUrl; pictureBox1.Visible = true; } } } } } }
Multiple Anhänge Template
Dieses Beispiel zeigt, wie man mit Features umgeht, die mehrere Anhänge haben. Beachten Sie, dass pictureBox-Deklarationen wörtlich zu verstehen sind. Stellen Sie also sicher, dass die Referenzen hier mit Ihrem Report übereinstimmen.
private void Detail1_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { var serviceUrl = "https://YourMapServiceURLGoesHere/FeatureServer/0/"; var fid = GetCurrentColumnValue("OBJECTID"); var pictureBoxes = new System.Collections.Generic.List() { pictureBox1, pictureBox2, pictureBox3, }; foreach (var pictureBox in pictureBoxes) { pictureBox.ImageUrl = null; pictureBox.Visible = false; } var attachmentsUrl = serviceUrl + fid + "/attachments?f=json"; using (var wc = new System.Net.WebClient()) { using (var stream = wc.OpenRead(attachmentsUrl)) { var serializer = new Newtonsoft.Json.JsonSerializer(); using (var sr = new System.IO.StreamReader(stream)) using (var jsonTextReader = new Newtonsoft.Json.JsonTextReader(sr)) { var response = serializer.Deserialize(jsonTextReader); var infos = response["attachmentInfos"] as Newtonsoft.Json.Linq.JArray; if (infos != null) { foreach (var info in infos) { var contentType = (string)info["contentType"]; if (string.IsNullOrEmpty(contentType) || !contentType.StartsWith("image/")) { continue; } if (pictureBoxes.Count > 0) { var pictureBox = pictureBoxes[0]; pictureBoxes.Remove(pictureBox); var imageUrl = serviceUrl + fid + "/attachments/" + info["id"].ToString(); pictureBox.ImageUrl = imageUrl; pictureBox.Visible = true; } else { break; } } } } } } }
Kommentare
0 Kommentare
Zu diesem Beitrag können keine Kommentare hinterlassen werden.