Delphi-PRAXiS
Seite 3 von 9     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Webservice (https://www.delphipraxis.net/196134-webservice.html)

mkinzler 26. Apr 2018 10:45

AW: Webservice
 
Das war schon immer so und betrifft so ziemlich jedes kommerzielle Produkt. Wer damals Word95 gekauft hat, darf mit dieser Lizenz ja auch kein Office2016 nutzen.

TiGü 26. Apr 2018 10:46

AW: Webservice
 
Zitat:

Zitat von InschenierSB (Beitrag 1400567)
Davon ab, dann muss mein Chef halt ne neue Lizenz kaufen.

Der zieht dir die Ohren lang in Anbetracht der Preise. :-D

InschenierSB 26. Apr 2018 14:03

AW: Webservice
 
Ja nee.... also da muss er durch... Das ist so ähnlich wie wenn ich was handwerkliches mache und habe steinaltes Werkzeug. Das geht vielleicht bis zu einem bestimmten Grad aber dann ist Schluss.
Aber was anderes, wenn ich das WSDL Dokument in die Delphi 2010 Version importiere, sieht es definitiv komplett anders aus als im Delphi 6 :-D
Wie kann ich jetzt die Parameter(4 mal Boolean und 1 String) der Funktion übergeben? Der Typ ist im WSDL-Dokument deklariert. Das ist ja dann in der Main.pas ein undefinierter Bezeichner.
Ich füge mal nur den relevanten Code ein:
Das ist aus dem WSDL-Dokument die deklarierte Funktion.
Delphi-Quellcode:
  // URL      : http://tst-rbg16:8029/Lot.svc
  // ************************************************************************ //
  ILot = interface(IInvokable)
  ['{1E7F22BE-D470-57BE-AF25-CBAC66BA2E10}']
    function GetLotInfoByLotName(const requestMessage: GetLotInfoByLotNameRequest2): GetLotInfoByLotNameResponse2; stdcall;

Weiterhin der Code für die Deklaration von "GetLotInfoByLotNameRequest2"

Delphi-Quellcode:
  // ************************************************************************ //
  GetLotInfoByLotNameRequest2 = class(BaseRequest2)
  private
    FCheckSlotPos: Boolean;
    FCheckSlotPos_Specified: boolean;
    FEquipmentValidation: Boolean;
    FEquipmentValidation_Specified: boolean;
    FLotName: string;
    FLotName_Specified: boolean;
    FReturnBrokenWafers: Boolean;
    FReturnBrokenWafers_Specified: boolean;
    FUseSlotPosition: Boolean;
    FUseSlotPosition_Specified: boolean;

Und in der Main.pas rufe ich nun die Funktion GetLotInfoByLotName auf
und wie übergebe ich nun die Parameter vom Typ GetLotInfoByLotNameRequest2 ??
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  HTTPRIO1.URL:='http://tst-rbg14:8019/Lot.svc';

  sResult:= (HTTPRIO1 as ILot).GetLotInfoByLotName(?????)
end;

TiGü 26. Apr 2018 14:05

AW: Webservice
 
GetLotInfoByLotNameRequest2 ist eine Klasse.
Die kannst du ganz normal erstellen und ihre Properties ausfüllen.

InschenierSB 26. Apr 2018 14:29

AW: Webservice
 
Okay danke aber wo füge ich das genau in die Main.pas ein?! Sorry aber das ist für mich alles noch Neuland. Habe vielleicht vor 2 Wochen mit Delphi angefangen. Vorher nur S7, AWL, und solche Sachen programmiert....:(
Zitat:

Zitat von TiGü (Beitrag 1400601)
GetLotInfoByLotNameRequest2 ist eine Klasse.
Die kannst du ganz normal erstellen und ihre Properties ausfüllen.

Hier der Code aus der Main.pas

Delphi-Quellcode:
unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Soap.InvokeRegistry, Vcl.StdCtrls, Lot_1,
  Soap.Rio, Soap.SOAPHTTPClient;



type

  TForm1 = class(TForm)

    Button1: TButton;
    Request: TMemo;
    Response: TMemo;
    Result: TMemo;
    HTTPRIO1: THTTPRIO;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure HTTPRIO1AfterExecute(const MethodName: string;
      SOAPResponse: TStream);
    procedure HTTPRIO1BeforeExecute(const MethodName: string;
      SOAPRequest: TStream);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
  // GetLotInfoByLotNameRequest2 = class(BaseRequest2);
var
  Form1: TForm1;
  sResult:string;
  CheckSlotPos:boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  HTTPRIO1.URL:='http://tst-rbg14:8019/Lot.svc';

  sResult:= (HTTPRIO1 as ILot).GetLotInfoByLotName()
end;

procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string;
  SOAPResponse: TStream);
begin

      SoapResponse.Position:= 0;
      Response.Lines.LoadFromStream(SoapResponse);
end;

procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string;
  SOAPRequest: TStream);
begin
       SoapRequest.Position:= 0;
       Request.Lines.LoadFromStream(SoapRequest);
end;

end.

TiGü 26. Apr 2018 14:43

AW: Webservice
 
Das heißt, wir müssen auch noch die Grundlagen der Objekt-orientierten Programmierung mit Delphi durchgehen? :shock:
Und der Bedienung von IDE und Debugger? :shock::shock:

