Php sales force在一次调用中保存依赖对象

Php sales force在一次调用中保存依赖对象,php,salesforce,soap-client,Php,Salesforce,Soap Client,我正在使用salesforce合作伙伴WSDL和soap api在salesforce上上传数据并将其存储在SF对象上 我有两个从属对象,它们的子对象有一个查找字段 在存储父对象时,我希望存储从属子对象数据 如何使用SOAP api实现这一点 提前感谢..使用SOAP API无法实现这一点,因为使用该API,您必须首先创建主对象,以便获得设置子对象的ID。如果您想在一个事务中创建所有对象,那么您必须调用它。您可以在SOAP中通过在父对象类型上使用外部ID字段来执行此操作,这将允许您在单个调用中发

我正在使用salesforce合作伙伴WSDL和soap api在salesforce上上传数据并将其存储在SF对象上 我有两个从属对象,它们的子对象有一个查找字段

在存储父对象时,我希望存储从属子对象数据

如何使用SOAP api实现这一点


提前感谢..

使用SOAP API无法实现这一点,因为使用该API,您必须首先创建主对象,以便获得设置子对象的ID。如果您想在一个事务中创建所有对象,那么您必须调用它。

您可以在SOAP中通过在父对象类型上使用外部ID字段来执行此操作,这将允许您在单个调用中发送父对象和子对象,并通过外部ID字段值自动关联它们

下面是一个Java示例,它可以一次性创建一个帐户和一个相关联系人。联系人通过extId_;c字段与帐户相关

public static void main(String[] args) throws Exception {

    // login to salesforce.
    PartnerConnection pc = Connector.newConnection(args[0], args[1]);

    // The new Account record we're going to create.
    SObject acc = new SObject();
    acc.setType("Account");
    acc.setField("Name", "My New Account");
    acc.setField("extId__c", UUID.randomUUID().toString());

    // The new Contact record we're going to create.
    SObject con = new SObject();
    con.setType("Contact");
    con.setField("FirstName", "Simon");
    con.setField("LastName", "Fell");
    // This Account object we build with the relationship to the account above based
    // on the extId__c field, and then we set it on the contact record
    // this is the standard FK lookup using ExternalIds feature.
    SObject parentAcc = new SObject();
    parentAcc.setType("Account");
    parentAcc.setField("extId__c", acc.getField("extId__c"));
    con.setField("Account", parentAcc);


    // Now we can insert both records at once
    SaveResult [] sr = pc.create(new SObject [] { acc, con} );
    printSaveResult("Account result", sr[0]);
    printSaveResult("Contact result", sr[1]);
}

private static void printSaveResult(String label, SaveResult sr) {
    if (sr.isSuccess())
        System.out.println(label + " success recordId is " + sr.getId());
    else 
        System.out.println(label + " failed, reason is " + sr.getErrors()[0].getMessage());
}
当我运行这个时,它会打印

Account result success recordId is 0013000001DFMRxAAP
Contact result success recordId is 0033000001aEgskAAC
当我登录到web应用程序时,我可以看到我的新帐户记录,以及相关列表中的子联系人记录。

对于许多子对象,我的答案仍然适用,但我要指出的是,对于单个层次结构,superfell下面的答案要高得多。