首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要创建一张新的消费卡

我需要创建一张新的消费卡
EN

Stack Overflow用户
提问于 2022-11-10 10:53:42
回答 1查看 23关注 0票数 1

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

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

持卡人是联系月费用申请是一个自定义对象。

创建费用卡时,如果在“日期”字段中输入的日期前存在月份费用申请,则创建一个新的费用卡,从现有的支出申请中提取月份费用申请。

如果在“日期”字段中输入的日期之前没有月费用申请,则需要创建月费用应用程序,然后创建一个费用地图,其中月份费用应用程序将创建一个新的月费用应用程序。

我试图创建一个与输入参数相等的“金额”“日期”“描述”的费用映射,但我不知道如何指定MonthExpenseApplication__c

代码语言:javascript
复制
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;
        }
        
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-10 22:53:10

这是危险的:

代码语言:javascript
复制
Month_Expense_Application__c MonthApplication = [
            SELECT Name, MonthDate__c
            FROM Month_Expense_Application__c
            WHERE MonthDate__c =: createdDate
        ];

如果结果为零,它将抛出"列表中没有要分配的行。“。如果超过一个的话,也是相似的。

像这样吗?

代码语言:javascript
复制
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的内容--但是它应该足够好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74387806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档