Регистрация  |  Вход

Проблема с extentions стандартного контроллера

Всем привет.
Такая проблема - пытаюсь создать extentions стандартного контроллера, чтобы прикрутить кнопку к Contacts.
Создал класс апекса

public with sharing class AddCommUserController {
private final Account acct;
private final Contact cont;
private final User usr;
public String ContactOwnerID;
public String ManagerUserID;
public String ManagerEMail;
public String AccName;
public String EmailBody;
public String EmailSubject;

public AddCommUserController(ApexPages.StandardController stdController) {
this.cont = (Contact)stdController.getRecord();
ContactOwnerID = cont.OwnerId;
usr = [SELECT ManagerId FROM User WHERE Id = :ContactOwnerID];
ManagerUserID = usr.ManagerId;
usr = [SELECT Email FROM User WHERE Id = :ManagerUserID];
ManagerEMail = usr.Email;
acct = [SELECT Name FROM Account WHERE Id=:cont.AccountId];
AccName = acct.Name;
EmailSubject = 'Approval request for adding Customer Community User';
EmailBody = 'Please approve new Customer Community User:'+'\n'+
'Account: '+AccName+'\n'+
'Contact: '+cont.FirstName+' '+cont.LastName;
}

public void sendMail(String address, String subject, String body) {
// Create an email message object
Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
String[] toAddresses = new String[] {address};
mail.setToAddresses(toAddresses);
mail.setSubject(subject);
mail.setPlainTextBody(body);
// Pass this email message to the built-in sendEmail method
// of the Messaging class
Messaging.SendEmailResult[] results = Messaging.sendEmail(
new Messaging.SingleEmailMessage[] { mail });
inspectResults(results);
}

// Helper method
private static Boolean inspectResults(Messaging.SendEmailResult[] results) {
Boolean sendResult = true;

// sendEmail returns an array of result objects.
// Iterate through the list to inspect results.
// In this class, the methods send only one email,
// so we should have only one result.
for (Messaging.SendEmailResult res : results) {
if (res.isSuccess()) {
System.debug('Email sent successfully');
}
else {
sendResult = false;
System.debug('The following errors occurred: ' + res.getErrors());
}
}

return sendResult;
}
}


Страница:
<apex:page standardController="Contact" extensions="AddCommUserController">
<apex:form >
<apex:commandButton value="Add Community User" Action="{!sendMail}">
<apex:param name="address" value="{!ManagerEMail}" />
<apex:param name="subject" value="{!EmailSubject}" />
<apex:param name="body" value="{!EmailBody}" />
</apex:commandButton>
</apex:form>
</apex:page>

В итоге - ругается:
Unknown method 'ContactStandardController.sendMail()

Что я делаю не так?..

