datai/datai-scenes/datai-scene-salesforce/docs/reference-code/sforce/docs/partner-module.md

42 KiB
Raw Blame History

com.sforce.soap.partner 模块说明

概述

com.sforce.soap.partner 模块是 Salesforce Partner API 的 Java 客户端实现,提供了与 Salesforce 进行数据交互的 SOAP 接口。Partner API 是一个动态 API可以访问组织中的任何对象和字段无需预先定义。

主要功能

1. CRUD 操作

  • Create: 创建新记录
  • Retrieve: 检索单个记录
  • Update: 更新记录
  • Delete: 删除记录
  • Upsert: 更新或插入记录
  • Merge: 合并记录

2. 批量操作

  • Create 批量: 批量创建记录
  • Update 批量: 批量更新记录
  • Delete 批量: 批量删除记录
  • Upsert 批量: 批量更新或插入记录

3. 查询功能

  • Query: 执行 SOQL 查询
  • QueryAll: 查询所有记录(包括已删除的)
  • QueryMore: 获取查询结果的下一页
  • Search: 执行 SOSL 搜索

4. 描述功能

  • DescribeGlobal: 描述所有可用对象
  • DescribeSObject: 描述特定对象
  • DescribeSObjects: 描述多个对象
  • DescribeLayout: 描述对象布局
  • DescribeTabs: 描述标签页
  • DescribeQuickActions: 描述快速操作

5. 认证和会话

  • Login: 用户登录
  • Logout: 用户登出
  • ChangeOwnPassword: 修改自己的密码
  • SessionHeader: 会话头信息

6. 高级功能

  • ConvertLead: 转换线索
  • EmptyRecycleBin: 清空回收站
  • ProcessSubmitRequest: 处理提交请求
  • GetUserInfo: 获取用户信息
  • GetServerTimestamp: 获取服务器时间戳

核心类

Connector

作用: Partner API 的连接工厂类,负责创建 PartnerConnection 实例。

主要功能:

  • 创建 PartnerConnection 实例
  • 管理连接配置
  • 设置默认端点

主要方法:

  • newConnection(String username, String password): 使用用户名和密码创建连接
  • newConnection(ConnectorConfig config): 使用配置对象创建连接

默认端点: https://login.salesforce.com/services/Soap/u/65.0

使用示例:

// 使用用户名和密码创建连接
PartnerConnection connection = Connector.newConnection("username", "password");

// 使用配置对象创建连接
ConnectorConfig config = new ConnectorConfig();
config.setUsername("username");
config.setPassword("password");
config.setAuthEndpoint("https://test.salesforce.com/services/Soap/u/65.0");
PartnerConnection connection = Connector.newConnection(config);

// 登录并获取会话信息
LoginResult loginResult = connection.login("username", "password");
System.out.println("Session ID: " + loginResult.getSessionId());
System.out.println("Server URL: " + loginResult.getServerUrl());

PartnerConnection

作用: Partner API 的核心连接类,负责执行所有 API 操作。

主要功能:

  • 执行 CRUD 操作create、update、delete、upsert、merge
  • 执行查询操作query、queryAll、queryMore、search
  • 执行描述操作describeGlobal、describeSObject、describeSObjects
  • 管理会话和头部信息
  • 执行高级操作convertLead、emptyRecycleBin、sendEmail 等)

主要方法:

  • login(String username, String password): 用户登录
  • logout(): 用户登出
  • query(String queryString): 执行 SOQL 查询
  • queryAll(String queryString): 查询所有记录(包括已删除的)
  • queryMore(String queryLocator): 获取查询结果的下一页
  • search(String searchString): 执行 SOSL 搜索
  • create(SObject[] sObjects): 创建记录
  • update(SObject[] sObjects): 更新记录
  • delete(String[] ids): 删除记录
  • undelete(String[] ids): 恢复已删除的记录
  • upsert(String externalIdFieldName, SObject[] sObjects): 更新或插入记录
  • merge(String id, SObject sObject, String[] duplicateId): 合并记录
  • retrieve(String[] fieldsToRetrieve, String type, String[] ids): 检索单个记录
  • describeGlobal(): 描述所有可用对象
  • describeSObject(String sObjectType): 描述特定对象
  • describeSObjects(String[] sObjectTypes): 描述多个对象
  • convertLead(LeadConvert leadConvert): 转换线索
  • emptyRecycleBin(String[] ids): 清空回收站
  • sendEmail(SingleEmailMessage[] emails): 发送邮件
  • resetPassword(String userId): 重置用户密码
  • setPassword(String userId, String newPassword): 设置用户密码

SOAP 头部设置:

  • setQueryOptions(int batchSize): 设置查询批处理大小
  • setAssignmentRuleHeader(String assignmentRuleId, Boolean useDefaultRule): 设置分配规则头部
  • setEmailHeader(boolean triggerAutoResponseEmail, boolean triggerOtherEmail, boolean triggerUserEmail): 设置邮件头部
  • setDisableFeedTrackingHeader(boolean disableFeedTracking): 设置禁用 Feed 跟踪头部
  • setAllOrNoneHeader(boolean allOrNone): 设置全有或全无头部
  • setAllowFieldTruncationHeader(boolean allowFieldTruncation): 设置允许字段截断头部
  • setDuplicateRuleHeader(boolean allowSave, boolean includeRecordDetails, boolean runAsCurrentUser): 设置重复规则头部
  • setStreamingEnabledHeader(boolean enableStreaming): 设置流式启用头部

使用示例:

PartnerConnection connection = Connector.newConnection("username", "password");

