Упрощение ссылок на идентификатор типа записи

#php #salesforce

#php #salesforce

Вопрос:

При использовании Salesforce SOAP API через PHP, если у меня есть объект, у которого есть поле поиска для учетной записи с определенным полем в учетной записи, которое настроено как внешний идентификатор, я могу сделать следующее

 $sfBooking->fields['Account__r'] = "<type>Account</type>"
    . "<custom_account_id__c>"
    . utf8_encode($tboxBooking->client_id)
    . "</custom_account_id__c>";
  

Это довольно удобно при попытке связать записи, не прибегая к использованию их идентификатора Salesforce.

Мне интересно, есть ли аналогичный тип сокращения, который я могу использовать при настройке типа записи для объектов через API. Необходимость получения идентификатора типа записи путем первого запроса объекта типа записи — это шаг, который я хотел бы исключить, если это вообще возможно.

Ответ №1:

Вы можете сделать это, используя поле name в RecordType, ваш сгенерированный XML-файл должен выглядеть следующим образом

     <create xmlns="urn:partner.soap.sforce.com">
        <sobject>
            <type>case</type>
            <subject>Test</subject>
            <recordType>
                <type>RecordType</type>
                <name>InternetCase</name>
            </recordType>
        </sobject>
    </create>
  

основываясь на опубликованном вами коде, вы бы сделали

 $sfBooking->fields['RecordType'] = "<type>RecordType</type>"
    . "<name>"
    . utf8_encode($tboxBooking->recordType_name)
    . "</name>";
  

Комментарии:

1. У вас есть пример кода, который работает? Я попробовал несколько разных действий с полями Name и DeveloperName, но безрезультатно.

2. Спасибо, и в дополнение к этому, если для атрибута idLookup в поле установлено значение true, вы можете использовать это поле вместо него. Однако для большинства вещей это false.

3. К сожалению, Name не является уникальным, поэтому вы получите DUPLICATE_EXTERNAL_ID, если у вас есть типы записей для разных типов sObject с одинаковым именем.

Ответ №2:

Дэвид, я не знаю подобного сокращенного метода установки RecordType. К сожалению, у RecordType нет внешнего идентификатора, который требуется для достижения этого.

Моей рекомендацией было бы запросить все типы записей и создать локальную таблицу подстановки / массив от имени разработчика до идентификатора. Затем вы можете использовать эту справочную таблицу / массив во всем своем приложении, чтобы задать правильный идентификатор типа записи на основе имени разработчика этого типа записи в Salesforce.