Auf der Suche nach Grundkenntnissen

1. Juli 2007 12:50

Hallo Leute!

Ich hoffe ich finde hier jemanden, der mir helfen kann. Ich suche jemanden, der ein paar Minuten seiner Zeit opfern würde, um mir ein paar grundsätzliche Dinge über C/AL Programmierung zu erklären. Und bevor jemand fragen will, versuche ich mal die Geschichte um diesen Eintrag herum zu erzählen:

Es war einmal ein Kunde, der wollte einen Webshop verwenden, der mit seinem von ihm sogenannten Warenwirtschaftssystem synchronisiert wird, dazu ging er zu einer kleinen Werbeagentur und fragte nach. Kurze Zeit später ereignete es sich, dass ich gefragt wurde, ob ich diesen Shop mit dieser Anwendung realisieren könnte. Aber wer im IT Bereich arbeitet, der weiß, dass wenn man keine Ahnung hat, lieber die Finger von derartigen Dingen sein lassen sollte; nicht nur, dass man sich selbst Kummer erspart, nein auch der Altruismus in mir sagte, dass ich niemandem zumuten möchte etwas später zu bearbeiten, was man auf diese Weise vermurxt hat - man kennt das ja.
So suchte sich die kleine Webagentur eine externe Firma, die das realisieren sollte. Das System hatte sich bis dahin als Navision identifiziert. Leider hatte der Kunde und die Werbeagentur nicht so viel Glück mit der Firma. Es lief darauf hin, dass diese Firma das Synchronisationstool zwar erstelle, aber nach einigen abskuren Dingen sie sich mit dem Kunden und der Agentur dann im Rechtsstreit befand und diese nur noch jurstisch miteinander kommunizierten.
Kaum würde man jetzt ahnen, dass der besagte Auftrag nun wieder mir angeboten wurde. Das ganze wurde nun so weit eingegrenzt, dass wir nur noch den Webshop installieren und konfigurieren sollten und eine Synchronisation vom XML Dateien erstellen sollten. Klang plausibel. Ich erhielt Tabellen, wie die XML Dateien für Import und Export aussahen bzw. auszusehen hatten und erstellten das System. Bis hier hin war alles gut, doch dann kam die Wende, die mich nun seit zwei Tagen zur Verzweiflung bringt.

Von den fünf Datentypen die synchronisiert werden sollen, funktionieren auch vier Objekte wunderbar, doch das fünfte Objekt wirft leider einen sehr seltsamen Fehler, der meiner Meinung nach nicht durch den Datenbestand in der XML Datei entstehen konnte. Nach hin und her, habe ich dann versucht über eine Remote Software in der Navision Version des Kunden nach dem Fehler zu suchen.
Ich habe zwar keine Ahnung von C/AL, aber Programmiersprachen sind ja nicht so unterschiedlich und wer C++, Delphi und sowas kann, sollte das ja eigentlich irgendwie verstehen.
Ich stelle recht schnell fest, dass die XMLPort Datei beim kompilieren des C/AL Code einen Kompiler Fehler hervorrufte. Zwei Variablen waren unbekannt, passenderweise waren dies die Variablen, die im Shop bzw. in Navision die primären Schlüssel darstellten. Mit diesem Wissen machte die Fehlermeldung dann auch Sinn, das im eingetragenen Datensatz - es geht um Bestellungen - die Nummer eingetragen werden soll, was zweifelslos wohl den Primärschlüssel des Datensatzes darstellt.

So, danke schon mal, wer bis hier durchgehalten hat.

Mein Problem ist nun folgendes, ich verstehe zwar die Synthax, Struktur und auch den ungefähren Inhalt der Dateien, die ich vor mir habe, aber es fehlen ein paar elementare Kenntnisse; speziell wie die Dateien zusammen hängen und wo viele Objekte initalisiert werden.
Im Formular wird beispielsweise der Befehl "ShopXML.receiveOrders" aufgerufen, die Methode bzw. Funktion oder Prozedur - wie man das auch nennen will - habe ich gefunden, aber ich weiß z.B. nicht warum die zum Objekt ShopXML gehört und wo ich dessen Deklaration oder Definition finden kann. Selbiges gilt für einige andere Records.
Ich habe das Gefühl Navision versteckt Dateien vor mir.