// 执行查询
QueryResult queryResult = connection.query(
    "SELECT Id, Name, Industry FROM Account LIMIT 10"
);
for (SObject record : queryResult.getRecords()) {
    System.out.println("Account: " + record.getField("Name"));
}

// 创建记录
SObject account = new SObject();
account.setType("Account");
account.setField("Name", "Acme Corporation");
account.setField("Industry", "Technology");
SaveResult[] results = connection.create(new SObject[]{account});

// 更新记录
account.setId("001xx000003IAC");
account.setField("Name", "Acme Inc.");
connection.update(new SObject[]{account});

// 删除记录
connection.delete(new String[]{"001xx000003IAC"});

// 设置查询选项
connection.setQueryOptions(100);

// 设置全有或全无头部
connection.setAllOrNoneHeader(true);

SObject

作用: 表示 Salesforce 中的任何对象记录,是一个动态对象,继承自 XmlObject。

主要功能:

  • 动态字段访问和设置
  • 类型安全的字段操作
  • 支持所有 CRUD 操作
  • 支持字段清空fieldsToNull
  • 支持子对象关系

主要方法:

  • getType(): 获取对象类型
  • setType(String type): 设置对象类型
  • getId(): 获取记录 ID
  • setId(String Id): 设置记录 ID
  • getField(String name): 获取字段值
  • setField(String name, Object value): 设置字段值
  • getFieldsToNull(): 获取要清空的字段列表
  • setFieldsToNull(String[] fieldsToNull): 设置要清空的字段列表
  • getSObjectField(String name): 获取 SObject 类型的字段值
  • setSObjectField(String name, SObject value): 设置 SObject 类型的字段值
  • addChild(XmlObject child): 添加子对象
  • getChildren(String name): 获取子对象列表

使用示例:

// 创建 Account 记录
SObject account = new SObject();
account.setType("Account");
account.setField("Name", "Acme Corporation");
account.setField("Industry", "Technology");
account.setField("AnnualRevenue", 1000000.00);

// 创建并设置子对象Contact
SObject contact = new SObject();
contact.setType("Contact");
contact.setField("FirstName", "John");
contact.setField("LastName", "Doe");
account.setSObjectField("Owner", contact);

// 设置字段为 null清空字段
account.setFieldsToNull(new String[]{"AnnualRevenue"});

// 获取字段值
String name = (String) account.getField("Name");
Double revenue = (Double) account.getField("AnnualRevenue");

// 批量创建
SObject[] accounts = new SObject[10];
for (int i = 0; i < 10; i++) {
    SObject acc = new SObject();
    acc.setType("Account");
    acc.setField("Name", "Account " + i);
    accounts[i] = acc;
}
SaveResult[] results = connection.create(accounts);

QueryResult

作用: 表示查询操作的结果,包含查询返回的记录和分页信息。

主要属性:

  • records: 记录列表SObject[]
  • size: 记录数量int
  • done: 是否完成boolean
  • queryLocator: 查询定位器String用于分页
  • searchRecords: 搜索记录列表SearchRecord[]

主要方法:

  • getRecords(): 获取记录列表
  • setRecords(SObject[] records): 设置记录列表
  • getSize(): 获取记录数量
  • setSize(int size): 设置记录数量
  • isDone(): 判断是否完成
  • setDone(boolean done): 设置是否完成
  • getQueryLocator(): 获取查询定位器
  • setQueryLocator(String queryLocator): 设置查询定位器

使用示例:

// 执行查询
QueryResult queryResult = connection.query(
    "SELECT Id, Name, Industry FROM Account LIMIT 10"
);

// 遍历记录
for (SObject record : queryResult.getRecords()) {
    String name = record.getField("Name").toString();
    String industry = record.getField("Industry").toString();
    System.out.println("Account: " + name + ", Industry: " + industry);
}

// 处理分页
while (!queryResult.isDone()) {
    queryResult = connection.queryMore(queryResult.getQueryLocator());
    for (SObject record : queryResult.getRecords()) {
        System.out.println("More records: " + record.getField("Name"));
    }
}

// 使用批量大小设置
connection.setQueryOptions(200);
QueryResult result = connection.query("SELECT Id, Name FROM Account");
System.out.println("Total records: " + result.getSize());

SaveResult

作用: 表示创建、更新或删除操作的结果,包含操作是否成功和错误信息。

主要属性:

  • id: 记录 IDString
  • success: 是否成功boolean
  • errors: 错误列表Error[]

主要方法:

  • getId(): 获取记录 ID
  • setId(String id): 设置记录 ID
  • isSuccess(): 判断是否成功
  • getSuccess(): 获取成功状态
  • setSuccess(boolean success): 设置成功状态
  • getErrors(): 获取错误列表
  • setErrors(Error[] errors): 设置错误列表

使用示例:

// 创建记录
SObject account = new SObject();
account.setType("Account");
account.setField("Name", "Acme Corporation");
SaveResult[] results = connection.create(new SObject[]{account});

// 处理结果
for (SaveResult result : results) {
    if (result.isSuccess()) {
        System.out.println("创建成功ID: " + result.getId());
    } else {
        System.out.println("创建失败");
        for (Error error : result.getErrors()) {
            System.out.println("错误代码: " + error.getStatusCode());
            System.out.println("错误消息: " + error.getMessage());
            System.out.println("字段: " + String.join(", ", error.getFields()));
        }
    }
}

// 批量更新
SObject[] accounts = new SObject[2];
accounts[0] = new SObject();
accounts[0].setType("Account");
accounts[0].setId("001xx000003IAC");
accounts[0].setField("Name", "Updated Account 1");

accounts[1] = new SObject();
accounts[1].setType("Account");
accounts[1].setId("001xx000003IAD");
accounts[1].setField("Name", "Updated Account 2");

