wysyłam dane do serwera SOAP
wszystkie funkcje wygenerowało mi automatycznie z tego adresu//ta.inpzu.pl/afi-websrv-dystr-prod/services/ppk-soap/API?wsdl
Na zdarzeniu myHTTPRIOAfterExecute mogę przechwycić response,
mój response:
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
<soap:Header>
<ns2:PPK_HEADER xmlns:ns2="http://pekaofs.com.pl/ppk/api/2.2">
<ID_PRZEKAZU>583c1ffe4f3379764493f3b44effddd5cb</ID_PRZEKAZU>
<API_KLIENT/>
<WERSJA>1.0</WERSJA>
<GENERACJA>2020-09-22T11:51:07.468</GENERACJA>
<ID_TFI>PZU</ID_TFI>
<TRYB_TESTOWY>0</TRYB_TESTOWY>
</ns2:PPK_HEADER>
</soap:Header>
<soap:Body>
<ns2:ODP_REJESTRACJA_PPK xmlns:ns2="http://pekaofs.com.pl/ppk/api/2.2">
<REZULTAT>
<STATUS>BLAD</STATUS>
<BLEDY>
<BLAD>
<RODZAJ>BLAD_DANYCH</RODZAJ>
<OPIS>PPK_EXIST_KLI</OPIS>
<ZNACZNIK>00WVAHYS</ZNACZNIK>
</BLAD>
</BLEDY>
</REZULTAT>
<STATUSY>
<ODP_UCZESTNIK>
<ID_KADRY>23</ID_KADRY>
<IMIE>ABDUL</IMIE>
<IMIE_2>ALLAH</IMIE_2>
<NAZWISKO>OBCOKRAJOWIEC</NAZWISKO>
<PLEC>M</PLEC>
<OBYW>AQ</OBYW>
<NR_PESEL>61031379158</NR_PESEL>
<REZULTAT>
<STATUS>BLAD</STATUS>
<BLEDY>
<BLAD>
<RODZAJ>BLAD_DANYCH</RODZAJ>
<OPIS>PPK_EXIST_KLI</OPIS>
<ZNACZNIK>00WVAHYS</ZNACZNIK>
</BLAD>
</BLEDY>
</REZULTAT>
</ODP_UCZESTNIK>
</STATUSY>
</ns2:ODP_REJESTRACJA_PPK>
</soap:Body>
</soap:Envelope>
ale jako wynik funkcji która wysyła moje dane do serwera zawsze dostaję nil
Bo teraz robię to tak:
var ppkHeader : PPK_HEADER;
rejestracjaPPK: ZADANIE_REJESTRACJA_PPK;
odpRejestracjaPPK: ODP_REJESTRACJA_PPK;
dane_pracodawcy : PRACODAWCA;
begin
inherited;
dane_pracodawcy := EksportPPK_SOAP.pracodawca.Create();
dane_pracodawcy.NIP := OnlyDigits(DM.FirmTNIP.AsString);
dane_pracodawcy.REGON := OnlyDigits(DM.FirmTRegon.AsString);
dane_pracodawcy.KONTAKT := DM.FirmTImiosreprez.AsString + ' ' + DM.FirmTNazwiskoosreprez.AsString;
ppkHeader := EksportPPK_SOAP.PPK_HEADER.Create();
ppkHeader.ID_PRZEKAZU := '583c1ffe4f3379764493f3b44effddd5cb';
ppkHeader.WERSJA := '1.0';
ppkHeader.GENERACJA := FormatDateTime('YYYY-MM-DD',Date()) + 'T' + FormatDateTime('hh:nn:ss',Time());
ppkHeader.ID_TFI := 'PZU';
ppkHeader.TRYB_TESTOWY := 0;
try
rejestracjaPPK := ZADANIE_REJESTRACJA_PPK.Create();
rejestracjaPPK.DANE_UCZESTNIKA := tablica_dane_pracownikow_rejestracja;
rejestracjaPPK.PRACODAWCA := dane_pracodawcy;
// odpRejestracjaPPK := ODP_REJESTRACJA_PPK.Create();
odpRejestracjaPPK := GetPPKService(False,'',nil).ZADANIE_REJESTRACJA_PPK(rejestracjaPPK,ppkHeader);
//tutaj odpRejestracjaPPK jest zawsze nil
if Assigned(odpRejestracjaPPK) then
begin
case odpRejestracjaPPK.REZULTAT.STATUS of
STATUS_REZULTATU.OK : InfoMsg('Eksport pracownikow wykonany poprawnie');
STATUS_REZULTATU.BLAD : ErrorMsg('W eksporcie pracownikow PPK wystąpiły błędy');
end;
end;
finally
SetLength(tablica_dane_pracownikow_rejestracja,0);
rejestracjaPPK.DisposeOf;
end;
end;
Czy zmienna odpRejestracjaPPK będzie tworzona wcześniej czy nie to niczego nie zmienia.
Ale kilka godzin debugowania dorowadziło mnie do procedury** TOPToSoapDomConvert.ProcessSuccess**. Tam w kilku miejscach jest wywoływana procedura ConvertSoapToNativeData.
Gdy do niej wejdzie to wtedy zwraca wynik prawidłowo. Problem w tym, że zawsze jakiś warunek mam nie spełniony i nigdy tam nie wchodzi.
Za pierwszym razem jest taki warunek:
UnboundedArrayRet := (MD.ResultInfo <> nil) and (MD.ResultInfo.Kind = tkDynArray) and
(((IS_UNBD and XMLOptions) = IS_UNBD) or (xoInlineArrays in RemClassRegistry.SerializeOptions(MD.ResultInfo)));
Nie spełniony bo u mnie MD.ResultInfo.Kind jest typu class
Zaraz poniżej jest zmienna RetIndex = -1. A -1 ponieważ zmienna ReturnName jest pusta. A ona się bierze z procedury InvRegistry.GetMethodInfo a ta nic nie zwraca, poniważ jest tam taka pętla for J := 0 to Length(FRegIntfs[I].Methods) -1 do do której nie wchodzi (brak metod?)
W reszcie trzecie miejsce gdzie możę tam wejść, ale tam porównuje najpierw RejestracjaPPK = REZULTAT a później PPK_HEADER = REZULTAT
Ale w tym miejscu jest ciekawe, ponieważ MD.ParamCount = 2 ale jak rozwinąć params to jest tam rejestracjaPPK, PPK_HEADER (czyli moje dwa parametry wejściowe) oraz 3 pusty parametr nil. Może tutaj brakuje tego co powinno się zwrócić?
I od razu podam, że ta procedura wysyłająca ZADANIE_REJESTRACJA_PPK ma 2 i tylko 2 parametry - próbowałem podstawić tam trzeci ale tak już się nie kompiluje.
Napiszcie jeśli potrzeba więcej informacji.
Pomóżcie, bo dwa dni kombinowania i googlowania nie przyniosły rozwiązania.