html - 在 Lightswitch HTML 屏幕中按下 "saved successfully"后,如何返回 "Save"消息框和/或发送收据电子邮件?

标签 html visual-studio-lightswitch

我正在使用面向互联网的 Lightswitch HTML“创建新数据”屏幕,供人们将工作申请数据提交到数据库中。当他们按下“保存”按钮时,数据会保存,但申请人无法判断他们的数据是否已保存。数据输入屏幕就消失了。有没有办法通过弹出消息框、发送电子邮件或两者来通知申请人他们的申请已收到?

最佳答案

是的,一旦数据被插入系统,就可以发送电子邮件。要做的第一件事是创建 2 个表(我将在此示例中使用 SQL 编写,但使用表中的 LightSwitch 构建也可以)

第 1 步 - 创建控制电子邮件的数据表

CREATE TABLE Setting (SettingID INT IDENTITY (1,1) NOT NULL,
SettingName VARCHAR(11),
SettingValue VARCHAR(5))

ALTER TABLE Setting ADD CONSTRAINT SettingID_PK PRIMARY KEY (SettingID)

CREATE TABLE Message (MessageID INT IDENTITY (1,1) NOT NULL,
NameFrom VARCHAR (100), --EMAIL SERVER NAME
EmailFrom VARCHAR (100), --EMAIL A
NameTo VARCHAR (100), --SUBJECT
EmailTo VARCHAR (100), -- EMAIL B
EmailMessage VARCHAR (1500), --MESSAGE
EmailCreated DATETIMEOFFSET)

ALTER TABLE Message ADD CONSTRAINT MessageID_PK PRIMARY KEY (MessageID)

--INSERT THIS INTO SETTINGS TO ALLOW THE SYSTEM TO SEND EMAILS
INSERT INTO SETTING VALUES ('SendEmails', 'true')

第 2 步 - 编辑 Server 节点下的 Web.config 文件

在 Web.config 文件中您的应用程序名称下方,在这两行下方添加以下代码(通常在第 25-30 行之间):

<add key="ApplicationCulture" value="en-US" />
<add key="Microsoft.LightSwitch.DefaultClientName" value="HTMLClient" />

代码:

<add key="SMTPSendingName" value="MAIL HEADER" />
<add key="SMTPSendingEmailAddress" value="EMAIL TO SEND CONFIRMATION FROM" />
<add key="SMTPServer" value="mail.YOURSERVER.com" />
<add key="SMTPUserID" value="" />
<add key="SMTPPassword" value="" />
<add key="SMTPPort" value="25" />
<add key="SMTPSSL" value="false" />

第 3 步 - 在您的数据源中创建一个 MailHelper.cs 文件(如下所示): enter image description here

