CN104536998A - 一种数据导入方法及装置 - Google Patents

一种数据导入方法及装置 Download PDF

Info

Publication number
CN104536998A
CN104536998A CN201410770015.6A CN201410770015A CN104536998A CN 104536998 A CN104536998 A CN 104536998A CN 201410770015 A CN201410770015 A CN 201410770015A CN 104536998 A CN104536998 A CN 104536998A
Authority
CN
China
Prior art keywords
importing
data source
external data
service template
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201410770015.6A
Other languages
English (en)
Inventor
郑玉梅
任彦青
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur General Software Co Ltd
Original Assignee
Inspur General Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur General Software Co Ltd filed Critical Inspur General Software Co Ltd
Priority to CN201410770015.6A priority Critical patent/CN104536998A/zh
Publication of CN104536998A publication Critical patent/CN104536998A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Abstract

本发明提供一种数据导入方法及装置,方法包括:获取当前需要导入的外部数据源对应的导入业务模板,导入业务模板中包括一个以上的系统数据列;获取外部数据源对应的导入规则,导入规则中包括外部数据源的数据列与系统数据列的对应关系;根据所获取的导入规则,将外部数据源的每一列数据导入到所获取的导入业务模板中的对应系统数据列。根据本发明,通过获取外部数据源对应的导入规则,根据导入规则的外部数据源的数据列与系统数据列的对应关系自动将外部数据源的数据导入到导入业务模板的对应系统数据列上,因此大大提高了数据导入的工作效率。

Description