SaveResult[] updateResults = connection.update(accounts);
for (SaveResult result : updateResults) {
    if (result.isSuccess()) {
        System.out.println("更新成功: " + result.getId());
    }
}

DescribeSObjectResult

作用: 描述对象的元数据,包含对象的详细信息和字段定义。

主要属性:

  • name: 对象名称String
  • label: 对象标签String
  • keyPrefix: ID 前缀String
  • labelPlural: 复数标签String
  • fields: 字段列表Field[]
  • childRelationships: 子关系列表ChildRelationship[]
  • createable: 是否可创建boolean
  • updateable: 是否可更新boolean
  • deletable: 是否可删除boolean
  • queryable: 是否可查询boolean
  • replicateable: 是否可复制boolean
  • retrieveable: 是否可检索boolean
  • undeletable: 是否可恢复boolean
  • triggerable: 是否可触发boolean
  • mergeable: 是否可合并boolean
  • activateable: 是否可激活boolean
  • layoutable: 是否有布局boolean
  • searchable: 是否可搜索boolean
  • actionOverrides: 动作覆盖列表ActionOverride[]

主要方法:

  • getName(): 获取对象名称
  • getLabel(): 获取对象标签
  • getKeyPrefix(): 获取 ID 前缀
  • getFields(): 获取字段列表
  • getChildRelationships(): 获取子关系列表
  • isCreateable(): 判断是否可创建
  • isUpdateable(): 判断是否可更新
  • isDeletable(): 判断是否可删除
  • isQueryable(): 判断是否可查询

使用示例:

// 描述 Account 对象
DescribeSObjectResult describeResult = connection.describeSObject("Account");

System.out.println("对象名称: " + describeResult.getName());
System.out.println("对象标签: " + describeResult.getLabel());
System.out.println("ID 前缀: " + describeResult.getKeyPrefix());
System.out.println("可创建: " + describeResult.isCreateable());
System.out.println("可更新: " + describeResult.isUpdateable());
System.out.println("可删除: " + describeResult.isDeletable());

// 遍历字段
for (Field field : describeResult.getFields()) {
    System.out.println("字段: " + field.getName());
    System.out.println("  类型: " + field.getType());
    System.out.println("  标签: " + field.getLabel());
    System.out.println("  可创建: " + field.isCreateable());
    System.out.println("  可更新: " + field.isUpdateable());
    System.out.println("  必填: " + field.isNillable());
}

// 遍历子关系
for (ChildRelationship relation : describeResult.getChildRelationships()) {
    System.out.println("子关系: " + relation.getChildSObject());
    System.out.println("  字段: " + relation.getField());
}

DeleteResult

作用: 表示删除操作的结果,包含删除是否成功和错误信息。

主要属性:

  • id: 记录 IDString
  • success: 是否成功boolean
  • errors: 错误列表Error[]

主要方法:

  • getId(): 获取记录 ID
  • setId(String id): 设置记录 ID
  • isSuccess(): 判断是否成功
  • getSuccess(): 获取成功状态
  • setSuccess(boolean success): 设置成功状态
  • getErrors(): 获取错误列表
  • setErrors(Error[] errors): 设置错误列表

使用示例:

// 删除单个记录
DeleteResult[] results = connection.delete(new String[]{"001xx000003IAC"});

for (DeleteResult result : results) {
    if (result.isSuccess()) {
        System.out.println("删除成功: " + result.getId());
    } else {
        System.out.println("删除失败: " + result.getId());
        for (Error error : result.getErrors()) {
            System.out.println("错误: " + error.getMessage());
        }
    }
}

// 批量删除
String[] ids = new String[]{"001xx000003IAC", "001xx000003IAD", "001xx000003IAE"};
DeleteResult[] deleteResults = connection.delete(ids);

int successCount = 0;
int failureCount = 0;
for (DeleteResult result : deleteResults) {
    if (result.isSuccess()) {
        successCount++;
    } else {
        failureCount++;
        System.out.println("删除失败: " + result.getId());
    }
}
System.out.println("成功: " + successCount + ", 失败: " + failureCount);

UpsertResult

作用: 表示 Upsert更新或插入操作的结果包含操作是否成功、是否创建和错误信息。

主要属性:

  • id: 记录 IDString
  • success: 是否成功boolean
  • created: 是否创建新记录boolean
  • errors: 错误列表Error[]

主要方法:

  • getId(): 获取记录 ID
  • setId(String id): 设置记录 ID
  • isSuccess(): 判断是否成功
  • getSuccess(): 获取成功状态
  • setSuccess(boolean success): 设置成功状态
  • isCreated(): 判断是否创建
  • getCreated(): 获取创建状态
  • setCreated(boolean created): 设置创建状态
  • getErrors(): 获取错误列表
  • setErrors(Error[] errors): 设置错误列表

使用示例:

// Upsert 操作(基于外部 ID
SObject account = new SObject();
account.setType("Account");
account.setField("ExternalId__c", "EXT123");
account.setField("Name", "Acme Corporation");

UpsertResult[] results = connection.upsert("ExternalId__c", new SObject[]{account});

for (UpsertResult result : results) {
    if (result.isSuccess()) {
        if (result.isCreated()) {
            System.out.println("创建新记录ID: " + result.getId());
        } else {
            System.out.println("更新现有记录ID: " + result.getId());
        }
    } else {
        System.out.println("Upsert 失败");
        for (Error error : result.getErrors()) {
            System.out.println("错误: " + error.getMessage());
        }
    }
}

