Übergabe Objekt inkl. Inhalte

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von chrwie76.

    Übergabe Objekt inkl. Inhalte

    Hallo zusammen,
    ich sitze schon seit ein paar Tagen an einem Problem und ich komme leider nicht weiter.

    Deshalb wende ich mich an Euch und habe die Hoffnung so an die Lösung des Problems zu kommen.In einem Projekt möchte ich über SOAP gewisse Aktionen durchführen.
    Dazu habe ich ein Datenverweis in Projekt erstellt. Erste Tests waren soweit erfolgreich, so dass ich auf die einfachen Methoden und Inhalte zugreifen kann.
    Das Problem sind die schreibenden Methoden, insbesondere die Übergabe der erforderlichen Parameter an die Klasse, bereiten mir Schwierigkeiten, die ich im Moment nicht mit meinen VB-Kenntnissen lösen kann.

    Das ist der Code:

    VB.NET-Quellcode

    1. Dim request As WindowsApplication1.ServiceReference1.RemoteDataMapping = New WindowsApplication1.ServiceReference1.RemoteDataMapping
    2. request.ExternalKey = "Test"
    3. request.InternalId = 3855
    4. request.ProjectId = 212
    5. request.Primary = True
    6. client.DataMapping_AddArtifactMappings(5, 4, request)


    ich bekomme hier die folgende Fehlermeldung für die Var "request"

    Quellcode

    1. "WindowsApplication1.ServiceReference1.RemoteDataMapping" kann nicht in "1-dimensionales Array von WindowsApplication1.ServiceReference1.RemoteDataMapping" konvertiert werden.


    Ich glaube, dass ich das Objekt nicht richtig übergebe, weil ich diesen falsch initialisiert habe.
    Leider kann mir der Hersteller auch nicht helfen, weil er sich wiederum nicht mir VB auskennt :(

    Für eure Hilfe vielen Dank voraus.

    Viele Grüße, Chris
    @chrwie76 Willkommen im Forum. :thumbup:
    Wie ist RemoteDataMapping deklariert? Klasse oder Struktur?
    Welche Parameter (insbesondere Parameter 3) erwartet DataMapping_AddArtifactMappings? eine RemoteDataMapping-Instanz oder ein Array von RemoteDataMapping-Instanzen?
    Wenn es ein Array ist, musst Du auch ein Array übergeben, auch wenn da nur ein Element drin ist:

    VB.NET-Quellcode

    1. Dim request() As WindowsApplication1.ServiceReference1.RemoteDataMapping = New WindowsApplication1.ServiceReference1.RemoteDataMapping(1) {}
    2. request(0).ExternalKey = "Test"
    3. request(0).InternalId = 3855
    4. request(0).ProjectId = 212
    5. request(0).Primary = True
    6. client.DataMapping_AddArtifactMappings(5, 4, request)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo,
    vielen Dank für die Aufnahme und die schnelle Antwort!

    Leider bekomme ich schon bei der Zuweisung des ersten Parameters einen Fehler Nr. 91.

    Quellcode

    1. ​request(0).ExternalKey = "Test"


    Soweit ich das erkennen kann, ist es eine Klasse:

    Quellcode

    1. Partial Public Class RemoteDataMapping
    2. Inherits Object
    3. Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged
    4. <System.NonSerializedAttribute()> _
    5. Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject
    6. <System.Runtime.Serialization.OptionalFieldAttribute()> _
    7. Private ExternalKeyField As String
    8. <System.Runtime.Serialization.OptionalFieldAttribute()> _
    9. Private InternalIdField As Integer
    10. <System.Runtime.Serialization.OptionalFieldAttribute()> _
    11. Private PrimaryField As Boolean
    12. <System.Runtime.Serialization.OptionalFieldAttribute()> _
    13. Private ProjectIdField As System.Nullable(Of Integer)
    14. ......


    Viele Grüße, Chirs

    chrwie76 schrieb:

    Leider bekomme ich schon bei der Zuweisung des ersten Parameters einen Fehler Nr. 91.
    :?:
    Bitte immer die originale Fehlermeldung posten!

    chrwie76 schrieb:

    VB.NET-Quellcode

    1. request(0).ExternalKey = "Test"
    Funktioniert in meiner Nachempfindung.
    Also haben wir verschiedene Deklarationen für request.
    Was für Parameter erwartet die Prozedur DataMapping_AddArtifactMappings(...)?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi,

    so sieht die Sub aus.

    Quellcode

    1. Public Sub DataMapping_AddArtifactMappings(ByVal dataSyncSystemId As Integer, ByVal artifactTypeId As Integer, ByVal remoteDataMappings() As ServiceReference1.RemoteDataMapping) Implements ServiceReference1.ISoapService.DataMapping_AddArtifactMappings
    2. MyBase.Channel.DataMapping_AddArtifactMappings(dataSyncSystemId, artifactTypeId, remoteDataMappings)
    3. End Sub


    Hier noch der Datenverweis:
    api.inflectra.com/Spira/Services/v5_0/SoapService.svc?wsdl


    Viele Grüße
    @chrwie76 Sorry, mein Fehler. :whistling:

    VB.NET-Quellcode

    1. Dim request() As WindowsApplication1.ServiceReference1.RemoteDataMapping = New WindowsApplication1.ServiceReference1.RemoteDataMapping(1) {}
    2. Dim requestX As WindowsApplication1.ServiceReference1.RemoteDataMapping = New WindowsApplication1.ServiceReference1.RemoteDataMapping
    3. requestX.ExternalKey = "Test"
    4. requestX.InternalId = 3855
    5. requestX.ProjectId = 212
    6. requestX.Primary = True
    7. request(0) = requestX
    8. client.DataMapping_AddArtifactMappings(5, 4, request)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Super Danke!
    Das hat geholfen! :)

    Allerdings darf ich nur ein Element übergeben, daher die Korrektur auf 0.

    Quellcode

    1. Dim request() As WindowsApplication1.ServiceReference1.RemoteDataMapping = New WindowsApplication1.ServiceReference1.RemoteDataMapping(0) {}
    2. Dim requestX As WindowsApplication1.ServiceReference1.RemoteDataMapping = New WindowsApplication1.ServiceReference1.RemoteDataMapping
    3. requestX.ExternalKey = "Test"
    4. requestX.InternalId = 3855
    5. requestX.ProjectId = 212
    6. requestX.Primary = True
    7. request(0) = requestX
    8. client.DataMapping_AddArtifactMappings(5, 4, request)

    chrwie76 schrieb:

    daher die Korrektur auf 0.
    Korrekt. :thumbup:
    Ich denke in C#, da wäre die 1 richtig.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vereinfachung:

    VB.NET-Quellcode

    1. Dim request = New WindowsApplication1.ServiceReference1.RemoteDataMapping
    2. request.ExternalKey = "Test"
    3. request.InternalId = 3855
    4. request.ProjectId = 212
    5. request.Primary = True
    6. client.DataMapping_AddArtifactMappings(5, 4, {request})
    Hier wird erst in der letzten Zeile das Array gebildet, einfach durch {request}

    oder noch einfacher:

    VB.NET-Quellcode

    1. Dim request = New WindowsApplication1.ServiceReference1.RemoteDataMapping With {
    2. .ExternalKey = "Test", .InternalId = 3855, .ProjectId = 212, .Primary = True }
    3. client.DataMapping_AddArtifactMappings(5, 4, {request})