一种数据导入方法及装置
技术领域
本发明涉及数据处理技术领域,特别涉及一种数据导入方法及装置。
背景技术
企业一般采用ERP(Enterprise Resource Planning,企业资源计划)系统存储与用户的外部数据,也就是说,将用户提供的外部数据源的数据导入设备的系统中,成为系统数据。
目前,将用户提供的外部数据源的数据导入为系统数据的方式为:用户将外部数据源的数据逐个手动的录入到设备的系统中,比如ERP系统中,生成系统数据。
可见,目前外部数据源的数据以手动方式导入为系统数据,而手动录入的工作效率较低。
发明内容
有鉴于此,本发明提供一种数据导入方法及装置,以解决现有技术中手动录入工作效率低的问题。
本发明提供了一种数据导入方法,包括:
获取当前需要导入的外部数据源对应的导入业务模板,所述导入业务模板中包括一个以上的系统数据列;
获取所述外部数据源对应的导入规则,所述导入规则中包括所述外部数据源的数据列与系统数据列的对应关系;
根据所获取的所述导入规则,将所述外部数据源的每一列数据导入到所获取的所述导入业务模板中的对应系统数据列。
优选地,进一步包括:设置所述外部数据源对应的初始业务模板,初始业务模板包括至少一个系统数据列;
所述获取当前需要导入的外部数据源对应的导入业务模板,包括:
根据所述外部数据源选择对应的初始业务模板;
比较所选择的初始业务模板的系统数据列与所述外部数据源包括的数据列,若比较结果为所选择的初始业务模板的系统数据列不完全包括所述外部数据源的数据列,将所选择的初始业务模板的系统数据列不包括所述外部数据源的数据列添加到所选择的初始业务模板中,生成所述外部数据源对应的导入业务模板;若比较结果为所选择的初始业务模板的系统数据列完全包括所述外部数据源的数据列,将所选择的初始业务模板作为所述外部数据源对应的导入业务模板。
优选地,所述导入规则包括多个属性信息;所述对应关系为所述多个属性信息中的一个;
所述对应关系所对应的属性信息包括:系统数据列名、所述外部数据源的名称、所述外部数据源的列名、开始行、结束行;
所述导入规则的属性信息还包括列属性、检查模式、检查规则中的一种或多种。
优选地,进一步包括:根据所述导入规则的属性信息所包括的检查模式,对导入后的外部数据源的数据列设置对应的检查规则;
在所述将所述外部数据源的每一列数据导入到所获取的所述导入业务模板中的对应系统数据列之后,进一步包括:
根据预先设置的所述外部数据源的数据列对应的检查规则,对导入后的所述外部数据源的数据列进行检查。
优选地,进一步包括:向用户展示所述获取和/或导入的处理结果。
本发明还提供了一种数据导入装置,包括:
第一获取单元,用于获取当前需要导入的外部数据源对应的导入业务模板,所述导入业务模板中包括一个以上的系统数据列;
第二获取单元,用于获取所述外部数据源对应的导入规则,所述导入规则中包括所述外部数据源的数据列与系统数据列的对应关系;
导入单元,用于根据所获取的所述导入规则,将所述外部数据源的每一列数据导入到所获取的所述导入业务模板中的对应系统数据列。
优选地,进一步包括:保存单元,保存多个初始业务模板,初始业务模板包括至少一个系统数据列;
所述第一获取单元,用于根据所述外部数据源选择对应的初始业务模板;比较所选择的初始业务模板的系统数据列与所述外部数据源包括的数据列,若比较结果为所选择的初始业务模板的系统数据列不完全包括所述外部数据源的数据列,将所选择的初始业务模板的系统数据列不包括所述外部数据源的数据列添加到所选择的初始业务模板中,生成所述外部数据源对应的导入业务模板;若比较结果为所选择的初始业务模板的系统数据列完全包括所述外部数据源的数据列,将所选择的初始业务模板作为所述外部数据源对应的导入业务模板。
优选地,所述导入规则包括多个属性信息;所述对应关系为所述多个属性信息中的一个;
所述对应关系的属性信息包括:系统数据列名、所述外部数据源的名称、所述外部数据源的列名、开始行、结束行;
所述导入规则的属性信息还包括列属性、检查模式、检查规则中的一种或多种。
优选地,还包括:
设置单元,用于根据所述导入规则的属性信息所包括的检查模式,对导入后的外部数据源的数据列设置对应的检查规则;
检查单元,用于根据预先设置的所述外部数据源的数据列对应的检查规则,对导入后的所述外部数据源的数据列进行检查。
优选地,所述装置还包括:
展示单元,用于向用户展示所述第一获取单元、所述第二获取单元、所述导入单元的处理结果中的一个或多个。
本发明实施例提供了一种数据导入方法及装置,通过获取外部数据源对应的导入规则,根据导入规则的外部数据源的数据列与系统数据列的对应关系自动将外部数据源的数据导入到导入业务模板的对应系统数据列上,因此大大提高了数据导入的工作效率。
附图说明
图1是本发明实施例提供数据导入方法流程图。
图2是本发明另一实施例提供的数据导入方法流程图。
图3是本发明实施例提供的数据导入装置所在设备硬件架构示意图。
图4是本发明实施例提供的数据导入装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了解决现有技术中手动录入工作效率低的问题,本发明实施例结合图1、图2对本发明实施例提供的数据导入方法进行说明。
如图1所示,本发明实施例提供了一种数据导入方法,该实施例可以包括以下步骤:
步骤101:获取当前需要导入的外部数据源对应的导入业务模板,所述导入业务模板中包括一个以上的系统数据列。
步骤102:获取所述外部数据源对应的导入规则,所述导入规则中包括所述外部数据源的数据列与系统数据列的对应关系。
步骤103:根据所获取的所述导入规则,将所述外部数据源的每一列导入到所获取的所述导入业务模板中的对应系统数据列。
可见,通过获取外部数据源对应的导入规则,根据导入规则的外部数据源的数据列与系统数据列的对应关系,自动将外部数据源的数据导入到导入业务模板的对应系统数据列上,从而大大提高了数据导入的工作效率。
为使本发明实施例的目的、技术方案和优点更加清楚,本发明另一实施例提供了一种数据导入方法,如图2所示,该实施例可以包括以下步骤:
步骤201:设置外部数据源对应的初始业务模板,初始业务模板包括至少一个系统数据列。
在设备的系统数据库中包括大量的初始业务模板,其中,初始业务模板是根据用户经验设置并保存在系统数据库中的,初始业务模板包括至少一个系统数据列,每列系统数据列包括属性信息和对应的数据表格,且系统数据列包括的属性信息和对应的数据表格数量是由用户根据经验所设置的。该初始业务模板可以是:出库单、入库单、工资单等。
步骤202:确定当前需要导入的外部数据源,其中外部数据源中包括外部数据源的数据。
在本实施例中,该外部数据源的格式可以是excel、txt、xml等。且外部数据源的数据对应于至少一个数据列。其中,每个数据列包括一个属性名称及其对应的数据。
例如,外部数据源是出库单,其中,外部数据源如表1所示:
表1:
其中,外部数据源对应三个数据列,第一列的属性名称是物料编号,数据是0001、0002、……、1000;第二列的属性名称是出库数量,数据是500、1000、……、800;第三列的属性名称是单价,数据是3500、85、……、200。
步骤203:选择当前外部数据源对应的初始业务模板。
根据外部数据源确定是出库单,在设备的系统数据库中选择出库单所对应的初始业务模板。该出库单对应的初始业务模板如下表2所示:
表2:
步骤204:根据外部数据源和初始业务模板,获取导入业务模板。
在本实施例中,由于初始业务模板中的系统数据列可能会不完全包括外部数据源的数据列,因此,需要根据外部数据源和初始业务模板获取导入业务模板。
本实施例中,获取导入业务模板的方式包括:比较所选择的初始业务模板的系统数据列与所述外部数据源包括的数据列,若比较结果为所选择的初始业务模板的系统数据列不完全包括所述外部数据源的数据列,将所选择的初始业务模板的系统数据列不包括所述外部数据源的数据列添加到所选择的初始业务模板中,生成所述外部数据源对应的导入业务模板;若比较结果为所选择的初始业务模板的系统数据列完全包括所述外部数据源的数据列,将所选择的初始业务模板作为所述外部数据源对应的导入业务模板。
因此,根据上述表1和表2,初始业务模板的系统数据列不完全包括外部数据源的数据列,如表1中单价列。因此,在本实施例中,在初始业务模板上增加单价列,得到导入业务模板,该导入业务模板如表3所示:
表3:
在本实施例中,对初始业务模板中与外部数据源中不同的数据列可以忽略。如表2、表3中的批次列、总价列。
步骤205:获取外部数据源对应的导入规则,导入规则中包括外部数据源的数据列与系统数据列的对应关系。
在本实施例中,可以利用下述方式获取外部数据源的导入规则:在设备的系统数据库中查找是否保存有外部数据源对应的导入规则,若是,则获取保存的外部数据源对应的导入规则;否则,根据外部数据源的数据列及外部数据源对应的导入业务模板,生成外部数据源每一列的导入规则。
若在设备的系统数据库中没有保存外部数据源的导入规则,那么根据表1和表3所示的内容手动生成表1中每一列的导入规则,其中,以物料编号列的导入规则为例进行说明,生成其他数据列的导入规则的方式相同。其中,该物料编号列的导入规则如表4所示:
表4:
在本实施例中,还需要在生成的导入规则上添加功能标识,用于标识该导入规则对应的导入业务模板,以使后续过程中,可以根据该功能标识在设备的系统数据库中查找对应的导入规则。当然,在设备的系统数据库中还包括功能标识与导入业务模板的对应关系。其中,功能标识可以是预设个数的字母结合。
在本实施例中,外部数据源的数据列与系统数据列的对应关系为所述多个属性信息中的一个,表4中系统数据列、外部数据源的名称、外部数据源的列名、开始行、结束行是外部数据源的数据列与系统数据列的对应关系的属性信息,这个属性信息是必须设置的。而对于表4中的列属性、检查模式、检查规则可以选择性设置。
在本实施例中,可以利用下述代码实现本步骤:
//首先,获取外部数据源的名称,以便于后续设置与外部数据源的数据列
//函数:uo_pub_sjzr.uf_init()
stru_sjzr = pstru_sjzr
classdefinition vcd
integer j=0,i
classdefinition vclancestor
isId = stru_sjzr.psid
iaobj = stru_sjzr.ppwerobject
icd = iaobj.classdefinition
isobjtype = icd.datatypeof
//====================================================
//根据传入对象,分析外部数据源的名称
//====================================================
if lower(isobjtype)='window' then
   //暂时不支持window窗口导入
   return -1
   iwobj = iaobj
   for i =1 to UpperBound(iwobj.control[])
         vcd = iwobj.control[i].classdefinition
         if vcd.datatypeof="datawindow" then
