2017-02-23 11 views
0

이 정점 개발의 초기 기술로 문제를 해결하는 나의 시련과 계속 함께 다음 확인 받기 상태 이드가 판매에 속하는 Order_Item__c 내부 판매 아이디 검사로, '를 판매'Vehicle_Name__c, Item_Quantity__c. 판매 ID는 아이가 항목 수량 개체를 획득하고 난 다음 문제를 재고

그런 다음 Vehicle__c 내부 에 의해 Vehicle_Name__c를 검색하고 확인 Vehicle__c.Quantity__c < = 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); 



} 

답변

1

개체 구조가 불분명하다. 나는 다음과 같은 개체가 생각 :

필드

Sales__c : ID, 상태
필드 Order_Item__c : 아이디, Sale__c, Vehicle_Name__c, Item_Quantity__c
필드 Vehicle__c : ID, 이름, 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!'); 
     } 
    } 
    } 
} 

이 당신이 아마 여러 개의 주문의 수량을 추가해야 할 것이 경우에 같은 차에 대한 여러 개의 주문을하지 않아도 가정합니다. 방금 ​​그 코드를 작성 했으므로 쉽게 오류가있을 수 있습니다.

0

내가 대신 "Sale__c"의 "ID"를 사용하여 WHERE 절을 변경할 필요가 있다고 생각 :

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