UserValues abfragen über RpcItems.GetList

  • Hi,


    ich würde gerne über die RPC Schnittstelle, alle Kontakte abholen die vorhanden sind. Dabei interessiert mich nur das Subject und die Werte im Benutzerdefinierten Feld. Ich hab bereits ne Abfrage gebaut, aber bekomme da leider immer ["UserValues"]=> NULL.


    Wisst ihr wie ich an die UserValues rankomme? Wir haben bei uns in Greyhound bei den Kontakten ein extra Feld, dass heißt "Letztes Update im CRM", diesen Wert würde ich gerne mit auslesen.


  • Hi!


    Vom Prinzip her ist der Code richtig, ich habe das gerade einmal ausprobiert und konnte so die Elemente inklusive des benutzerdefinierten Felds abrufen. Allerdings erst im zweiten Anlauf, beim ersten Versuch hatte ich mich mit der ID des Felds vertan. Evtl. ist das ja bei Deinem Code auch das Problem?
    Am einfachsten findest Du die ID, wenn Du im Menu "Einstellungen" die "Benutzerdefinierten Felder" öffnest, dann im Menu "Funktionen" den "ID-Inspect" öffnest und das gewünschte benutzerdefinierte Feld aus der Liste in den ID-Inspect ziehst. Der zeigt die ID jedes Elements an, dass man auf ihn zieht.


    Ansonsten ist mir noch folgendes aufgefallen:


    Die Werte für $orderBy und $orderDirection sind so nicht gültig. Das ist nicht kritisch, da sie in dem Fall einfach ignoriert werden, aber korrekt wäre, statt der Strings dort die Konstanten aus der rpc_itemslib zu verwenden (oder die entsprechenden Zahlenwerte, aber die Konstanten machen den Code leichter lesbar):


    PHP
    1. $orderBy = rpc_itemslib::iobSubject;
    2. $orderDirection = rpc_itemslib::iodAscending;


    Wenn Deine IDE Code-Completion anbietet, dann kannst Du am einfachsten rpc_itemslib::io eingeben und dann ergänzen lassen. Die Konstanten sind nach folgendem Schema benannt: sie fangen in Kleinbuchstaben mit dem "Verwendungszweck" der Konstanten an, z.B. "iob" für "item order by" oder "iod" für "item order direction" (nützlich sind häufig auch "ik" für "item kind", "is" für "item state" usw.).


    Im Code gehst Du von 100 Elementen pro GetList() Aufruf auf und hangelst Dich über den Offset durch. Das ist an sich korrekt, allerdings ist die Zahl der Elemente pro Seite nicht fest auf 100 eingestellt, sondern kann im GREYHOUND Admin konfiguriert werden. An den Wert kommst Du über die GetServerSettings() Methode der rpc_infolib:


    PHP
    1. $itemsPerPage = rpc_infolib::newRpcInfo($this->RpcClient)->GetServerSettings()->ElementsPerPage;


    Die Pagination in GREYHOUND hat zudem noch folgende Eigenart: wenn beim Aufruf von GetList() mehr Elemente zur Verfügung stehen, als geliefert wurden (also eine weitere Seite mit Elementen existiert), so liefert der Server ein Element mehr als $itemsPerPage. Du müsstest also beim array_merge() aufpassen, ob ein Element zuviel geliefert wurde. Dafür kannst Du die Abbruchbedingung der while-Schleife auf "while(count($result)>$itemsPerPage);" ändern ;)

  • Danke für die schnelle Hilfe :)


    Finde nur leider diesen ID-Inspect bei den Funktionen nicht, liegt wohl an der "alten" Version?


    Jedenfalls warte ich jetzt mal das Update von unserem Server ab, denke spätestens dann wird er auftauchen ;)