//             if iwobj.control[i].visible = true then
                    j++
                    isdwname[j]=iwobj.control[i].classname( )
                    iwobjname[j]=iwobj.control[i]
//             end if
         else
               vclancestor = vcd.ancestor
               do  while isvalid(vclancestor)
                    if vclancestor.name = "u_sheets" then
                          iusheet = iuobj.control[i]
                          exit
                    end if
                    vclancestor = vclancestor.ancestor
               loop
         end if
   next
elseif lower(isobjtype)='userobject' then
   iuobj = iaobj
   for i =1 to UpperBound(iuobj.control[])
         vcd = iuobj.control[i].classdefinition
         if vcd.datatypeof="datawindow" then
               iwobjname1 = iuobj.control[i]
               if iwobjname1.dataobject <> '' AND NOT ISNULL(iwobjname1.dataobject) then
                    j++
                    isdwname[j]=iuobj.control[i].classname( )
                    iwobjname[j]=iuobj.control[i]
               end if
         else
               vclancestor = vcd.ancestor
               do  while isvalid(vclancestor)
                    if vclancestor.name = "u_sheets" then
                          iusheet = iuobj.control[i]
                          exit
                    end if
                    vclancestor = vclancestor.ancestor
               loop
         end if
   next
else
   return -1
end if
if UpperBound(iwobjname[]) <> UpperBound(isdwname[]) then
   messagebox("提示信息")
return -1
end if
return 1
//设置外部数据源的数据列与系统数据列的对应关系
//函数:uo_pub_sjzr.uf_setsolution()
//解析规则设置w_sjzr_set的相关代码
//事件:open.w_sjzr_set()
integer viret,viBound,i,ii
string vsdispvalues,vsdatavalues,vsValues,vsModify
integer j=0
long vlcount,vlrow
string vscolname,vscoltype,vscoltext,vsdwtype,vsdwname
//=====================================================
//接受参数
//=====================================================
stru_sjzr = Message.powerobjectparm
isId = stru_sjzr.psid
isdwname[] = stru_sjzr.pdwname[]
iwobjname[] = stru_sjzr.pdw[]
//=====================================================
//赋值外部数据源列表
//=====================================================
for i = 1 to upperbound(isdwname[])
   dw_dwlist.insertrow( 0)
   dw_dwlist.setitem(i,"datawindowname",isdwname[i])
   dw_dwlist.setitem(i,"datawindowobj",iwobjname[i].dataobject )
next
//=====================================================
//dw_colmlist赋值外部数据源f_dwname的值
//=====================================================
viBound = UpperBound(isdwname[])
dw_colmlist.settransobject(sqlca)
dw_colmlist.retrieve( isId)
for i = 1 to viBound
   vsdatavalues = iwobjname[i].className()
   vsdispvalues=vsdatavalues
   vsValues = vsValues+vsdispvalues+"~t" + vsdatavalues+"/"
next
vsModify = dw_colmlist.Modify("f_dwname.Values=~""+vsValues+"~"")
//保存外部数据源的数据列与系统数据列对应关系
//函数 w_sjzr_set.wf_save()
if wf_validate()<0 then return -1
if dw_colmlist.Update(true,false)=-1 then
   Messagebox('提示信息','保存数据失败!'+sqlca.sqlerrtext)
   return -1
else
   Commit;
   dw_colmlist.resetupdate()
   return 1
end if
//用户设置的外部数据源的数据列与系统数据列的对应关系,检查
// 函数: w_sjzr_set.wf_validate()
string vszdmc,vslmwz,vssjlx,vsdwname,vsid
long i,vlcount,vlcol,vlsrow,vlerow,vlfind,j
string vsdwname1,vs_gjl
int vilmwz1,vilmwz,ii,vi_gjl_cou
dw_colmlist.AcceptText()
vlcount=dw_colmlist.RowCount()
if vlcount=0 then return 1
//=====================================================
//基本数据判断
//=====================================================
for i=1 to vlcount
   vsid = dw_colmlist.GetItemString(i,'f_id')
   vsdwname=dw_colmlist.GetItemString(i,'f_dwname')
   if isnull(vsdwname) or trim(vsdwname)='' then
         MessageBox('提示信息','第'+string(i)+'行外部数据源名称为空,不能保存!')
         return -1
   end if
   vilmwz =dw_colmlist.GetItemnumber(i,'f_lmwz')
   if isnull(vilmwz) or vilmwz>3 or vilmwz< 1 then
         MessageBox('提示信息','第'+string(i)+'行栏目位置错误,不能保存!')
         return -1
   end if
   vszdmc=dw_colmlist.GetItemString(i,'f_colname')
   if isnull(vszdmc) or trim(vszdmc)='' then
         MessageBox('提示信息','第'+string(i)+'行数据列名为空,不能保存!')
         return -1
   end if
   vlcol=dw_colmlist.GetItemNumber(i,'f_colnum')
   if isnull(vlcol) or vlcol<=0  or not isNumber(string(vlcol)) then
         MessageBox('提示信息','第'+string(i)+'行对应列号不正确,不能保存!')
         return -1
   end if
   vlsrow=dw_colmlist.GetItemNumber(i,'f_rowstart')
   if isnull(vlsrow) or vlsrow<=0 or not isNumber(string(vlsrow)) then
         MessageBox('提示信息','第'+string(i)+'行开始行号不正确,不能保存!')
         return -1
   end if
   vlerow=dw_colmlist.GetItemNumber(i,'f_rowend')
   if isnull(vlerow) or vlerow<=0  or not isNumber(string(vlerow)) then
         MessageBox('提示信息','第'+string(i)+'行结束行号不正确,不能保存!')
         return -1
   end if
   if vlsrow > vlerow then
         MessageBox('提示信息','第'+string(i)+'行结束行小于开始行,不能保存!')
         return -1
   end if
