none
URL dynamisch erstellen RRS feed

  • 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

    Mittwoch, 27. August 2014 15:02

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
    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.


    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

    Mittwoch, 27. August 2014 17:53
    Moderator

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

    Mittwoch, 27. August 2014 16:40
    Moderator
  • 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

    Mittwoch, 27. August 2014 17:21
  • 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.


    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

    Mittwoch, 27. August 2014 17:53
    Moderator
  • 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

    Mittwoch, 27. August 2014 21:14
  • 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

    Donnerstag, 28. August 2014 11:58