domenica 1 marzo 2020

D365FFO - Cercare l'id dell'etichetta in base al testo

In questo post vediamo un job (runnableClass) per cercare il codice dell'etichetta in base al testo. Nel esempio vogliamo cercare tutte le etichette che contengono "Data Fattura":

Questi due post sono stati di grande aiuto:

Questo mostra come ricavare il codice dell'etichetta cercando in base al testo:

https://community.dynamics.com/365/financeandoperations/f/dynamics-365-for-finance-and-operations-forum/272482/how-to-get-label-id-from-a-label-text/810927

Questo post invece indica come ricavare tutti i fileID delle etichette:

https://community.dynamics.com/365/financeandoperations/f/dynamics-365-for-finance-and-operations-forum/243050/enumerate-label-prefix-for-label-search-functionality


 Questo è il job preso dal primo link e modificato:

   public static void main(Args _args)  
   {  
     int j;  
     //parametri - start  
     str TextToFind = "Data fattura"; //stringa da cercare  
     LanguageId languageId = "it";    //lingua  
     boolean matchExactly = true;     //trova parola esatta oppure no  
     str   LabelFile = "SYS";         //Label file Id  
     //parametri - end  
     container result;  
     Map txtToLabelIdMap = new Map(Types::String, Types::String);  
     ClrObject labels = new ClrObject("System.Collections.Generic.Dictionary`2[System.String,System.String]");  
     System.Globalization.CultureInfo cultInfo = System.Globalization.CultureInfo::CreateSpecificCulture(languageId);  
     labels = Microsoft.Dynamics.Ax.Xpp.LabelHelper::GetAllLabels(LabelFile, cultInfo);  
     if(labels)  
     {  
       ClrObject labelsEnumerator = labels.GetEnumerator();  
       while(labelsEnumerator.MoveNext())  
       {  
         ClrObject keyValuePair = labelsEnumerator.get_Current();  
         var currentlabelId = keyValuePair.get_Key();  
         var currentTxt = keyValuePair.get_Value();  
         if(matchExactly)  
         {  
           if(currentTxt == TextToFind)  
           {  
             if (!Microsoft.Dynamics.Ax.Xpp.LabelHelper::IsLegacyLabelId(currentlabelId))  
             {  
               currentlabelId = strFmt("%1%2:%3","@",LabelFile,currentlabelId);  
             }  
             result += strFmt("%1,%2 -> %3",LabelFile,currentlabelId,currentTxt);  
           }  
         }  
         else  
         {  
           if(strScan(currentTxt, TextToFind, 0, strLen(currentTxt)))  
           {  
             if (!Microsoft.Dynamics.Ax.Xpp.LabelHelper::IsLegacyLabelId(currentlabelId))  
             {  
               currentlabelId = strFmt("%1%2:%3","@",LabelFile,currentlabelId);  
             }  
             result += strFmt("%1,%2 -> %3",LabelFile,currentlabelId,currentTxt);  
           }  
         }  
       }  
     }  
     //container dei risultati  
     for(j = 1;j<=conLen(result);j++)  
     {  
       info(conPeek(result,j));  
     }  
   }  

Lanciando il job otterremo il seguente risultato:


Nessun commento:

Posta un commento