Benutzer mit den meisten Antworten
URL dynamisch erstellen

Frage
-
Hallo zusammen,
ich möchte eine URL dynamisch zusammenbauen. Eine Beispiel URL:
http://Server:8080/jsp/qv?pri=70964&ar=$(%23STANDARD)\Archiv13&ar=$(%23STANDARD)\Archiv14&q_Kontierung=4711.0815.04
Die 4711.0815.04 ist die Kundennummer, kommt immer ganz zum Schluß dran, kein Problem. Mir bereiten die durchnummerierten Archive Probleme. Die Nummern sollen eigentlich von 02 beginnen bis zum aktuellen Jahr. D.h. nächstes Jahr kommt zu Archiv13 und Archiv14 noch das Archiv15 dazu. Im Jahr 2016 dann Archiv16, und so weiter. Wie kann man das dynamisch erstellen so dass die URL dann dynamisch wächst?
Ich könnte mir vorstellen, mit einem dynamische Array etwas zu erreichen, bisher trete ich noch auf der Stelle. Evtl. kann mir jemand auf die Sprünge helfen. Vielen Dank schon im Voraus.
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren
Antworten
-
Wenn ich dich richtig verstehe, willst du alle Archivnamen von 2013 bis zu jetzigen Jahr generieren, oder? Das geht auch über LINQ:
Dim startYear = 2013
string.Join ist es egal ob es ein IEnumerable(Of T) oder eine List(Of T) bekommt. Der Code erzeugt jetzt (2014) eine Liste mit den Zahlen 13 und 14.
Dim list As IEnumerable(Of Integer) = Enumerable.Range(startYear - 2000, DateTime.Now.Year - startYear + 1)
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Winfried.Sonntag Donnerstag, 28. August 2014 11:52
Alle Antworten
-
Hallo,
grundsätzlich ist ersteinmal wichtig, wie du die Archive verwalten willst. Eine dynamische List(Of T) halte ich erstmal für einen guten Ansatz.
Zunächst brauchst du also eine Liste. Solange die Archivnamen immer gleich aufgebaut sind, reicht es auch aus die Zaheln abzuspeichern:
Dim list As New List(Of Integer) list.Add(13) list.Add(14)
Nun kannst du mit LINQ (Select-Methode) für jedes Archiv den Korrekten Namen ermitteln und mit string.Join mit je einem "&"-Zeichen verknüpfen und am Ende in die URL einfügen:
Dim user = "4711.0815.04" Dim url = String.Format("http://Server:8080/jsp/qv?pri=70964&{0}&q_Kontierung={1}", String.Join("&", list.Select(Function(archive) "ar=$(%23STANDARD)\Archiv" & archive)), user)
Das Ergebnis von meinem code sieht dann so aus, wie das von dir gezeigte Beispiel.
Allerdings bin ich mir nicht sicher, ob der Aufbau der URL so gut gewählt ist. Schließlich kommt der Parameter ar mehrmals vor.
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Am 27.08.2014 schrieb Koopakiller [MVP]:
grundsätzlich ist ersteinmal wichtig, wie du die Archive verwalten willst. Eine dynamische List(Of T) halte ich erstmal für einen guten Ansatz.
Zunächst brauchst du also eine Liste. Solange die Archivnamen immer gleich aufgebaut sind, reicht es auch aus die Zaheln abzuspeichern:Dim list As New List(Of Integer) list.Add(13) list.Add(14)
Krieg ich die Liste nicht dynamisch erstellt? So muss ich ja für die
nächsten 20 oder 30 Jahre die Liste erstellen. Oder hab ich dich
flasch verstanden? Vermutlich ist der Knoten im Kopf bei mir noch
nicht entknotet. ;)Mir ist noch so etwas eingefallen, muss ich morgen testen:
Dim intJahr As Integer = Right(Now.Year, 2) Dim s As Integer = 0 For s = 2 To intJahr Dim str As String = "" str = s.ToString("00") Next MsgBox("Stop")
Str ist dann ausbaufähig. ;)
Nun kannst du mit LINQ (/Select <http://msdn.microsoft.com/de-de/library/bb548891%28v=vs.110%29.aspx>/-Methode <http://msdn.microsoft.com/de-de/library/bb548891%28v=vs.110%29.aspx>) für jedes Archiv den Korrekten Namen ermitteln und mit /string.Join <http://msdn.microsoft.com/de-de/library/dd783876%28v=vs.110%29.aspx>/mit je einem "&"-Zeichen verknüpfen und am Ende in die URL einfügen:
Danke, das werde ich mir morgen auf jeden Fall anschauen. ;)
Dim user = "4711.0815.04" Dim url = String.Format("http://Server:8080/jsp/qv?pri=70964&{0}&q_Kontierung={1}", String.Join("&", list.Select(Function(archive) "ar=$(%23STANDARD)\Archiv" & archive)), user)
Das Ergebnis von meinem code sieht dann so aus, wie das von dir gezeigte Beispiel.
Allerdings bin ich mir nicht sicher, ob der Aufbau der URL so gut gewählt ist. Schließlich kommt der Parameter/ar/ mehrmals vor.Der Aufbau der URL passt schon so, das krieg ich hin. Mir geht es
wirklich nur um das dynamische erstellen von ARCHIV02 + ARCHIV03 und
so weiter.
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren -
Wenn ich dich richtig verstehe, willst du alle Archivnamen von 2013 bis zu jetzigen Jahr generieren, oder? Das geht auch über LINQ:
Dim startYear = 2013
string.Join ist es egal ob es ein IEnumerable(Of T) oder eine List(Of T) bekommt. Der Code erzeugt jetzt (2014) eine Liste mit den Zahlen 13 und 14.
Dim list As IEnumerable(Of Integer) = Enumerable.Range(startYear - 2000, DateTime.Now.Year - startYear + 1)
Tom Lambert - C# MVP
Bitte bewertet- und markiert Beiträge als Antwort. Danke.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Winfried.Sonntag Donnerstag, 28. August 2014 11:52
-
Am 27.08.2014 schrieb Koopakiller [MVP]:
Hallo Tom,Wenn ich dich richtig verstehe, willst du alle Archivnamen von 2013 bis zu jetzigen Jahr generieren, oder? Das geht auch über LINQ:
Dim startYear = 2013 Dim list As IEnumerable(Of Integer) = Enumerable.Range(startYear - 2000, DateTime.Now.Year - startYear + 1)
string.Join ist es egal ob es ein IEnumerable(Of T) oder eine List(Of T) bekommt. Der Code erzeugt jetzt (2014) eine Liste mit den Zahlen 13 und 14.
das werde ich morgen in der früh gleich ausprobieren. ;) BTW: Es geht um die Jahre ab 2002 bis irgendwann.
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren -
Wenn ich dich richtig verstehe, willst du alle Archivnamen von 2013 bis zu jetzigen Jahr generieren, oder? Das geht auch über LINQ:
Dim startYear = 2013
Dim list As IEnumerable(Of Integer) = Enumerable.Range(startYear - 2000, DateTime.Now.Year - startYear + 1)string.Join ist es egal ob es ein IEnumerable(Of T) oder eine List(Of T) bekommt. Der Code erzeugt jetzt (2014) eine Liste mit den Zahlen 13 und 14.
Vielen Dank für diesen Hinweis, funktioniert wie gewünscht. Hier noch der fertige Code:
Dim startYear = 2002 Dim list As IEnumerable(Of Integer) = Enumerable.Range(startYear - 2000, DateTime.Now.Year - startYear + 1) Dim strURL As String = "", strURLBasis As String = "http://Server:8080/jsp/qv?pri=70964&ar=$(%23STANDARD)\ARCHIV&ar=$(%23STANDARD)\ARCHIV" Dim strURLMitte As String = "&ar=$(%23STANDARD)\ARCHIV", strURLKundenNo As String = "&q_KundenNo=" Dim i As Integer = 0 For i = 0 To list.Count() - 1 strURLBasis = strURLBasis + list(i).ToString("00") + strURLMitte Next i strURLBasis = Mid(strURLBasis, 1, Len(strURLBasis) - Len(strURLMitte)) strURL = strURLBasis & strURLKontierung & strKundenNummer Process.Start(strURL)
:)
Servus
Winfried
Gruppenrichtlinien
WSUS Package Publisher
HowTos zum WSUS Package Publisher
NNTP-Bridge für MS-Foren