Mehrere SOAP Call Filter

Malaxo

Erfahrenes Mitglied
Hey Leute

Ich bin ziemlich neu mit SOAP unterwegs.
Jetzt habe ich ein SOAP Call "GetSHABRefsByDate" -> liefert alle Daten zu einem Stichtag. Funktioniert.
Nun ist die Liste endlos. ca. 1000 Einträge.

Hier mal die Antwort von zwei Einträgen aus dem Array (Testauszug keine Livedaten):
Code:
array(1023) {
      [0]=>
      object(stdClass)#4 (3) {
        ["metaInfo"]=>
        object(stdClass)#5 (9) {
          ["shabDate"]=>
          string(10) "2010-11-23"
          ["shabNr"]=>
          string(3) "228"
          ["shabPage"]=>
          string(2) "18"
          ["shabId"]=>
          string(7) "5905824"
          ["shabMutationStatus"]=>
          int(0)
          ["registryOfficeId"]=>
          int(440)
          ["registryOfficeCanton"]=>
          string(2) "TG"
          ["registryOfficeJournalId"]=>
          string(4) "4964"
          ["registryOfficeJournalDate"]=>
          string(10) "2010-11-17"
        }
        ["firmAct"]=>
        object(stdClass)#6 (1) {
          ["HR.FIRM.ACT"]=>
          object(stdClass)#7 (1) {
            ["REPRES.CHANGED"]=>
            string(0) ""
          }
        }
        ["companyInfo"]=>
        object(stdClass)#8 (9) {
          ["name"]=>
          string(25) "ABS Sicherheitstechnik AG"
          ["chid"]=>
          string(13) "CH44030011052"
          ["ehraid"]=>
          int(577)
          ["uid"]=>
          int(106011008)
          ["legalSeatId"]=>
          int(4566)
          ["legalSeat"]=>
          string(10) "Frauenfeld"
          ["registerOfficeId"]=>
          int(440)
          ["legalform"]=>
          object(stdClass)#9 (3) {
            ["legalFormId"]=>
            int(3)
            ["legalFormUid"]=>
            string(4) "0106"
            ["legalFormName"]=>
            array(4) {
              [0]=>
              object(stdClass)#10 (2) {
                ["_"]=>
                string(18) "Aktiengesellschaft"
                ["lang"]=>
                string(2) "de"
              }
              [1]=>
              object(stdClass)#11 (2) {
                ["_"]=>
                string(17) "Société anonyme"
                ["lang"]=>
                string(2) "fr"
              }
              [2]=>
              object(stdClass)#12 (2) {
                ["_"]=>
                string(16) "Società anonima"
                ["lang"]=>
                string(2) "it"
              }
              [3]=>
              object(stdClass)#13 (2) {
                ["_"]=>
                string(7) "Limited"
                ["lang"]=>
                string(2) "en"
              }
            }
          }
          ["status"]=>
          string(6) "active"
        }
      }
      [1]=>
      object(stdClass)#14 (3) {
        ["metaInfo"]=>
        object(stdClass)#15 (9) {
          ["shabDate"]=>
          string(10) "2010-11-23"
          ["shabNr"]=>
          string(3) "228"
          ["shabPage"]=>
          string(2) "18"
          ["shabId"]=>
          string(7) "5905826"
          ["shabMutationStatus"]=>
          int(0)
          ["registryOfficeId"]=>
          int(440)
          ["registryOfficeCanton"]=>
          string(2) "TG"
          ["registryOfficeJournalId"]=>
          string(4) "4965"
          ["registryOfficeJournalDate"]=>
          string(10) "2010-11-17"
        }
        ["firmAct"]=>
        object(stdClass)#16 (1) {
          ["HR.FIRM.ACT"]=>
          object(stdClass)#17 (1) {
            ["REPRES.CHANGED"]=>
            string(0) ""
          }
        }
        ["companyInfo"]=>
        object(stdClass)#18 (9) {
          ["name"]=>
          string(11) "Aequator AG"
          ["chid"]=>
          string(13) "CH44030052922"
          ["ehraid"]=>
          int(1886)
          ["uid"]=>
          int(107066331)
          ["legalSeatId"]=>
          int(4401)
          ["legalSeat"]=>
          string(5) "Arbon"
          ["registerOfficeId"]=>
          int(440)
          ["legalform"]=>
          object(stdClass)#19 (3) {
            ["legalFormId"]=>
            int(3)
            ["legalFormUid"]=>
            string(4) "0106"
            ["legalFormName"]=>
            array(4) {
              [0]=>
              object(stdClass)#20 (2) {
                ["_"]=>
                string(18) "Aktiengesellschaft"
                ["lang"]=>
                string(2) "de"
              }
              [1]=>
              object(stdClass)#21 (2) {
                ["_"]=>
                string(17) "Société anonyme"
                ["lang"]=>
                string(2) "fr"
              }
              [2]=>
              object(stdClass)#22 (2) {
                ["_"]=>
                string(16) "Società anonima"
                ["lang"]=>
                string(2) "it"
              }
              [3]=>
              object(stdClass)#23 (2) {
                ["_"]=>
                string(7) "Limited"
                ["lang"]=>
                string(2) "en"
              }
            }
          }
          ["status"]=>
          string(6) "active"
        }
      }

Nun möchte ich einen Filter setzen. z.B. ich möchte nur Einträge mit "registryOfficeCanton" aus TG. Wie mache ich das?
In der SOAP Funktion kann ich nur den Parameter des aktuellen Datum mitgeben. Sonst nichts filtern. Das dauert auch ziemlich lange, aber das ist jetzt mal zweitrangig. Muss ich das im PHP selbst machen und durch das Array iterieren oder kann ich das SOAP Response filtern?
 
Ich kenne mich it SOAP nicht aus. Dafür mit Arrays

etwa so sollte es gehen.
PHP:
//$arrayAllCantons ist in dem Fall dein Array vom Beispiel
$canton = 'TG'
$arrayTg = array_filter($arrayAllCantons, create_function('$obj', "return \$obj->metaInfo->registryOfficeCanton='{$canton}';"))
 
Hast du eine WSDL, die du posten kannst? Währe ja möglich, dass man dem Service-Call auch Parameter mitgeben kann.
 
Naja, dass ist "nur" die Dokumentation. Die WSDL wäre schon besser. Dokumentation kann unvollständig sein. Außerdem sind die Rückgabetypen zwar erwähnt aber nicht dokumentiert. Die WSDL würde hier auch genauere Informationen geben. In der Doku ist erwähnt, dass die WSDL aufgrund des Umfangs nicht eingefügt wurde. Es ist auch nicht dokumentiert, wo die WSDL abgerufen werden kann. Sieht nach einem proprietären Produkt aus.
 
Hey Yaslaw, wenn ich es mit deinem filter_array versuche, macht es mir überall einfach ein TG rein. Es überschreibt das andere einfach. z.B. aus BL wird einfach TG.
 
Hallo Malaxo

Ich habe keine Ahnung von php, aber ich denke es müsste so sein:
PHP:
$canton = 'TG'
$arrayTg = array_filter($arrayAllCantons, create_function('$obj', "return \$obj->metaInfo->registryOfficeCanton=='{$canton}';"))
 
oh, Cromon... das stimmt natürlich. Danke! Hab das fehlende = nicht bemerkt. So klappt es!

Wenn jetzt Saftmeister noch eine SOAP Lösung hat, wäre gut, ansonsten Danke für eure Hilfe
 

Neue Beiträge

Zurück