Select to view content in your preferred language

Search with a Wildcard and a Dictionary?

4396
6
Jump to solution
01-09-2014 07:31 AM
ionarawilson1
Deactivated User
I am using a dictionary for domains in the database. So if the user searches for the "Referral Vendor", the query will search for the code "RV". However Some domain names are really complex for the user to type and I want to add a wildcard. Is it possible to use wildcard with a a dictionary?. Because if I use the % wildcard, and the user types for example "Ref", there is not a key on the dictionary with "Ref", so it will not able to find the value in the database. Thank you for any help!

private function doSearch():void    {     var dict:Dictionary = new Dictionary();     dict["Alpine"] = "AL";     dict["Austin"] = "AU";               dict["Referral - Consulting Forester"] = "RC";     dict["Referral Vendor"] = "RV";          dict["Incidental Rural Forestry"] = "AIR";     dict["Prevention and Reduction of Pest Losses"] = "AP";     dict["Forest Health Monitoring - Survey"] = "FHS";     dict["Forest Inventory & Analysis (FIA) Assist"] = "FSU";     dict["AO - Assist - Oak Wilt Not On-Sites"] = "AO";     dict["AIO - Assist - Incidental Oak Wilt"] = "AIO";     dict["PO - Presentation - Oak Wilt"] = "PO";     dict["TGO - Training Given - Oak Wilt"] = "TGO";     dict["TRO - Training Received - Oak Wilt"] = "TRO";     dict["TGU - Training Given - Urban Forestry"] = "TGU";     dict["TRU - Training Received - Urban Forestry"] = "TRU";     dict["Incidental Urban Forestry"] = "AIU";     dict["Referral - Arborist"] = "RA";     dict["FEPP Support and Assistance"] = "FIN";     dict["Training given - Coordination/Assistance fire and/or emergency non fire"] = "TFC";               myAttributeTable.featureLayer = myFeatureLayer     var qText2:String                 qText2  =  "%" + dict[qText.text] + "%"     var defexpr:String =  searchattribute +  eqsymbol +  "'"  +  qText2  + "'";
Tags (2)
0 Kudos
1 Solution

Accepted Solutions
RobertScheitlin__GISP
MVP Emeritus
Ionara,

   Here is a sample of using an ArrayCollection instead.

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"                 xmlns:s="library://ns.adobe.com/flex/spark"                 xmlns:mx="library://ns.adobe.com/flex/mx"                minWidth="955" minHeight="600"                creationComplete="application1_creationCompleteHandler(event)">     <fx:Script>         <![CDATA[             import mx.collections.ArrayCollection;             import mx.events.FlexEvent;                           [Bindable] private var ac:ArrayCollection;                          protected function application1_creationCompleteHandler(event:FlexEvent):void             {                 ac = new ArrayCollection();                 ac.addItem({name:"Alpine",code:"AL"});                 ac.addItem({name:"Austin",code:"AU"});                 ac.addItem({name:"Referral - Consulting Forester",code:"RC"});                 ac.addItem({name:"Referral Vendor",code:"RV"});                 ac.addItem({name:"Incidental Rural Forestry",code:"AIR"});                 ac.addItem({name:"Prevention and Reduction of Pest Losses",code:"AP"});                 ac.addItem({name:"Forest Health Monitoring - Survey",code:"FHS"});                 /* dict["Forest Inventory & Analysis (FIA) Assist"] = "FSU";                 dict["AO - Assist - Oak Wilt Not On-Sites"] = "AO";                 dict["AIO - Assist - Incidental Oak Wilt"] = "AIO";                 dict["PO - Presentation - Oak Wilt"] = "PO";                 dict["TGO - Training Given - Oak Wilt"] = "TGO";                 dict["TRO - Training Received - Oak Wilt"] = "TRO";                 dict["TGU - Training Given - Urban Forestry"] = "TGU";                 dict["TRU - Training Received - Urban Forestry"] = "TRU";                 dict["Incidental Urban Forestry"] = "AIU";                 dict["Referral - Arborist"] = "RA";                 dict["FEPP Support and Assistance"] = "FIN";                 dict["Training given - Coordination/Assistance fire and/or emergency non fire"] = "TFC";*/             }                          private function SearchList():void {                 ac.filterFunction = filter;                 ac.refresh()             }                          public function filter(item:Object):Boolean             {                 var name:String = String(item["name"]);                 var beginsWithString:String = SearchInput.text.toLowerCase();                                  return name.toLowerCase().indexOf(beginsWithString) > -1;             }                      ]]>     </fx:Script>     <mx:DataGrid x="10" dataProvider="{ac}" y="49" width="891" height="408" id="listamail">         <mx:columns>             <mx:DataGridColumn headerText="Name" dataField="name"/>             <mx:DataGridColumn headerText="code" dataField="code"/>         </mx:columns>     </mx:DataGrid>     <s:TextInput x="62.6" y="9.75" width="408" id="SearchInput" keyUp="SearchList()"  /> </s:Application>

View solution in original post

0 Kudos
6 Replies
RobertScheitlin__GISP
MVP Emeritus
Ionara,

   Dictionary  uses strict equality  (===) for key comparison, so No you can not use wildcards.
0 Kudos
ionarawilson1
Deactivated User
Thank you Robert. Do you have any ideas on another way I could use the domains in a search instead of a dictionary? thank you!
0 Kudos
ionarawilson1
Deactivated User
The only way I found is to search for a string such as:

    myAttributeTable.featureLayer = myFeatureLayer
    var qText2:String 
   
    var result = qText.text.match(/vendor/i);
    if (result)
    { 
     
    qText2 = "RV"
    }
0 Kudos
RobertScheitlin__GISP
MVP Emeritus
Ionara,

   Here is a sample of using an ArrayCollection instead.

<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"                 xmlns:s="library://ns.adobe.com/flex/spark"                 xmlns:mx="library://ns.adobe.com/flex/mx"                minWidth="955" minHeight="600"                creationComplete="application1_creationCompleteHandler(event)">     <fx:Script>         <![CDATA[             import mx.collections.ArrayCollection;             import mx.events.FlexEvent;                           [Bindable] private var ac:ArrayCollection;                          protected function application1_creationCompleteHandler(event:FlexEvent):void             {                 ac = new ArrayCollection();                 ac.addItem({name:"Alpine",code:"AL"});                 ac.addItem({name:"Austin",code:"AU"});                 ac.addItem({name:"Referral - Consulting Forester",code:"RC"});                 ac.addItem({name:"Referral Vendor",code:"RV"});                 ac.addItem({name:"Incidental Rural Forestry",code:"AIR"});                 ac.addItem({name:"Prevention and Reduction of Pest Losses",code:"AP"});                 ac.addItem({name:"Forest Health Monitoring - Survey",code:"FHS"});                 /* dict["Forest Inventory & Analysis (FIA) Assist"] = "FSU";                 dict["AO - Assist - Oak Wilt Not On-Sites"] = "AO";                 dict["AIO - Assist - Incidental Oak Wilt"] = "AIO";                 dict["PO - Presentation - Oak Wilt"] = "PO";                 dict["TGO - Training Given - Oak Wilt"] = "TGO";                 dict["TRO - Training Received - Oak Wilt"] = "TRO";                 dict["TGU - Training Given - Urban Forestry"] = "TGU";                 dict["TRU - Training Received - Urban Forestry"] = "TRU";                 dict["Incidental Urban Forestry"] = "AIU";                 dict["Referral - Arborist"] = "RA";                 dict["FEPP Support and Assistance"] = "FIN";                 dict["Training given - Coordination/Assistance fire and/or emergency non fire"] = "TFC";*/             }                          private function SearchList():void {                 ac.filterFunction = filter;                 ac.refresh()             }                          public function filter(item:Object):Boolean             {                 var name:String = String(item["name"]);                 var beginsWithString:String = SearchInput.text.toLowerCase();                                  return name.toLowerCase().indexOf(beginsWithString) > -1;             }                      ]]>     </fx:Script>     <mx:DataGrid x="10" dataProvider="{ac}" y="49" width="891" height="408" id="listamail">         <mx:columns>             <mx:DataGridColumn headerText="Name" dataField="name"/>             <mx:DataGridColumn headerText="code" dataField="code"/>         </mx:columns>     </mx:DataGrid>     <s:TextInput x="62.6" y="9.75" width="408" id="SearchInput" keyUp="SearchList()"  /> </s:Application>
0 Kudos
ionarawilson1
Deactivated User
Thank you so much Robert. This has helped me tremendously. I was able to use the filter function in my case. I still have to make sure everything works property and tweak it here and there, but it is filtering with a wildcard and a domain now! Thanks!

public function filter(item:Object):Boolean
   {
    var name:String = String(item["name"]);
    var beginsWithString:String = qText.text.toLowerCase();
    
    return name.toLowerCase().indexOf(beginsWithString) > -1;
    if (item.name == "Alpine")
    {
       Alert.show("TEST")
    }
   }
   
   
   private function doSearch():void
   {
    
    
    ac = new ArrayCollection();
    ac.addItem({name:"Alpine",code:"AL"});
    ac.addItem({name:"Austin",code:"AU"});
    ac.addItem({name:"Referral - Consulting Forester",code:"RC"});
    ac.addItem({name:"Referral Vendor",code:"RV"});
    ac.addItem({name:"Incidental Rural Forestry",code:"AIR"});
    ac.addItem({name:"Prevention and Reduction of Pest Losses",code:"AP"});
    ac.addItem({name:"Forest Health Monitoring - Survey",code:"FHS"});
    myAttributeTable.featureLayer = myFeatureLayer

      
    
    ac.filterFunction = filter;
    ac.refresh()
    var itemname:String = ac.getItemAt(0).name
    Alert.show(itemname)
 
    var qText2:String  = ac.getItemAt(0).code

    var defexpr:String =  searchattribute +  eqsymbol +  "'"  +  qText2  + "'";
    
    yourTable.definitionExpression = defexpr
    myAttributeTable.featureLayer = yourTable
    myAttributeTable.visible = true
    Alert.show(defexpr)
0 Kudos
ionarawilson1
Deactivated User
Thank you so much Robert. Here is a code snippet of what worked for me. Your idea of using an array collection was awesome! Thanks again!

 public function filter(item:Object):Boolean
   {
    var name:String = String(item["name"]);
    var beginsWithString:String = qText.text.toLowerCase();
    
    return name.toLowerCase().indexOf(beginsWithString) > -1;
    
   }
   
   
   private function doSearch():void
   {
    
    myAttributeTable.refresh();
    myAttributeTable.visible = false
    ac = new ArrayCollection();
    ac.addItem({name:"Referral - Consulting Forester",code:"RC"});
    ac.addItem({name:"Referral Vendor", code:"RV"});
    ac.addItem({name:"Incidental Rural Forestry",code:"AIR"});
    ac.addItem({name:"Prevention and Reduction of Pest Losses",code:"AP"});
    ac.addItem({name:"Forest Health Monitoring - Survey",code:"FHS"});
    
    ac.addItem({name:"Forest Inventory & Analysis (FIA) Assist",code:"FSU"});
    ac.addItem({name:"AO - Assist - Oak Wilt Not On-Sites",code:"AO"});
    ac.addItem({name:"AIO - Assist - Incidental Oak Wilt",code:"AIO"});
    ac.addItem({name:"PO - Presentation - Oak Wilt",code:"PO"});
    
    
    ac.addItem({name:"TGO - Training Given - Oak Wilt",code:"TGO"});
    ac.addItem({name:"TRO - Training Received - Oak Wilt",code:"TRO"});
    ac.addItem({name:"TGU - Training Given - Urban Forestry",code:"TGU"});
    ac.addItem({name:"TRU - Training Received - Urban Forestry",code:"TRU"});
    
    
    ac.addItem({name:"Incidental Urban Forestry",code:"AIU"});
    ac.addItem({name:"Referral - Arborist",code:"RA"});
    ac.addItem({name:"FEPP Support and Assistance",code:"FIN"});
    ac.addItem({name:"Training given - Coordination/Assistance fire and/or emergency non fire",code:"TFC"});
    
    
    ac.addItem({name:"Training given - FRD",code:"TGR"});
    ac.addItem({name:"Training given - FRP",code:"FRP"});
    ac.addItem({name:"Forest Awareness, Walk in the Forest, PLT Programs'",code:"EFA"});
    ac.addItem({name:"Forest Awareness, Walk in the Forest, PLT Programs - Assist",code:"EFAA"});
    
    ac.addItem({name:"EPW - Conservation Education Program; Woodland Clinic, Envirothon, etc",code:"EPW"});
    ac.addItem({name:"PRC - Presentation - Rural Forestry-Civic Organizations",code:"PRC"});
    ac.addItem({name:"Training Received (FRD)'",code:"TRR"});
    ac.addItem({name:"Training Received (FRP)",code:"TRF"})
    ac.addItem({name:"Meeting Attended",code:"MAT"});
    ac.addItem({name:"Professional Networking':'NED', 'Media Contact - Rural Forestry",code:"MCR"})
    ac.addItem({name:"Media Contact - Urban Forestry'",code:"MCU"})
    ac.addItem({name:"Media Contact - Oak Wilt",code:"MCO"})
    myAttributeTable.featureLayer = myFeatureLayer
    
    
    myAttributeTable.featureLayer = yourTable
    myAttributeTable.visible = true
    

   
    ac.filterFunction = filter;
    ac.refresh()
      
    
    yourTable.refresh()
    
    
    if (ac.length == 1 && searchCMB.selectedItem == "Office Activity")
    {
     var qText2:String  = ac.getItemAt(0).code
   
     var defexpr:String =  searchattribute +  " like " +  "'"  +  qText2  + "'";
     yourTable.definitionExpression = defexpr
     Alert.show(defexpr)
     
    }
0 Kudos