// 批量 Upsert
SObject[] accounts = new SObject[2];
accounts[0] = new SObject();
accounts[0].setType("Account");
accounts[0].setField("ExternalId__c", "EXT001");
accounts[0].setField("Name", "Account 1");

accounts[1] = new SObject();
accounts[1].setType("Account");
accounts[1].setField("ExternalId__c", "EXT002");
accounts[1].setField("Name", "Account 2");

UpsertResult[] upsertResults = connection.upsert("ExternalId__c", accounts);

SearchResult

作用: 表示 SOSL 搜索操作的结果,包含搜索返回的记录和元数据。

主要属性:

  • queryId: 查询 IDString
  • searchRecords: 搜索记录列表SearchRecord[]
  • searchResultsMetadata: 搜索结果元数据SearchResultsMetadata

主要方法:

  • getQueryId(): 获取查询 ID
  • setQueryId(String queryId): 设置查询 ID
  • getSearchRecords(): 获取搜索记录列表
  • setSearchRecords(SearchRecord[] searchRecords): 设置搜索记录列表
  • getSearchResultsMetadata(): 获取搜索结果元数据
  • setSearchResultsMetadata(SearchResultsMetadata metadata): 设置搜索结果元数据

使用示例:

// 执行 SOSL 搜索
SearchResult searchResult = connection.search(
    "FIND {Acme} IN ALL FIELDS RETURNING Account (Id, Name, Industry), " +
    "Contact (Id, FirstName, LastName)"
);

System.out.println("查询 ID: " + searchResult.getQueryId());

// 遍历搜索结果
for (SearchRecord record : searchResult.getSearchRecords()) {
    SObject sobject = record.getRecord();
    String objectType = record.getType();
    
    if (objectType.equals("Account")) {
        System.out.println("Account: " + sobject.getField("Name"));
    } else if (objectType.equals("Contact")) {
        System.out.println("Contact: " + sobject.getField("FirstName") + " " + sobject.getField("LastName"));
    }
}

// 获取搜索元数据
SearchResultsMetadata metadata = searchResult.getSearchResultsMetadata();
System.out.println("搜索上下文: " + metadata.getSearchContext());

Error

作用: 表示 API 操作中的错误信息。

主要属性:

  • statusCode: 状态代码StatusCode
  • message: 错误消息String
  • fields: 相关字段列表String[]
  • extendedErrorDetails: 扩展错误详情ExtendedErrorDetails[]

主要方法:

  • getStatusCode(): 获取状态代码
  • setStatusCode(StatusCode statusCode): 设置状态代码
  • getMessage(): 获取错误消息
  • setMessage(String message): 设置错误消息
  • getFields(): 获取相关字段列表
  • setFields(String[] fields): 设置相关字段列表
  • getExtendedErrorDetails(): 获取扩展错误详情
  • setExtendedErrorDetails(ExtendedErrorDetails[] details): 设置扩展错误详情

常见错误代码:

  • INVALID_FIELD: 字段不存在或无效
  • INVALID_ID: ID 无效
  • MALFORMED_QUERY: 查询语法错误
  • INVALID_OPERATION: 操作无效
  • DUPLICATE_VALUE: 值重复
  • ENTITY_IS_DELETED: 记录已删除
  • INSUFFICIENT_ACCESS: 权限不足
  • INVALID_CROSS_REFERENCE_KEY: 跨引用键无效

使用示例:

SaveResult[] results = connection.create(new SObject[]{account});

for (SaveResult result : results) {
    if (!result.isSuccess()) {
        for (Error error : result.getErrors()) {
            System.out.println("错误代码: " + error.getStatusCode());
            System.out.println("错误消息: " + error.getMessage());
            
            if (error.getFields() != null && error.getFields().length > 0) {
                System.out.println("相关字段: " + String.join(", ", error.getFields()));
            }
            
            if (error.getExtendedErrorDetails() != null) {
                for (ExtendedErrorDetails detail : error.getExtendedErrorDetails()) {
                    System.out.println("扩展详情: " + detail.getMessage());
                }
            }
        }
    }
}

Field

作用: 表示对象的字段元数据,包含字段的详细属性。

主要属性:

  • name: 字段名称String
  • label: 字段标签String
  • type: 字段类型SoapType
  • length: 字段长度int
  • precision: 精度int
  • scale: 小数位数int
  • createable: 是否可创建boolean
  • updateable: 是否可更新boolean
  • nillable: 是否可为空boolean
  • defaultedOnCreate: 创建时是否有默认值boolean
  • autoNumber: 是否自动编号boolean
  • calculated: 是否计算字段boolean
  • custom: 是否自定义字段boolean
  • unique: 是否唯一boolean
  • externalId: 是否外部 IDboolean
  • indexed: 是否索引boolean
  • aggregatable: 是否可聚合boolean
  • aiPredictionField: 是否 AI 预测字段boolean
  • defaultValue: 默认值Object
  • picklistValues: 选项列表值PicklistEntry[]
  • referenceTo: 引用对象列表String[]
  • relationshipName: 关系名称String

主要方法:

  • getName(): 获取字段名称
  • getLabel(): 获取字段标签
  • getType(): 获取字段类型
  • isCreateable(): 判断是否可创建
  • isUpdateable(): 判断是否可更新
  • isNillable(): 判断是否可为空
  • isCustom(): 判断是否自定义字段
  • isUnique(): 判断是否唯一
  • isExternalId(): 判断是否外部 ID
  • getPicklistValues(): 获取选项列表值
  • getReferenceTo(): 获取引用对象列表

使用示例:

DescribeSObjectResult describeResult = connection.describeSObject("Account");

