Tabellen filteren in DriveWorks voor gevorderden

Met DriveWorks Design Automation automatiseer je repetitieve ontwerptaken. In deze blog leg ik uit hoe je de volgende functies in DriveWorks gebruikt:

  • De functie Indirect()
  • ‘Combo Box’-optie ‘Clear Selection Allowed’
  • De ‘Text Box’-optie ‘Text (Override Rule)’

Deze blog is voor gevorderde DriveWorks gebruikers die ervaring hebben met kennisregels opstellen.

In de voorgaande blog over Tabellen gebruiken in DriveWorks Solo of Pro beschrijf ik een opzet waarmee je gebonden bent aan de keuze volgorde: Eerst Type, dan Materiaal, waarmee dan de prijs wordt gevonden.

De methode uit de vorige blog helpt je niet om bijvoorbeeld eerst de laagste prijs te kiezen. Maar in deze blog leg ik je uit hoe je meer geavanceerde functies gebruikt.

Ik ga verder met de voorbeeldtabel van de vorige blog:

1 KeuzeTabel

Volgorde-afhankelijk

Wanneer niet afhankelijk van keuze bent en niet weet wat je eerste keuze is, moet je kunnen switchen tussen de functies ListAllDistinct en ListAllConditionalDistinct (besproken in eerdergenoemde blog)

De Item formulering van ‘Prijs’, die afhankelijk was van de voorgaande keuzes zag er ongeveer zo uit:

Formulering

Uitleg formulering

ListAllConditionalDistinct(

DwLookupKeuzeCombinaties1, 3,

1, HandvattypeFilterReturn,

2, MateriaalFilterReturn

)

Functienaam

Tabelnaam, Nummer opzoekkolom

Nummer Handvattype-kolom, Gekozen Handvattype

Nummer Materiaal-kolom, Gekozen Materiaal

 

Zou ik willen beginnen met de prijs te kiezen, dat zou de formulering er zo uit zien:

Formulering

Uitleg formulering

ListAllDistinct(

DwLookupKeuzeCombinaties1, 3

)

Functienaam

Tabelnaam, Nummer opzoekkolom

Twee verschillen dus:

  • De filter conditions vallen weg
  • ListAllConditionalDistinct wordt ListAllDistinct

 

Hiervoor gebruik ik (mijn favoriete) functie: Indirect()!

Combo Box keuze leeg maken

We moeten de pull-down menu keuzes leeg kunnen laten (of maken). Dit kan door de Combo Box optie ‘Clear Selection Allowed’ op True’ te zetten. Hiermee start de ‘Combo Box’ als leeg en kun je de optiekeuze leeg maken door met je rechtermuis op de combobox ‘Clear Selection’ te kiezen

2 Clear combo box

Indirect()

Indirect() voert een uit ‘text strings’ samengevoegd commando uit.

Onderstaande stappen laten zien hoe ik de formulering ‘omwerk’ naar de uiteindelijke formulering:

Normale Formulering

ListAllConditionalDistinct(

DwLookupKeuzeCombinaties1, 3

,1, HandvattypeReturn

,2, MateriaalReturn

)

In de Indirect hieronder zie je hoe ik het commando uitvoer opgebouwd losse “text strings”:

Indirect() formulering

Indirect(

"ListAll"

& "Conditional"

& "Distinct(

& "DwLookupKeuzeCombinaties1, 3"

& ",1, HandvattypeReturn"

& ",2, MateriaalReturn"

& ")"

)

Nu de condities en het commando zijn opgesplitst kan ik er IF() condities aan toevoegen:

Indirect() met IF()

Indirect(

"ListAll"

& If( And( HandvattypeReturn="" , Materiaal2Return="" ) , "", "Conditional" )

& "Distinct(

& "DwLookupKeuzeCombinaties1, 3"

& If( HandvattypeReturn="", "", ",1,HandvattypeReturn" )

& If( MateriaalReturn="", "", ",2,MateriaalReturn" )

& ")"

)

 

Indirect() met IF() wanneer HandvattypeReturn ="" én Materiaal2Return =""

Indirect(

"ListAll"

& If( And( HandvattypeReturn="" , Materiaal2Return="" ) , "", "Conditional" )

& "Distinct(

& ”DwLookupKeuzeCombinaties1, 3"

& If( HandvattypeReturn="", "", ",1,HandvattypeReturn" )

& If( MateriaalReturn="", "", ",2,MateriaalReturn" )

& ")"

)

De uitkomst als normale formulering:

ListAllDistinct(DwLookupKeuzeCombinaties1, 3)

 

Indirect() met IF() wanneer HandvattypeReturn ="" én Materiaal2Return < >""

Indirect(

"ListAll"

& If( And( HandvattypeReturn="" , Materiaal2Return="" ) , "", "Conditional" )

& "Distinct(

& ”DwLookupKeuzeCombinaties1, 3"

& If( HandvattypeReturn="", "", ",1,HandvattypeReturn" )

& If( MateriaalReturn="", "", ",2,MateriaalReturn" )

& ")"

)

De uitkomst als normale formulering:

ListAll Conditional Distinct(DwLookupKeuzeCombinaties1, 3, 2, MateriaalReturn)

Hiermee wordt dus het volgende verwezenlijkt:

  • filter condities verdwijnen wanneer de filterkeuzes leeg zijn
  • Wanneer alle filterkeuzes leeg zijn, verandert ‘ListAllConditionalDistinct’ in ‘ListAllDistinct’

Voor meer gedetailleerde uitleg over Indirect(): https://docs.driveworkspro.com/Topic/Indirect

Uiteindelijke Item formulering HandvattypeFilter:

3 Rules1

Uiteindelijke Item formulering MateriaalFilter:

4 Rules2

Uiteindelijke Item formulering PrijsFilter:

5 Rules3

Gefilterde Data

Zoals je hierboven ziet zijn de pull-down menu’s veranderd van naam:

Niet Handvattype, Materiaal en Prijs maar HandvattypeFilter, MateriaalFilter en PrijsFilter.

Dat is nodig omdat je filterkeuzes ook leeg kan laten. Daarom heb ik naast de filters een ‘Text Box’-en gemaakt: HandvattypeFilter, MateriaalFilter en PrijsFilter.

 

De ‘Text Boxes’ worden gevuld met de ‘Text Box’-optie ‘Text (Override Rule)’, waarin ik de waardes laat zien wanneer iets is gekozen wordt of wanneer er maar een keuze overblijft.

5 Text Box Override

Zo worden de regels voor ‘Text (Override Rule)’ op de achtergrond ingesteld:

6 Text Box Override Rules

Het Resultaat: Formuliergedrag met volgorde-onafhankelijke filters

Starten met ‘Prijs’-filter (bij de laagste prijskeuze is maar een combinatie mogelijk):

8 Form start Prijs

Starten met ‘Materiaal’-filter (De goedkoopste variant van staal):

7 Form start Materiaal

Starten met ‘Handvattype’-filter (De goedkoopste klink):

9 Form start Handvattype

Conclusie

De standaard functie formulering laat het niet toe om een filtering uit te schakelen. De Indirect() functie biedt hiervoor een oplossing. En: Ja, de ‘rules’ of kennisregels worden wat complexer,
(vandaar de titeltoevoeging …voor gevorderden), maar het werkt uiteindelijk wel zoals gewenst:
Onafhankelijk van de volgorde van filteren.