Announcement

Collapse
No announcement yet.

Frage zu ArrayOfChoice1 / ReportingServices2005Soap

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frage zu ArrayOfChoice1 / ReportingServices2005Soap

    Hallo allerseits,

    Ich habe eine Frage zur Verwendung der ReportingServices2005 mit Delphi 7.
    Ich bin da zwar schon ein Stück weit gekommen, scheitere aber jetzt beim
    Auslesen von SubscriptionProperties mittels GetSubscriptionProperties.

    Obwohl der Aufruf mit Erfolg ausgeführt wird und alle Ausgabeparameter gefüllt zu sein scheinen, wird jedoch offenbar nur ein Parameter in den ParameterValues des Ausgabeparameters "ExtensionSettings" gefüllt.

    Ich habe Code-Beispiele (C# etc.) gefunden, in welchen der Zugriff zu ExtensionSettings.ParameterValues über einen Cast auf eine Variable vom Typ ArrayOfParameterValueOrFieldReference erfolgt - das führt aber auch nicht weiter.

    Hat jemand schon einmal so etwas erfolgreich programmiert...? Für Hinweise und Ideen bin ich dankbar!

    Viele Grüße,
    tAgedObject
    Zuletzt editiert von tAgedObject; 07.07.2009, 12:53. Reason: Solved
    darkness is a state of mind

  • #2
    [HowTo] Delphi7 & ReportingService2005Soap & GetSubscriptionProperties

    Hallo allerseits,

    Hier die Auflösung des Rätsels - jedenfalls ein funktionierender Workaround :

    Nachdem ich mir das zurückkommende XML mal angeschaut habe (sehr zu empfehlen ist tHttpRio.OnAfterExecute), habe ich ein wenig mit dem WSDL herumgespielt und daraufhin aus der Definition der Klasse ExtensionSettings eine zweite Klasse generieren können wie folgt:

    ExtensionSettings2 = class(TRemotable)
    private
    FExtension: WideString;
    FParameterValues: ArrayOfParameterValue;
    public
    destructor Destroy; override;
    published
    property Extension: WideString read FExtension write FExtension;
    property ParameterValues: ArrayOfParameterValue read FParameterValues write FParameterValues;
    end;
    ...
    destructor ExtensionSettings2.Destroy;
    var
    I: Integer;
    begin
    for I := 0 to Length(FParameterValues)-1 do
    if Assigned(FParameterValues[I]) then
    FParameterValues[I].Free;
    SetLength(FParameterValues, 0);
    inherited Destroy;
    end;



    In der Deklaration von GetSubscriptionProperties habe ich dann einfach den Typ von "out ExtensionSettings" mit ExtensionSettings2 angegeben und schon habe ich ein sinnvoll nutzbares Array der Parameter des Abos bekommen :


    procedure GetSubscriptionProperties(const SubscriptionID: WideString; out Owner: WideString; out ExtensionSettings: ExtensionSettings2; out Description: WideString; out Active: ActiveState; out Status: WideString; out EventType: WideString; out MatchData: WideString; out Parameters: ArrayOfParameterValue); stdcall;


    Ich hoffe, daß dies auch anderen Leuten hilft -
    viele Grüße
    tAgedObject
    darkness is a state of mind

    Comment


    • #3
      [HowTo] Delphi7 & ReportingService2005Soap & createSubscription

      Hallo Allerseits!

      Naja, der Weg war zwar der richtige, aber ich habe ihn wohl zu früh verlassen ;-)

      Beim Anlegen oder Speichern einer Subscription hat man natürlich das Problem,
      daß der Server den Datentyp ExtensionSettings2 nicht kennt. Also habe ich mir noch mal die importierte Unit angesehen und mich mutig entschlossen, einfach ExtensionSettings auszukommentieren und meine Definition von ExtensionSettings2 unter dem Namen ExtensionSettings laufen zu lassen.

      Damit konnte ich dann auch erfolgreich createSubscription (Anlegen) und SetSubscriptionProperties (Zurückspeichern) aufrufen.

      Hier noch mal der Code

      ExtensionSettings = class(TRemotable)
      private
      FExtension: WideString;
      FParameterValues: ArrayOfParameterValue;
      public
      destructor Destroy; override;
      published
      property Extension: WideString read FExtension write FExtension;
      property ParameterValues: ArrayOfParameterValue read FParameterValues write FParameterValues;
      end;

      destructor ExtensionSettings.Destroy;
      var
      I: Integer;
      begin
      for I := 0 to Length(FParameterValues)-1 do
      if Assigned(FParameterValues[I]) then
      FParameterValues[I].Free;
      SetLength(FParameterValues, 0);
      inherited Destroy;
      end;


      Viele Grüße,
      tAgedObject
      darkness is a state of mind

      Comment

      Working...
      X