Delphi-Quellcode:
unit Main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Soap.InvokeRegistry, Vcl.StdCtrls, Lot_1,
  Soap.Rio, Soap.SOAPHTTPClient;

type

  TForm1 = class(TForm)

    Button1: TButton;
    Request: TMemo;
    Response: TMemo;
    Result: TMemo;
    HTTPRIO1: THTTPRIO;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure HTTPRIO1AfterExecute(const MethodName: string;
      SOAPResponse: TStream);
    procedure HTTPRIO1BeforeExecute(const MethodName: string;
      SOAPRequest: TStream);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FLot: ILot;
  public
    { Public-Deklarationen }
  end;

  // GetLotInfoByLotNameRequest2 = class(BaseRequest2);
var
  Form1: TForm1;
  sResult: string;
  CheckSlotPos: boolean;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var
  URL: string;
  Request: GetLotInfoByLotNameRequest2;
  Response: GetLotInfoByLotNameResponse2; //Oder so ähnlich. Du könntest auch einfach mal alles posten, du Fuchs!
begin
  URL := 'http://tst-rbg14:8019/Lot.svc';
  if not Assigned() then
  begin
    FLot := GetILot(False, URL);
  end;

  Request := GetLotInfoByLotNameRequest2.Create;
  Request.CheckSlotPo := True;
  Request.EquipmentValidation := True;
  Request.LotName := 'BlaBlupp';
  // usw. ich denke das Prinzip ist klar.

  Response := FLot.GetLotInfoByLotName(Request);
  if Assigned(Response) then
  begin
    ShowMessage(Response.IrgendeineTolleEigenschaftDieWirHierJetztNichtKennen);
  end;

end;

//procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string;
//  SOAPResponse: TStream);
//begin
//
//  SOAPResponse.Position := 0;
//  Response.Lines.LoadFromStream(SOAPResponse);
//end;
//
//procedure TForm1.HTTPRIO1BeforeExecute(const MethodName: string;
//  SOAPRequest: TStream);
//begin
//  SOAPRequest.Position := 0;
//  Request.Lines.LoadFromStream(SOAPRequest);
//end;

end.

InschenierSB 26. Apr 2018 15:17

AW: Webservice
 
Liste der Anhänge anzeigen (Anzahl: 2)
Naja ich habe ja auch noch 2 Bücher aus der Bibliothek,
aber naja von heute auf morgen lernt man das nicht.... das ist ja normal.
Ich habe dir mal das WSDL-Dokument und die Main.pas angehangen. Vielleicht kannst du es bei dir mal ausführen....
Danke schon mal.... wobei weiß nicht ob es kompatibel zu deiner Version ist.

InschenierSB 26. Apr 2018 15:24

AW: Webservice
 
Ich denke dass ich es jetzt hinbekomme.
Aber noch eine Frage die Variablen nach dem Request. muss ich schon noch deklarieren, also die ....CheckSlotPos
..EquipmentValidation...
etc.
weil die sind ja sonst unbekannt??!

Request := GetLotInfoByLotNameRequest2.Create;
Request.CheckSlotPo := True;
Request.EquipmentValidation := True;
Request.LotName := 'BlaBlupp';
// usw. ich denke das Prinzip ist klar.

TiGü 26. Apr 2018 16:00

AW: Webservice
 
Wenn du diese Parameter ausfüllen möchtest oder musst, dann musst du die jeweilige Property hinschreiben und natürlich füllen.

TiGü 26. Apr 2018 16:08

AW: Webservice
 
Fang doch mal ganz klein an und baue dir ein Konsolenprogramm.
Tipp: Die Codevervollständigung der Delphi-IDE kannst du aufrufen, indem du den blinkenden Cursor hinter "Request." oder "Response." stellst und dann mit Strg + Leertaste aufrufst.
Dadurch siehst du die sogenannten Properties/Eigenschaften eines Objekts.
Im Response (vom Typ GetLotInfoByLotNameResponse2) sind es 38 Eigenschaften, die du abfragen und auswerten kannst.

Delphi-Quellcode:
program LoT;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  Winapi.Windows,
  Winapi.ActiveX,
  Lot_1 in 'Lot_1.pas';

procedure Main;
var
  LoT: ILot;
  Request: GetLotInfoByLotNameRequest2;
  Response: GetLotInfoByLotNameResponse2;
begin
  LoT := GetILot();
  if Assigned(LoT) then
  begin
    Request := GetLotInfoByLotNameRequest2.Create;
    try
      Request.CheckSlotPos := True;
      Request.EquipmentValidation := True;
      Request.LotName := 'Hier kommt ein String rein';
      Request.ReturnBrokenWafers := True;
      Request.UseSlotPosition := True;
      Request.ToolCode := 'Hier kommt ein String rein';

      Response := LoT.GetLotInfoByLotName(Request);
      if Assigned(Response) then
      begin
        Writeln(Response.Facility);
        Writeln(Response.LotName);
        Writeln(Response.Operation);
        // usw.

        Response.Free;
      end;
    finally
      Request.Free;
    end;
  end;
end;

begin
  try
    CoInitializeEx(nil, 0);
    Main;
    CoUninitialize;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:01 Uhr.
Seite 3 von 9     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz