AX2012 DMF数据导入的问题
由于AX2012的数据结构比较复杂,通过Excel直接导入表的方式很多数据已经难以导入,比如物料信息,2009只需要导入InventTable,InventTableModule和InventItemLocaiton三张表就可以了,但是到了2012就需要导入很多表。
AX2012 DMF导入工具整体来说还是比较好的一个工具,从框架上解决了数据导入的问题,并且提供了很多默认的实体,让对表结构不是很了解的应用顾问也可以导入一些数据,当然有时候导入的时候标准的实体可能不能满足要求,需要做一些修改,但是整个框架有了,具体的微调就不是太困难了。
DMF导入框架的设计比较简洁明了,它先通过SSIS组件把所有的异构数据,导入到暂存表(stage)表,然后再将数据经过映射或者经过转化映射到目标是实体中,其中暂存表就是一个中间表,它可以映射到目标实体,这个目标实体可以对应多张AX2012的表,这些目的表以及相互的关系通过Query来定义。需要转换然后映射到目标实体的转换方法继承自DMFEntityBase类的方法实现。
从暂存表到目的表写入数据的时候,要解决一个问题,如果目的表的数据存在了,应该更新,如果目的表数据不存在,应该插入。那么DMF凭什么来判断目的表的数据是否存在?
答案在类DMFEntityWriter的write方法的如下代码:
query = new query(_entity.TargetEntity);
query.validTimeStateDateTimeRange(dateTimeUtil::minValue(),DateTimeUtil::maxValue());
qbd = query.dataSourceNo();
mainDS = qbd.name();
qbd = qbd.addDataSource(entityTableId);
qbd.fetchMode(QueryFetchMode::One2One);
qbd.relations(true);
其中query就是实例化了目的实体对应的Query,qbd.addDataSource(entityTableId)就是增加了目的Query与暂存表之间的连接,这里并没有显式添加relation,而是用了代码relations(true)来增加连接,这说明暂存表的relations应该定义了暂存表与目的实体主表(目的实体对应的Query的第一个DatSource)之间的关系。relations字段或者字段的组合应该可以唯一确定一条记录。
以DMFProductEntity为例,它就存在了如下一个relation.
这样它就可以按照ItemId为标识进行唯一性的判断。
系统存在的标准实体,大都有这个relation,所以大部分都没有问题。
DMF支持自定义的创建,通过向导生成一个目标实体,那么这种情况下,它根据什么逻辑创建暂存表和目的表的relation呢?
这段逻辑在类dmfGenerateEntityTable的addTargetRelation方法。
显然它是根据目的表的主键或者聚集索引的字段来创建relation的,如果主键或者聚集索引都是RecId或者代理键的话,它不会添加相应的relation,这样在导入的时候会出现只能插入一条记录的情况,解决方法是在用向导创建完表以后手动添加到目的表的relation,把能唯一标识记录的字段加到relation里。
AX2012 DMF数据导入的问题的更多相关文章
- ITTC数据挖掘平台介绍(五) 数据导入导出向导和报告生成
一. 前言 经过了一个多月的努力,软件系统又添加了不少新功能.这些功能包括非常实用的数据导入导出,对触摸进行优化的画布和画笔工具,以及对一些智能分析的报告生成模块等.进一步加强了平台系统级的功能. 马 ...
- FineReport实现EXCEL数据导入自由报表
在制作填报报表的时候,对于空白填报表,常常导出为Excel,派发给各部门人员填写后上交.如何能避免手动输入,直接将Excel中的数据导入到填报表中提交入库呢? 这里以一个简单的员工信息填报示例进行介绍 ...
- Execl数据导入sql server方法
在日常的程序开发过程中,很多情况下,用户单位给予开发人员的数据往往是execl或者是access数据,如何把这些数据转为企业级是数据库数据呢,下面就利用sqlserver自带的功能来完成此项任务. 首 ...
- kettle将Excel数据导入oracle
导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...
- [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- sqlserver 中数据导入到mysql中的方法以及注意事项
数据导入从sql server 到mysql (将数据以文本格式从sqlserver中导出,注意编码格式,再将文本文件导入mysql中): 1.若从slqserver中导出的表中不包含中文采用: bc ...
- 数据分析(7):pandas介绍和数据导入和导出
前言 Numpy Numpy是科学计算的基础包,对数组级的运算支持较好 pandas pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数.pandas兼具Numpy高性能的数组计 ...
- MySQL学习笔记十一:数据导入与导出
数据导入 1.mysqlimport命令行导入数据 在使用mysqlimport命令导入数据时,数据来源文件名要和目标表一致,不想改文件名的话,可以复制一份创建临时文件,示例如下. 建立一个文本use ...
- geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...
随机推荐
- .NET 强引用和弱引用
一:什么是弱引用 了解弱引用之前,先了解一下什么是强引用 例如 : Object obj=new Object(); 就是一个强引用,内存分配一份空间给用以存储Object数据,这块内存有一个 ...
- 8UFTP
FTP 文件上传下载工具 FTP(File Transfer Protocol)是Internet上用来传送文件的协议(文件传输协议). 官网:http://ftp.8u.cn 网盘下载(版本 ...
- Sprint第二个冲刺(第十三天)
一.Sprint 计划会议: sprint2计划的功能还没有全部完成,还在实现剩余的两个功能模块,目前工作进展还比较顺利,争取下一个sprint完成剩余的所有目标. 以下是真机测试下的拍照和系统相册取 ...
- Sprint第二个冲刺(第九天)
一.Sprint 计划会议: 现在简单说一下Sprint2的进展情况:大部分功能已经完成或者正在做,此次Sprint2中最难的设计商家的数据库表格已经完成了,剩下的其他功能都是比较耗时的,现在也在抓紧 ...
- MongoDB学习笔记二:创建、更新及删除文档
插入并保存文档 对目标集使用insert方法插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个&q ...
- gdb使用心得
启用调试gdb gdb 路径到prog_1dray 然后就直接进去gdb了 进去后输入r *.par 参数文件就行了 暂时学到这,用到这!日后再学习更新
- sqlserver开窗函数
从 http://jimshu.blog.51cto.com/3171847/1376637/ 转 开窗函数是在 ISO 标准中定义的.SQL Server 提供排名开窗函数和聚合开窗函数. 在开窗函 ...
- 淘宝ip库接口调用
function ip($ip) { $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; $ipi ...
- 【C】 06 - 标准库概述
任何程序都会有一些通用的功能需求,对这些需求的实现组成了库.它可以提高程序的复用性.健壮性和可移植性,这也是模块化设计的体现.C规范定义了一些通用接口库,这里只作概述性介绍,具体细节当然还是要查阅规范 ...
- Nginx日志常用分析命令汇总 (转)
三.常用日志分析命令 1.总请求数 1 wc -l access.log |awk '{print $1}' 2.独立IP数 1 awk '{print $1}' access.log|sort |u ...