ODI 12c中使用Groovy脚本创建工程
本文主要介绍在ODI中使用groovy创建工程,并添加一个表转换的映射。要创建groovy脚本,可以从ODI Studio的菜单:工具->Groovy->新脚本 打开一个编辑窗口。在执行下面的脚本之前,确认在模型中已经有EMP表。
USERSRC
USERDEST
import oracle.odi.domain.project.OdiProject
import oracle.odi.domain.project.finder.IOdiProjectFinder
import oracle.odi.domain.model.finder.IOdiDataStoreFinder
import oracle.odi.domain.project.finder.IOdiFolderFinder
import oracle.odi.domain.project.finder.IOdiKMFinder
import oracle.odi.domain.mapping.finder.IMappingFinder
import oracle.odi.domain.adapter.project.IKnowledgeModule.ProcessingType
import oracle.odi.domain.model.OdiDataStore
import oracle.odi.core.persistence.transaction.support.DefaultTransactionDefinition
def setExpr(comp, tgtTable, propertyName, expressionText) {
DatastoreComponent.findAttributeForColumn(comp,tgtTable.getColumn(propertyName)).setExpressionText(expressionText)
}
// 工程创建函数
def createProject(project_name, project_folder_name){
project_code = project_name
txnDef = new DefaultTransactionDefinition();
tm = odiInstance.getTransactionManager()
tme = odiInstance.getTransactionalEntityManager()
txnStatus = tm.getTransaction(txnDef)
pf = (IOdiProjectFinder)tme.getFinder(OdiProject.class)
ff = (IOdiFolderFinder)tme.getFinder(OdiFolder.class)
project = pf.findByCode(project_name)
if (project != null) {
println "Project Already Exists. Project Creation Skipped"
}
else{
project = new OdiProject(project_name, project_name)
tme.persist(project)
folder = new OdiFolder(project, project_folder_name)
tme.persist(folder)
tm.commit(txnStatus)
println "Project Created Successfully"
}
}
//映射创建函数
def createMapping(project_name,project_folder_name,myMap) {
txnDef = new DefaultTransactionDefinition()
tm = odiInstance.getTransactionManager()
tme = odiInstance.getTransactionalEntityManager()
txnStatus = tm.getTransaction(txnDef)
pf = (IOdiProjectFinder)tme.getFinder(OdiProject.class)
ff = (IOdiFolderFinder)tme.getFinder(OdiFolder.class)
project = pf.findByCode(project_name)
folderColl = ff.findByName(project_folder_name, project_name)
OdiFolder folder = null
if (folderColl.size() == 1)
folder = folderColl.iterator().next()
dsf = (IOdiDataStoreFinder)tme.getFinder(OdiDataStore.class)
mapf = (IMappingFinder) tme.getFinder(Mapping.class)
Mapping map = (mapf).findByName(folder, myMap)
if ( map!=null) {
println "Map Already Exists. Map Creation Skipped"
}
else{
map = new Mapping(myMap, folder)
tme.persist(map)
ds_source = dsf.findByName("EMP", "USERSRC")
ds_src_comp = new DatastoreComponent(map, ds_source)
ds_target = dsf.findByName("EMP", "USERDEST")
ds_tgt_comp = new DatastoreComponent(map, ds_target)
ds_src_comp.connectTo(ds_tgt_comp)
setExpr(ds_tgt_comp, ds_target, "EMPNO", "EMP.EMPNO")
setExpr(ds_tgt_comp, ds_target, "ENAME", "EMP.ENAME")
setExpr(ds_tgt_comp, ds_target, "JOB", "EMP.JOB")
setExpr(ds_tgt_comp, ds_target, "MGR", "EMP.MGR")
setExpr(ds_tgt_comp, ds_target, "HIREDATE", "EMP.HIREDATE")
setExpr(ds_tgt_comp, ds_target, "SAL", "EMP.SAL")
setExpr(ds_tgt_comp, ds_target, "COMM", "EMP.COMM")
setExpr(ds_tgt_comp, ds_target, "DEPTNO", "EMP.DEPTNO")
deploymentspec = map.getDeploymentSpec(0)
node = deploymentspec.findNode(ds_tgt_comp)
println deploymentspec.getExecutionUnits()
aps = deploymentspec.getAllAPNodes()
tgts = deploymentspec.getTargetNodes()
ikmf = (IOdiKMFinder)tme.getFinder(OdiIKM.class)
ins_ikm = ikmf.findByName("IKM Oracle Insert");
lkmf = (IOdiKMFinder)tme.getFinder(OdiLKM.class)
sql_lkm = lkmf.findByName("LKM Oracle to Oracle Pull (DB Link)");
api = aps.iterator()
ap_node = api.next()
ap_node.setLKM(sql_lkm)
ap_node.getOptionValue(ProcessingType.TARGET,"ADD_DRIVING_SITE_HINT").setValue("true")
tme.persist(map)
tm.commit(txnStatus)
println "Mapping Created SUccessfully"
}
}
//创建映射结束
//执行
createProject("PRO_SCOTT","First Folder")
createMapping("PRO_SCOTT", "First Folder", "New_Mapping")
点击执行脚本,即可看到生成的工程名(PRO_SCOTT)及映射名称(New_Mapping)
ODI 12c中使用Groovy脚本创建工程的更多相关文章
- Elasticsearch中使用groovy脚本处理boolean字段的一个问题
Elasticsearch中使用groovy脚本获取文档的bool字段值时,得到的值是字符的 'T' 或者 'F' ,而不是bool值 true 和 false . 比如文档中有一个字段是 { &qu ...
- cocos中使用VS自动创建工程的方法
为了省事,直接用VS编写了一小段代码,将cocos手动创建工程的命令改用system来执行,免去了手动输入命令的麻烦 其中: -d F:\\cocos2d-x-3.2-projects 是你要存放的工 ...
- 在SQL Server 2008 中使用SQL脚本创建登录用户并授权
到处都使用超级用户sa显然是不安全的,因此有创建用户并让其只能访问某个数据库的必要.当然可以使用SQL Server自带的图形界面向导,但是太难用用了!有时候代码比较直接,比如这里: --使用已经创建 ...
- [SoapUI] 在SoapUI中通过Groovy脚本执行window命令杀掉进程
//杀Excel进程 String line def p = "taskkill /F /IM EXCEL.exe".execute() def bri = new Buffere ...
- 即时编译和打包您的 Groovy 脚本(转)
在本文中将会涉及到: 使用 CliBuilder 来实现对命令行选项的支持,脚本执行时所需要的参数将通过命令行选项的方式传递. 使用 GroovyClassLoader 加载 Groovy class ...
- 【Android】cocos2d-x-3.1.1环境搭建与创建工程( Win7 32位系统)
参考资料: http://blog.csdn.net/wxc237786026/article/details/32907079 1.环境搭建 2.创建工程 2.1 VS2012运行 2.2 Andr ...
- Uvision4创建工程
创建工程 创建好工程会出现如下的界面 创建文件( .asm 或 .c ) 选择菜单栏中的File->New- 按 Ctrl+S 保存文件并填写文件名 添加到之前创建的工程中 选择Target1- ...
- excel文件的groovy脚本在SoapUI中进行数据驱动测试
SoapUI Pro具有从外部文件读取数据的功能,例如:excel,csv等.但SoapUI不提供从excel文件读取数据的功能.因此,为了从SoapUI中的excel文件中读取数据,我们需要在gro ...
- ODI 11g & 12c中缓慢变化维(SCD)的处理机制
缓慢变化维(Slowly changing Dimensions)指的是维表中的维度字段值会随着时间或业务调整,而在后续的分析中,历史数据仍然要使用旧的维度值,新的数据会使用当前维度值.在数据仓库建设 ...
随机推荐
- idea14教程
破解:http://blog.csdn.net/guofeng526/article/details/47043457 使用教程: http://www.phperz.com/article/15/0 ...
- Python核心编程-基础2
open() 和 file() 函数会同时存在, 完成相同的功能.一般说来, 我们建议使用 open() 来读写文件, 在您想说明您在处理文件对象时使用 file() , 例如 if instance ...
- git reset 理解
http://www.open-open.com/lib/view/open1397013992747.html 一般在工作中用的比较多的是: git reset --hard <commitI ...
- 主成分分析(PCA)原理及R语言实现
原理: 主成分分析 - stanford 主成分分析法 - 智库 主成分分析(Principal Component Analysis)原理 主成分分析及R语言案例 - 文库 主成分分析法的原理应用及 ...
- 易通电脑锁2007V6.3.3.3无法卸载问题解决办法
易通电脑锁2007V6.3.3.3无法卸载问题解决办法把原版文件拷贝回去.bat@echo offcolor 2Fecho 该批处理会把易通电脑锁2007版原文件拷贝回去,解决易通电脑锁卸载时出现的运 ...
- 解析xml报classnotfound错误
使用dom4j解析XML时,要快速获取某个节点的数据,使用XPath是个不错的方法,dom4j的快速手册里也建议使 用这种方式, 方法是使用Document的selectNodes(String XP ...
- Eclipse中Ant的配置与测试 转
欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...
- hdu---(2604)Queuing(矩阵快速幂)
Queuing Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- css解决方案经验杂记
文本垂直居中 单行文本:line-height的值等于height: 多行文本:padding上下值一致即可: 还可以使用position:absolute进行绝对定位,如果是相对父级元素,则需要设置 ...
- Text Justification [LeetCode]
Problem Description:http://oj.leetcode.com/problems/text-justification/ Note: Just be careful about ...