在自动化流程中,有时需要手动干预以处理特定情况。例如,当打印的条形码用于标记发出的信件、订单或发票时,如果收件人搬迁导致无法送达,工作人员需要手动打开信封并更新系统标记为无法送达。或者在准备寄出的邮件上打印了所有标签,但在交给邮递员之前需要进行最后的更新。本文介绍的工具可以帮助快速完成这些操作,只需扫描条形码即可检索数据库中的相应记录并进行更新。
设想一下,为发出的每一封信件、订单或发票都打印了条形码。现在,如果其中一些因为收件人搬迁而退回,员工需要费力地打开这些信封,进入系统并标记为退回。或者在准备寄出的邮件上打印了所有标签,但在交给邮递员之前需要进行最后的更新。这个工具可以帮助快速完成这些操作,只需扫描条形码即可检索数据库中的相应记录并进行更新。
这个工具的app.config是使其工作的关键!可以添加一个或多个SQL连接字符串。配置表单标题、每条记录前的复选框列名、来自扫描条形码的键(用逗号分隔),这些键用于确定要查询的数据库,以及用于检索请求记录的SQL命令和提交按钮发出的更新命令。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<clear/>
<add name="DB" connectionString="YourConnectionString" providerName="System.Data.SqlClient"/>
<add name="DB1" connectionString="YourOptional2DatabaseConnectionString" providerName="System.Data.SqlClient"/>
</connectionStrings>
<appSettings>
<add key="Title" value="Barcode Handler"/>
<add key="CheckColumnName" value="Invalidate Address"/>
<add key="DB" value="ORD,ORF"/>
<add key="DB1" value="ORA,ORB"/>
<add key="RetrieveCommand_ID_Column_No" value="1"/>
<add key="RetrieveCommand" value="SELECT top 1 'ORA' as DB,'35295' ItemID,'2014-01-01 00:34:23' Orderdate , 'Sent' as Status, 'Peter' as [First name] ,'Pan' as [Last name] ,'Treehouse 1' as [Address],'Neverland' as [City],'Xmas Presents' as [Description] FROM orders where @ItemID=orderID"/>
<add key="UpdateCommand" value="UPDATE ORDER_STATUS SET STATUS = 'Returned Mail (Undeliverable)' ,statusdate = getdate() ,updated_by = 'BarcodeHandler' , updated_date = getdate() WHERE OrderID = @ItemID ; UPDATE m SET incorrect_address_flag = 'Y' FROM customer m inner joine orders ......... orderid= @ItemID ; "/>
</appSettings>
</configuration>
以下是C#代码示例,展示了如何使用扫描条形码来检索和更新数据库记录。
private void SetColumns()
{
// 设置列
}
public class ScannerTextBox : TextBox
{
public event ChangedEventHandler BarCodeEntered;
protected virtual void OnChanged(EventArgs e)
{
}
public bool BarcodeOnly { get; set; }
Timer timer;
private void InitializeComponent()
{
this.SuspendLayout();
this.ResumeLayout(false);
}
void timer_Tick(object sender, EventArgs e)
{
if (BarcodeOnly == true)
{
Text = "";
timer.Enabled = false;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (BarcodeOnly == true)
{
if (timer == null || !timer.Enabled)
Text = "";
if (timer == null)
{
timer = new Timer();
timer.Interval = 200;
timer.Tick += new EventHandler(timer_Tick);
timer.Enabled = false;
}
timer.Enabled = true;
}
if (e.KeyChar == '\r')
{
if (BarcodeOnly == true && timer != null)
{
timer.Enabled = false;
if (BarCodeEntered != null)
{
if (this.Text.Length > 3 && !String.IsNullOrEmpty(this.Text))
{
BarCodeEnteredEventArgs e1 = new BarCodeEnteredEventArgs(this.Text);
BarCodeEntered(this, e1);
}
}
}
}
}
}