next
步骤206:根据所获取的所述导入规则,将所述外部数据源的每一列数据导入到所获取的所述导入业务模板中的对应系统数据列。
在本实施例中,可以根据上述获取的导入规则,将外部数据源的每一列数据导入到导入业务模板中的对应系统数据列中。其中,可以利用OLE(Object Linking and Embedding,对象连接与嵌入)技术,读取外部数据源的数据,并根据上述步骤获取的每一列对应的导入规则,将外部数据源的每一列数据导入到导入业务模板的系统数据列中,我们可以将导入结束的导入业务模板称为系统数据,其中,导入结束的导入业务模板如下表5所示:
表5:
步骤207:根据每一列数据对应的导入规则中所设置的检查模式和检查规则,对该列数据进行检查,并在检查通过时,将系统数据保存在系统的数据库中。
同样的,以物料编号列为例进行说明,该检查规则是:该物料编号列中的数据在物料字典中是否存在。
在本实施例中,利用下述公式执行对物料编号的检查操作:
Select lswlzd_wlbh from lswlzd where lswlzd_wlbh=‘value’
其中,上述公式的含义是:在物料字典(wlzd)中选择与物料编号(wlbh)不同的错误数据,上述方式的计算结果value为得到的错误数据。其中,可以对得到的错误数据进行归类并保存在一个预设格式的文件中,用户可以通过查看该文件确定错误数据,并对错误数据进行修改,以继续导入。该预设格式可以是txt、excel等。
本实施例中,得到错误数据的原因可以包括下面两种:1、外部数据源中的数据错误。2、物料字典中数据错误。
用户根据该错误数据进行查看是哪种原因导致的,从而对错误数据进行修改。
可选的,本实施例提供的数据导入方法的执行主体可以是终端设备,该终端设备包括可视界面,该数据导入方法的每一个步骤都可以利用可视界面对每一个步骤的操作结果进行展示。其中,该终端设备可以是智能电视、智能手机、电脑等。
在本实施例中,可以利用下述代码实现本实施例中的步骤206和步骤207:
//事件:u_master_detail_pub. ue_excel_sjzr_import
string serr
stru_sjzr_set stru_sjzr
stru_sjzr.psid=is_ljbm
stru_sjzr.ppwerobject=this
uo_pub_sjzr uo_sjzr
uo_sjzr = create uo_pub_sjzr
if uo_sjzr.uf_init(stru_sjzr) < 1 then return - 1
if uo_sjzr.uf_import(serr) < 1 then
   if len(serr) > 0 then
         messagebox("提示", serr)
   end if
   return  - 1
end if
return  1
// 函数:uo_pub_sjzr.uf_import()
// 描述:导入方法,目前支持三层单据模式。1,表头,2二级表头,3表体
// 在格式设定时,单表头单表体按1、3组合,单表头多表体按1、3、3组合,
//单表头单二级表头单表体按1、2、3组合。单表头单二级表头多表体按1、2、3、3组合
int vicount,vi_return
string vsDwName,vsdwType,vsTemp
long vlcol,vlrow_new
string vssql,vsSynTax,vsErr,vs_yxsj,vsmessage,vsdjcfbz,vssave
int i,viBound,j,ii,vldjlmwz,vldjlmwzdw,vi_yxsj,vindex,vindex_now
long vlrowstart,vlrowend,vlrow2,vlrow,vllmwz,vlfind,vl_colyxsj,vl_dwsl
boolean vb_exit=true,vb_continue=false,vb_new//记录是否第一次导入
long vlrowmx[],vlrowmx_nvl[],vl_save_ok//记录数据已成功保存的行数
boolean vd_dwmxrow=true
string vsone='',vsone_bak='' //一级表头
string vstwo='',vstwo_bak //二级表头
u_dw vdw_zr
//=====================================================
//1、 检查规则中,外部数据源名称在传入对象中是否都存在。
//=====================================================
//规则检查
SELECT count(1) into :vicount FROM LSIMPDATA WHERE F_ID=:isid;
if vicount=0 then
   pserr = '没有对应ID的导入数据方案,请先定义方案再导入数据!'
   return -1
end if
viBound = UpperBound(iwobjname[])
if viBound=0 then
   pserr = '传入的外部数据源是空,无法转入数据!'
   return -1
end if
//创建数据存储,归集数据
dw_columns_dw = create datastore
vssql = " SELECT DISTINCT F_DWNAME FROM LSIMPDATA WHERE F_ID= '"+Isid+"'"
vsSynTax = Sqlca.SynTaxFromSql(vssql,'',vsErr)
If vsSynTax = '' Then
   pserr = " 创建数据存储语法时错误"
   if isvalid(dw_columns_dw) then
         destroy dw_columns_dw
   end if
   return -1
End If
If dw_columns_dw.Create(vsSynTax,vsErr) = -1 Then
   pserr = " 创建数据存储时错误"
   if isvalid(dw_columns_dw) then
         destroy dw_columns_dw
   end if
   return -1
End If
dw_columns_dw.settransobject(sqlca)
dw_columns_dw.retrieve( )
//检查数据规则中的外部数据源在对象中是否存在
for i=1 to dw_columns_dw.rowcount( )
   vsdwname = dw_columns_dw.getitemstring(i,"F_DWNAME")
   vb_exit = false
   for j=1 to viBound
         if vsdwname = iwobjname[j].classname() then
               vb_exit = true
         end if
   next
   if vb_exit = false then exit
next
if vb_exit = false then
   pserr = " 数据规则中的外部数据源在对象中不存在!"
   return -1
