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

时间:2017-02-23 14:34:37

标签: salesforce apex-code apex

继续我使用顶点开发的初始技能解决问题的试验,我有下一个问题:

我正在尝试获取状态为“已售出”的 Sales__c ID,并在 Order_Item__c <中检查销售ID / strong>属于销售 Vehicle_Name__c,Item_Quantity__c

然后在 Vehicle__c 中搜索 Vehicle_Name__c ,并检查 Vehicle__c.Quantity__c&lt; = Order_Item__c.Item_Quantity__c

这是我到目前为止所做的事情,但它不起作用,我不知道如何继续。

有人可以用代码帮我吗?

trigger SaleCheckout on Sales__c (before update) {

    Set<String> sale = new Set<String>();

    for (Sales__c s : Trigger.new){
        sale.add(s.Id);

        //Sale ID
        System.debug('1-- Sale ID: '+ sale);        
    }

    List<Order_Item__c> orders = [SELECT Id,Vehicle_Name__c,Item_Quantity__c FROM Order_Item__c WHERE Sale__c  IN : sale];
    // Orders with Sale ID
    System.debug('2-- Orders IDs: ' + orders);



}

2 个答案:

答案 0 :(得分:1)

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

带有字段的

Sales__c :ID,状态
Order_Item__c ,包含字段:Id,Sale__c,Vehicle_Name__c,Item_Quantity__c
Vehicle__c ,包含字段:Id,Name,Quantity__c

我不确定您为什么要按名称而不是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!');
      }
    }
  }
}

这假设您没有同一辆车的多个订单,在这种情况下,您可能需要累计多个订单的数量。 请记住,我只是在SO中编写了该代码,并且很容易包含错误。

答案 1 :(得分:0)

我认为您需要更改WHERE子句以使用“Id”而不是“Sale__c”:

group by