Wenn sich nun so hoffe ich jemand erbarmt zehn Minuten zu opfern, um mir per ICQ zu erklären wo ich sowas finde, könnte ich dann - förmlich formuliert - "nach einer groben Fehlerspezifikation eine detailierte Lokalisierung vornehmen, um heraus zu finden, ob weitere externe Ressourcen zur Fertigstellung des Projektes vonnöten sind". So würde ich es in einen förmlichen Bereicht schreiben. Ich gehe nicht davon aus, dass ich das Problem fixen kann, wenn es komplexer ist als Tippfehler oder triviale Programmlogikfehler, aber das sollte ich zu mindest vorher rausfinden.

Vielen Dank schonmal

Tobias

1. Juli 2007 14:28

Hallo Tobias,

eine interessante aber doch zu oft in der einen oder anderen Variation vorkommende Geschichte :)

Zunächst erstmal denke ich, dass es grundsätzlich weniger zeitintensiv und einfacher wäre, du würdest einem NAV Spezialisten kurz die Funktionalität erklären und diesen dann das Problem lösen lassen.
Das hört sich für mich ohne tiefer in das Thema einzusteigen nach fehlenden Feldern einer Tabelle an. Das gesamte NAV System ist nummernorientiert. Tabellenfelder und allgemein alle Objekte werden über Nummern referenziert. Deshalb ist es unwahrscheinlich, dass ein Tippfehler vorliegt. Viel eher ein nicht geändertes bzw. bei der Implementierung nicht eingespieltes (geändertes) Tabellenobjekt.

Ich fang von vorne an. Einiges hast du ja selbst schon herausgefunden:

Grundsätzlich hast du mit entsprechender Lizenz Zugriff auf den Objekt-Designer (Extras -> Object Designer). Dort auf das Design der Objekte (Button). Mit F9 (sofern lizensiert) ruftst du den C/AL Editor auf und kannst dort über Ansicht -> Globals bzw. Ansicht -> Locals (aus dem jeweiligen Trigger/Funktion) die globalen und lokalen Variablen aufrufen.

Komplexen Datentypen wie z.B. Tabellen (Records) wird immer ein Subtype zugeordnet (Name der Tabelle). Diesen Subtype-Namen findest du als Tabellenobjekt im Objektdesigner wieder. Das gleiche gilt auch für Forms, Reports, XMLports usw.

Mit F5 kommst du in das Symbol Menu, wo du dir die Variablen inkl. Methoden und Attributen ansehen kannst.

Bei XMLports gibt es noch zusätzliche Verwirrungen. Dort werden alle Variablen unter DataSource automatisch als globale Variablen angelegt, sind aber nicht in der Übersicht (Ansicht -> Globals) zu finden. Aber mit F5 im Symbol Menu. Das kann schon verwirren. Meine Vermutung ist, dass in dem XMLport zu einem SourceType "Table" eine Tabelle angegeben ist (Der Name der Tabelle findet sich dort dann in Klammern) und darunter Fields (Felder zu dieser Tabelle), wovon einige in der Tabelle nicht definiert sind. Ggf. tritt der Fehler auch im Quelltext direkt auf, falls dort auf ein Feld einer Tabelleninstanz zugegriffen wird welches nicht mehr existiert. So etwas kann einfach passieren, wenn man nach dem Compilieren der Objekte nachträglich etwas entfernt.

Für den ersten Schritt solltest du also die Variable identifizieren bei der der Fehler auftritt (Type und Subtype) und über den Subtype das Objekt suchen in welchem eine Instanz fehlt.