end if
//=====================================================
//2、连接xls 服务
//=====================================================
vi_return = uf_import_oleconnect(pserr)
if  vi_return < 1 then
   if isvalid(dw_columns_dw) then
         destroy dw_columns_dw
   end if
   return vi_return
end if
//=====================================================
//3、数据导入前检查
//=====================================================
/*检索对应ID的数据导入方案**/
dw_sjzr_set = create datastore
dw_sjzr_set.dataobject="dw_sjzr_set"
dw_sjzr_set.settransobject(sqlca)
dw_sjzr_set.retrieve(isid)
//对表头级别和录入顺序排序
dw_sjzr_set.setsort("F_LMWZ,F_SEQUENCE")
dw_sjzr_set.sort()
if dw_sjzr_set.rowcount( ) < 1 then
   pserr = "导入规则读取失败!"
   goto err
end if
//获取导入起始结束行
vlrowstart = dw_sjzr_set.getItemNumber(1,'f_rowstart')
vlrowend = dw_sjzr_set.getItemNumber(1,'f_rowend')
vssave = dw_sjzr_set.getItemString(1,'f_save')
if trim(vssave) = '' or isnull(vssave) then vssave = '1'
//导入前出发单据新增,如果非导入并保存模式不增加单据
if vssave = '1' then
   if 1=1 then
         if iaobj.event dynamic ue_add() < 1 then
               pserr = '新增单据时出错!'
               goto err
         end if
   end if
end if
vb_new =true
//记录外部数据源对应的栏目位置
dw_columns_dwlmwz = create datastore
vssql = " SELECT DISTINCT F_DWNAME,F_LMWZ,MIN(F_SEQUENCE) AS F_SEQUENCEAS FROM LSIMPDATA WHERE F_ID= '"+Isid+"'  GROUP BY F_DWNAME,F_LMWZ ORDER BY F_SEQUENCEAS "
vsSynTax = Sqlca.SynTaxFromSql(vssql,'',vsErr)
If vsSynTax = '' Then
   pserr = " 创建数据存储语法时错误"
   if isvalid(dw_columns_dwlmwz) then
         destroy dw_columns_dwlmwz
   end if
   goto err
End If
If dw_columns_dwlmwz.Create(vsSynTax,vsErr) = -1 Then
   pserr = " 创建数据存储时错误"
   if isvalid(dw_columns_dwlmwz) then
         destroy dw_columns_dwlmwz
   end if
   goto err
End If
dw_columns_dwlmwz.settransobject(sqlca)
dw_columns_dwlmwz.retrieve( )
//获取关键列设置
vlcol = dw_sjzr_set.find( "f_hyxbz='1'",1,dw_sjzr_set.rowcount())
if vlcol < 1 or isnull(vlcol) then
   pserr="获取关键列时失败!"
   goto err
end if
vl_colyxsj=dw_sjzr_set.getitemnumber(vlcol,"f_colnum")
if vl_colyxsj<1 or isnull(vl_colyxsj) then
   pserr="获取列时失败!"
   goto err
