【问题标题】:Simplifying Record Type Id links简化记录类型 ID 链接
【发布时间】:2026-02-23 12:50:01
【问题描述】:

当通过 PHP 使用 Salesforce SOAP API 时,如果我有一个对象,该对象具有一个帐户的查找字段,该帐户上的特定字段设置为外部 ID,我可以执行以下操作

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

这在尝试链接记录而不必求助于他们的 Salesforce ID 时非常方便。

我想知道在通过 API 在对象上设置记录类型时是否可以使用类似类型的速记。必须通过首先查询记录类型对象来获取记录类型 ID,如果可能的话,我想删掉一个步骤。

【问题讨论】:

    标签: php salesforce


    【解决方案1】:

    您可以使用 RecordType 上的 name 字段来执行此操作,您生成的 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>";
    

    【讨论】:

    • 你有可以工作的示例代码吗?我在 Name 和 DeveloperName 字段周围尝试了一些不同的方法,但并不高兴。
    • 谢谢,此外,如果字段上的 idLookup 属性设置为 true,那么您可以改用该字段。然而,大多数事情都是错误的。
    • 不幸的是,名称不是唯一的,因此如果您有相同名称的不同 SObject 类型的 RecordTypes,您将获得 DUPLICATE_EXTERNAL_ID。
    【解决方案2】:

    David,我不知道设置 RecordType 的类似速记方法。不幸的是,RecordType 没有实现此目的所需的外部 id。

    我的建议是查询所有 RecordTypes 并建立一个 DeveloperName 到 Id 的本地查找表/数组。然后,您可以在整个应用程序中使用此查找表/数组,根据 Salesforce 中该 RecordType 的 DeveloperName 设置正确的 RecordType Id。

    【讨论】: