ERP通用附件管理功能设计与实现

ERP系统中要管理用户为单据上传的一些附件,比如增值税发票,退货发票,ROHS检测报告,这时,需要设计一个通用的附件管理模块来管理用户上传的附件。

数据表设计

IF OBJECT_ID ('dbo.Attachment') IS NOT NULL
    DROP TABLE dbo.Attachment
GO

CREATE TABLE dbo.Attachment
    (
    Index        INT NOT NULL,
    MasterTable  NVARCHAR (50) DEFAULT ('') NOT NULL,
    MasterKey    DECIMAL (10) DEFAULT ((0)) NOT NULL,
    FileType     NVARCHAR (10) DEFAULT ('') NOT NULL,
    FilePath     NVARCHAR (250) NULL,
    CreatedDate  DATETIME NULL,
    CreatedBy    NVARCHAR (10) NULL,
    RevisedDate  DATETIME NULL,
    RevisedBy    NVARCHAR (10) NULL,
    Description  NVARCHAR (60) NULL,
    KeySegment1  NVARCHAR (30) NULL,
    KeySegment2  NVARCHAR (30) NULL,
    KeySegment3  NVARCHAR (30) NULL,
    KeySegment4  NVARCHAR (30) NULL,
    KeySegment5  NVARCHAR (30) NULL,
    Size         DECIMAL (18) NULL,
    File         IMAGE NULL,
    UploadedBy   NVARCHAR (10) NULL,
    UploadedDate DATETIME NULL,
    Md5Hash      NVARCHAR (32) NULL,
    CONSTRAINT PK_Attachment PRIMARY KEY (Index,MasterTable,MasterKey)
    )
GO

5个Key Segment是用来查找附件用的,相当于文章的关键字,用来标记此附件的大致内容。这里不提供附件内容的实际搜索功能,而只对设置的Key Segment进行查找与比较。我的另一个项目Data Solution对搜索存储于SQL Server中的文件字节流进行搜索,进行了探索和尝试。

4个必须要有的字段,Created By, Created Date, Revised By ,Revised Date用来记录创建和修改附件的用户,对IT审计有作用。ERP系统中的日记帐表基本上都有这4个字段供分析审计。

FileType 是自定义的可上传的文件类型,比如传真文件tif,图片文件jpg/bmp/gif,Office 办公文件Word/Excel/PPT

还有跨平台的通用文件格式PDF。

image

注意工具栏最后一个按钮上面有个数字8,表示此客户有附带8个附件文件,点击该按钮,弹出附件管理窗口

image

工具栏中有新增,删除按钮,可对附件数据进行操作。

当附件的数量相当多的时候,还需要写一个通用的附件浏览工具,以查看附件内容。

执行功能SAMFAB或SQAPTR,打开附件浏览器程序。

image

找到客户编号001,可以从图中看到,它有8个附件,在这里以附件类型进行了分组呈现。

双击一个附件图标文件,File Explorer可为您打开它的内容,进行在线浏览。如果想把附件保存到本地,可以选中附件,点工具栏中的Export按钮,弹出另存为对话框,为您保存附件文档。

左边的树是从一个配置文件中读取的,它保存数据表的分类以供加载到不同的模块组别中。

image 

读取这个文件的方式是Linq to xml技术,自从掌握了Linq技术之后,简单的几句话完成复杂的读取和写入功能,代码简洁,容易维护。

string sql = Kingston.SystemAdminstration.Properties.Resources.LibraryExplorer;
byte[] array = Encoding.ASCII.GetBytes(sql);
MemoryStream stream = new MemoryStream(array);   
XDocument doc = XDocument.Load(stream);
string library = doc.Root.Name.ToString();
treeView.BeginUpdate();
treeView.Nodes.Clear();
UltraTreeNode root=new UltraTreeNode(library,library);
root.Tag = "Library";
root.LeftImages.Add(imgList.Images[0]);
foreach(XElement node in doc.Root.Elements())
      {
                UltraTreeNode module = new UltraTreeNode(node.Name.ToString(), node.Name.ToString());
                module.Tag = "Module";
                module.LeftImages.Add(imgList.Images[1]);
                foreach (XElement table in node.Elements())
                {
                    UltraTreeNode tableNode = new UltraTreeNode(table.Attribute("Name").Value, table.Attribute("Name").Value);
                    tableNode.Tag = "Table";
                    tableNode.LeftImages.Add(imgList.Images[2]);
                    module.Nodes.Add(tableNode);
                }
                root.Nodes.Add(module);
        }
