09. december 2009 - 09:53Der er
10 kommentarer og 1 løsning
Navision Application Server
Hej.
Har et problem hos en kunde, som batch-udveksler ordrer/fakturaer via FTP. Jeg har lavet nogle rettelser i forbindelse med nye filformater.
Alt fungerer perfekt, når man kører batch fra en ægte klient på serveren og logget ind som rigtig database-bruger i Nav.
Men når man starter NAS-servicen op med den bruger, der tidligere (før tilretninger) har virket, går 'noget' i fejl. Jeg har mistanke om at NAS-brugeren ikke kan se nye tabeller m.v.
Jeg har prøvet at genstarte Navision databaseserver og efterfølgende NAS'en, det hjælper ikke.
Jeg overvejer at genstarte serveren, men da den ikke står fysisk hos kunden, skal det jo helst være på et tidspunkt, hvor hosting-centret kan hjælpe, og lige netop da har kunden absolut ikke brug for en server-genstart. Men er det løsningen?
Der er ikke lavet ændringer, der kræver nye licenser - den kan køre på klienten med kundens oprindelige licensfil.
Jeg vil prøve med debug på et tidspunkt, hvor der er 'ro i geledderne'. I Application Server Manager er der allerede angivet 'DIM' i Start-Up Parameter. Skal der blot tilføjes ', DEBUG' til denne?
Har lige kigget i Event Vieweren, den giver ikke rigtig noget.
NAS'en bryder heller ikke ned som sådan, men i stedet for at indlæse ordrer, smider den dem i en fejlmappe. Det vil muligvis kunne ses hvorfor ved debug, men som tidligere beskrevet, er det ikke lige en mulighed i dagtimerne.
Nu siger du, den ikke kan køre dataporte - gælder det også, hvis de kaldes fra en codeunit, der afvikles af NAS? Så har jeg nemlig en spændende opgave forude, da jeg benytter dette princip til at indlæse ordrerne...
Ja, det gælder i alle tilfælde. Dataporte kan ikke startes fra en NAS - hvorfor ved jeg simpelthen ikke, fordi man kan nemt gøre det med f.eks. rapporter (som jo sådan set har samme måde at arbejde på).
Så det er helt sikkert fejlen her.
Dog plejer NASen at udskrive en "Warning"-besked i EventVieweren, der beskriver problemet. Det har den i hvert fald altid gjort for mit vedkommende.
Av, ja så kan jeg godt se, der skal laves noget om.
Problemet er, at de data, der skal læses ind, er i én lang tekststreng (EDIFACT), hvor hver del-info adskilles med en apostrof (det er med garanti ikke en programmør, der har fundet på det ¤#!§&*), som vist herunder:
Datastrengen kan sagtens være over 1024 karakterer. Jeg kender simpelthen ikke nok til READ/WRITE i C/AL til at vide, hvordan man hakker sådan én i læsbare stykker, derfor var dataporten jo en dejlig simpel løsning... indtil for en time siden...
Der er jo metoderne STRPOS og COPYSTR som kan bruges til at søge samt "cutte" i en streng.
Lad os sige linjen så således ud (for at starte med noget nemt): 1;Kristian;blog.frande.dk 2;Peter;peter.frande.dk
Så kunne man jo bruge STRPOS til at finde positionen af det næste ; og bruge COPYSTR til dels at hive værdien ud før ; og finde "reststrengen". Dvs. strengen man søger I bliver mindre og mindre:
Selve fillæsningen sker jo blot ved en simpel fil-variable.READ, hvor du i en iteration hele tiden READ'er en ny linje i filen.
Husk der nok kan være noget Ansi til Ascii konvertering af værdierne så man ikke få læst "sjove" tegn ind.
Hvis du slet ikke har nogen erfaring (og har begrænset udviklingserfaringer i Navision) vil jeg da råde dig til at finde en Navision-leverandør, der kan hjælpe dig i stedet. Der hvor jeg arbejder står vi naturligvis gerne til rådighed med en endelig løsning, hvis du skulle ønske det.
Ja men problemet er jo at der én linie, som kan være flere tusinde karakterer lang og derfor ikke passer ind i en tekstvariabel (max 1024). Ellers havde problemet ikke været så stort.
Udfordringen er at få READ til at stoppe, når den møder en apostrof, behandle det indlæste (skille ved +-:, det er der styr på) og så læse næste stump indtil apostrof.
Jeg har 5 års erfaring i C/AL, har bare aldrig brugt READ/WRITE før.
I det tilfælde kan du bruge TEXTMODE(FALSE) på filen til at angive du vil læse den binært - så læser den ikke én linje af gangen, men i stedet et antal bytes.
Så skal du jo så blot selv finde ud af at finde skellet hele tiden...
Det er selvf. en større ting, men desværre er Navision ikke så handy til det - og skal man gøre det igennem en NAS, ja, så vil det desværre ikke være muligt med en dataport.
En meget ufin løsning kunne også være at have en alm. klient stående, der står med en form åben og som opdatere sig selv efter x tid. Den vil så kunne køre dataportene. Der vil man dog ikke kunne køre det som en service og går klienten ned, jamen... så går den jo desværre ned. Men der er da leverandører, der gør det på den måde.
Ja, det med at bruge klienten som en "NAS" er ikke godt procedure - og langt fra holdbart. Det var som sagt også en "ufin" metode til det.
Men held og lykke med det...
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.