[Workaround]Subform ausblenden, wenn Tabelle nicht in Lizenz

17. Januar 2008 16:57

So, nun dürft Ihr mal wieder einem Admin helfen ;-)

Folgendes Problem
Wir haben zu Artikeln eine neue Tabelle für Webshopbilder erzeugt.
Diese werden auf der Registerkarte E-Commerce als subform zusammen mit 2 weiteren Feldern in einem Frame dargestellt. Dieses Frame und die Subform wird im OnOpenForm-Trigger nur auf visible gesetzt, wenn Kunde die Lizenz für die Tabelle hat:
Code:
Currform.WebPictures.Visible(Shoptabelle.readpermission);
Currform.WebFrame.Visible(Shoptabelle.readpermission);

funktioniert auch prächtig, solange man die Artikelkarte aus der Menupane oder direkt aus dem Objectdesigner oder der Itemlist öffnet.
Die Tabelle und der Rahmen werden nur gezeigt, wenn der Kunde die Tabellen in der Lizenz hat.
Jetzt kommt das Problem:
Im Auftrag gibt es in der Infopane rechts in der Zeilensubform auch eine "Taste" zum Aufruf der Artikelkarte. Hier wird über die Funktion
SalesInfoPaneMgt.LookupItem(Rec) die Artikelkarte des in der Zeile befindlichen Artikels modal geöffnet.
Hat ein Kunde die Tabellen für den Shop nicht in der Lizenz, dann gibt es statt der Artikelkarte nur die Fehlermeldung:
Sie haben kein Recht zum Lesen der Tabelle Webshopbilder

Ich habe mittlerweile herausgefunden, dass der Fehler nicht auftaucht, wenn ich in der Codeunit den Aufruf Form.Runmodal(Form::Item card,item) in Form.Run(Form::Item card,item) ändere.
Dann kann ich aber unter der Artikelkarte den Auftrag wieder vorholen und wechseln oder ändern..., das sollte ja wohl vermieden werden.

Warum funktioniert das bei Runmodal nicht?
Zuletzt geändert von Michael Schumacher am 20. Januar 2008 16:11, insgesamt 1-mal geändert.

17. Januar 2008 20:29

Wenn Du das Objekt dynamisch á la FORM.RUN(ID) etc. aufrufst, also nicht direkt in den Locals oder Gloabls referenzierst, kannst Du zur Laufzeit die License Permission Tabelle abfragen und daran den Aufruf koppeln.

18. Januar 2008 03:14

Der Aufruf ist Standard in Navision, Artikelkarte aus der Auftragszeile öffnen.
Was nicht standard ist, ist die Subform, die darin nur bei vorhandener Lizenz angezeigt werden soll.
Funktioniert auch prächtig, solange die Artikelkarte nicht mit Runmodal geöffnet wird.

18. Januar 2008 12:56

könntest du nicht irgendwie bei der Funktion onlookup einen eigenen
Code einrichten? soweit ich weiß wird dann jeglicher Standardonlookup
ausgeschaltet und deiner wird genommen.

Nachteil: du musst echt alles zu fuß machen. aber da gehört dann dein
Visible rein und das run.

18. Januar 2008 13:59

Die Funktion heißt lediglich LookupItem, das hat mit normalem Lookup nichts zu tun.
Die Funktion und der Aufruf sind Standard, hat jeder....
wie gesagt, einfach mal in einem Auftrag in eine Zeile mit einem Artikel klicken und dann rechts bei den Infofeldern auf den Link Artikelkarte klicken.
Probleme gibts eben leider nur, wenn die Artikelkarte erweitert wurde, und bestimmte Bestandteile Lizenzgesteuert ausgeblendet werden sollen, weil die der Subform zugrunde liegende Tabelle nicht in der Lizenz enthalten sein könnte.
Ich könnte auch einfach das Modal in der Funktion in der Codeunit wegmachen. aber was hat das dann möglicherweise noch an Auswirkungen...

18. Januar 2008 15:54

Ich vermute, dass das Zugriffsrechte-Modell daran schuld sein könnte, da ja ab 4.0 alle Objekte mit einer "Warnung" belegt werden, die referenziert aber nicht lizensiert sind.

18. Januar 2008 16:28

Der springende Punkt ist doch der:
Warum Funktioniert
Form.RUN(Form::"Item Card",Item);
während
Form.RUNMODAL(Form::"Item Card",Item);
nicht funktioniert?

20. Januar 2008 10:55

Ich habe zuerst mit sowohl der Form als auch der Tabelle in einem unlizensierten Bereich nachgestellt, das funktioniert mal grundsätzlich nicht. Also mindestens die Form muss lizensiert sein.

Danach kann ich dein Problem genau nachstellen. Eine Antwort auf die Frage nach dem "Warum" kann dir sicherlich nur ein Entwickler der Applikation selbst geben. Mein Versuch dazu: Aus dem Menü und dem Designer ist der Aufruf jeweils asynchron. Hier prüft ggf. der Thread selbst die Berechtigungen für alle anhängenden Objekte. Im Fall des synchronen Aufrufs (RUNMODAL) wird dies vom Hauptthread (Auftragskarte, CU) gemacht. Die Prüfungen laufen ggf. durch andere Codebereiche, so das es im einen Fall funktioniert und im anderen nicht.

Mit dem Update 1 für NAV 5.00 funktioniert es übrigens ebenfalls nicht.

20. Januar 2008 16:09

SilverX hat geschrieben:Ich habe zuerst mit sowohl der Form als auch der Tabelle in einem unlizensierten Bereich nachgestellt, das funktioniert mal grundsätzlich nicht. Also mindestens die Form muss lizensiert sein.

So ist es, ist aber nicht so problematisch, weil 100 Forms sind ja immer dabei.

SilverX hat geschrieben:Mit dem Update 1 für NAV 5.00 funktioniert es übrigens ebenfalls nicht.

Das hab ich auch schon gemerkt.

Ich habe mir jetzt so geholfen, dass ich den Aufruf nicht mehr über das InfopaneMgt mache, sondern im OnPush-Trigger den Filter setze und die Form direkt mit RUN öffne, dann gibts keine Fehlermeldung, die Form kann zwar in den Hintergrund geklickt werden, da der Aufruf aber direkt aus der Form kommt, wird auch die Artikelkarte geschlossen, wenn ich den Auftrag schließe.