Header Image

Translate

woensdag 18 juli 2018

Enum type RetailChannelAttributeModifier for the field modifier is not found.

Bij het extenden van het SalesTable form kreeg ik een foutmelding:

Deze melding was niet op zijn plek, al bij een posthandler methode zonder enige code had ik al deze compilatie melding. Dit element of de enum waarnaar verwezen wordt, heb ik niet in mijn project. Een volledige compilatie en herstart van Visual Studio en zelfs de hele machine losde niets op. Uiteindelijk deze laatste aanpassing verwijderd, en het compileerde weer. Zowel met het attribuut "[ExtensionOf(formstr(SalesTable))]" als zonder op de class, deze melding bleef.

Code:


Maar ook:

Uiteindelijk was een oplossing om de module 'Retail' als Referentie toe te voegen aan mijn model.

Het is wel meer opgevallen dat runtime fouten (o.a. null-pointer fouten) en compilatie fouten soms gevoelig liggen in D365. Een volledige compilatie van het model met gerefereerde modulen lost het soms op. Helaas duurt dit een half uur voordat je kan controleren of dit de oorzaak is.

Zoeken naar labels in D365

Zoeken naar bestaande labels... welke ontwikkelaars hergebruikt er nou geen bestaande labels? Al vanaf Axapta 3.0 zoek je met "<Item" en dan vind je alle teksten die beginnen met de tekst "Item". Een voorbeeld uit Ax 2012:


Zoek naar labels die beginnen met "Item" en dan ergens de letters "not" en daarna ergens "exi".


In D365 werkt deze syntax niet meer, maar daar kan je wel werken met andere reguliere expressies. Dit zijn de .NET reguliere expressies, voor een overzicht, zie https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expressions

In D365 is dit het equivalent:
 

Details:
^Item   = Begint met "Item"
.*         = nul of meerdere karakters
not       = na deze karakters de tekenreeks not
.*         = wederom nul of meerdere karakters
exi       = de tekensteeds exi

Je hoeft niet expliciet aan te geven dat hierna nog meer karakters kunnen komen. Als je wilt zoeken op eindigt met, dan kan je zoeken met bijvoorbeeld "AOT$". De dollar aan het eind geeft aan "moet eindigen op".

Een complexer voorbeeld:


^Item   = Moet beginnen met "Item"
.*         = nul of meer willekeurige karakters
\.          = één punt. De \ voor de '.' geeft in .NET aan dat het karakter erna moet worden gezien als een karakter, dus niet als een reguliere expressie
.+         = één of meer willekeurige karakters
\?          = één vraagteken, zelfde als de '.' is dit ook een instructie voor als reguliere expressie.
$           = einde tekenreeks, dus na de ? mag er niets meer komen.

Samengevat: zoek alle labels, die beginnen met "Item", een '.' bevatten (mag direct na de "Item"), daarna minimaal één karakter en eindigt met een ?