{"id":74,"date":"2006-03-30T15:39:00","date_gmt":"2006-03-30T13:39:00","guid":{"rendered":"http:\/\/www.forksoft.de\/blog\/2006\/03\/30\/navision-universeller-dataport\/"},"modified":"2006-10-05T14:18:28","modified_gmt":"2006-10-05T12:18:28","slug":"navision-universeller-dataport","status":"publish","type":"post","link":"http:\/\/www.navision-blog.de\/blog\/2006\/03\/30\/navision-universeller-dataport\/","title":{"rendered":"Navision: Universeller Dataport"},"content":{"rendered":"<p>Aufgrund eines <a href=\"http:\/\/www.themenmix.de\/b2e\/navblog.php\/2006\/03\/29\/p465\">Artikels<\/a> vom &#8220;Nawischn-Blog&#8221; m&#246;chte ich hier mal einen Weg aufzeigen, wie man sich einen universellen Dataport f&#252;r Microsoft Navision bauen kann, mit dem man ein ganzen Satz an Tabellen aus CSV-Tabellen einlesen kann. Interessant ist das vor allem wenn man eine Daten&#252;bernahme machen will und im ersten Schritt erstmal alle Daten in Zwischentabellen ins Navision ziehen will.<\/p>\n<p>Um den automatischen Import bewerkstelligen zu k&#246;nnen m&#252;ssen die Zieltabellen angelegt werden. Daf&#252;r braucht man jedoch Informationen &#252;ber die Struktur der Daten &#8211; also welches Feld kommt mit welchem Datentyp an welcher Position in welcher Importdatei. Das ist zugleich auch der schwierigste Teil.<\/p>\n<p>Gl&#252;cklicherweise kann man sowas auch teilweise automatisch machen &#8211; zum Beispiel f&#252;r Exceltabellen oder dBase-Datenbanken: Mit einem PlugIn f&#252;r den Total Commander kann man n&#228;mlich Excel-Dateien bzw. eine ganze dBase-Datenbank mit einer Schema.ini exportieren. Bei einzelnen Dateien kann man das nat&#252;rlich auch schnell per Hand anlegen. <\/p>\n<p>Ab nun l&#228;uft alles automatisch. Als erstes m&#252;ssen die Zieltabellen angelegt werden. Dazu habe ich eine Template-Tabelle angelegt die nur ein Feld f&#252;r die laufende Datensatznummer enth&#228;lt, die Zieltabellen werden dann aus dieser Tabelle kopiert: <\/p>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:a4955e0e-692c-4de7-8daa-9f0d105696a3\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px\">\n<pre style=\"background-color:White;\"><div><!--\n\nCode highlighting produced by Actipro CodeHighlighter (freeware)\nhttp:\/\/www.CodeHighlighter.com\/\n\n--><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> CreateTable<\/span><span style=\"color: #008000; \">@1000000007<\/span><span style=\"color: #000000; \">(\n  p_NewObjectID<\/span><span style=\"color: #008000; \">@1000000002<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  p_NewObjectName<\/span><span style=\"color: #008000; \">@1000000003<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">250<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">);\n<\/span><span style=\"color: #FF00FF; \">VAR<\/span><span style=\"color: #000000; \">\n  l_Object<\/span><span style=\"color: #008000; \">@1000000004<\/span><span style=\"color: #000000; \"> : Record <\/span><span style=\"color: #800000; font-weight: bold; \">2000000001<\/span><span style=\"color: #000000; \">;\n  l_NewObject<\/span><span style=\"color: #008000; \">@1000000005<\/span><span style=\"color: #000000; \"> : Record <\/span><span style=\"color: #800000; font-weight: bold; \">2000000001<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  <\/span><span style=\"color: #808080; \">\/\/<\/span><span style=\"color: #000000; \"> Copy Migration Template <\/span><span style=\"color: #0000FF; \">Table<\/span><span style=\"color: #000000; \">\n  l_Object.GET(l_Object.Type::<\/span><span style=\"color: #0000FF; \">Table<\/span><span style=\"color: #000000; \">,<\/span><span style=\"color: #FF0000; \">''<\/span><span style=\"color: #000000; \">,\n    <\/span><span style=\"color: #0000FF; \">DATABASE<\/span><span style=\"color: #000000; \">::&quot;Migration Template&quot;);\n  l_Object.CALCFIELDS(&quot;BLOB Reference&quot;);\n\n  l_NewObject.INIT;\n  l_NewObject.COPY(l_Object);\n  l_NewObject.ID :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_NewObjectID;\n  l_NewObject.Name :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_NewObjectName;\n  l_NewObject.<\/span><span style=\"color: #0000FF; \">INSERT<\/span><span style=\"color: #000000; \">(TRUE);\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n<\/span><\/div><\/pre>\n<\/div>\n<p>Der Umweg mit der Template-Tabelle kommt dadurch zustande, dass man beim Insert in die Objekt-Tabelle schon einen Prim&#228;rschl&#252;&#223;el haben muss und den kann man nur anlegen wenn man ein Feld anlegt. Felder k&#246;nnen jedoch nur in in existierende Tabellen eingef&#252;gt werden. Diesen Konflikt konnte ich bisher nur &#252;ber den Objekt-Designer aufl&#246;sen. Als n&#228;chstes m&#252;ssen die Felder aus der Schema.ini in die Zieltabellen eingef&#252;gt werden: <\/p>\n<\/p>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:9b278e11-ade5-49b4-a6fc-b367431efabf\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px\">\n<pre style=\"background-color:White;\"><div><!--\n\nCode highlighting produced by Actipro CodeHighlighter (freeware)\nhttp:\/\/www.CodeHighlighter.com\/\n\n--><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> AddFieldToTable<\/span><span style=\"color: #008000; \">@1000000009<\/span><span style=\"color: #000000; \">(\n  p_TableNo<\/span><span style=\"color: #008000; \">@1000000001<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  p_FieldID<\/span><span style=\"color: #008000; \">@1000000003<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  p_FieldName<\/span><span style=\"color: #008000; \">@1000000002<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">250<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">;\n  p_Type<\/span><span style=\"color: #008000; \">@1000000004<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">30<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">;\n  p_Width<\/span><span style=\"color: #008000; \">@1000000005<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">);\n<\/span><span style=\"color: #FF00FF; \">VAR<\/span><span style=\"color: #000000; \">\n  l_Field<\/span><span style=\"color: #008000; \">@1000000000<\/span><span style=\"color: #000000; \"> : Record <\/span><span style=\"color: #800000; font-weight: bold; \">2000000041<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  l_Field.INIT;\n  l_Field.TableNo :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_TableNo;\n  l_Field.&quot;No.&quot; :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_FieldID;\n  l_Field.FieldName:<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_FieldName;\n  <\/span><span style=\"color: #FF00FF; \">CASE<\/span><span style=\"color: #000000; \"> p_Type <\/span><span style=\"color: #0000FF; \">OF<\/span><span style=\"color: #000000; \">\n    <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">Text<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">:\n      <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n        l_Field.Type :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> l_Field.Type::<\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #000000; \">;\n        <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> p_Width <\/span><span style=\"color: #808080; \">&lt;<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">250<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n          l_Field.<\/span><span style=\"color: #FF00FF; \">Len<\/span><span style=\"color: #000000; \"> :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_Width\n        <\/span><span style=\"color: #0000FF; \">ELSE<\/span><span style=\"color: #000000; \">\n          l_Field.<\/span><span style=\"color: #FF00FF; \">Len<\/span><span style=\"color: #000000; \"> :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">250<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">Date<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">: l_Field.Type :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> l_Field.Type::Date;\n    <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">Double<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">: l_Field.Type :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> l_Field.Type::<\/span><span style=\"color: #000000; font-weight: bold; \">Decimal<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">Long<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">: l_Field.Type :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> l_Field.Type::<\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">Memo<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">:\n      <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n        l_Field.Type :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> l_Field.Type::<\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #000000; \">;\n        l_Field.<\/span><span style=\"color: #FF00FF; \">Len<\/span><span style=\"color: #000000; \"> :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">250<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n    <\/span><span style=\"color: #0000FF; \">ELSE<\/span><span style=\"color: #000000; \">\n      ERROR(Text003,p_Type);\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n  l_Field.Enabled :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> TRUE;\n  l_Field.SQLDataType :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> l_Field.SQLDataType::<\/span><span style=\"color: #000000; font-weight: bold; \">Varchar<\/span><span style=\"color: #000000; \">;\n  l_Field.<\/span><span style=\"color: #0000FF; \">INSERT<\/span><span style=\"color: #000000; \">(TRUE);\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;<\/span><\/div><\/pre>\n<\/div>\n<p>Nachdem nun alle Zieltabellen fertig sind, kann man nun durch die einzelnen CSV-Dateien gehen und die Daten in die entsprechenden Felder transportieren. Dazu durchl&#228;uft man die CSV-Tabellen zeilenweise und holt sich zum Beispiel mit folgenden Funktionen die einzelnen Feldwerte (per Index) aus dem Zeilentext:<\/p>\n<div class=\"wlWriterSmartContent\" id=\"57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:019743bb-a051-48b1-bd6b-191bd55d70f3\" contenteditable=\"false\" style=\"padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px\">\n<pre style=\"background-color:White;\"><div><!--\n\nCode highlighting produced by Actipro CodeHighlighter (freeware)\nhttp:\/\/www.CodeHighlighter.com\/\n\n--><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> GetStringWithDelimiter<\/span><span style=\"color: #008000; \">@1000000011<\/span><span style=\"color: #000000; \">(\n  p_Text<\/span><span style=\"color: #008000; \">@1000000000<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">1024<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">;\n  p_ID<\/span><span style=\"color: #008000; \">@1000000001<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  p_Delimiter<\/span><span style=\"color: #008000; \">@1000000002<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Char<\/span><span style=\"color: #000000; \">) \n  Result : <\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">1024<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #FF00FF; \">VAR<\/span><span style=\"color: #000000; \">\n  l_DelimiterCount<\/span><span style=\"color: #008000; \">@1000000003<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  i<\/span><span style=\"color: #008000; \">@1000000004<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  l_StringOpen<\/span><span style=\"color: #008000; \">@1000000005<\/span><span style=\"color: #000000; \"> : Boolean;\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  l_DelimiterCount :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">1<\/span><span style=\"color: #000000; \">;\n\n  <\/span><span style=\"color: #0000FF; \">FOR<\/span><span style=\"color: #000000; \"> i :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">1<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">TO<\/span><span style=\"color: #000000; \"> STRLEN(p_Text) DO <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n    <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> (p_Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">i<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">&quot;<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #808080; \">AND<\/span><span style=\"color: #000000; \"> (<\/span><span style=\"color: #808080; \">NOT<\/span><span style=\"color: #000000; \"> l_StringOpen) <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n      l_StringOpen :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> TRUE;\n    <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> (p_Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">i<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">&quot;<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">) <\/span><span style=\"color: #808080; \">AND<\/span><span style=\"color: #000000; \"> \n      l_StringOpen <\/span><span style=\"color: #808080; \">AND<\/span><span style=\"color: #000000; \"> ((STRLEN(p_Text) <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> i) <\/span><span style=\"color: #808080; \">OR<\/span><span style=\"color: #000000; \"> \n      (p_Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">i+1<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_Delimiter)) \n    <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n      l_StringOpen :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> FALSE;\n\n    <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> (p_Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">i<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_Delimiter) <\/span><span style=\"color: #808080; \">AND<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">NOT<\/span><span style=\"color: #000000; \"> l_StringOpen \n    <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n      l_DelimiterCount :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> l_DelimiterCount <\/span><span style=\"color: #808080; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">1<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> l_DelimiterCount <\/span><span style=\"color: #808080; \">&gt;<\/span><span style=\"color: #000000; \"> p_ID <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        <\/span><span style=\"color: #0000FF; \">EXIT<\/span><span style=\"color: #000000; \">(Result);\n    <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">ELSE<\/span><span style=\"color: #000000; \">\n      <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> (l_DelimiterCount <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_ID) <\/span><span style=\"color: #808080; \">AND<\/span><span style=\"color: #000000; \"> (p_Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">i<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">  <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">&quot;<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">)\n      <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        Result :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> Result <\/span><span style=\"color: #808080; \">+<\/span><span style=\"color: #000000; \"> COPYSTR(p_Text,i,<\/span><span style=\"color: #800000; font-weight: bold; \">1<\/span><span style=\"color: #000000; \">);\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n\n<\/span><span style=\"color: #0000FF; \">PROCEDURE<\/span><span style=\"color: #000000; \"> GetString<\/span><span style=\"color: #008000; \">@1000000010<\/span><span style=\"color: #000000; \">(\n  p_Text<\/span><span style=\"color: #008000; \">@1000000000<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">1024<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">;\n  p_ID<\/span><span style=\"color: #008000; \">@1000000001<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  p_Delimiter<\/span><span style=\"color: #008000; \">@1000000002<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Char<\/span><span style=\"color: #000000; \">) \n  Result : <\/span><span style=\"color: #000000; font-weight: bold; \">Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">1024<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #FF00FF; \">VAR<\/span><span style=\"color: #000000; \">\n  l_DelimiterCount<\/span><span style=\"color: #008000; \">@1000000003<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  i<\/span><span style=\"color: #008000; \">@1000000004<\/span><span style=\"color: #000000; \"> : <\/span><span style=\"color: #000000; font-weight: bold; \">Integer<\/span><span style=\"color: #000000; \">;\n  l_StringOpen<\/span><span style=\"color: #008000; \">@1000000005<\/span><span style=\"color: #000000; \"> : Boolean;\n<\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n  l_DelimiterCount :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">1<\/span><span style=\"color: #000000; \">;\n\n  <\/span><span style=\"color: #0000FF; \">FOR<\/span><span style=\"color: #000000; \"> i :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">1<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">TO<\/span><span style=\"color: #000000; \"> STRLEN(p_Text) DO <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n    <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> (p_Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">i<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_Delimiter) <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">BEGIN<\/span><span style=\"color: #000000; \">\n      l_DelimiterCount :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> l_DelimiterCount <\/span><span style=\"color: #808080; \">+<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #800000; font-weight: bold; \">1<\/span><span style=\"color: #000000; \">;\n      <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> l_DelimiterCount <\/span><span style=\"color: #808080; \">&gt;<\/span><span style=\"color: #000000; \"> p_ID <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        <\/span><span style=\"color: #0000FF; \">EXIT<\/span><span style=\"color: #000000; \">(Result);\n    <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \"> <\/span><span style=\"color: #0000FF; \">ELSE<\/span><span style=\"color: #000000; \">\n      <\/span><span style=\"color: #0000FF; \">IF<\/span><span style=\"color: #000000; \"> (l_DelimiterCount <\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> p_ID) <\/span><span style=\"color: #808080; \">AND<\/span><span style=\"color: #000000; \"> (p_Text<\/span><span style=\"color: #FF0000; \">[<\/span><span style=\"color: #FF0000; \">i<\/span><span style=\"color: #FF0000; \">]<\/span><span style=\"color: #000000; \">  <\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #FF0000; \">&quot;<\/span><span style=\"color: #FF0000; \">'<\/span><span style=\"color: #000000; \">)\n      <\/span><span style=\"color: #0000FF; \">THEN<\/span><span style=\"color: #000000; \">\n        Result :<\/span><span style=\"color: #808080; \">=<\/span><span style=\"color: #000000; \"> Result <\/span><span style=\"color: #808080; \">+<\/span><span style=\"color: #000000; \"> COPYSTR(p_Text,i,<\/span><span style=\"color: #800000; font-weight: bold; \">1<\/span><span style=\"color: #000000; \">);\n  <\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n<\/span><span style=\"color: #0000FF; \">END<\/span><span style=\"color: #000000; \">;\n<\/span><\/div><\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Aufgrund eines Artikels vom &#8220;Nawischn-Blog&#8221; m&#246;chte ich hier mal einen Weg aufzeigen, wie man sich einen universellen Dataport f&#252;r Microsoft Navision bauen kann, mit dem man ein ganzen Satz an Tabellen aus CSV-Tabellen einlesen kann. Interessant ist das vor allem wenn man eine Daten&#252;bernahme machen will und im ersten Schritt erstmal alle Daten in Zwischentabellen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[5],"tags":[],"_links":{"self":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/74"}],"collection":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=74"}],"version-history":[{"count":0,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/74\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=74"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=74"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=74"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}