Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - mssoap Ole-Object "Typkonflikt"


eraser_seb - Mi 02.06.10 16:40
Titel: mssoap Ole-Object "Typkonflikt"
Hi Leute ich will den Reporting Web service vom sql server ansprechen über soap.

Quelltext:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button1Click(Sender: TObject);
var
  soapclient:olevariant;
begin
try
  soapclient := createoleobject('MSSOAP.SoapClient');
  soapclient.mssoapinit('http://strux/reportserver_sqlexpress/ReportService2005.asmx?wsdl');
  soapclient.CreateFolder('/IA_Prov_Reports/YourFolderName','/',null); // <-----Fehlermeldung
except
  on e:exception do
  begin
  memo1.Clear;
  memo1.Lines.Add(e.message);
  memo1.Lines.Add(soapclient.detail);
  end;
end;

Also wenn ich den Button klicke kommt folgende Fehlermeldung.

"Typkonflikt
Client:Type conversion failure for element Properties HRESULT=0x80020005"

Ich denke mal das der dritter Parameter falsch angegebn( mit Null )ist von der createfolder Methode.
In der msdn steht das es ein "Property feld sein soll. Das Beispiel ist aus der MSDn in C#.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
using System;
using System.Web.Services.Protocols;

class Sample
{
   public static void Main()
   {
      ReportingService rs = new ReportingService2005();
      rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

      // Create a custom property for the folder.
      
// ----------Wie sieht das in Delphi aus -------------------
      Property newProp = new Property();
      newProp.Name = "Department";
      newProp.Value = "Finance";
      Property[] props = new Property[1];
      props[0] = newProp;
//---------------------------------------------------------
      string folderName = "Budget";

      try
      {
         rs.CreateFolder(folderName, "/", props);
         Console.WriteLine("Folder created: {0}", folderName);
      }

      catch(SoapException e)
      {
         Console.WriteLine(e.Detail.InnerXml);
      }
   }
}

Ich hoffe mir kann da jemand helfen.

P.S. Ich benutze leider Delphi 5

Moderiert von user profile iconNarses: Titel korrigiert.


eraser_seb - Do 03.06.10 10:39

Niemand eine Idee?


eraser_seb - Fr 04.06.10 13:18
Titel: Soap Reportservices Webservices wsdl
Hi leute.
Ich hoffe von euch kennt sich jemand mit dem Webservices von dem Reportingservices aus.
Ich spreche in so an:

Delphi-Quelltext
1:
2:
3:
4:
soapclient := createoleobject('MSSOAP.SoapClient30');
  soapclient.mssoapinit('http://strux/reportserver_sqlexpress/ReportService2005.asmx?wsdl');

  v := VarArrayCreate([0,1], varvariant);


So jetzt kann ich ja mit funcktionen arbeiten die in der sdl drin stehn. wie zum beispiel:


Delphi-Quelltext
1:
soapclient.CreateFolder('test','/',v);                    


der dritte Parameter der createfolder Procedure muss ein "ArrayofProperty" Typ sein.

Die Frage ist, wie setze ich das in Delphi um?

Weil bis jetzt bekomme ich vom Webservic folgende Fehlermeldung:

<detail><ErrorCode xmlns="http://www.microsoft.com/sql/reportingservices">rsMissingElement</ErrorCode><HttpStatus xmlns="http://www.microsoft.com/sql/reportingservices">400</HttpStatus><Message xmlns="http://www.microsoft.com/sql/reportingservices">

Das erforderliche Feld 'Name' fehlt in der Eingabestruktur.</Message><HelpLink

xmlns="http://www.microsoft.com/sql/reportingservices">http://go.microsoft.com/fwlink/?LinkId=20476&amp;EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&amp;EvtID=rsMissingElement&amp;ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&amp;ProdVer=10.0.1600.22</HelpLink><ProductName xmlns="http://www.microsoft.com/sql/reportingservices">Microsoft SQL Server Reporting Services</ProductName><ProductVersion xmlns="http://www.microsoft.com/sql/reportingservices">10.0.1600.22</ProductVersion><ProductLocaleId xmlns="http://www.microsoft.com/sql/reportingservices">127</ProductLocaleId><OperatingSystem xmlns="http://www.microsoft.com/sql/reportingservices">OsIndependent</OperatingSystem><CountryLocaleId xmlns="http://www.microsoft.com/sql/reportingservices">1031</CountryLocaleId><MoreInformation xmlns="http://www.microsoft.com/sql/reportingservices"><Source>ReportingServicesLibrary</Source><Message msrs:ErrorCode="rsMissingElement" msrs:HelpLink="http://go.microsoft.com/fwlink/?LinkId=20476&amp;EvtSrc=Microsoft.ReportingServices.Diagnostics.Utilities.ErrorStrings&amp;EvtID=rsMissingElement&amp;ProdName=Microsoft%20SQL%20Server%20Reporting%20Services&amp;ProdVer=10.0.1600.22" xmlns:msrs="http://www.microsoft.com/sql/reportingservices">Das erforderliche Feld 'Name' fehlt in der Eingabestruktur.</Message></MoreInformation><Warnings xmlns="http://www.microsoft.com/sql/reportingservices"/></detail>

In der MSDN ist Beispielcode aber halt für VB und c#.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
using System;
using System.Web.Services.Protocols;

class Sample
{
   public static void Main()
   {
      ReportingService rs = new ReportingService2005();
      rs.Credentials = System.Net.CredentialCache.DefaultCredentials;

      // Create a custom property for the folder.
      Property newProp = new Property();
      newProp.Name = "Department";
      newProp.Value = "Finance";
      Property[] props = new Property[1];
      props[0] = newProp;

      string folderName = "Budget";

      try
      {
         rs.CreateFolder(folderName, "/", props);
         Console.WriteLine("Folder created: {0}", folderName);
      }

      catch(SoapException e)
      {
         Console.WriteLine(e.Detail.InnerXml);
      }
   }
}
[cs]

Wäre echt schön wenn mir jemand helfen kann.

Danke schonmal