Salesforce 保存错误:字段表达式的初始项必须是具体的SObject:LIST<;QuoteLineItem>;

Salesforce 保存错误:字段表达式的初始项必须是具体的SObject:LIST<;QuoteLineItem>;,salesforce,apex-code,Salesforce,Apex Code,我正在更新时编写触发器,但我遇到此错误 保存错误:字段表达式的初始项必须是具体的SObject:LIST 我不确定这是什么原因造成的。这是我的密码 trigger Update_Discount_on_QuoteLineItem on Quote (after update) { List <QuoteLineItem> QLI = new List <QuoteLineItem>(); Map<id,double> MapSoftwareDiscoun

我正在更新时编写触发器,但我遇到此错误

保存错误:字段表达式的初始项必须是具体的SObject:LIST

我不确定这是什么原因造成的。这是我的密码

  trigger Update_Discount_on_QuoteLineItem on Quote (after update) {

List <QuoteLineItem> QLI = new List <QuoteLineItem>();
Map<id,double> MapSoftwareDiscount= new Map <id,double>();
Map<id,double> MapHardwareDiscount= new Map <id,double>();
Set <id> Qid= new Set<id>();

for (Quote  Q: Trigger.new)
{
    if (Q.Software_Discount__c!=System.Trigger.oldMap.get(Q.Id).Software_Discount__c ||Q.hardware_Discount__c!=System.Trigger.oldMap.get(Q.Id).hardware_Discount__c )
    {
        Qid.add(Q.id);
        MapSoftwareDiscount.put(Q.id,Q.Software_Discount__c);
        MapHardwareDiscount.put(Q.id,Q.hardware_Discount__c);

    }
}

QLI=[select id,QuoteId,product_category__c,Discount from QuoteLineItem where QuoteId in :Qid];
for(integer i=0; i <QLI.size();i++)
{
    if (QLI[i].product_category__c=='Software')
    {
        QLI[i].Discount=MapSoftwareDiscount.get(QLI.QuoteId); //**ERRORS OUT HERE**
    }
    else if(QLI[i].product_category__c=='Hardware')
    {
        QLI[i].Discount=MapHardwareDiscount.get(QLI.QuoteId);
    }
}
update QLI;



}
在报价时触发更新折扣(更新后){
List QLI=新列表();
Map MapSoftwareDiscount=新地图();
Map MaphardwareDiscovery=新地图();
Set Qid=新的Set();
对于(引用Q:Trigger.new)
{
if(Q.Software\u Discount\u c!=System.Trigger.oldMap.get(Q.Id).Software\u Discount\u c | Q.hardware\u Discount\u c!=System.Trigger.oldMap.get(Q.Id).hardware\u Discount\u c)
{
Q.d.添加(Q.id);
MapSoftwareDiscount.put(Q.id,Q.Software\u Discount\u c);
MaphardwareDiscovery.put(Q.id、Q.hardware\u折扣\uu c);
}
}
QLI=[选择id、QuoteId、产品类别c、来自QuoteLineItem的折扣,其中QuoteId位于:Qid];

对于(整数i=0;i我发现了问题所在。我应该使用

  QLI[i].Discount=MapSoftwareDiscount.get(QLI[i].QuoteId); 
我没有将
[I]
包含在
get(QLI[I].QuoteId)