Get all invoices for specific contact using Alexa CRM toolkit in Dynamics CRM

718 views Asked by At

I'm using AlexaCRM Toolkit for Dynamics 365 and I'm working on script that bring me results of all invoices for specific contact, the following script show the last ten invoices but for different contacts.

$invoices = $service->retrieveMultipleEntities("invoice", $allPages = false, $pagingCookie = null, $limitCount = 10, $pageNumber = 1, $simpleMode = false);
foreach ($invoices->Entities as $invoice) {

  echo 'ID : ' . $invoice->ID . '<br>';
  echo 'Name :' . $invoice->name. '<br>';

  }

The objective is to get only invoices related to specific contact.

2

There are 2 answers

0
Arun Vinoth-Precog Tech - MVP On

Contact (lookup) is a Foreign key GUID in Invoice entity record. Without filtering the Contact value you are looking for, the query will result you random 10 Invoices from top.

Try to set the WHERE condition in your code.

For example: To filter the Contact by its emailaddress1 attribute, the sample in github look like this:

$contactKey = new \AlexaCRM\CRMToolkit\KeyAttributes();
$contactKey->add( 'emailaddress1', $contactKeyValue );

Another example referring this, you can do something like below to filter the particular Parent Contact.

/* Check the ID or AlexaCRM\CRMToolkit\KeyAttributes to retrieve the entity values */
            if ($IDorKeyAttributes != null) {
                /* Set EntityValues if specified Entity ID */
                if (is_string($IDorKeyAttributes) && self::isGuid($IDorKeyAttributes)) {
                    /* Set the ID of Entity record */
                    $this->setID($IDorKeyAttributes);
                    /* Get the raw XML data */
                    $rawSoapResponse = $this->client->retrieveRaw($this, $columnSet);
                    /* NOTE: ParseRetrieveResponse method of AlexaCRM\CRMToolkit\AlexaSDK_Entity class, not the AlexaCRM\CRMToolkit\AlexaSDK class */
                    $this->parseRetrieveResponse($this->client, $this->LogicalName, $rawSoapResponse);
                } else {
                    if ($IDorKeyAttributes instanceof KeyAttributes) {
                        if (version_compare($this->client->organizationVersion, "7.1.0", "<")) {
                            throw new Exception('Entity ID must be a valid GUID for the organization version lower then 7.1.0');
                        }
                        /* Set the keyAttributes array */
                        $this->keyAttributes = $IDorKeyAttributes;
                        /* Add the KeyAttribute values to the entity object values */
                        foreach ($IDorKeyAttributes->getKeys() as $key => $attribute) {
                            $this->propertyValues[$key] = array("Value" => $attribute, "Changed" => true);
                        }
                        /* Get the raw XML data */
                        try {
                            $rawSoapResponse = $this->client->retrieveRaw($this, $columnSet);
                            /* NOTE: ParseRetrieveResponse method of AlexaCRM\CRMToolkit\AlexaSDK_Entity class, not the AlexaCRM\CRMToolkit\AlexaSDK class */
                            $this->parseExecuteRetrieveResponse($this->client, $this->LogicalName, $rawSoapResponse);
                        } catch (SoapFault $sf) {
                            $errorCode = $sf->faultcode;
                            // undocumented feature
                            if ($errorCode == '-2147088239') {
                                $this->exists = false;
                            }
                            /* ToDo: Return exception with user-friendly details, maybe KeyAttribute parameters invalid */
                        }
                    }
                }
            }

Note: Am not a php person, to help you I did some research.

0
Mssef On

Dear @Arun thank you for interaction , i used retrieveMultiple and i construct a FetchXML query to get all relative invoices this is the code

$queryXML = "<fetch mapping='logical'>
                        <entity name='invoice'>
                            <all-attributes />
                            <link-entity name='contact' from='contactid' to='customerid'  alias='C'>
                                <filter type='and'> 
                                    <condition attribute='contactid' operator='eq' value='$contact->id' /> 
                                </filter> 
                           </link-entity>   
            </entity>
        </fetch>";

$invoices = $service->retrieveMultiple($queryXML, false);