Есть файлы - html(представляет собой форму, в которой уже заполнены данные и эти данные должны заноситься во входные параметры метода Apex). <template> <lightning-card title="Send Invoice" icon-name="standard:contact" record-id={recordId}> <template if:true={record}> <div class="slds-m-around_medium"> <lightning-input readonly variant="standart" name="subject" label="Email Subject" value={record.Opportunity.Invoice_Number__c}></lightning-input> <lightning-input readonly variant="standart" label="Recipient Name" value={record.Contact.FirstName}></lightning-input> <lightning-input readonly variant="standart" name="address" label="Recipient Email" value={record.Contact.Email}></lightning-input> <lightning-input variant="standart" name="body" label="Email Body"></lightning-input> </div> </template> <template if:true={error}> <c-error-panel errors={error}></c-error-panel> </template> <div slot="footer"> <lightning-button variant="destructive" label="Cancel" onclick={closeAction} ></lightning-button> <lightning-button variant="brand" label="Send" onclick={handleSend} ></lightning-button> </div> </lightning-card> </template> также есть js файл, в который я импортирую метод apex, но он не отрабатывает( import { LightningElement, api, track, wire } from 'lwc'; import getOpportunityContactRoles from '@salesforce/apex/OpportunityDataHandler.getOpportunityContactRoles'; import {CloseActionScreenEvent} from 'lightning/actions'; import sendMail from '@salesforce/apex/EmailManager.sendMail'; export default class WireFunction extends LightningElement { @api recordId; @track record; @track error; @wire(getOpportunityContactRoles, { recordId: '$recordId'}) wiredContacts({ error, data }) { if (data) { this.record = data; this.error = undefined; } else if (error) { this.error = error; this.record = undefined; } } closeAction(){ this.dispatchEvent(new CloseActionScreenEvent()); } handleSend(){ this.sendMail(); this.dispatchEvent(new CloseActionScreenEvent()); } } и наконец Apex public with sharing class EmailManager { @AuraEnabled(cacheable = true) public static void sendMail(String address, String subject, String body) { Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new String[] {address}; mail.setToAddresses(toAddresses); mail.setSubject(subject); mail.setPlainTextBody(body); Messaging.SendEmailResult[] results = Messaging.sendEmail( new Messaging.SingleEmailMessage[] { mail }); } } Логика заключается в том, что во входные параметры метода sendEmail() должны передаваться поля, которые уже заполнены данными в html, т.е. address - он же email, subject и body. Однако при нажатии на кнопку на почту не приходит никакое письмо
Самый главный совет для решения подобных задач - научиться пользоваться [b]console.log(...)[/b] [b]System.debug(...)[/b] Пока этот простейший дзен не постигнут нечего делать в программировании. А теперь по существу - где параметры (address, subject, body) из JS передаются в Apex, я вижу только пустой вызов Apex метода без параметров.
[quote="hoodie"]Есть файлы - html(представляет собой форму, в которой уже заполнены данные и эти данные должны заноситься во входные параметры метода Apex). <template> <lightning-card title="Send Invoice" icon-name="standard:contact" record-id={recordId}> <template if:true={record}> <div class="slds-m-around_medium"> <lightning-input readonly variant="standart" name="subject" label="Email Subject" value={record.Opportunity.Invoice_Number__c}></lightning-input> <lightning-input readonly variant="standart" label="Recipient Name" value={record.Contact.FirstName}></lightning-input> <lightning-input readonly variant="standart" name="address" label="Recipient Email" value={record.Contact.Email}></lightning-input> <lightning-input variant="standart" name="body" label="Email Body"></lightning-input> </div> </template> <template if:true={error}> <c-error-panel errors={error}></c-error-panel> </template> <div slot="footer"> <lightning-button variant="destructive" label="Cancel" onclick={closeAction} ></lightning-button> <lightning-button variant="brand" label="Send" onclick={handleSend} ></lightning-button> </div> </lightning-card> </template> также есть js файл, в который я импортирую метод apex, но он не отрабатывает( import { LightningElement, api, track, wire } from 'lwc'; import getOpportunityContactRoles from '@salesforce/apex/OpportunityDataHandler.getOpportunityContactRoles'; import {CloseActionScreenEvent} from 'lightning/actions'; import sendMail from '@salesforce/apex/EmailManager.sendMail'; export default class WireFunction extends LightningElement { @api recordId; @track record; @track error; @wire(getOpportunityContactRoles, { recordId: '$recordId'}) wiredContacts({ error, data }) { if (data) { this.record = data; this.error = undefined; } else if (error) { this.error = error; this.record = undefined; } } closeAction(){ this.dispatchEvent(new CloseActionScreenEvent()); } handleSend(){ this.sendMail(); this.dispatchEvent(new CloseActionScreenEvent()); } } и наконец Apex public with sharing class EmailManager { @AuraEnabled(cacheable = true) public static void sendMail(String address, String subject, String body) { Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new String[] {address}; mail.setToAddresses(toAddresses); mail.setSubject(subject); mail.setPlainTextBody(body); Messaging.SendEmailResult[] results = Messaging.sendEmail( new Messaging.SingleEmailMessage[] { mail }); } } Логика заключается в том, что во входные параметры метода sendEmail() должны передаваться поля, которые уже заполнены данными в html, т.е. address - он же email, subject и body. Однако при нажатии на кнопку на почту не приходит никакое письмо[/quote] 1 - Cacheable = false. 2 - проверить включены ли емейлы на орге - Email Dliverability 3 - this.sendMail(); это хорошо, но в твоем случае должен быть sendEmail() 4 - sendEmail({ address: 'address' , subject: 'subject', body: 'body'}
Вообще над этим кодов в шапке еще работать и работать. Там нет еще важной составляющие - работы с inputs. Надо из них еще значения достать. Тут работы и работы.
Без two-way binding конечно печаль в LWC. Столько лишнего кода. По сравнению с Ангуляр скорость разработки раз в 5 медленнее, и кода соотвественно на столько же больше :so-sad: