lunedì 16 marzo 2020

D365 FFO - lookup su formcontrol unbound

Questo link mostra come fare la lookup via CoC sul campo di un datasource:

https://community.dynamics.com/365/financeandoperations/f/dynamics-365-for-finance-and-operations-forum/357208/lookup-on-form-datasource-field

Per fare la lookup su un controllo unbound dobbiamo fare così:

 [ExtensionOf(formControlStr(ProjTableWizard,FormControl))]  
 final class LILProjTableWizard_Extension  
 {  
   public void lookup()  
   {  
     next lookup();
  
     Query query = new Query();  

     query.addDataSource(tableNum(CustGroup));  
     
     SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(CustGroup),this);  
     systableLookup.addLookupfield(fieldNum(CustGroup, CustGroup), true);  
     systableLookup.addLookupfield(fieldNum(CustGroup, Name), false);  
     
     sysTableLookup.parmQuery(query);  
     sysTableLookup.performFormLookup();  
   }  
 }  

In questo modo invece possiamo effettuare la CoC sul metodo clicked di un pulsante:

 [ExtensionOf(formControlStr(WHSShipPlanningListPage,Transfer))]  
 final class MCSWHSShipPlanningListPageTransfer_Extension  
 {  
   void clicked()  
   {  
     FormDataSource      WHSShipmentTableDS;  
     FormControl      control = this as FormControl;  
     WHSShipmentTableDS = control.formRun().dataSource(formDataSourceStr(WHSShipPlanningListPage,WHSShipmentTable)) as FormDataSource;  
     next clicked();  
     WHSShipmentTableDS.research(true);  
   }  
 }  

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: