/* 员工照片批量导入程序 2009/12/10 Mirror 使用条件: 变量path必须存在且将照片放入photo目录中 照片为JPG格式,且以员工编号作为名称 建议:图片大小小于100K 如果迁移,需要保证path被正确修改 若导入存在问题,可查看目录下日志HR_CI_PERS_IMG.log */ Local File fileLog; Local Record rec; Local array of string EmployeeImgs; Local string emplid; Local string path = "D:/PT8.49/photo"; try rem 首先检查目标目录是否存在,并初始化日志文件; If FileExists(path, %FilePath_Absolute) Then fileLog = GetFile(&path | "/HR_CI_PERS_IMG.log", "w", "a", %FilePath_Absolute); fileLog.WriteLine("开始导入"); Else fileLog.WriteLine("目标目录不存在,退出"); Exit; End-If; rem 找到所有jpg文件; EmployeeImgs = FindFiles(&path | "/*.jpg", %FilePath_Absolute); rem 循环处理每一个文件; For i = 1 To &EmployeeImgs.Len rem 当path变化后,需要相应调整Substring的数字,EMPLID长度为6; emplid = Substring(&EmployeeImgs [&i], 17, 6); rem 检查是否存在此员工; SQLExec("select count(1) from ps_person where emplid=:1", emplid, &res); If (res = 1) Then fileLog.WriteLine("导入" | &emplid | ".jpg"); rec = CreateRecord(Record.EMPL_PHOTO); rec.EMPLID.Value = &emplid; rem 先将图片作为附件上传到数据库; Result = PutAttachment("record://PSFILE_ATTDET", &emplid | ".jpg", &EmployeeImgs [&i]); rem 再取出来赋值; SQLExec("SELECT FILE_DATA FROM PSFILE_ATTDET WHERE ATTACHSYSFILENAME = :1 AND VERSION = 1", emplid | ".jpg", &Data); rec.EMPLOYEE_PHOTO.Value = &Data; rem 使用后要删除,环保; SQLExec("DELETE FROM PSFILE_ATTDET WHERE ATTACHSYSFILENAME = :1 AND VERSION = 1", emplid | ".jpg"); rem 设置图片版本号,以每日一变; rec.PSIMAGEVER.Value = Days365(Date3(2009, 12, 1), %Date); rem 插入或更新,一个员工只能同时有一张照片; rec.Insert(); rec.Update(); Else rem 你文件名弄错了,不能怪我; fileLog.WriteLine("不存在员工ID:" | &emplid); End-If; End-For; catch Exception ex fileLog.WriteLine(&ex.ToString()); end-try; rem 完成收工; fileLog.WriteLine("结束"); fileLog.Close();