A seguito della fusione OWB/ODI molte dei metodi SDK utilizzati per la 11g sono
stati deprecati nella 12c. Questo ha portato ad una semplificazione del codice
per la creazione di mapping ma ad una maggiore rigidità procedurale in quanto,
l’introduzione di operatori utilizzati da OWB rende la programmazione moltro
più serializzata e rigida.
Mentre prima il paradigma era n source ed 1 target
adesso l’introduzione degli operatori di OWB ha reso la creazione dei mapping
più articolata portando all'interno dei mapping anche più di un target.
Nello script, di esempio, si vede come si sia semplificata la scrittura del codice ma allo stesso tempo come le operazioni da effettuare si siano serializzate.
Esempio Groovy:
//
//
// Sample Mapping SDK Code for ODI 12.1.3
//
//
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;
//
// Helper / utility function
// set the expression on the component
def createExp(comp, tgtTable, propertyName, expressionText) { DatastoreComponent.findAttributeForColumn(comp,tgtTable.getColumn(propertyName)).setExpressionText(expressionText)
}
//
// Delete the mapping passed in
//
def removeMapping(folder, map_name) {
...
}
//
// Find a folder within a project
// returns the folder from the function
def find_folder(project_code, folder_name) {
...
return folder
}
def basic_mapping(prj,fold, myMap) {
folder = find_folder(prj,fold)
removeMapping(folder, myMap)
txnDef = new DefaultTransactionDefinition()
tm = odiInstance.getTransactionManager()
tme = odiInstance.getTransactionalEntityManager()
txnStatus = tm.getTransaction(txnDef)
dsf = (IOdiDataStoreFinder)tme.getFinder(OdiDataStore.class)
mapf = (IMappingFinder) tme.getFinder(Mapping.class)
map = new Mapping(myMap, folder)
tme.persist(map)
// find del OdiStore source
boundTo_emp = dsf.findByName("COUNTRIES", "HR")
comp_emp = new DatastoreComponent(map, boundTo_emp)
// find del OdiStore target
boundTo_tgtemp = dsf.findByName("TGT_COUNTRIES", "HR")
comp_tgtemp = new DatastoreComponent(map, boundTo_tgtemp)
//connessione source target
comp_emp.connectTo(comp_tgtemp)
createExp(comp_tgtemp, boundTo_tgtemp, "COUNTRY_ID", "COUNTRIES.COUNTRY_ID")
createExp(comp_tgtemp, boundTo_tgtemp, "COUNTRY_NAME", "COUNTRIES.COUNTRY_NAME")
...
// inserire qui eventuali KM da utilizzare
...
tme.persist(map)
tm.commit(txnStatus)
return map
}
m1 = basic_mapping("IF_TEMPLATE_1_GROOVY", "First Folder", "Basic_Mapping")
Quello che si ottiene è il seguente mapping:
Per maggiori informazioni si possono consultare anche i seguenti link:
https://blogs.oracle.com/dataintegration/entry/odi_12c_mapping_sdk_the
https://blogs.oracle.com/dataintegration/entry/odi_12c_mapping_builder
https://blogs.oracle.com/dataintegration/resource/odi12c_sdk/OdiMappingBuilder.java
https://blogs.oracle.com/warehousebuilder/entry/odi_11g_interface_builder
http://www.rittmanmead.com/2014/01/rittman-mead-and-oracle-data-integrator-12c-thoughts-and-experiences-so-far/
http://www.rittmanmead.com/2013/10/oracle-data-integrator-12c-release-part-1
http://www.rittmanmead.com/2013/11/oracle-data-integrator-12c-release-part-2/
http://www.ateam-oracle.com/getting-groovy-with-odi-upgrades-and-owb-migrations/
//
// Sample Mapping SDK Code for ODI 12.1.3
//
//
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;
//
// Helper / utility function
// set the expression on the component
def createExp(comp, tgtTable, propertyName, expressionText) { DatastoreComponent.findAttributeForColumn(comp,tgtTable.getColumn(propertyName)).setExpressionText(expressionText)
}
//
// Delete the mapping passed in
//
def removeMapping(folder, map_name) {
...
}
//
// Find a folder within a project
// returns the folder from the function
def find_folder(project_code, folder_name) {
...
return folder
}
def basic_mapping(prj,fold, myMap) {
folder = find_folder(prj,fold)
removeMapping(folder, myMap)
txnDef = new DefaultTransactionDefinition()
tm = odiInstance.getTransactionManager()
tme = odiInstance.getTransactionalEntityManager()
txnStatus = tm.getTransaction(txnDef)
dsf = (IOdiDataStoreFinder)tme.getFinder(OdiDataStore.class)
mapf = (IMappingFinder) tme.getFinder(Mapping.class)
map = new Mapping(myMap, folder)
tme.persist(map)
// find del OdiStore source
boundTo_emp = dsf.findByName("COUNTRIES", "HR")
comp_emp = new DatastoreComponent(map, boundTo_emp)
// find del OdiStore target
boundTo_tgtemp = dsf.findByName("TGT_COUNTRIES", "HR")
comp_tgtemp = new DatastoreComponent(map, boundTo_tgtemp)
//connessione source target
comp_emp.connectTo(comp_tgtemp)
createExp(comp_tgtemp, boundTo_tgtemp, "COUNTRY_ID", "COUNTRIES.COUNTRY_ID")
createExp(comp_tgtemp, boundTo_tgtemp, "COUNTRY_NAME", "COUNTRIES.COUNTRY_NAME")
...
// inserire qui eventuali KM da utilizzare
...
tme.persist(map)
tm.commit(txnStatus)
return map
}
m1 = basic_mapping("IF_TEMPLATE_1_GROOVY", "First Folder", "Basic_Mapping")
Quello che si ottiene è il seguente mapping:
Per maggiori informazioni si possono consultare anche i seguenti link:
https://blogs.oracle.com/dataintegration/entry/odi_12c_mapping_sdk_the
https://blogs.oracle.com/dataintegration/entry/odi_12c_mapping_builder
https://blogs.oracle.com/dataintegration/resource/odi12c_sdk/OdiMappingBuilder.java
https://blogs.oracle.com/warehousebuilder/entry/odi_11g_interface_builder
http://www.rittmanmead.com/2014/01/rittman-mead-and-oracle-data-integrator-12c-thoughts-and-experiences-so-far/
http://www.rittmanmead.com/2013/10/oracle-data-integrator-12c-release-part-1
http://www.rittmanmead.com/2013/11/oracle-data-integrator-12c-release-part-2/
http://www.ateam-oracle.com/getting-groovy-with-odi-upgrades-and-owb-migrations/
Nessun commento:
Posta un commento