Java 使用SFDC合作伙伴API创建新的“OpportunityLineItemSchedule”时出错

Java 使用SFDC合作伙伴API创建新的“OpportunityLineItemSchedule”时出错,java,salesforce,Java,Salesforce,当我尝试创建一个新的OpportunityLineItemSchedule时,我遇到了以下错误 错误代码:对交叉引用实体的访问不足 错误消息:对交叉引用id的访问权限不足 附件是代码片段。任何帮助都是非常有用的 SObject[] rs = new SObject[1]; MessageElement[] specificRS = new MessageElement[6]; specificRS[0] = new MessageElement(new QName("OpportunityLin

当我尝试创建一个新的OpportunityLineItemSchedule时,我遇到了以下错误

错误代码:对交叉引用实体的访问不足

错误消息:对交叉引用id的访问权限不足

附件是代码片段。任何帮助都是非常有用的

SObject[] rs = new SObject[1];
MessageElement[] specificRS = new MessageElement[6];
specificRS[0] = new MessageElement(new QName("OpportunityLineItemId"),"00k7000000DFLqfAAH");
specificRS[1] = new MessageElement(new QName("Description"),"Rev Schedule Descr");
specificRS[2] = new MessageElement(new QName("Type"),"Quantity"); 
specificRS[3] = new MessageElement(new QName("Quantity"),(double)2);
specificRS[4] = new MessageElement(new QName("Revenue"),(double)400000.00);
specificRS[5] = new MessageElement(new QName("ScheduleDate"),"2010-10-30");

rs[0] = new SObject();
rs[0].setType("OpportunityLineItemSchedule");
rs[0].set_any(specificRS);

SaveResult[] sr = null;
try {
  sr = binding.create(rs);
} catch (Exception ex) {
  System.out.println("An unexpected error has occurred." + ex.getMessage());
  ex.printStackTrace();
  return;
}
以下作品

    MessageElement[] specificRS2 = new MessageElement[5];
specificRS2[0] = new MessageElement(new QName("OpportunityLineItemId"),"00k7000000DFcOG");
// PricebookEntryId can be found by joining PricebookEntry and Pricebook2 tables (on Product2Id and 
specificRS2[1] = new MessageElement(new QName("Description"),"Rev Schedule Descr2");
specificRS2[2] = new MessageElement(new QName("ScheduleDate"),"2010-10-31");
//specificRS[3] = new MessageElement(new QName("Quantity"),(double)2);
specificRS2[3] = new MessageElement(new QName("Revenue"),(double)10.00);
//specificRS[4] = new MessageElement(new QName("Type"),"Quantity"); // and/or "Revenue"
specificRS2[4] = new MessageElement(new QName("Type"),"Revenue"); // and/or "Quantity"

rs[1] = new SObject();
rs[1].setType("OpportunityLineItemSchedule");
rs[1].set_any(specificRS2);

SaveResult[] sr = null;
try {
  sr = binding.create(rs);
} catch (Exception ex) {
  System.out.println("An unexpected error has occurred." + ex.getMessage());
  ex.printStackTrace();
  return;
}

当代码试图为不存在的对象或用户无权访问的对象使用ID时,这通常是一个错误。我认为这两个代码片段之间的唯一区别是OpportunityLineItem ID?检查运行代码的用户是否可以访问具有该ID的项目。

请查看OpportunityLineItemSchedule的和文档

OpportunityLineItemSchedule允许的类型值取决于产品级计划首选项以及行项目是否有任何现有计划

您可能需要检查是否存在OpportunityLineItemSchedule记录

允许的数量和收入字段值取决于类型字段的值

您只设置数量或收入字段,而不是两者