我需要创建一个新的费用卡,输入参数是数量,日期和描述。

必须在费用卡中填写的字段才能创建它:

持卡人是联系月费用申请是一个自定义对象。
创建费用卡时,如果在“日期”字段中输入的日期前存在月份费用申请,则创建一个新的费用卡,从现有的支出申请中提取月份费用申请。
如果在“日期”字段中输入的日期之前没有月费用申请,则需要创建月费用应用程序,然后创建一个费用地图,其中月份费用应用程序将创建一个新的月费用应用程序。
我试图创建一个与输入参数相等的“金额”“日期”“描述”的费用映射,但我不知道如何指定MonthExpenseApplication__c
public static void createNewExpenseCard(Integer amount, Date createdDate, String description) {
Month_Expense_Application__c MonthApplication = [
SELECT Name, MonthDate__c
FROM Month_Expense_Application__c
WHERE MonthDate__c =: createdDate
];
if (MonthApplication != null) {
ExpenseCard__c exp = new ExpenseCard__c(
Amount__c = amount,
CardDate__c = createdDate,
Description__c = description,
CardKeeper__c = '0034x00001K7kGCAAZ'
);
exp.MonthExpenseApplication__c = [
SELECT MonthExpenseApplication__c
FROM ExpenseCard__c
WHERE MonthExpenseApplication__c =: MonthApplication.Id
].Id;
insert exp;
} else {
Month_Expense_Application__c monthApp = new Month_Expense_Application__c(
Balance__c = 1000,
MonthDate__c = createdDate,
Keeper__c = '0034x00001K7kGCAAZ'
);
ExpenseCard__c exp2 = new ExpenseCard__c(
Amount__c = amount,
CardDate__c = createdDate,
Description__c = description,
CardKeeper__c = '0034x00001K7kGCAAZ'
);
insert exp2;
}
}发布于 2022-11-10 22:53:10
这是危险的:
Month_Expense_Application__c MonthApplication = [
SELECT Name, MonthDate__c
FROM Month_Expense_Application__c
WHERE MonthDate__c =: createdDate
];如果结果为零,它将抛出"列表中没有要分配的行。“。如果超过一个的话,也是相似的。
像这样吗?
Integer amount = 50;
Date createdDate = System.today();
String description = 'Lorem ipsum...';
Month_Expense_Application__c app;
List<Month_Expense_Application__c> applications = [SELECT Id
FROM Month_Expense_Application__c
WHERE MonthDate__c =: createdDate
LIMIT 1];
if(applications.isEmpty()){
app = new Month_Expense_Application__c(
Balance__c = 1000,
MonthDate__c = createdDate,
Keeper__c = '0034x00001K7kGCAAZ'
);
insert app;
} else {
app = applications[0];
}
// one way or another - the monthly allowance exists now. So just use its id in the lookup
ExpenseCard__c exp = new ExpenseCard__c(
Amount__c = amount,
CardDate__c = createdDate,
Description__c = description,
CardKeeper__c = '0034x00001K7kGCAAZ',
Month_Expense_Application__c = app.Id
);有更优雅的方法可以做到这一点,您需要阅读有关upsert和外部ids的内容--但是它应该足够好。
https://stackoverflow.com/questions/74387806
复制相似问题