Всем привет.
Такая проблема - пытаюсь создать extentions стандартного контроллера, чтобы прикрутить кнопку к Contacts.
Создал класс апекса
[code]public with sharing class AddCommUserController {
	private final Account acct;
    private final Contact cont;
    private final User usr;
    public String ContactOwnerID;
    public String ManagerUserID;
    public String ManagerEMail;
    public String AccName;
    public String EmailBody;
    public String EmailSubject;

    public AddCommUserController(ApexPages.StandardController stdController) {
        this.cont = (Contact)stdController.getRecord();
        ContactOwnerID = cont.OwnerId;
        usr = [SELECT ManagerId FROM User WHERE Id = :ContactOwnerID];
        ManagerUserID = usr.ManagerId;
		usr = [SELECT Email FROM User WHERE Id = :ManagerUserID]; 
        ManagerEMail = usr.Email;
        acct = [SELECT Name FROM Account WHERE Id=:cont.AccountId];
        AccName = acct.Name;
        EmailSubject = 'Approval request for adding Customer Community User';
        EmailBody = 'Please approve new Customer Community User:'+'\n'+
                     'Account: '+AccName+'\n'+
                     'Contact: '+cont.FirstName+' '+cont.LastName;
    }
    
    public void sendMail(String address, String subject, String body) {
    // Create an email message object
		Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage();
        String[] toAddresses = new String[] {address};
        mail.setToAddresses(toAddresses);
        mail.setSubject(subject);
        mail.setPlainTextBody(body);
        // Pass this email message to the built-in sendEmail method 
        // of the Messaging class
        Messaging.SendEmailResult[] results = Messaging.sendEmail(
                                 new Messaging.SingleEmailMessage[] { mail });
        inspectResults(results);
    }
    
    // Helper method
    private static Boolean inspectResults(Messaging.SendEmailResult[] results) {
        Boolean sendResult = true;
        
        // sendEmail returns an array of result objects.
        // Iterate through the list to inspect results. 
        // In this class, the methods send only one email, 
        // so we should have only one result.
        for (Messaging.SendEmailResult res : results) {
            if (res.isSuccess()) {
                System.debug('Email sent successfully');
            }
            else {
                sendResult = false;
                System.debug('The following errors occurred: ' + res.getErrors());                 
            }
        }
        
        return sendResult;
    }
}[/code]
Страница:
[code]<apex:page standardController="Contact" extensions="AddCommUserController">
  <apex:form >
        <apex:commandButton value="Add Community User" Action="{!sendMail}">
          <apex:param name="address" value="{!ManagerEMail}" />
          <apex:param name="subject" value="{!EmailSubject}" />
          <apex:param name="body" value="{!EmailBody}" />
        </apex:commandButton>
    </apex:form>      
</apex:page>[/code]
В итоге - ругается:
Unknown method 'ContactStandardController.sendMail()

Что я делаю не так?..

Поменяйте сигнатуру метода - страница ожидает метод sendMail(), а у вас sendMail(String, String String) - то что вы в качестве параметров в commandButton что-то там пробрасывает не означает что это будет использовано как атрибуты метода - не будет, это всего лишь говорит "а пошли-ка {!ManagerEmail} в качестве параметра запроса, который будет доступен через currentPage.getParameters().get('address'), {!EmailSubject} как 'subject' и т.д.", поэтому метод sendMail() должен быть без атрибутов. BTW, вам ещё как минимум необходимо прописать явные/неявные getter'ы для полей класса к которым вы обращаетесь на странице, например так:

public String ManagerEmail {get; set;}
public String EmailBody {get; set;}
public String EmailSubject {get; set;}

Правда не совсем ясно зачем вы пробрасываете на сервер то что и так оттуда прилетело.

Поменяйте сигнатуру метода - страница ожидает метод sendMail(), а у вас sendMail(String, String String) - то что вы в качестве параметров в commandButton что-то там пробрасывает не означает что это будет использовано как атрибуты метода - не будет, это всего лишь говорит "а пошли-ка {!ManagerEmail} в качестве параметра запроса, который будет доступен через currentPage.getParameters().get('address'), {!EmailSubject} как 'subject' и т.д.", поэтому метод sendMail() должен быть без атрибутов. BTW, вам ещё как минимум необходимо прописать явные/неявные getter'ы для полей класса к которым вы обращаетесь на странице, например так:
[code]
public String ManagerEmail {get; set;}
public String EmailBody {get; set;}
public String EmailSubject {get; set;}
[/code]
Правда не совсем ясно зачем вы пробрасываете на сервер то что и так оттуда прилетело.

О! Давненько от Ильи никаких постов не было

О! Давненько от Ильи никаких постов не было :) 

Den Brown
О! Давненько от Ильи никаких постов не было :)

Прям с языка сорвал - Илья как всегда в своем стиле. Ответ четкий и по существу.
Меня даже начинает мучать сомнение - а не робот ли Илья Не припомню чтобы видел хоть одно сообщение на отвлеченные человеческие темы

[quote="Den Brown"]О! Давненько от Ильи никаких постов не было :)[/quote]
:D Прям с языка сорвал - Илья как всегда в своем стиле. Ответ четкий и по существу. 
Меня даже начинает мучать сомнение - а не робот ли Илья :D Не припомню чтобы видел хоть одно сообщение на отвлеченные человеческие темы ;)