end if
//=====================================================
//4 开始导入
//=====================================================
for i = 1 to dw_sjzr.rowcount( )
         vsone='' //一级表头
         vstwo=''//二级表头
         if i < vlrowstart or i > vlrowend then continue
         //关键列为空 ,继续循环。
         vs_yxsj = dw_sjzr.getitemstring(i,vl_colyxsj)
         if trim(vs_yxsj)='' or isnull(vs_yxsj) then continue
         //首先判定一级表头是否存在
         for vldjlmwz = 1 to 3
                    vlfind = 0
                    //如果级别在列表中不存在,执行下一级别
                    vlfind = dw_sjzr_set.find("f_lmwz="+string(vldjlmwz),1,dw_sjzr_set.rowcount( ))
                    if vlfind<1 then continue
                    //获取该栏目位置对应的数据窗口
                    dw_columns_dwlmwz.setfilter( "f_lmwz="+string(vldjlmwz))
                    dw_columns_dwlmwz.filter( )
                    dw_columns_dwlmwz.setsort("F_SEQUENCE")
                    dw_columns_dwlmwz.sort()
                    if dw_columns_dwlmwz.rowcount() >1 and vldjlmwz <> 3 then
                          pserr = " 存在非明细分录存在多个数据窗口的情况。"
                          goto err
                    end if
                    //根据数据窗口的个数进行循环。
                    for vldjlmwzdw=1 to dw_columns_dwlmwz.rowcount()
                          //处理明细级别时设置第一次进入循环的标志。在true时需要设置行
                          if vd_dwmxrow and vldjlmwz = 3 then
                               vlrowmx[vldjlmwzdw]=0
                          end if
                          //获取外部数据源名称
                          vsdwname = dw_columns_dwlmwz.getItemString(vldjlmwzdw,'f_dwname')
                          for j = 1 to upperbound(iwobjname[])
                               if vsdwname = iwobjname[j].classname() then
                                     vdw_zr = iwobjname[j]
                               end if
                          next
                          dw_sjzr_set.setfilter( "f_lmwz="+string(vldjlmwz)+" and f_dwname='"+vsdwname+"' ")
                          dw_sjzr_set.filter( )
                          dw_sjzr_set.setsort("F_SEQUENCE")
                          dw_sjzr_set.sort()
                          //检查是否需要新增
                          if vldjlmwz <> 3 then//最明细的情况无需检查
                               for ii = 1 to dw_sjzr_set.rowcount( )
                                     vlCol = dw_sjzr_set.getItemNumber(ii,'f_colnum')
                                     vstemp = dw_sjzr.getItemString(i,vlcol)
                                     vllmwz = dw_sjzr_set.getItemNumber(ii,'f_lmwz') //等同于vldjjs
                                     vsdjcfbz = dw_sjzr_set.getItemstring(ii,'f_djcfbz')
                                     if vsdjcfbz = '1' then
                                           if vllmwz=1 then
                                                vsone=vsone+vstemp
                                           elseif vllmwz=2 then
                                                vstwo=vstwo+vstemp
                                           end if
                                     end if
                               next
                          end if
                          //调用增加功能。非保存模式下不需要调用保存、增加事件
                          if vldjlmwz=1 then
                               if vsone_bak <> vsone and vssave = '1' then
                                     if vb_new = false then
                                           if iaobj.event dynamic ue_save() < 1 then
                                                pserr = '保存单据时出错!'+vsmessage
                                                goto err
                                           end if
                                           vl_save_ok = i - 1
                                           if vl_save_ok > 0 then
                                                vsmessage = '前'+string(vl_save_ok)+'行(包含)已保存成功,为防止重复导入,再次导入前请将导入文件中的前'+string(vl_save_ok)+'行删除(包含)。'
                                           end if
                                     end if
                                     if iaobj.event dynamic ue_add() < 1 then
                                           pserr = '新增单据时出错!'+vsmessage
                                           goto err
                                     end if
                                     vb_new = false
                                     vlrow=1
                                     vlrow2=0
                                     //新增单据之后需要重新初始分录的行
                                     vlrowmx[]=vlrowmx_nvl[]
                                     vd_dwmxrow = true
                               elseif vsone_bak = vsone and vssave = '1' then
                                     vb_continue = true
                                     exit
                               elseif vssave <> '1' then//不保存模式下,如果导入文件中存在一级表头,则进行导入。
                                     if vb_new = false then
                                           vb_continue = true
                                           exit                                             
                                     end if
                                     vb_new = false
                                     vlrow=1
                               end if
                          elseif vldjlmwz=2 then
                               vlrow2++
                               //触发移动焦点的事件将vdw_zr 传出,在业务模块中根据vdw_zr进行tab焦点的移动
                               if isvalid(iusheet) then
                                     vindex_now = iusheet.function dynamic of_getselectedindex()
                                     vindex = iusheet.function dynamic of_getobjectindex(vdw_zr)
                                     if vindex_now <> vindex then
                                           iusheet.function dynamic of_selecttab(vdw_zr)
                                     end if
                               end if
                               if vstwo_bak <> vstwo and vstwo_bak<>'' then
                                     if vlrow2 > vdw_zr.rowcount( ) then
                                           iaobj.event dynamic ue_detail_add()
                                           vlrow_new = vdw_zr.getrow( )
                                           if vlrow2 > vlrow_new then
                                                pserr = '新增分录时出错!'+vsmessage
                                                goto err
                                           else
                                                vlrow2 = vlrow_new
                                           end if
                                     end if
                                     vlrow = vlrow2
                               elseif vstwo_bak = vstwo then
                                     vb_continue = true
                                     vlrow2 --
                                     exit
                               end if
                          elseif vldjlmwz=3 then
                               vlrowmx[vldjlmwzdw]++
                               //触发移动焦点的事件将vdw_zr 传出,在业务模块中根据vdw_zr进行tab焦点的移动
                               if isvalid(iusheet) then
                                     vindex_now = iusheet.function dynamic of_getselectedindex()
                                     vindex = iusheet.function dynamic of_getobjectindex(vdw_zr)
                                     if vindex_now <> vindex then
                                           iusheet.function dynamic of_selecttab(vdw_zr)
                                     end if
                               end if
                               if vlrowmx[vldjlmwzdw] > vdw_zr.rowcount( ) then
                                     iaobj.event dynamic ue_detail_add()
                                     vlrow_new = vdw_zr.getrow( )
                                     if vlrowmx[vldjlmwzdw] > vlrow_new then
                                           pserr = '新增分录时出错!'+vsmessage
                                           goto err
                                     else
                                           vlrowmx[vldjlmwzdw] = vlrow_new
                                     end if
                               end if
                               vlrow = vlrowmx[vldjlmwzdw]
                          end if
                          //数据载入
                          if uf_import_sjzr(vlrow,vdw_zr,i,pserr) < 1 then
                               pserr=pserr+vsmessage
                               goto err
                          end if
                    next
                    //重新刷新外部数据源。再次循环时使用。
                    dw_sjzr_set.setfilter( "1=1")
                    dw_sjzr_set.filter( )
                    //此标志代表,如果执行一级的时候,如果导入数据本行与上一行相同,则跳出,执行下一级处理
                    if vb_continue = true then
                          vb_continue = false
                          continue
                    end if
                    //处理明细级别时设置第一次进入循环的标志。在true时需要设置行
                    if vd_dwmxrow and vldjlmwz = 3 then
                          vd_dwmxrow=false
                    end if
         next
         //将当前信息做备份。
         vsone_bak=vsone
         vstwo_bak=vstwo
next
//保存最后一次循环,非保存模式下不需要调用保存
if vssave = '1' then
   if iaobj.event dynamic ue_save() < 1 then
         pserr = '保存单据时出错!'+vsmessage
         goto err
   end if
