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 解决方案 总结 后记 一.前 ...
随机推荐
- 由STL所想到的 C++显示调用析构函数
在STL中的容器中的析构函数中,会经常调用destroy()这个函数 在STL中 destroy()被重载了 这点在这里到不去讨论 这里贴最简单的那个版本 template<class T&g ...
- bigworld源码分析(5)——BaseApp分析
BaseApp负载部分,核心代码缺失...网上的源码中都找不到,暂时没办法分析其核心内容,很遗憾,继续寻找吧,等找到了,再继续自己的分析.
- Thrift 个人实战--RPC服务的发布订阅实现(基于Zookeeper服务)
前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...
- jq 一些小方法
js 控制a标签的onclick方法 document.getElementById("a3").onclick = ""; window.document.g ...
- Java实验一
20145113 Java实验一 使用JDK编译.运行简单的Java程序 安装JDK并配置相关环境 安装JDK后配置环境变量 计算机→属性→高级系统设置→高级→环境变量 新建 JAVA_HOME 变量 ...
- maven docker 操作
1. 使用dokerfile 进行构建 创建dockerfile 2. maven 插件 <plugin> <groupId>com.spotify</groupId&g ...
- Unity Shader——Writing Surface Shaders(2)——Custom Lighting models in Surface Shaders
Surface Shader中的自定义光照模型 当你在编写 Surface Shaders 时,是在描述一个表面的属性(反射颜色.法线……),而且光的交互过程是由一个光照模型来计算的.内建的光照模型有 ...
- java消息推送与接收
package com.zl; import java.net.ServerSocket; import java.net.Socket; import org.apache.commons.mvc. ...
- Install Qt creator
download qt for linux yum install dialog move download qt file(qt-opensource-linux-x64-5.6.0.run) fr ...
- wordpress google字体和gravatar头像不显示问题处理
wordpress 安装好后,发现网站打开很慢. 查看原因后发现是因为总所周知的原因:google字体无法加载.gravatar头像无法加载. 在网上查了下,说是要把google字体加载连接修改下,和 ...