获取销售 ID 以获取子对象项目数量并检查库存
Get Sale ID to acquire child objects items quantity and check then with stock
继续尝试使用 apex 开发的初始技能解决问题,我遇到了下一个问题:
我正在尝试获取状态为“已售出”的 Sales__c ID,其中 Sale Id 检查属于 Sale 值 [=43= 的 Order_Item__c ],Item_Quantity__c.
然后在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);
}
我认为您需要更改 WHERE 子句以使用 "Id" 而不是 "Sale__c":
List<Order_Item__c> orders = [SELECT Id,Vehicle_Name__c,Item_Quantity__c FROM Order_Item__c WHERE Id IN : sale];
您的对象结构不明确。我认为您有以下对象:
Sales__c 字段:Id、Status
Order_Item__c 字段:Id、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!');
}
}
}
}
假设您没有多个订单购买同一辆车,在这种情况下,您可能需要将多个订单的数量相加。
请记住,我只是在 SO 中编写了该代码,它很容易包含错误。
继续尝试使用 apex 开发的初始技能解决问题,我遇到了下一个问题:
我正在尝试获取状态为“已售出”的 Sales__c ID,其中 Sale Id 检查属于 Sale 值 [=43= 的 Order_Item__c ],Item_Quantity__c.
然后在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);
}
我认为您需要更改 WHERE 子句以使用 "Id" 而不是 "Sale__c":
List<Order_Item__c> orders = [SELECT Id,Vehicle_Name__c,Item_Quantity__c FROM Order_Item__c WHERE Id IN : sale];
您的对象结构不明确。我认为您有以下对象:
Sales__c 字段:Id、Status
Order_Item__c 字段:Id、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!');
}
}
}
}
假设您没有多个订单购买同一辆车,在这种情况下,您可能需要将多个订单的数量相加。 请记住,我只是在 SO 中编写了该代码,它很容易包含错误。