end if
gf_closehelp()
gf_closehelp()
SetPointer(Arrow!)
//销毁对象
ole_object.quit()
ole_object.disconnectobject()
DESTROY ole_object
//删除文件
filedelete(isopfile)
if isvalid(dw_columns_dw) then destroy dw_columns_dw
if isvalid(dw_sjzr) then destroy dw_sjzr
if isvalid(dw_sjzr_set) then destroy dw_sjzr_set
if isvalid (dw_columns_dwlmwz) then destroy dw_columns_dwlmwz
return 1
根据上述方案,通过获取外部数据源对应的导入规则,根据导入规则的外部数据源的数据列与系统数据列的对应关系自动将外部数据源的数据导入到导入业务模板的对应系统数据列上,因此大大提高了数据导入的工作效率。
如图3、图4所示,本发明实施例提供了一种数据导入装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。从硬件层面而言,如图3所示,为本发明实施例数据导入装置所在设备的一种硬件结构图,除了图3所示的CPU、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等。以软件实现为例,如图4所示,作为一个逻辑意义上的装置,是通过其所在设备的CPU将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。本实施例提供的数据导入装置40包括:
第一获取单元401,用于获取当前需要导入的外部数据源对应的导入业务模板,所述导入业务模板中包括一个以上的系统数据列;
第二获取单元402,用于获取所述外部数据源对应的导入规则,所述导入规则中包括所述外部数据源的数据列与系统数据列的对应关系;
导入单元403,用于根据所获取的所述导入规则,将所述外部数据源的每一列数据导入到所获取的所述导入业务模板中的对应系统数据列。
进一步的,进一步包括:保存单元404,保存多个初始业务模板,初始业务模板包括至少一个系统数据列;
所述第一获取单元,用于根据所述外部数据源选择对应的初始业务模板;比较所选择的初始业务模板的系统数据列与所述外部数据源包括的数据列,若比较结果为所选择的初始业务模板的系统数据列不完全包括所述外部数据源的数据列,将所选择的初始业务模板的系统数据列不包括所述外部数据源的数据列添加到所选择的初始业务模板中,生成所述外部数据源对应的导入业务模板;若比较结果为所选择的初始业务模板的系统数据列完全包括所述外部数据源的数据列,将所选择的初始业务模板作为所述外部数据源对应的导入业务模板。
进一步的,所述导入规则包括多个属性信息;所述对应关系为所述多个属性信息中的一个;
所述对应关系的属性信息包括:系统数据列名、所述外部数据源的名称、所述外部数据源的列名、开始行、结束行;
所述导入规则的属性信息还包括列属性、检查模式、检查规则中的一种或多种。
进一步的,还包括:
设置单元405,用于根据所述导入规则的属性信息所包括的检查模式,对导入后的外部数据源的数据列设置对应的检查规则;
检查单元406,用于根据预先设置的所述外部数据源的数据列对应的检查规则,对导入后的所述外部数据源的数据列进行检查。
进一步的,所述装置还包括:
展示单元407,用于向用户展示所述第一获取单元、所述第二获取单元、所述导入单元的处理结果中的一个或多个。
在本发明的实施例中所提及到的数据列并不限定在特定方向上,比如并不是特指竖直方向上排列的数据,还可以是指在水平方向、或其他方向上具有一定规则的针对同一属性的多个数据的集合。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (10)

1.一种数据导入方法,其特征在于,包括:
获取当前需要导入的外部数据源对应的导入业务模板,所述导入业务模板中包括一个以上的系统数据列;
获取所述外部数据源对应的导入规则,所述导入规则中包括所述外部数据源的数据列与系统数据列的对应关系;
根据所获取的所述导入规则,将所述外部数据源的每一列数据导入到所获取的所述导入业务模板中的对应系统数据列。
2.根据权利要求1所述的方法,其特征在于,进一步包括:设置所述外部数据源对应的初始业务模板,初始业务模板包括至少一个系统数据列;
所述获取当前需要导入的外部数据源对应的导入业务模板,包括:
根据所述外部数据源选择对应的初始业务模板;
比较所选择的初始业务模板的系统数据列与所述外部数据源包括的数据列,若比较结果为所选择的初始业务模板的系统数据列不完全包括所述外部数据源的数据列,将所选择的初始业务模板的系统数据列不包括所述外部数据源的数据列添加到所选择的初始业务模板中,生成所述外部数据源对应的导入业务模板;若比较结果为所选择的初始业务模板的系统数据列完全包括所述外部数据源的数据列,将所选择的初始业务模板作为所述外部数据源对应的导入业务模板。
3.根据权利要求1所述的方法,其特征在于,所述导入规则包括多个属性信息;所述对应关系为所述多个属性信息中的一个;
所述对应关系所对应的属性信息包括:系统数据列名、所述外部数据源的名称、所述外部数据源的列名、开始行、结束行;
所述导入规则的属性信息还包括列属性、检查模式、检查规则中的一种或多种。
4.根据权利要求3所述的方法,其特征在于,进一步包括:根据所述导入规则的属性信息所包括的检查模式,对导入后的外部数据源的数据列设置对应的检查规则;
在所述将所述外部数据源的每一列数据导入到所获取的所述导入业务模板中的对应系统数据列之后,进一步包括:
根据预先设置的所述外部数据源的数据列对应的检查规则,对导入后的所述外部数据源的数据列进行检查。
5.根据权利要求1至4中任一所述的方法,其特征在于,进一步包括:向用户展示所述获取和/或导入的处理结果。
6.一种数据导入装置,其特征在于,包括:
第一获取单元,用于获取当前需要导入的外部数据源对应的导入业务模板,所述导入业务模板中包括一个以上的系统数据列;
第二获取单元,用于获取所述外部数据源对应的导入规则,所述导入规则中包括所述外部数据源的数据列与系统数据列的对应关系;
导入单元,用于根据所获取的所述导入规则,将所述外部数据源的每一列数据导入到所获取的所述导入业务模板中的对应系统数据列。
7.根据权利要求6所述的装置,其特征在于,进一步包括:保存单元,保存多个初始业务模板,初始业务模板包括至少一个系统数据列;
所述第一获取单元,用于根据所述外部数据源选择对应的初始业务模板;比较所选择的初始业务模板的系统数据列与所述外部数据源包括的数据列,若比较结果为所选择的初始业务模板的系统数据列不完全包括所述外部数据源的数据列,将所选择的初始业务模板的系统数据列不包括所述外部数据源的数据列添加到所选择的初始业务模板中,生成所述外部数据源对应的导入业务模板;若比较结果为所选择的初始业务模板的系统数据列完全包括所述外部数据源的数据列,将所选择的初始业务模板作为所述外部数据源对应的导入业务模板。
8.根据权利要求6所述的装置,其特征在于,所述导入规则包括多个属性信息;所述对应关系为所述多个属性信息中的一个;
所述对应关系的属性信息包括:系统数据列名、所述外部数据源的名称、所述外部数据源的列名、开始行、结束行;
所述导入规则的属性信息还包括列属性、检查模式、检查规则中的一种或多种。
9.根据权利要求8所述的装置,其特征在于,还包括:
设置单元,用于根据所述导入规则的属性信息所包括的检查模式,对导入后的外部数据源的数据列设置对应的检查规则;
检查单元,用于根据预先设置的所述外部数据源的数据列对应的检查规则,对导入后的所述外部数据源的数据列进行检查。
10.根据权利要求6至9中任一所述的装置,其特征在于,所述装置还包括:
展示单元,用于向用户展示所述第一获取单元、所述第二获取单元、所述导入单元的处理结果中的一个或多个。
CN201410770015.6A 2014-12-15 2014-12-15 一种数据导入方法及装置 Pending CN104536998A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410770015.6A CN104536998A (zh) 2014-12-15 2014-12-15 一种数据导入方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410770015.6A CN104536998A (zh) 2014-12-15 2014-12-15 一种数据导入方法及装置

