我们做ERP开发的目的是为了节省企业的人力,节约ERP用户的操作工时。再完美的ERP产品,免不了需要用户手动处理一些数据(ps:表妹很多,好看的没几个)。我们常见的用户需求必然包括数据上传,尤其是excel。Genero对Excel的支持从小编看来真的很差(ps:小编也才学习没几天,毕竟之前做了三年的SAP开发,感觉ABAP支持的还是很完美的),不过不要灰心,和很多ERP产品一样,Genero Client支持Windows一些标准功能的调用(只是操作excel代码会比较繁琐)。这里介绍下Genero标准功能upload excel的一个案例。 调用windows标准接口处理excel的案例,下次再贡献给大家。
IMPORT os
MAIN
CALL showDir()
END MAIN
FUNCTION showDir()
DEFINE path STRING
#上来关窗 开窗
CLOSE WINDOW SCREEN
#FORM 一个lable+一个textedit MENU按钮“Again"允许重新输入textedit
OPEN WINDOW W1 AT 1,1 WITH FORM "SelectFile"
#定义一个Label 用于响应窗口多次输入
LABEL _input:
#input事件
INPUT BY NAME path
AFTER INPUT
CALL path_check(path)
END INPUT
MENU ""
ON ACTION AGAIN
GOTO _input
ON ACTION QUIT
EXIT PROGRAM
ON ACTION CLOSE
EXIT PROGRAM
END MENU
CLOSE FORM SelectFile
CLOSE WINDOW w1
END FUNCTION
FUNCTION path_check(path)
DEFINE path STRING
MESSAGE "" #清除message
#检查输入的path是否存在,不存在则提示消息
IF NOT os.Path.exists(path) THEN
MESSAGE "file path not exist." ATTRIBUTES(RED,STYLE="info")
ELSE
#读取path下的文件内容
CALL read_data(path)
END IF
END FUNCTION
FUNCTION read_data(path)
DEFINE data TEXT
DEFINE path STRING
DEFINE l_connect STRING
# 定义数据缓存的位置Memory
LOCATE data IN MEMORY
#读取数据到data
CALL data.readFile(path)
#连接数据库MYSQL
LET l_connect = "AnyDBName+driver='dbmmys55x',source = 'mytest@localhost:3306'"
CONNECT TO l_connect USER "root" USING "123456"
IF SQLCA.SQLCODE THEN
EXIT PROGRAM SQLCA.SQLCODE
END IF
DISPLAY "upload..........."
#正式上传path地址的文件数据到数据库
#这里特别说明下:1.path是包含文件全名的绝对地址 2.如果文件的扩展名是.csv,请保证csv是以","分隔符保存的 3.如果不指定分隔符,默认的好像是‘|'
LOAD FROM path DELIMITER "," INSERT INTO UPLOAD
#因为没有返回值,我们抓去insert的结果来验证是否upload成功
IF SQLCA.SQLCODE == 0 THEN
DISPLAY "upload sucess"
END IF
#显示下文件里的数据和数据库里的对比下吧
DISPLAY data
END FUNCTION