mercoledì 15 luglio 2015

ODI 12c - Groovy Creare un mapping



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/

 

Nessun commento:

Posta un commento