Salesforce 比较两个不同的SOQL查询

Salesforce 比较两个不同的SOQL查询,salesforce,visualforce,apex,force.com,Salesforce,Visualforce,Apex,Force.com,我是salesforce的新手,我被这里的情况困住了 我每小时都有一节课。我用下面的代码打了一个帐户,并向MAROPOST Marketing automation tool发送了一封电子邮件。当这种情况发生时,我希望跟踪该帐户,并创建一个案例或日志,说明已发送欢迎电子邮件,这样我就不会再次访问同一帐户 请帮忙。下面是工人阶级。请帮忙 public class PD_WelcomeMaroPost { public static string sendEmailThroughMaro(strin

我是salesforce的新手,我被这里的情况困住了

我每小时都有一节课。我用下面的代码打了一个帐户,并向MAROPOST Marketing automation tool发送了一封电子邮件。当这种情况发生时,我希望跟踪该帐户,并创建一个案例或日志,说明已发送欢迎电子邮件,这样我就不会再次访问同一帐户

请帮忙。下面是工人阶级。请帮忙

public class PD_WelcomeMaroPost {
public static string sendEmailThroughMaro(string myInpEmail) {
    string successContacts = '';
    string failureContacts = '';


    // SQL to fetch FBO who Joined Today
    list<Account> conts = new list<Account> ([SELECT name, Email_FLP_com__c,
    (SELECT Id
    FROM Stripe_Subscriptons__r
    WHERE Start_Date__c= TODAY
        AND Status__c='active'
        AND Welcome_Email__C = false
    LIMIT 1)
from account
where ID IN (
    select Distributor__c
    from Stripe_Subscripton__c
    where Start_Date__c= TODAY
        AND Status__c='active'
        AND Welcome_Email__C = false)
AND  Email_FLP_com__c != NULL
LIMIT 100]);



    system.debug('>>>>>>>>>>' + conts);
    overallEmail myEmail = new overallEmail();
    List<Stripe_Subscripton__c> subsToUpdate = new List<Stripe_Subscripton__c>();
    for(Account c : conts){

        myEmail.email.campaign_id = 172;
        myEmail.email.contact.Email = c.Email_FLP_com__c;
        myEmail.email.contact.first_name = c.name;
        /**MAp<String, String> tags = new Map<String, String>();
        tags.put('firstName', c.name);
        myEmail.email.tags = tags;**/
        system.debug('#### Input JSON: ' + JSON.serialize(myEmail));


        try{
            String endpoint = 'http://api.maropost.com/accounts/1173/emails/deliver.json?auth_token=j-V4sx8ueUT7eKM8us_Cz5JqXBzoRrNS3p1lEZyPUPGcwWNoVNZpKQ';
            HttpRequest req = new HttpRequest();
            req.setEndpoint(endpoint);
            req.setMethod('POST');
            req.setHeader('Content-type', 'application/json');
            req.setbody(JSON.serialize(myEmail));
            Http http = new Http();
            system.debug('Sending email');
            HTTPResponse response = http.send(req); 
            system.debug('sent email');
            string resultBodyGet = '';
            resultBodyGet = response.getBody();
            system.debug('Output response:' + resultBodyGet);
            maroResponse myMaroResponse = new maroResponse();
            myMaroResponse = (maroResponse) JSON.deserialize(resultBodyGet, maroResponse.class);
            system.debug('#### myMaroResponse: ' + myMaroResponse);
            if(myMaroResponse.message == 'Email was sent successfully')
               successContacts = successContacts + ';' + c.Email_FLP_com__c;
            else
                failureContacts = failureContacts + ';' + c.Email_FLP_com__c;
        }
        catch (exception e) {
            failureContacts = failureContacts + ';' + c.Email_FLP_com__c;
            system.debug('#### Exception caught: ' + e.getMessage());                
        }

        c.Stripe_Subscriptons__r[0].Welcome_Email__c = true;
        subsToUpdate.add(c.Stripe_Subscriptons__r[0]);

    }
    Update subsToUpdate;
   return 'successContacts=' + successContacts + '---' + 'failureContacts=' + failureContacts;   

}

public class maroResponse {
    public string message {get;set;}
}

public class overallEmail {
    public emailJson email = new emailJson();
}

public class emailJson {
    public Integer campaign_id;
    public contactJson contact = new contactJson();
   // Public Map<String, String> tags;
}

public class contactJson {
    public string email;
    public string first_name;
}

}

在阅读了您的代码之后,我看不出您是在哪里尝试实现这一点的。如果你发布你的尝试,我很乐意帮助你解决它

相反,我会给你不同的逻辑来解释你要做的事情

1.) create new checkbox field
2.) in batch query where box is not checked
3.) send email
4.) check checkbox
为了回答您的评论,这里有一些示例代码,您需要自己修复它,我只是在创建临时名称

for(sobjectname gg:[your query]){
Send email;
gg.checkbox = checked;
update gg;
}
不过最好是把它放大

list<yourSObject> tobeupdated = new list<yourSObject>([Your query]);

for(yourSObject gg: tobeupdated){
send email;
gg.checkbox = true;
}
update tobeupdated;

你在做一个循环调用,有一个循环。请参阅以编程方式获取当前和最大数字,而不是硬编码

除此之外,这应该是非常简单的改变。首先将您的过滤器添加到查询中,然后添加一个子查询,类似于提取相关订阅列表的联接

list conts=新列表[选择名称、电子邮件、电子邮件、, 选择Id 来自条带订阅 其中开始日期=今天 和状态\uu c='active' 欢迎发送电子邮件 限制1 从帐户 我在哪里 选择分发服务器 来自条带下标 其中开始日期=今天 和状态\uu c='active' 欢迎发送电子邮件 和Email_FLP_com__c!=NULL 上限为100]; 那就多了几行

列表子组日期=新列表; 账户a:续{ //这里有你的maropost密码吗 a、 条带化订阅[0]。欢迎发送电子邮件\u c=true; subsoupdate.adda.Stripe_订阅[0]; } 更新子组日期;
当然,只有在callout正常时,您可能希望将该复选框设置为true

非常感谢。我已经在Stripe\u Subscripton\uuuC对象上创建了一个复选框,这样当我写这个查询时,我会说从Stripe\u Subscripton\uC中选择Distributor\uuuuC,其中Start\u Date\uuuuuu c=TODAY,Status\uuuuuu c='active'和Welcome\u Email\uuuu c=FALSE。当我发送电子邮件时,请帮助我将此复选框更改为TRUE,以便在我的下一次迭代中不会命中此特定记录我已使用您建议的逻辑进行了更新,考虑到限制,但我仍然无法更新此复选框。顺便说一下,谢谢你的帮助。我从你身上学到了很多,到底发生了什么?它会在任何时候抛出错误吗?它是否成功发送标注但不执行更新?您在调试日志中看到任何可疑的内容吗?也许它找不到任何符合条件的帐户?在查询中尝试使用一个好的帐户硬编码Id,并注释掉Try catch,看看会发生什么?它不会抛出错误。。。查询以上运行,我们发送电子邮件,我们收到它们。也尝试了一个帐户,只是硬编码的名称。调试日志对更新操作有何说明?它运行正常吗?如果您将System.debugsubsoupdate;就在那之前?我没主意了,你可能有个触发器或者什么东西可以清除这个复选框?如果从该函数中注释掉几乎所有与callout相关的内容,只保留query、loop、设置复选框和update调用会怎么样?我已经添加了System.debugsubsoupdate;更新后和更新前,令我惊讶的是,我没有在日志中找到它。我看到没有触发器,没有工作流规则。我对阻止我更新的东西感到惊讶。