上传控件的使用
控件概述
上传控件一共有3个按钮:"文件列表"是指扫描或上传图片后,可以点击"文件列表"查看之前做的上传;"扫描"是指调用扫描仪,将纸质图片扫描后转换为对应的jpg文件并上传到服务器;"上传"就是直接上传图片到ftp了。
使用方法
首先将控件拖动到适合的位置,然后在加载事件中添加对应的代码。目前我们暂时支持2种情况:
- 上传前不确定上传编号
- 上传前能够确定上传编号
对于其他的一个上传编号不能唯一定位记录或一个图片对应多条上传编号的特殊情况,由于大家也没有回我邮件,实现起来也有点小复杂,所以暂不支持,等出现了这种情况再说。
针对是否能确定上传编号,使用UpdateSysUploadImmediately属性,true表示能更新SysUpload表,也就是上传编号确定的情况。反之则为false。
对于上传控件是否要和MyGridControl联动,可以使用MyGridControl的UploadControl属性。此外UploadControl有一个BiaoHaoLX的字段,默认为"S_CID",当然如果你想要的不是这个列,就需要对其进行赋值。
上面的代码意思是通过关联MyGridControl的条形码列对应的焦点行获取对应的值。
此外由于扫描的需要,我们还需要定义一个类型和传递一个当前窗体给扫描控件使用。
uploadControl1.Init(this);
类型一般用流程类别,如果无流程则用模块名称代替,如果是需要给通用审批看的则类型写死"WF";Init方法则主要是为了传递一个当前窗体给UploadControl控件。因为目前通过反射等无法获得父窗体。
对于开始没有编号的情况,需要在次插入sysupload表。在CSMS.Serivice里增加了一个Upload类使用时可参考引擎里的DengJi方法。
if (null != uploadEntityList && uploadEntityList.Length > 0)
{
b = CSMS2.Service.Upload.InsertSYS_UPLOAD(gongdan.S_GONGDANBH, uploadEntityList, tran);
if (b)
return gongdanProcess.InsertOrUpdate(gongdan, tran);
else
return b;
}
else
{
return gongdanProcess.InsertOrUpdate(gongdan, tran);
}
点"登记"方法上需传递UploadControl的UploadEntityList。代码如下:
{
client.FuHeDJ_DengJi(out message, dto, (Entity.BW_YUYUEXX)ClientCacheHelper.GetCache(dto.S_CID), this.uploadControl1.UploadEntityList.ToArray(), Entity.LoginInfo.CurrentUser);
}
else
{
client.FuHeDJ_DengJi(out message, dto, (Entity.BW_YUYUEXX)ClientCacheHelper.GetCache(dto.S_CID), null, Entity.LoginInfo.CurrentUser);
}
实现逻辑
大致介绍下,目前上传都使用类似邮件附件的方式,即不管有没有上传编号,都会先上传到ftp。然后根据情况插入sysupload表。另外在扫描控件中增加了一个扫描完成的委托事件。这样就不用修改扫描控件的代码。直接写在扫描完成的事件中就可了。