Publications (1)

Publication Number Publication Date
CN104536998A true CN104536998A (zh) 2015-04-22

Family

ID=52852526

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410770015.6A Pending CN104536998A (zh) 2014-12-15 2014-12-15 一种数据导入方法及装置

Country Status (1)

Country Link
CN (1) CN104536998A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105589968A (zh) * 2015-12-25 2016-05-18 中国银联股份有限公司 数据汇总系统及方法
CN106528821A (zh) * 2016-11-16 2017-03-22 济南浪潮高新科技投资发展有限公司 一种变动列数据导入数据库的方法
CN107016096A (zh) * 2017-04-07 2017-08-04 北京六古广告传媒有限责任公司 一种数据导入系统及基于该系统的数据导入方法
CN107436917A (zh) * 2017-06-16 2017-12-05 浙江百世技术有限公司 一种导入模板配置方法、数据批量导入方法及系统
CN108132936A (zh) * 2016-11-30 2018-06-08 北京国双科技有限公司 数据导入方法及装置
CN109992585A (zh) * 2019-04-01 2019-07-09 北京金和网络股份有限公司 用于办公管理系统的数据导入方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101141525A (zh) * 2007-10-10 2008-03-12 中兴通讯股份有限公司 一种信息管理系统以及信息管理方法
CN101419628A (zh) * 2008-12-03 2009-04-29 浪潮集团山东通用软件有限公司 一种基于Excel文件格式的数据通用导入方法
CN101452441A (zh) * 2008-12-05 2009-06-10 山东浪潮齐鲁软件产业股份有限公司 一种电子表格通用数据解析导入方法
CN104123376A (zh) * 2014-07-29 2014-10-29 广东能龙教育股份有限公司 一种基于列模板的智能文本数据采集方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101141525A (zh) * 2007-10-10 2008-03-12 中兴通讯股份有限公司 一种信息管理系统以及信息管理方法
CN101419628A (zh) * 2008-12-03 2009-04-29 浪潮集团山东通用软件有限公司 一种基于Excel文件格式的数据通用导入方法
CN101452441A (zh) * 2008-12-05 2009-06-10 山东浪潮齐鲁软件产业股份有限公司 一种电子表格通用数据解析导入方法
CN104123376A (zh) * 2014-07-29 2014-10-29 广东能龙教育股份有限公司 一种基于列模板的智能文本数据采集方法和系统

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105589968A (zh) * 2015-12-25 2016-05-18 中国银联股份有限公司 数据汇总系统及方法
CN106528821A (zh) * 2016-11-16 2017-03-22 济南浪潮高新科技投资发展有限公司 一种变动列数据导入数据库的方法
CN106528821B (zh) * 2016-11-16 2019-04-23 浪潮通用软件有限公司 一种变动列数据导入数据库的方法
CN108132936A (zh) * 2016-11-30 2018-06-08 北京国双科技有限公司 数据导入方法及装置
CN107016096A (zh) * 2017-04-07 2017-08-04 北京六古广告传媒有限责任公司 一种数据导入系统及基于该系统的数据导入方法
CN107436917A (zh) * 2017-06-16 2017-12-05 浙江百世技术有限公司 一种导入模板配置方法、数据批量导入方法及系统
CN109992585A (zh) * 2019-04-01 2019-07-09 北京金和网络股份有限公司 用于办公管理系统的数据导入方法

Similar Documents

Publication Publication Date Title
CN104536998A (zh) 一种数据导入方法及装置
US8752009B2 (en) Source code comparison device, source code comparison method and source code comparison program
US11288326B2 (en) Retrieval method and device for judgment documents
US20210049711A1 (en) Method of automatically transmitting data information and device of automatically transmitting data information
CN107992506B (zh) 信息处理方法及装置
CN111126019B (zh) 基于模式定制的报表生成方法、装置和电子设备
CN107291745B (zh) 一种数据指标的管理方法及装置
CN105446865A (zh) 多种环境下的测试方法及装置
CN111159982B (zh) 文档编辑方法、装置、电子设备及计算机可读存储介质
US10579915B2 (en) Method and device for initializing two-dimensional code
CN115391439B (zh) 文档数据导出方法、装置、电子设备和存储介质
CN112286934A (zh) 数据库表导入方法、装置、设备及介质
CN105657677A (zh) 一种短信发送方法、短信网关及业务平台
CN111984239A (zh) 一种页面配置方法、装置、服务器及存储介质
CN105786843A (zh) 一种应用的多语言实现方法及多语言信息查询方法、装置
CN110889272A (zh) 数据处理方法、装置、设备及存储介质
CN113886590A (zh) 数据汇总方法、装置、计算机设备及存储介质
CN111367982B (zh) 导入tririga基础数据的方法、装置、计算机设备及存储介质
CN113220568A (zh) Usim卡文件系统的测试方法、装置及介质
CN103136166B (zh) 字体确定方法和设备
CN104765722A (zh) 参数配置方法及装置
CN106610899B (zh) 一种测试用例生成方法及装置
CN105808595B (zh) 一种规范文件的数据库生成方法及装置
CN114239535A (zh) 一种基于网页页面的Word文档自动生成方法及系统
KR101672522B1 (ko) 기록 보유목록 관리 방법 및 장치

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20150422

WD01 Invention patent application deemed withdrawn after publication