for (Field field : describeResult.getFields()) {
    System.out.println("字段: " + field.getName());
    System.out.println("  标签: " + field.getLabel());
    System.out.println("  类型: " + field.getType());
    System.out.println("  可创建: " + field.isCreateable());
    System.out.println("  可更新: " + field.isUpdateable());
    System.out.println("  可为空: " + field.isNillable());
    System.out.println("  自定义: " + field.isCustom());
    
    // 处理选项列表字段
    if (field.getType() == SoapType.picklist && field.getPicklistValues() != null) {
        System.out.println("  选项列表:");
        for (PicklistEntry entry : field.getPicklistValues()) {
            System.out.println("    - " + entry.getLabel() + " (" + entry.getValue() + ")");
        }
    }
    
    // 处理引用字段
    if (field.getReferenceTo() != null && field.getReferenceTo().length > 0) {
        System.out.println("  引用对象: " + String.join(", ", field.getReferenceTo()));
    }
}

使用场景

1. 数据同步

  • 从外部系统同步数据到 Salesforce
  • 从 Salesforce 同步数据到外部系统
  • 双向数据同步
  • 增量数据同步

2. 数据集成

  • 与其他系统集成
  • 数据迁移
  • 数据导入/导出
  • 批量数据处理

3. 自定义应用开发

  • 构建自定义应用
  • 实现业务逻辑
  • 用户界面集成
  • 自动化工作流

4. 报表和分析

  • 数据查询和报表
  • 业务分析
  • 数据可视化
  • 决策支持

5. 数据管理

  • 数据维护
  • 数据清理
  • 数据归档
  • 数据备份

SOQL 查询示例

基本查询

QueryResult result = connection.query(
    "SELECT Id, Name, Industry FROM Account"
);

条件查询

QueryResult result = connection.query(
    "SELECT Id, Name, Industry FROM Account WHERE Industry = 'Technology'"
);

排序和限制

QueryResult result = connection.query(
    "SELECT Id, Name, CreatedDate FROM Account ORDER BY CreatedDate DESC LIMIT 10"
);

关联查询

QueryResult result = connection.query(
    "SELECT Id, Name, (SELECT FirstName, LastName FROM Contacts) FROM Account"
);

聚合查询

QueryResult result = connection.query(
    "SELECT Industry, COUNT(Id) FROM Account GROUP BY Industry"
);

注意事项

  1. API 限制: 有 API 调用次数限制和并发限制
  2. 查询限制: SOQL 查询有记录数限制(通常为 50,000 条)
  3. 批量操作: 批量操作有大小限制(通常为 200 条记录)
  4. 字段限制: 查询和更新有字段数限制
  5. 权限要求: 需要适当的对象和字段权限
  6. 会话管理: 会话有超时时间,需要定期刷新
  7. 错误处理: 需要正确处理各种错误情况
  8. 性能考虑: 大量数据操作可能影响性能
  9. 版本兼容性: 不同版本的 Salesforce 可能有不同的 API 行为
  10. 动态特性: Partner API 是动态的,需要处理运行时类型

错误处理

常见错误类型

  1. INVALID_FIELD: 字段不存在或无效
  2. INVALID_ID: ID 无效
  3. MALFORMED_QUERY: 查询语法错误
  4. INVALID_OPERATION: 操作无效
  5. DUPLICATE_VALUE: 值重复
  6. ENTITY_IS_DELETED: 记录已删除
  7. INSUFFICIENT_ACCESS: 权限不足
  8. INVALID_CROSS_REFERENCE_KEY: 跨引用键无效

错误处理示例

try {
    SaveResult[] results = connection.create(new SObject[]{account});
    
    for (SaveResult result : results) {
        if (!result.isSuccess()) {
            for (Error error : result.getErrors()) {
                System.out.println("错误代码: " + error.getStatusCode());
                System.out.println("错误消息: " + error.getMessage());
                System.out.println("字段: " + error.getFields());
            }
        }
    }
} catch (ConnectionException e) {
    System.out.println("连接错误: " + e.getMessage());
} catch (ApiFault e) {
    System.out.println("API 错误: " + e.getExceptionMessage());
}

最佳实践

  1. 使用批量操作: 尽量使用批量操作减少 API 调用
  2. 查询优化: 只查询需要的字段,使用适当的过滤条件
  3. 错误处理: 实现完善的错误处理和重试机制
  4. 会话管理: 妥善管理会话,避免频繁登录
  5. 性能监控: 监控 API 调用性能和响应时间
  6. 日志记录: 记录 API 调用和错误信息
  7. 测试: 在生产环境前充分测试
  8. 文档: 记录 API 使用和集成逻辑

相关文档

文件分类

连接和认证

  • Connector.java - 连接工厂类
  • PartnerConnection.java - Partner API 连接类
  • LoginResult.java - 登录结果
  • SessionHeader_element.java - 会话头
  • CallOptions_element.java - 调用选项
  • QueryOptions_element.java - 查询选项

数据操作

  • Create_element.java - 创建请求
  • CreateResponse_element.java - 创建响应
  • Update_element.java - 更新请求
  • UpdateResponse_element.java - 更新响应
  • Delete_element.java - 删除请求
  • DeleteResponse_element.java - 删除响应
  • DeleteByExample_element.java - 按示例删除请求
  • DeleteByExampleResponse_element.java - 按示例删除响应
  • DeleteByExampleResult.java - 按示例删除结果
  • Upsert_element.java - 更新或插入请求
  • UpsertResponse_element.java - 更新或插入响应
  • UpsertResult.java - 更新或插入结果
  • Merge_element.java - 合并请求
  • MergeResponse_element.java - 合并响应
  • Undelete_element.java - 恢复请求
  • UndeleteResponse_element.java - 恢复响应
  • UndeleteResult.java - 恢复结果
  • Retrieve_element.java - 检索请求
  • RetrieveResponse_element.java - 检索响应