treeView.Nodes.Add(root);
treeView.EndUpdate();

以资源文件嵌入到程序集中,读取时它是个字符串,XDocument可接受一个文件名,或是一个字节流,所以开头几句我把它转化为流来供Linq解析。

 

在系统设置中,有一个参数是控制附件的保存方式。系统是保存附件的路径(File Path),还是保存附件的内容(字节流)。

image

如图所示,Control Checklist的最后一项设定 Attachment Save into Database,即把附件的字节流保存到数据(Image)字段中,此选项会影响数据库大小,但也有好的移植性。

以文件保存在本地为例,它只是对文件进行一个简单的Copy动作,代码如下所示

AttachmentEntity attachment = item.Tag as AttachmentEntity;
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "Excel 97-2003|*.xls|Microsoft Word|*.doc|Adobe PDF|*.pdf|All File|*.*";
saveDialog.FileName = attachment.FilePath;
if (saveDialog.ShowDialog() == DialogResult.OK)
{
             string fileName = saveDialog.FileName;
              if (!string.IsNullOrWhiteSpace(attachment.FilePath))
              {
                       File.Copy(attachment.FilePath, saveDialog.FileName);
              }
}

VB或DELPHI程序的习惯,会拖动一个SaveFileDialog 组件(component)到界面中,然后在这里直接引用。我倾向于在这里直接创建一个SaveFileDialog ,用完了让它Dispose。use it and burn it,电影里面讲到人与人的雇佣关系时,常用这个句子,用完了就抛弃。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
任务书 一、任务背景 随着企业规模的不断扩大,财务信息管理变得越来越复杂。为了更好地管理企业的财务信息,提高财务工作效率,需要一套完善的ERP财务信息管理系统。该系统应该能够实现财务信息的准确、及时、全面的记录和管理,包括财务报表的生成、财务数据的分析等。 二、任务目标 本任务的目标是设计和开发一套ERP财务信息管理系统,实现以下功能: 1. 会计科目的设置和管理:包括资产、负债、权益、收入、成本和费用等科目的设置和管理,能够支持科目的新增、修改、删除等操作。 2. 凭证的录入和管理:能够实现凭证的录入、修改、删除等操作,支持多种凭证类型的管理,如收入凭证、支出凭证、转账凭证等。 3. 财务报表的生成:能够根据会计科目和凭证信息,生成财务报表,包括资产负债表、利润表、现金流量表等。 4. 财务数据的分析:能够对财务数据进行分析,如对比分析、趋势分析、比例分析等。 5. 安全管理:系统应具备完善的安全管理措施,包括用户权限管理、数据备份与恢复等。 三、任务要求 1. 开发语言:使用Java语言进行开发。 2. 技术框架:采用Spring MVC+Spring+MyBatis框架进行开发。 3. 数据库:采用MySQL作为数据库。 4. 系统平台:支持Windows、Linux等主流操作系统。 5. 界面设计:界面应美观、简洁、易用。 6. 文件管理:系统应具备完善的文件管理功能,包括凭证、报表等的存储和查看。 7. 系统测试:系统应进行充分的测试,保证系统的稳定性和可靠性。 8. 系统部署:系统应具备简单易行的部署方式,方便用户使用。 四、开发周期 本系统的开发周期为3个月。 五、交付物 1. 系统需求规格说明书:详细描述系统的功能需求、性能需求、界面需求等。 2. 系统设计文档:包括系统架构设计、数据模型设计、界面设计等。 3. 系统源代码:系统的完整源代码,包括后端代码和前端代码。 4. 系统测试报告:对系统进行充分测试的报告。 5. 系统部署说明书:系统的部署方式和操作说明。 6. 系统使用手册:用户使用系统的操作手册。 七、验收标准 1. 系统功能完备,能够满足任务目标中的所有需求。 2. 系统稳定性好,能够保证数据安全。 3. 系统界面美观简洁,易用性好。 4. 系统响应速度快,能够支持大规模数据处理。 5. 系统易于部署和维护,能够在用户端实现快速部署和维护。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值