并添加此代码(确保添加引用文件并将“复制本地”设置为 True:

using System.Net;
using System.Net.Mail;
using System.Configuration;
using System;

namespace LightSwitchApplication.DataSources.ProjectHandlerThreeData
{
    internal class MailHelper
    {

        public SmtpClient objSmtpClient { get; set; }
        private string _SMTPSendingEmailAddress { get; set; }
        private string _SMTPServer { get; set; }
        private string _SMTPUserId { get; set; }
        private string _SMTPPassword { get; set; }
        private int _SMTPPort { get; set; }
        private bool _SMTPSSL { get; set; }

        private string _MailFromName { get; set; }
        private string _MailToEmail { get; set; }
        private string _MailToName { get; set; }
        private string _MailSubject { get; set; }
        private string _MailBody { get; set; }

        public MailHelper(
            string SendFromName, string SendToEmail,
            string SendToName, string Subject,
            string Body) 
{
            _MailFromName = SendFromName;
            _MailToEmail = SendToEmail;
            _MailToName = SendToName;
            _MailSubject = Subject;
            _MailBody = Body;


            _SMTPSendingEmailAddress = Convert.ToString(ConfigurationManager.AppSettings["SMTPSendingEmailAddress"]);
            _SMTPServer = Convert.ToString(ConfigurationManager.AppSettings["SMTPServer"]);
            _SMTPUserId = Convert.ToString(ConfigurationManager.AppSettings["SMTPUserID"]);
            _SMTPPassword = Convert.ToString(ConfigurationManager.AppSettings["SMTPPassword"]);
            _SMTPPort = Convert.ToInt32(ConfigurationManager.AppSettings["SMTPPort"]);
            _SMTPSSL = Convert.ToBoolean(ConfigurationManager.AppSettings["SMTPSSL"]);

            objSmtpClient = new SmtpClient(_SMTPServer, _SMTPPort);
        }

        public void SendMail()
        {
            MailMessage mail = new MailMessage();

            System.Net.Mail.MailAddress mailFrom =
                new System.Net.Mail.MailAddress(_SMTPSendingEmailAddress, _MailFromName);

            System.Net.Mail.MailAddress mailTo =
                new System.Net.Mail.MailAddress(_MailToEmail, _MailToName);


            var _with1 = mail;
            _with1.From = mailFrom;
            _with1.To.Add(mailTo);
            _with1.Subject = _MailSubject;
            _with1.Body = _MailBody;


            objSmtpClient.EnableSsl = _SMTPSSL;

            objSmtpClient.Credentials =
                new NetworkCredential(_SMTPUserId, _SMTPPassword);

            objSmtpClient.SendAsync(mail, mail.To);
        }

     }
}

第 4 步 - 将代码添加到 Message 表(打开 Messages 表,单击屏幕顶部的 Write Code 按钮,然后选择 Messages_Inserted

现在添加这段代码:

 try
            {
                var EmailSetting = Settings.Where(x => x.SettingName == "SendEmails").FirstOrDefault();
                if (EmailSetting != null)
                {
                    if (EmailSetting.SettingValue.ToLower() == "true")
                    {

                        string strSubject = "MAIL HEADER";
                        string strMessage = String.Format("{0}",
                            "TEXT AT TOP OF EMAIL IF REQUIRED")
                                            + Environment.NewLine + Environment.NewLine;
                        strMessage = strMessage + String.Format("{0}",
                            entity.EmailMessage) + Environment.NewLine;

                        // Create the MailHelper class created in the Server project.
                        MailHelper mailHelper =
                            new MailHelper(
                                entity.NameFrom,
                                entity.EmailTo,
                                entity.NameTo,
                                strSubject,
                                strMessage);

                        // Send Email
                        mailHelper.SendMail();

                    }
                    else
                    {
                    }
                }
                else
                {
                }
            }
            catch (Exception ex)
            {
            }

并检查这些引用是否出现在顶部:

using System.Configuration;
using System.Net.Mail;
using LightSwitchApplication.DataSources.YOURDATASOURCE;

最后,将此代码添加到代码的 INSERTED 部分的表中,就像上面的消息表一样

//email a save receipt to the person who added the data
            Message objMessage = new Message();
            objMessage.NameFrom = Convert.ToString(ConfigurationManager.AppSettings["SMTPSendingName"]);
            objMessage.EmailFrom = Convert.ToString(ConfigurationManager.AppSettings["SMTPSendingEmailAddress"]);
            objMessage.NameTo = "Details Successfully Saved"; //SUBJECT
            objMessage.EmailTo = "emailto@email.com"; 
            objMessage.EmailMessage =
                string.Format("The Following User has successfully been Added: " +
                              "\nErrorID: " + entity.ErrorID +
                              "\nBy User: " + entity.StaffTable.Staffname +
                              "\nDate Reported:" + DateTime.Now.ToString(" dd.MM.yy") +
                              "\n\nError Details: " + entity.Message);

我在上面留下了我的代码和错误信息,以显示如何格式化电子邮件和显示更多信息。我希望这会有所帮助 :) 如果有任何错误让我知道并且无法帮助解决它,它很可能是我遗漏的程序集引用。

一点额外

如果您使用 JavaScript 验证,请确保在您的添加屏幕上添加此代码:

在屏幕创建的事件上,添加此代码。这将禁用已激活的 CTRL + S 功能。 (这在每个屏幕上都是必需的):

myapp.AddEditScreen.created = function (screen) {
  $(window).one("pagechange", function (e, data) {
        var $page = $("#" + screen.details._pageId);
        var $button = $page.find(".msls-save-button");
        $button.removeClass("msls-save-button");
    });
};

其次,将此添加到任何变量(点击编辑 PostRender 代码)。此代码将隐藏默认的保存、删除、取消按钮,因此您的验证无法通过

$("[data-ls-tap='tap:{data.shell.discardCommand.command}']").hide();
$("[data-ls-tap='tap:{data.shell.saveCommand.command}']").hide();
$("[data-ls-tap='tap:{data.shell.okCommand.command}']").hide();
$("[data-ls-tap='tap:{data.shell.cancelCommand.command}']").hide();

来自此处的邮件原始代码(也可以下载示例项目): http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/2224/Sending-Asynchronous-Emails-Using-LightSwitch-HTML-Client.aspx

关于html - 在 Lightswitch HTML 屏幕中按下 "saved successfully"后,如何返回 "Save"消息框和/或发送收据电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42521018/

相关文章:

php - MySql PHP 选择下拉列表

sql-server - Lightswitch可视化查询设计器的重用

mysql - 如何部署连接到 MySql 数据库的 Lightswitch 应用程序

javascript - Lightswitch 2013 - HTML 客户端 -> commitChanges() 和 showOtherPage() 联合

visual-studio - 在 LightSwitch 应用程序中搜索 bool 列

html - 将 HTML 中的文本装箱

html - 将文本视为不可分割的?

javascript - WebRTC 视频不显示

linq - 如何在 LightSwitch 查询中使用计算字段?

javascript - 重构时 ReactJS 代码不工作 - 出了什么问题?