查询和搜索

  • Query_element.java - 查询请求
  • QueryResponse_element.java - 查询响应
  • QueryResult.java - 查询结果
  • QueryAll_element.java - 查询所有请求
  • QueryAllResponse_element.java - 查询所有响应
  • QueryMore_element.java - 查询更多请求
  • QueryMoreResponse_element.java - 查询更多响应
  • Search_element.java - 搜索请求
  • SearchResponse_element.java - 搜索响应
  • SearchResult.java - 搜索结果
  • SearchRecord.java - 搜索记录
  • SearchRecordMetadata.java - 搜索记录元数据
  • SearchResultsMetadata.java - 搜索结果元数据
  • SearchSnippet.java - 搜索片段
  • SearchStatus.java - 搜索状态
  • SearchLayout.java - 搜索布局
  • SearchLayoutResult.java - 搜索布局结果
  • SearchLayouts_element.java - 搜索布局请求
  • SearchLayoutsResponse_element.java - 搜索布局响应
  • SearchScopeOrder.java - 搜索范围顺序
  • SearchScopeOrder_element.java - 搜索范围顺序请求
  • SearchScopeOrderResponse_element.java - 搜索范围顺序响应
  • SearchScopeOrderResult.java - 搜索范围顺序结果
  • SearchableEntity.java - 可搜索实体
  • SearchableEntities_element.java - 可搜索实体请求
  • SearchableEntitiesResponse_element.java - 可搜索实体响应
  • SearchableEntityResult.java - 可搜索实体结果

描述功能

  • DescribeGlobal_element.java - 描述全局请求
  • DescribeGlobalResponse_element.java - 描述全局响应
  • DescribeGlobalResult.java - 描述全局结果
  • DescribeGlobalSObjectResult.java - 描述全局对象结果
  • DescribeSObject_element.java - 描述对象请求
  • DescribeSObjectResponse_element.java - 描述对象响应
  • DescribeSObjectResult.java - 描述对象结果
  • DescribeSObjects_element.java - 描述多个对象请求
  • DescribeSObjectsResponse_element.java - 描述多个对象响应
  • DescribeNouns_element.java - 描述名词请求
  • DescribeNounsResponse_element.java - 描述名词响应
  • DescribeNounResult.java - 描述名词结果

布局和标签页

  • DescribeLayout_element.java - 描述布局请求
  • DescribeLayoutResponse_element.java - 描述布局响应
  • DescribeLayoutResult.java - 描述布局结果
  • DescribeLayout.java - 布局描述
  • DescribeLayoutRow.java - 布局行
  • DescribeLayoutSection.java - 布局节
  • DescribeLayoutItem.java - 布局项
  • DescribeLayoutComponent.java - 布局组件
  • DescribeLayoutButton.java - 布局按钮
  • DescribeLayoutButtonSection.java - 布局按钮节
  • DescribeLayoutSaveOption.java - 布局保存选项
  • DescribeLayoutFeedFilter.java - 布局 Feed 过滤器
  • DescribeLayoutFeedView.java - 布局 Feed 视图
  • DescribeCompactLayouts_element.java - 描述紧凑布局请求
  • DescribeCompactLayoutsResponse_element.java - 描述紧凑布局响应
  • DescribeCompactLayoutsResult.java - 描述紧凑布局结果
  • DescribeCompactLayout.java - 紧凑布局
  • DescribePrimaryCompactLayouts_element.java - 描述主紧凑布局请求
  • DescribePrimaryCompactLayoutsResponse_element.java - 描述主紧凑布局响应
  • DescribeTabs_element.java - 描述标签页请求
  • DescribeTabsResponse_element.java - 描述标签页响应
  • DescribeTabSetResult.java - 描述标签集结果
  • DescribeTab.java - 标签页描述
  • DescribeAllTabs_element.java - 描述所有标签页请求
  • DescribeAllTabsResponse_element.java - 描述所有标签页响应

快速操作

  • DescribeQuickActions_element.java - 描述快速操作请求
  • DescribeQuickActionsResponse_element.java - 描述快速操作响应
  • DescribeQuickActionResult.java - 描述快速操作结果
  • DescribeQuickActionsForRecordType_element.java - 描述记录类型快速操作请求
  • DescribeQuickActionsForRecordTypeResponse_element.java - 描述记录类型快速操作响应
  • DescribeAvailableQuickActions_element.java - 描述可用快速操作请求
  • DescribeAvailableQuickActionsResponse_element.java - 描述可用快速操作响应
  • DescribeAvailableQuickActionResult.java - 描述可用快速操作结果
  • DescribeQuickActionDefaultValue.java - 快速操作默认值
  • DescribeQuickActionParameter.java - 快速操作参数
  • DescribeQuickActionListItemResult.java - 快速操作列表项结果
  • DescribeQuickActionListResult.java - 快速操作列表结果
  • RetrieveQuickActionTemplates_element.java - 检索快速操作模板请求
  • RetrieveQuickActionTemplatesResponse_element.java - 检索快速操作模板响应
  • RetrieveMassQuickActionTemplates_element.java - 检索批量快速操作模板请求
  • RetrieveMassQuickActionTemplatesResponse_element.java - 检索批量快速操作模板响应