Eins noch: Da du ja schon Objekte identifiziert hast die mit der Synchronisation im Zusammenhang stehen, könntest du im Object Designer unter Version List evtl. eine zugehörige Versionsnummer oder Teile davon identifizieren und alle Objekte (All) dann durch Klick auf die Versionsliste und anschließendem F7 filtern. Würde also so etwas wie "WSSynch1.0" in der Versionsliste stehen, so könntest du alle Objekte nach "@*wssync*" filtern (@ = Case insensitive, * = Platzhalter für beliebige Zeichen) und die einen überblick verschaffen, welche Objekte von dieser Funktionalität beeinflusst bzw. involviert sind, diese markieren (Strg-A) und neu Compilieren (F11). Danach hast du alle Fehler innerhalb der Synchronisationsfunktionalität zusammen. Das funktioniert allerdings nur, wenn auch richtig dokumentiert und versioniert wurde.

Klingt alles ein wenig wirr, ich weiß. Aber ist auch nicht einfach jemandem innerhalb eines unbekannten - nennen wir es Entwicklungssystem - per Forumsbeitrag den Weg zu weisen...

1. Juli 2007 15:18

Hallo!

Vielen Dank schonmal, das sind schon mal die wichtigsten Informationen, die mir fehlten, speziell die Angaben über die Globals und das Symbol Menu.
Ich muss nun nochmal weg und werde später den Kunden nochmal anrufen und das machen, ich kann ja nur per Remote Control auf die lizensiere Navision zugreifen. Und dann hoffe ich, kann das an jemanden weitergegeben werden, der wirklich Ahnung davon hat.

Vielen vielen Dank!

Tobias

Freiberufler gesucht

1. Juli 2007 22:51

Hallo nochmal!

Leider haben die mir nun neuen Mittel, um den Code so zu inspizieren keine positiven Dingen hervorgebracht. Neben der Tatsache, dass ich festgestellt habe, dass bei dem zu erst beschriebenen Problem bestimmte benötigte Variablen nicht gesetzt sind, bin ich mir nun auch ziemlich sicher, dass außerdem weitere Angaben auch nicht korrekt gesetzt werden, sprich in dieser Datei scheinen noch mehr Fehler zu sein.

So habe ich gerade noch zu später Stunde mit dem Kunden telefoniert (Kunden die Sonntags Abends um 22:40 telefonisch erreichbar sind, sollte es öffters geben) und wir haben uns geeinigt, dass sich das jemand anschauen muss, der Plan von Navision und C/AL hat.

Weiteres schreibe ich gleich mal in das Subforum "Jobangebote"...

1. Juli 2007 22:53

... oder auch nicht, dazu fehlen mir die Rechte.

Na gut, dann stelle ich hier mal schnell die Frage, woher ich einen Freiberufler komme, der in der kommenden Woche Zeit hätte das Problem zu fixen und der mir den Arbeitsaufwand schätzen kann, wenn ich ihm das ganze telefonisch näher erläutere; darf man mir hier das sagen? (Eigenwerbung wegen mir gern erlaubt...)

1. Juli 2007 23:46

Loki hat geschrieben:... oder auch nicht, dazu fehlen mir die Rechte.
Das hast du gut erkannt ;-)

Wie in der Forenbeschreibung erklärt, muss man dafür bezahlen:
MSDynamics.de hat geschrieben:Jobangebote
Ihr sucht engagiertes und qualifiziertes Personal um euer Team zu verstärken?
Stellt euer Jobangebot hier ein.
Hinweis: Um ein Angebot einzustellen, musst du Sponsor von MSDynamics.de sein oder ein entsprechendes Paket erworben haben.
Klicke hier für weitere Informationen.


Loki hat geschrieben:Na gut, dann stelle ich hier mal schnell die Frage, woher ich einen Freiberufler komme, der in der kommenden Woche Zeit hätte das Problem zu fixen und der mir den Arbeitsaufwand schätzen kann, wenn ich ihm das ganze telefonisch näher erläutere; darf man mir hier das sagen? (Eigenwerbung wegen mir gern erlaubt...)
Ich bitte die Bewerber (Freiberufler), dies per PN (oder E-Mail) zu klären.