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 解决方案 总结 后记 一.前 ...
随机推荐
- 限制文本框只能输入数字或浮点数的JS脚步
1.oninput,onpropertychange,onchange的用法 l onchange触发事件必须满足两个条件: a)当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本 ...
- python数据结构与算法——桶排序
桶排序的时间复杂度是O(M+N),通过建立对原始数据的有序统计表,实现非常快速的排序过程 可以用hashtable(或者dict)实现,查询复杂度为O(1) 贴代码: # 简单桶排序 从小到大 def ...
- jsp状态管理
http无状态协议 服务器记不住你 每次浏览器访问,服务器不会特点保存相应信息,故记不住你 jsp状态存储的两种机制 cookie 存储在客户端 用途: 1.简化登陆 2.追踪特定对象 3.保存用户常 ...
- import tf
不知道为什么,tensorflow要最后import,否则会对matplotlib的imread产生影响,产生IO错误,异常莫名其妙
- C#的输入、输出与运算符、数据类型
(1)Visual Studio.NET起始页 启动Visual Studio.NET后,首先看到一个如下图所示的起始页.在起始页可以打开已有的项目或建立新的项目. (2)新建Visual1C# .n ...
- UVA-11297 Census(线段树套线段树)
题目大意:二维空间点修改,询问矩形区域最值. 题目分析:还是比较简单的. 代码如下: # include<iostream> # include<cstdio> # inclu ...
- 准确理解SO_REUSEADDR
默认情况下,套接字不同一个正在使用的本地地址绑定到一起.但在少数情况下,仍有必要以这种方式,来实现对一个地址的重复利用.每个连接都是通过它的本地及远程地址的组合,"独一无二&qu ...
- [转]Windows系统中监控文件复制操作的几种方式
1. ICopyHook 作用: 监视文件夹和打印机移动,删除, 重命名, 复制操作. 可以得到源和目标文件名. 可以控制拒绝操作. 缺点: 不能对文件进行控制. 只对Shell文件操作有效, 对原生 ...
- Android学习笔记(四)
一个应用程序是有很多活动构成的,使用Intent在活动间移动. Intent分为显式和隐式两种: 1.显示Intent: 新建一个布局文件,命名为second_layout.xml,代码如下 < ...
- 51nod 1290 Counting Diff Pairs 莫队 + bit
一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[j]中,有多少对数,abs(A[i] - A[j]) <= K(abs表示绝对值) ...