结果和错误

  • SaveResult.java - 保存结果
  • DeleteResult.java - 删除结果
  • UndeleteResult.java - 恢复结果
  • UpsertResult.java - 更新或插入结果
  • Error.java - 错误信息
  • StatusCode.java - 状态代码
  • ExceptionCode.java - 异常代码
  • ExtendedErrorDetails.java - 扩展错误详情
  • DuplicateError.java - 重复错误
  • DuplicateResult.java - 重复结果
  • SendEmailError.java - 发送邮件错误

高级功能

  • ConvertLead_element.java - 转换线索请求
  • ConvertLeadResponse_element.java - 转换线索响应
  • EmptyRecycleBin_element.java - 清空回收站请求
  • EmptyRecycleBinResponse_element.java - 清空回收站响应
  • ProcessSubmitRequest_element.java - 处理提交请求
  • ProcessSubmitRequestResponse_element.java - 处理提交请求响应
  • ProcessSubmitRequestResult.java - 处理提交请求结果
  • GetUserInfo_element.java - 获取用户信息请求
  • GetUserInfoResponse_element.java - 获取用户信息响应
  • GetServerTimestamp_element.java - 获取服务器时间戳请求
  • GetServerTimestampResponse_element.java - 获取服务器时间戳响应
  • ResetPassword_element.java - 重置密码请求
  • ResetPasswordResponse_element.java - 重置密码响应
  • ResetPasswordResult.java - 重置密码结果
  • SetPassword_element.java - 设置密码请求
  • SetPasswordResponse_element.java - 设置密码响应
  • SetPasswordResult.java - 设置密码结果
  • ChangeOwnPassword_element.java - 修改自己的密码请求
  • ChangeOwnPasswordResponse_element.java - 修改自己的密码响应
  • ChangeOwnPasswordResult.java - 修改自己的密码结果

邮件功能

  • SendEmail_element.java - 发送邮件请求
  • SendEmailResponse_element.java - 发送邮件响应
  • SendEmailResult.java - 发送邮件结果
  • SendEmailMessage_element.java - 发送邮件消息请求
  • SendEmailMessageResponse_element.java - 发送邮件消息响应
  • SingleEmailMessage.java - 单封邮件消息
  • MassEmailMessage.java - 批量邮件消息
  • EmailFileAttachment.java - 邮件文件附件
  • Email.java - 邮件
  • EmailHeader_element.java - 邮件头
  • RenderEmailTemplate_element.java - 渲染邮件模板请求
  • RenderEmailTemplateResponse_element.java - 渲染邮件模板响应
  • RenderEmailTemplateResult.java - 渲染邮件模板结果
  • RenderStoredEmailTemplate_element.java - 渲染存储的邮件模板请求
  • RenderStoredEmailTemplateResponse_element.java - 渲染存储的邮件模板响应
  • RenderStoredEmailTemplateResult.java - 渲染存储的邮件模板结果
  • RenderStoredEmailTemplateRequest.java - 渲染存储的邮件模板请求
  • SendEmailOptOutPolicy.java - 发送邮件退出策略

SOAP 头部

  • AllOrNoneHeader_element.java - 全有或全无头
  • AllowFieldTruncationHeader_element.java - 允许字段截断头
  • AssignmentRuleHeader_element.java - 分配规则头
  • CallOptions_element.java - 调用选项头
  • CurrencyConversionHeader_element.java - 货币转换头
  • DebuggingHeader_element.java - 调试头
  • DebuggingInfo_element.java - 调试信息
  • DisableFeedTrackingHeader_element.java - 禁用 Feed 跟踪头
  • DuplicateRuleHeader_element.java - 重复规则头
  • EmailHeader_element.java - 邮件头
  • LocaleOptions_element.java - 区域设置选项头
  • MruHeader_element.java - 最近使用头
  • PackageVersionHeader_element.java - 包版本头
  • QueryOptions_element.java - 查询选项头
  • SessionHeader_element.java - 会话头
  • StreamingEnabledHeader_element.java - 流式启用头
  • UserTerritoryDeleteHeader_element.java - 用户地域删除头

数据分类

  • DataCategory.java - 数据分类
  • DataCategoryGroup.java - 数据分类组
  • DataCategoryGroupSobjectTypePair.java - 数据分类组对象类型对
  • DescribeDataCategoryGroups_element.java - 描述数据分类组请求
  • DescribeDataCategoryGroupsResponse_element.java - 描述数据分类组响应
  • DescribeDataCategoryGroupResult.java - 描述数据分类组结果
  • DescribeDataCategoryGroupStructures_element.java - 描述数据分类组结构请求
  • DescribeDataCategoryGroupStructuresResponse_element.java - 描述数据分类组结构响应
  • DescribeDataCategoryGroupStructureResult.java - 描述数据分类组结构结果
  • DescribeDataCategoryMappings_element.java - 描述数据分类映射请求
  • DescribeDataCategoryMappingsResponse_element.java - 描述数据分类映射响应
  • DescribeDataCategoryMappingResult.java - 描述数据分类映射结果

应用菜单

  • DescribeAppMenu_element.java - 描述应用菜单请求
  • DescribeAppMenuResponse_element.java - 描述应用菜单响应
  • DescribeAppMenuResult.java - 描述应用菜单结果
  • DescribeAppMenuItem.java - 应用菜单项

主题

  • DescribeTheme_element.java - 描述主题请求
  • DescribeThemeResponse_element.java - 描述主题响应
  • DescribeThemeResult.java - 描述主题结果
  • DescribeThemeItem.java - 主题项
  • DescribeGlobalTheme_element.java - 描述全局主题请求
  • DescribeGlobalThemeResponse_element.java - 描述全局主题响应
  • DescribeGlobalTheme.java - 全局主题

