Database Replication - Unable to import table mapping

0
I'm using Database Replication 8.1.2 to import data from an external application. I can define table mapping and import calls then export the table mapping without any problem. To test importing table mapping, I deleted the existing table mapping and import calls, then ran the Import table mapping command and selected the previously exported table mapping XML. The import was failed and Mendix showed below error messages in the console. What's the correct way to import table mapping? com.mendix.modules.microflowengine.MicroflowException: com.mendix.systemwideinterfaces.MendixRuntimeException: Error while importing, key value for 'Name' should not be null.     at DatabaseReplication.ImportXMLFile (Import with mapping : 'Import XML document')     at DatabaseReplication.MB_ImportXMLFile (SubMicroflow : 'ImportXMLFile') Advanced stacktrace:     at com.mendix.modules.microflowengine.MicroflowUtil.processException(MicroflowUtil.java:83) Caused by: com.mendix.systemwideinterfaces.MendixRuntimeException: com.mendix.systemwideinterfaces.MendixRuntimeException: Error while importing, key value for 'Name' should not be null.     at com.mendix.integration.importer.xml.XmlImporter.parseXml(XmlImporter.scala:77) Caused by: com.mendix.systemwideinterfaces.MendixRuntimeException: Error while importing, key value for 'Name' should not be null.     at com.mendix.integration.importer.handlers.ObjectFinder.$anonfun$createArgs$1(ObjectFinder.scala:116)     at scala.collection.StrictOptimizedIterableOps.map(StrictOptimizedIterableOps.scala:100)     at scala.collection.StrictOptimizedIterableOps.map$(StrictOptimizedIterableOps.scala:87)     at scala.collection.immutable.Map$Map2.map(Map.scala:289)     at com.mendix.integration.importer.handlers.ObjectFinder.createArgs(ObjectFinder.scala:108)     at com.mendix.integration.importer.handlers.ObjectFinder.findInDatabaseInternal(ObjectFinder.scala:73)     at com.mendix.integration.importer.handlers.ObjectFinder.findInDatabase(ObjectFinder.scala:63)     at com.mendix.integration.importer.handlers.ObjectFinder.$anonfun$find$2(ObjectFinder.scala:27)     at scala.Option.orElse(Option.scala:477)     at com.mendix.integration.importer.handlers.ObjectFinder.$anonfun$find$1(ObjectFinder.scala:27)     at scala.Option.orElse(Option.scala:477)     at com.mendix.integration.importer.handlers.ObjectFinder.find(ObjectFinder.scala:26)     at com.mendix.integration.importer.handlers.ObjectMappingHandler.findObject(ObjectMappingHandler.scala:293)     at com.mendix.integration.importer.handlers.ObjectMappingHandler.getObjectViaDefaultAction(ObjectMappingHandler.scala:256)     at com.mendix.integration.importer.handlers.ObjectMappingHandler.getObjectImportInfo(ObjectMappingHandler.scala:117)     at com.mendix.integration.importer.handlers.ObjectMappingHandler.createObjectInfo(ObjectMappingHandler.scala:138)     at com.mendix.integration.importer.handlers.ObjectMappingHandler.$anonfun$endObjectElement$1(ObjectMappingHandler.scala:94)     at scala.Option.map(Option.scala:242)     at com.mendix.integration.importer.handlers.ObjectMappingHandler.endObjectElement(ObjectMappingHandler.scala:89)     at com.mendix.integration.importer.handlers.StreamingHandler.$anonfun$handleElement$1(StreamingHandler.scala:81)     at com.mendix.integration.importer.handlers.StreamingHandler.$anonfun$handleElement$1$adapted(StreamingHandler.scala:79)     at scala.Option.foreach(Option.scala:437)     at com.mendix.integration.importer.handlers.StreamingHandler.handleElement(StreamingHandler.scala:79)     at com.mendix.integration.importer.handlers.StreamingHandler.endObject(StreamingHandler.scala:69)     at com.mendix.integration.importer.xml.XmlStreamingHandler.endElement(XmlStreamingHandler.scala:72)     at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:610)     at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:184)     at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:351)     at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2710)     at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)     at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)     at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:534)     at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:888)     at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)     at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)     at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1216)     at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:635)     at com.mendix.integration.importer.xml.XmlImporter.$anonfun$parseXml$1(XmlImporter.scala:58)     at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)     at scala.util.Try$.apply(Try.scala:210)     at com.mendix.integration.importer.xml.XmlImporter.parseXml(XmlImporter.scala:58)     at com.mendix.integration.importer.xml.XmlImporter.parse$1(XmlImporter.scala:39)     at com.mendix.integration.importer.xml.XmlImporter.$anonfun$importStream$1(XmlImporter.scala:40)     at com.mendix.integration.util.ContextUtil$RichContext$.withTransaction$extension(ContextUtil.scala:11)     at com.mendix.integration.importer.xml.XmlImporter.importStream(XmlImporter.scala:40)     at com.mendix.integration.internal.InternalIntegration.doImportStream(InternalIntegration.scala:89)     at com.mendix.integration.internal.InternalIntegration.doImportStream$(InternalIntegration.scala:81)     at com.mendix.integration.internal.InternalIntegrationImpl.doImportStream(InternalIntegrationImpl.scala:39)     at com.mendix.integration.actions.ImportMappingResult$.apply(ImportMappingResult.scala:62)     at com.mendix.integration.actions.ImportMappingResult$.$anonfun$apply$2(ImportMappingResult.scala:31)     at scala.util.Using$.resource(Using.scala:261)     at com.mendix.integration.actions.ImportMappingResult$.apply(ImportMappingResult.scala:30)     at com.mendix.integration.actions.microflow.ImportAction.execute(ImportAction.scala:33)     at com.mendix.integration.actions.microflow.ImportAction.execute(ImportAction.scala:23)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowObject.$anonfun$execute$1(MicroflowObject.scala:32)     at scala.Option.flatMap(Option.scala:283)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowObject.execute(MicroflowObject.scala:29)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.$anonfun$executeAfterBreakingIfNecessary$2(MicroflowImpl.scala:167)     at scala.Option.flatMap(Option.scala:283)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAfterBreakingIfNecessary(MicroflowImpl.scala:167)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAction(MicroflowImpl.scala:114)     at com.mendix.systemwideinterfaces.core.UserAction.execute(UserAction.java:58)     at com.mendix.basis.actionmanagement.CoreActionHandlerImpl.doCall(CoreActionHandlerImpl.scala:71)     at com.mendix.basis.actionmanagement.CoreActionHandlerImpl.call(CoreActionHandlerImpl.scala:48)     at com.mendix.core.actionmanagement.internal.InternalCoreAction.call(InternalCoreAction.java:57)     at com.mendix.basis.actionmanagement.ActionManager.$anonfun$executeSync$2(ActionManager.scala:106)     at com.mendix.util.classloading.Runner$.withContextClassLoader(Runner.scala:20)     at com.mendix.basis.actionmanagement.ActionManager.executeSync(ActionManager.scala:105)     at com.mendix.basis.component.ExecutionCore.doExecuteSync(ExecutionCore.scala:148)     at com.mendix.basis.component.ExecutionCore.doExecuteSync$(ExecutionCore.scala:147)     at com.mendix.basis.component.InternalCore.doExecuteSync(InternalCore.scala:24)     at com.mendix.basis.component.ExecutionCore.executeSync(ExecutionCore.scala:97)     at com.mendix.basis.component.ExecutionCore.executeSync$(ExecutionCore.scala:94)     at com.mendix.basis.component.InternalCore.executeSync(InternalCore.scala:24)     at com.mendix.modules.microflowengine.MicroflowExecuter$.executeSync(MicroflowExecuter.scala:19)     at com.mendix.modules.microflowengine.actions.SubMicroflowAction.execute(SubMicroflowAction.scala:37)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowObject.$anonfun$execute$1(MicroflowObject.scala:32)     at scala.Option.flatMap(Option.scala:283)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowObject.execute(MicroflowObject.scala:29)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.$anonfun$executeAfterBreakingIfNecessary$2(MicroflowImpl.scala:167)     at scala.Option.flatMap(Option.scala:283)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAfterBreakingIfNecessary(MicroflowImpl.scala:167)     at com.mendix.modules.microflowengine.microflow.impl.MicroflowImpl.executeAction(MicroflowImpl.scala:114)     at com.mendix.systemwideinterfaces.core.UserAction.execute(UserAction.java:58)     at com.mendix.basis.actionmanagement.CoreActionHandlerImpl.doCall(CoreActionHandlerImpl.scala:71)     at com.mendix.basis.actionmanagement.CoreActionHandlerImpl.call(CoreActionHandlerImpl.scala:48)     at com.mendix.core.actionmanagement.internal.InternalCoreAction.call(InternalCoreAction.java:57)     at com.mendix.basis.actionmanagement.CoreActionHandlerImpl.$anonfun$runMonitoredAction$1(CoreActionHandlerImpl.scala:59)     at com.mendix.basis.actionmanagement.ActionMonitoring$.$anonfun$monitor$1(ActionMonitoring.scala:52)     at com.mendix.util.classloading.Runner$.withContextClassLoader(Runner.scala:20)     at com.mendix.basis.actionmanagement.ActionMonitoring$.monitor(ActionMonitoring.scala:52)     at com.mendix.basis.actionmanagement.CoreActionHandlerImpl.runMonitoredAction(CoreActionHandlerImpl.scala:59)     at com.mendix.basis.actionmanagement.CoreActionHandlerImpl.call(CoreActionHandlerImpl.scala:46)     at com.mendix.core.actionmanagement.internal.InternalCoreAction.call(InternalCoreAction.java:57)     at com.mendix.basis.actionmanagement.ActionManager.$anonfun$executeAsync$3(ActionManager.scala:89)     at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:678)     at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467)     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)     at java.base/java.lang.Thread.run(Thread.java:829)     EDIT: My question is about the Import table mapping command, not creating a table mapping. The current workaround is to edit the exported XML file and remove the section of import calls. But in this way, I need to recreate import call after each import of table mapping.
asked
1 answers
0

Hi marty liu,

 

(assuming your source has a table named “person” with a field “name”)

 

In your mapping, you define the field called “Name” as a key. In that case, the source data should not have any record with an empty “Name” field. Find them in your source, for example, using:

SELECT * FROM person WHERE name = '';
Also, if you have 2 persons with an identical Name you will not import 2 records.

 

Solution:

1). Do not set Name as a key (maybe the person.id can be used as a key for synchronization. You will probably only use it for the reason of synchronization and not as a reference key in Mx itself)

2). Clean the source data and either fill the name or delete the record with an empty name. For filling the name 

UPDATE person SET name = 'auto updated' WHERE name = '';

 or to avoid double names:
 

UPDATE person SET name = CONCAT('auto updated ', (SELECT COUNT(*) + 1 FROM person WHERE name LIKE 'auto updated%')) WHERE name = '';

 

Go Make It

answered