Index: VerpakkingsDefinitie/WS/ProductsAgent.pas =================================================================== diff -u -r562 -r563 --- VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 562) +++ VerpakkingsDefinitie/WS/ProductsAgent.pas (.../ProductsAgent.pas) (revision 563) @@ -18,15 +18,20 @@ FSelectServerSoap: SelectService.ProdSelectServerSoap; FOptiBoxServerSoap: OptiServerService.OptiBoxServerSoap; function GeefBruikbareLijnenUitXMLDataSet(DataSetXml: string): TStringList; - procedure RegistreerZoekResultaten(ProductsContext: TProductsContext; DataSet: string); + procedure RegistreerZoekResultaten(ProductsContext: TProductsContext; DataSet: string); overload; procedure RegistreerMislukteOpzoeking(ProductsContext: TProductsContext; pxStatusObj: SelectService.pxStatus); overload; - procedure RegistreerMislukteOpzoeking(ProductsContext: TProductsContext; pxStatusObj: OptiServerService.pxStatus); overload; - function GetBoxDataIDsViaProduct(ProductNr: Integer; UserContext: TUserContext): GetBoxDataIDsViaProductResponse; + procedure RegistreerZoekResultaten(ProductDetailContext: TProductDetailContext; + pxBoxDataObj: OptiServerService.pxBoxData); overload; + procedure RegistreerMislukteOpzoeking(ProductDetailContext: TProductDetailContext; + pxStatusObj: OptiServerService.pxStatus); overload; + function GetBoxDataIDsViaProduct(ProductNr: Integer; UserContext: TUserContext; + ProductDetailContext: TProductDetailContext): string; public Constructor Create(); procedure ZoekOpMetKortTekst(Zoek: string; KLNr: string; At: string; UserContext: TUserContext; ProductsContext: TProductsContext); - procedure ZoekProductDataMetProductNr(ProductNr: Integer; UserContext: TUserContext; ProductsContext: TProductsContext); + procedure ZoekProductDataMetProductNr(ProductNr: Integer; UserContext: TUserContext; + ProductDetailContext: TProductDetailContext); end; implementation @@ -164,9 +169,16 @@ ProductsContext.NotifyChanged(); end; -function TProductsAgent.GetBoxDataIDsViaProduct(ProductNr: Integer; UserContext: TUserContext): GetBoxDataIDsViaProductResponse; +function TProductsAgent.GetBoxDataIDsViaProduct(ProductNr: Integer; UserContext: TUserContext; + ProductDetailContext: TProductDetailContext): string; var ZoekData: OptiServerService.GetBoxDataIDsViaProduct; + GetBoxDataIDsViaProductResponseObj: OptiServerService.GetBoxDataIDsViaProductResponse; + TempStr: string; + Lijn: string; + Lijnen: TStringList; + LijnenBoxDataID: TStringList; + XMLDoc: IXMLDocument; begin ZoekData := nil; try @@ -175,71 +187,99 @@ ZoekData.SessionKey := UserContext.SessionKey; ZoekData.ProductNr := ProductNr; - Result := FOptiBoxServerSoap.GetBoxDataIDsViaProduct(ZoekData); + GetBoxDataIDsViaProductResponseObj := FOptiBoxServerSoap.GetBoxDataIDsViaProduct(ZoekData); + + // Response + if GetBoxDataIDsViaProductResponseObj.GetBoxDataIDsViaProductResult <> nil then + // Mislukt + RegistreerMislukteOpzoeking(ProductDetailContext, GetBoxDataIDsViaProductResponseObj.GetBoxDataIDsViaProductResult); + + // Bruikbare informatie uit antwoord halen + + // Producten inladen + LijnenBoxDataID := TStringList.Create; + Lijnen := GeefBruikbareLijnenUitXMLDataSet(GetBoxDataIDsViaProductResponseObj.varDataSet); + try + // 'GetBoxDataIDsViaObjTypeAndRef' element overlopen en mappen naar een instantie. + for Lijn in Lijnen do + begin + LijnenBoxDataID.Add(Lijn); + if ContainsStr(Lijn, '') then + begin + // Er zit een volledig item in de lijst + TempStr := LijnenBoxDataID.Text; + XMLDoc := LoadXMLData(TempStr); // XML document van maken + // Elementen uit XML laden. + Result := XMLDoc.DocumentElement.ChildValues['ID']; + end; + end; + finally + Lijnen.Free(); + LijnenBoxDataID.Free(); + end; finally ZoekData.Free(); end; end; procedure TProductsAgent.ZoekProductDataMetProductNr(ProductNr: Integer; UserContext: TUserContext; - ProductsContext: TProductsContext); + ProductDetailContext: TProductDetailContext); var - GetBoxDataIDsViaProductResponseObj: OptiServerService.GetBoxDataIDsViaProductResponse; - TempStr: string; - Lijn: string; - Lijnen: TStringList; - LijnenBoxDataID: TStringList; - XMLDoc: IXMLDocument; + ZoekData: OptiServerService.GetBoxDataViaId; BoxDataID: string; + GetBoxDataViaIDResponseObj: GetBoxDataViaIDResponse; begin - GetBoxDataIDsViaProductResponseObj := GetBoxDataIDsViaProduct(ProductNr, UserContext); + BoxDataID := GetBoxDataIDsViaProduct(ProductNr, UserContext, ProductDetailContext); + // Controleren dat er resultaat was + if BoxDataID = '' then + raise Exception.Create('Er is geen Box ID gevonden.'); + // Request + // Met ID, box data opvragen + ZoekData := nil; + try + ZoekData := OptiServerService.GetBoxDataViaId.Create(); + ZoekData.SessionKey := UserContext.SessionKey; + ZoekData.BoxDataID := BoxDataID; - // Response - if GetBoxDataIDsViaProductResponseObj.GetBoxDataIDsViaProductResult <> nil then - // Mislukt - RegistreerMislukteOpzoeking(ProductsContext, GetBoxDataIDsViaProductResponseObj.GetBoxDataIDsViaProductResult); + GetBoxDataViaIDResponseObj := FOptiBoxServerSoap.GetBoxDataViaId(ZoekData); - // Bruikbare informatie uit antwoord halen - - // Producten inladen - LijnenBoxDataID := TStringList.Create; - Lijnen := GeefBruikbareLijnenUitXMLDataSet(GetBoxDataIDsViaProductResponseObj.varDataSet); - try - // 'GetBoxDataIDsViaObjTypeAndRef' element overlopen en mappen naar een instantie. - for Lijn in Lijnen do + // Response + if GetBoxDataViaIDResponseObj.GetBoxDataViaIDResult = nil then begin - LijnenBoxDataID.Add(Lijn); - if ContainsStr(Lijn, '') then - begin - // Er zit een volledig item in de lijst - TempStr := LijnenBoxDataID.Text; - XMLDoc := LoadXMLData(TempStr); // XML document van maken - // Elementen uit XML laden. - BoxDataID := XMLDoc.DocumentElement.ChildValues['ID']; - end; + // Gelukt + RegistreerZoekResultaten(ProductDetailContext, GetBoxDataViaIDResponseObj.varBoxData); + end + else + begin + // Mislukt + RegistreerMislukteOpzoeking(ProductDetailContext, GetBoxDataViaIDResponseObj.GetBoxDataViaIDResult); end; finally - Lijnen.Free(); - LijnenBoxDataID.Free(); + ZoekData.Free(); end; +end; - // Controleren dat er resultaat was - if BoxDataID = '' then - raise Exception.Create('Er is geen Box ID gevonden.'); +procedure TProductsAgent.RegistreerZoekResultaten(ProductDetailContext: TProductDetailContext; + pxBoxDataObj: OptiServerService.pxBoxData); +begin + // Andere velden juist zetten + ProductDetailContext.IsOK := True; + ProductDetailContext.ErrorMessage := ''; + ProductDetailContext.InternalErrorMessage := ''; - // Met ID box data opvragen - + ProductDetailContext.ProductDetailInformatie := pxBoxDataObj; end; -procedure TProductsAgent.RegistreerMislukteOpzoeking(ProductsContext: TProductsContext; pxStatusObj: OptiServerService.pxStatus); +procedure TProductsAgent.RegistreerMislukteOpzoeking(ProductDetailContext: TProductDetailContext; + pxStatusObj: OptiServerService.pxStatus); begin - { TODO : ProductDetail leegmaken } + ProductDetailContext.ProductDetailInformatie := nil; - ProductsContext.IsOK := pxStatusObj.IsOK; - ProductsContext.ErrorMessage := pxStatusObj.Message_; - ProductsContext.InternalErrorMessage := pxStatusObj.InternalMessage; + ProductDetailContext.IsOK := pxStatusObj.IsOK; + ProductDetailContext.ErrorMessage := pxStatusObj.Message_; + ProductDetailContext.InternalErrorMessage := pxStatusObj.InternalMessage; - ProductsContext.NotifyChanged(); + ProductDetailContext.NotifyChanged(); end; end.