路径助手

  • DescribePathAssistants_element.java - 描述路径助手请求
  • DescribePathAssistantsResponse_element.java - 描述路径助手响应
  • DescribePathAssistantsResult.java - 描述路径助手结果
  • DescribePathAssistant.java - 路径助手
  • DescribePathAssistantStep.java - 路径助手步骤
  • DescribePathAssistantField.java - 路径助手字段

软电话布局

  • DescribeSoftphoneLayout_element.java - 描述软电话布局请求
  • DescribeSoftphoneLayoutResponse_element.java - 描述软电话布局响应
  • DescribeSoftphoneLayoutResult.java - 描述软电话布局结果
  • DescribeSoftphoneLayoutItem.java - 软电话布局项
  • DescribeSoftphoneLayoutSection.java - 软电话布局节
  • DescribeSoftphoneLayoutInfoField.java - 软电话布局信息字段
  • DescribeSoftphoneLayoutCallType.java - 软电话布局呼叫类型
  • DescribeSoftphoneScreenPopOption.java - 软电话屏幕弹出选项

SOQL 列表视图

  • DescribeSoqlListViews_element.java - 描述 SOQL 列表视图请求
  • DescribeSoqlListViewsResponse_element.java - 描述 SOQL 列表视图响应
  • DescribeSoqlListViewResult.java - 描述 SOQL 列表视图结果
  • DescribeSoqlListView.java - SOQL 列表视图
  • DescribeSoqlListViewParams.java - SOQL 列表视图参数
  • DescribeSoqlListViewColumn.java - SOQL 列表视图列
  • DescribeSoqlListViewOrderBy.java - SOQL 列表视图排序
  • DescribeSoqlListViewFilter.java - SOQL 列表视图过滤器
  • DescribeSoqlListViewScope.java - SOQL 列表视图范围
  • DescribeSObjectListViews_element.java - 描述对象列表视图请求
  • DescribeSObjectListViewsResponse_element.java - 描述对象列表视图响应

知识设置

  • DescribeKnowledgeSettings_element.java - 描述知识设置请求
  • DescribeKnowledgeSettingsResponse_element.java - 描述知识设置响应

批准布局

  • DescribeApprovalLayout_element.java - 描述批准布局请求
  • DescribeApprovalLayoutResponse_element.java - 描述批准布局响应
  • DescribeApprovalLayoutResult.java - 描述批准布局结果
  • DescribeApprovalLayout.java - 批准布局

Visualforce

  • DescribeVisualForce_element.java - 描述 Visualforce 请求
  • DescribeVisualForceResponse_element.java - 描述 Visualforce 响应
  • DescribeVisualForceResult.java - 描述 Visualforce 结果
  • VisualforcePage.java - Visualforce 页面

动作覆盖

  • ActionOverride.java - 动作覆盖
  • ActionOverrideType.java - 动作覆盖类型

字段和关系

  • Field.java - 字段
  • ChildRelationship.java - 子关系
  • PicklistEntry.java - 选项列表项
  • FieldDefinition.java - 字段定义

SObject

  • sobject/SObject.java - SObject 基类
  • sobject/SObject.java - SObject 实现

故障

  • fault/ApiFault.java - API 故障
  • fault/ApiQueryFault.java - API 查询故障
  • fault/InvalidIdFault.java - 无效 ID 故障
  • fault/InvalidFieldFault.java - 无效字段故障
  • fault/InvalidSObjectFault.java - 无效对象故障
  • fault/MalformedQueryFault.java - 格式错误查询故障
  • fault/MalformedSearchFault.java - 格式错误搜索故障
  • fault/InvalidQueryLocatorFault.java - 无效查询定位器故障
  • fault/LoginFault.java - 登录故障
  • fault/InvalidNewPasswordFault.java - 无效新密码故障
  • fault/InvalidOldPasswordFault.java - 无效旧密码故障
  • fault/UnexpectedErrorFault.java - 意外错误故障
  • fault/FaultCode.java - 故障代码
  • fault/ExceptionCode.java - 异常代码

其他类型

  • Address.java - 地址
  • Email.java - 邮件
  • Article.java - 文章
  • AnalyticsCloudComponent.java - Analytics Cloud 组件
  • Canvas.java - Canvas
  • CustomLinkComponent.java - 自定义链接组件
  • WebLinkPosition.java - Web 链接位置
  • WebLinkType.java - Web 链接类型
  • WebLinkWindowType.java - Web 链接窗口类型
  • AppMenuType.java - 应用菜单类型
  • CaseType.java - 案例类型
  • AttachmentRetrievalOption.java - 附件检索选项
  • DebugLevel.java - 调试级别
  • DifferenceType.java - 差异类型
  • ShareAccessLevel.java - 共享访问级别
  • UiBehavior.java - UI 行为
  • TabOrderType.java - 标签页顺序类型
  • SoapType.java - SOAP 类型
  • StringList.java - 字符串列表
  • SimpleNameObjectValuePair.java - 简单名称对象值对
  • AdditionalInformationMap.java - 附加信息映射
  • ChangeEventHeader.java - 变更事件头
  • ChangeEventType.java - 变更事件类型

SOQL 相关

  • SoqlCondition.java - SOQL 条件
  • SoqlConditionGroup.java - SOQL 条件组
  • SoqlWhereCondition.java - SOQL WHERE 条件
  • SoqlSubQueryCondition.java - SOQL 子查询条件
  • SoqlNotCondition.java - SOQL NOT 条件
  • SoqlConjunction.java - SOQL 连接词
  • SoqlOperator.java - SOQL 操作符
  • StartsWith.java - 以...开始

注意: 该模块共包含 687 个 Java 文件,涵盖了 Salesforce Partner API 的所有功能和元数据类型。