Salesforce 获取销售ID以获取子对象项目数量,然后检查库存

Salesforce 获取销售ID以获取子对象项目数量,然后检查库存,salesforce,apex-code,apex,Salesforce,Apex Code,Apex,继续使用apex开发的初始技能解决问题的尝试,我遇到了下一个问题: 我正在尝试获取状态为“已售出”的Sales\uu c Id,并在属于Sale values Vehicle\u Name\uu c、Item\u Quantity\uu c的Order\u Item\uu c中检查Sale Id 然后在Vehicle_u_uC中按Vehicle_uName_uC搜索,并检查Vehicle_uC.Quantity_uC我认为您需要将WHERE子句更改为使用Id而不是Sale_uC: List<

继续使用apex开发的初始技能解决问题的尝试,我遇到了下一个问题:

我正在尝试获取状态为“已售出”的Sales\uu c Id,并在属于Sale values Vehicle\u Name\uu c、Item\u Quantity\uu c的Order\u Item\uu c中检查Sale Id


然后在Vehicle_u_uC中按Vehicle_uName_uC搜索,并检查Vehicle_uC.Quantity_uC我认为您需要将WHERE子句更改为使用Id而不是Sale_uC:

List<Order_Item__c> orders = [SELECT Id,Vehicle_Name__c,Item_Quantity__c FROM Order_Item__c WHERE Id  IN : sale];

您的对象结构不清楚。我认为你有以下目标:

带以下字段的销售信息:Id、状态 带有以下字段的订单\项目\ c:Id、销售\ c、车辆\名称\ c、项目\数量\ c 带有以下字段的车辆:Id、名称、数量

我不知道你为什么用名字而不是Id来引用车辆,但这是你的决定。如果是这样的话,像这样的方法应该会奏效:

trigger SaleCheckout on Sales__c (before update) {
  List<Order_Item__c> orders = [SELECT Vehicle_Name__c, Item_Quantity__c FROM Order_Item__c WHERE Sale__c IN :Trigger.new AND Sale__r.Status = 'Sold'];
  System.debug('2-- Orders IDs: ' + orders);

  Set<String> vehicleNames = new Set<String>();
  for (Order_Item__c order : orders)
  {
    vehicleNames.add(order.Vehicle_Name__c);
  }

  List<Vehicle__c> vehicles = [SELECT Name, Quantity__c FROM Vehicle__c WHERE Name IN :vehicleNames];
  for (Vehicle__c vehicle : vehicles)
  {
    for (Order_Item__c order: orders)
    {
      if (order.Vehicle_Name__c == vehicle.Name && vehicle.Quantity__c < order.Item_Quatity__c)
      {
        //do something here, let's say we want to fail the sale
        Trigger.newMap.get(order.Sale__c).addError('You are trying to sell more cars than we have! You sold ' + String.valueOf(order.Item_Quantity__c) + ' cars of type ' + order.Vehicle_Name__c + ' and we only have ' + String.valueOf(vehicle.Quantity__c) + ' on the lot!');
      }
    }
  }
}
这假设您没有同一辆车的多个订单,在这种情况下,您可能需要将多个订单的数量相加。 请记住,我刚刚在中编写了该代码,因此它很容易包含错误

trigger SaleCheckout on Sales__c (before update) {
  List<Order_Item__c> orders = [SELECT Vehicle_Name__c, Item_Quantity__c FROM Order_Item__c WHERE Sale__c IN :Trigger.new AND Sale__r.Status = 'Sold'];
  System.debug('2-- Orders IDs: ' + orders);

  Set<String> vehicleNames = new Set<String>();
  for (Order_Item__c order : orders)
  {
    vehicleNames.add(order.Vehicle_Name__c);
  }

  List<Vehicle__c> vehicles = [SELECT Name, Quantity__c FROM Vehicle__c WHERE Name IN :vehicleNames];
  for (Vehicle__c vehicle : vehicles)
  {
    for (Order_Item__c order: orders)
    {
      if (order.Vehicle_Name__c == vehicle.Name && vehicle.Quantity__c < order.Item_Quatity__c)
      {
        //do something here, let's say we want to fail the sale
        Trigger.newMap.get(order.Sale__c).addError('You are trying to sell more cars than we have! You sold ' + String.valueOf(order.Item_Quantity__c) + ' cars of type ' + order.Vehicle_Name__c + ' and we only have ' + String.valueOf(vehicle.Quantity__c) + ' on the lot!');
      }
    }
  }
}