none
Default-Filtereinstellungen in verknüpften Aktvitiäten

    Frage

  • Hallo allerseits,

    wieder eine GUI-Frage von mir: in einem aufgerufenen Kontakt-Detailinfo-Fenster existiert im linken Navigationsbereich unten der Abschnitt Verknüpft --> Allgemein --> Aktivitäten. Hier ist der Filter der Aktivitäten per Default auf "Filter für: Nächste 30 Tage" eingestellt. Unschön, da unsere Benutzer immer alle Aktivitäten sehen möchten und deswegen zwei Mausklicks mehr brauchen, bis der Filter umgestellt ist.

    Frage: wie bekomme ich es hin, dass hier beim Erstaufruf dieses Navigationspunkts immer per Default der Filter "Alle" (Aktivtäten) eingestellt ist?

    Vielen Dank für Eure Mühe (und ich wünsche allen Forenteilnehmern schon einmal ein erfolgreiches und schönes Jahr 2012)

    Viele Grüße Thomas


    Dienstag, 27. Dezember 2011 08:06

Antworten

  • Hallo Stephan,

    Wenn du die Funktion im Contact-Formular mit deutschem Languagepack aufrufst heißt das Feld: "crmGrid_Contact_ActivityPointers_scheduledend" - das Feld heißt offensichtlich leider in jedem Formular je nach der Entität und Sprachpaket anders!

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    • Als Antwort markiert Thomas Devern Mittwoch, 28. Dezember 2011 12:13
    Mittwoch, 28. Dezember 2011 11:44
  • Hallo Thomas,

    Sprechen wir eigentlich von CRM 4.0 oder CRM 2011? In CRM 2011 heißt die Combobox zum Auswählen des Filters für die offenen Aktivitäten definitiv so (die Feldnamen kannst du mit dem IE-Developer Tools nachvollziehen, im IE F12 drücken und dann auf das gesuchte Feld klicken). Wenn du allerdings CRM 4.0 im Einsatz hast sollte folgende Funktion die Lösung bringen:

    //Activity scheduledend options 
    var ActivityOptions = 
    { 
      All : "All",
      Overdue :"Overdue", 
      Today :"Today", 
      Tomorrow :"Tomorrow", 
      Next7Days :"NextXDays;7", 
      Next30Days :"NextXDays;30", 
      Next90Days :"NextXDays;90", 
      Next6Months :"NextXMonths;6" 
    } 
    
    //Activity History actualend options 
    var HistoryOptions = 
    { 
      All : "All",
      Today : "Today", 
      Yesterday : "Yesterday", 
      Last7Days : "LastXDays;7", 
      Last30Days : "LastXDays;30", 
      Last90Days : "LastXDays;90", 
      Last6Months : "LastXMonths;6", 
      Last12Months: "LastXMonths;12" 
    } 
    
    var _loadarea = loadArea; 
    loadArea = function(sArea, sParams, sUrl, bIsvMode) 
    { 
      _loadarea(sArea, sParams, sUrl, bIsvMode); 
      
      if( sArea != "areaActivityHistory" && sArea != "areaActivities" ) return;
    
      var iframe = document.getElementById(sArea + "Frame"); 
      iframe.onreadystatechange = function() 
      { 
        if( iframe.readyState == "complete") 
        { 
          var picklist,option; 
          //reference to the iframe document 
          var iframeDoc = iframe.contentWindow.document; 
          switch(sArea) 
          { 
            case "areaActivityHistory": 
               picklist = iframeDoc.all.actualend[0]; 
            
               /* change to suit your needs */ 
               option = HistoryOptions.All; 
               break; 
            case "areaActivities": 
               picklist = iframeDoc.all.scheduledend[0]; 
               /* change to suit your needs */ 
               option = ActivityOptions.All; 
               break; 
            default: return; 
          } 
          picklist.value = option; 
          picklist.FireOnChange(); 
        } 
      } 
    }
    

    Diese Funktion ändert die Filter für die offenen Aktivitäten und die History - gesetzt wird jeweils der Wert, welcher der Variablen 'option' zugewiesen wird.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Mittwoch, 28. Dezember 2011 10:07
  • Hallo Thorsten,

    eine Möglichkeit wäre, einfach eine eigene ASPX-Seite über die Sitemap zu starten die nichts anderes macht als die eigentliche Activities-Homepage zu starten. Dadurch hast du dann die Möglichkeit, in deiner ASPX-Seite JavaScript unterzubringen, das die dann den Filter nach deinen Wünschen ändert. 


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website


    Montag, 13. Februar 2012 08:59
    Moderator

Alle Antworten

  • Hallo Thomas,

    Diese Änderung musst du per Scripting im OnLoad-Event des jeweiligen Formulars inkludieren. Die Lösung bringt folgende Funktion:

    //*****************************************************************
    // Filter Aktivitätenansicht
    //*****************************************************************
    function SetView(type, defaultValue, fieldName)
    {
       SetDefaultView = function (viewCombo, viewName, appGrid)
       {
          if (viewCombo.value != viewName)
          {
             viewCombo.value = viewName;
             appGrid.RefreshGridView();
          }
       }
    
       areaActivitiesFrame_OnReadyStateChange = function ()
       {
          if (this.readyState == "complete")
          {
             var frame = document.frames("area" + type + "Frame");
             var viewCombo = frame.document.getElementById(fieldName);
             var appGrid = frame.document.getElementById("AppGridFilterContainer");
             if (viewCombo.readyState == "complete")
             {
                SetDefaultView(viewCombo, defaultValue, appGrid);
             }
    
             else
             {
                viewCombo.onreadystatechange = function ()
                {
                   if (this.readyState == "complete")
                   {
                      SetDefaultView(this, defaultValue, appGrid);
                   }
                }
             }
          }
       }
    
       if (document.getElementById("nav" + type) != null)
       {
          document.getElementById("nav" + type).onclick = function ()
          {
             loadArea("area" + type);
             document.frames("area" + type + "Frame").document.onreadystatechange = 
             function ()
             {
                if (this.readyState == "complete")
                {
                   var frame = document.frames("area" + type + "Frame");
                   var viewCombo = frame.document.getElementById(fieldName);
                   var appGrid = frame.document.getElementById("AppGridFilterContainer");
                   if (viewCombo.readyState == "complete")
                   {
                      SetDefaultView(viewCombo, defaultValue, appGrid);
                   }
    
                   else
                   {
                      viewCombo.onreadystatechange = function ()
                      {
                         if (this.readyState == "complete")
                         {
                            SetDefaultView(this, defaultValue, appGrid);
                         }
                      }
                   }
                }
             }
          }
       }
    }
    


    Den folgenden Aufruf führst du dann in deiner OnLoad-Funktion aus:

    SetView('Activities', 'All', "crmGrid_Account_ActivityPointers_datefilter");
    

    Somit sollte dann bei Klick auf den Menüpunkt der Filter auf "Alle" gestellt sein!

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    • Als Antwort vorgeschlagen Adam VeroMVP Donnerstag, 23. Februar 2012 09:32
    Dienstag, 27. Dezember 2011 10:09
  • Hallo Andreas, vielen Dank für die Mühe!

    Es gibt noch ein Problem: in Zeile 54 Deines Scriptes

     if (viewCombo.readyState == "complete")
    {...}

    knallt das Skript raus, da kein Objekt vorhanden ist. Bis zur Zuweisung des viewCombo-Objekts ist alles i.O. allerdings scheint es so zu sein, dass innerhalb des frame.document kein Element mit der ID 'crmGrid_Account_ActivityPointers_datefilter' existiert. Ich habe im Debugger im ersten Moment auch nichts finden können, was einen ähnlichen Namen trägt....

    Hast Du eine Idee?

    Vielen Dank und Gruß

    Thomas


    Dienstag, 27. Dezember 2011 16:34
  • Hallo Thomas,

    Sprechen wir eigentlich von CRM 4.0 oder CRM 2011? In CRM 2011 heißt die Combobox zum Auswählen des Filters für die offenen Aktivitäten definitiv so (die Feldnamen kannst du mit dem IE-Developer Tools nachvollziehen, im IE F12 drücken und dann auf das gesuchte Feld klicken). Wenn du allerdings CRM 4.0 im Einsatz hast sollte folgende Funktion die Lösung bringen:

    //Activity scheduledend options 
    var ActivityOptions = 
    { 
      All : "All",
      Overdue :"Overdue", 
      Today :"Today", 
      Tomorrow :"Tomorrow", 
      Next7Days :"NextXDays;7", 
      Next30Days :"NextXDays;30", 
      Next90Days :"NextXDays;90", 
      Next6Months :"NextXMonths;6" 
    } 
    
    //Activity History actualend options 
    var HistoryOptions = 
    { 
      All : "All",
      Today : "Today", 
      Yesterday : "Yesterday", 
      Last7Days : "LastXDays;7", 
      Last30Days : "LastXDays;30", 
      Last90Days : "LastXDays;90", 
      Last6Months : "LastXMonths;6", 
      Last12Months: "LastXMonths;12" 
    } 
    
    var _loadarea = loadArea; 
    loadArea = function(sArea, sParams, sUrl, bIsvMode) 
    { 
      _loadarea(sArea, sParams, sUrl, bIsvMode); 
      
      if( sArea != "areaActivityHistory" && sArea != "areaActivities" ) return;
    
      var iframe = document.getElementById(sArea + "Frame"); 
      iframe.onreadystatechange = function() 
      { 
        if( iframe.readyState == "complete") 
        { 
          var picklist,option; 
          //reference to the iframe document 
          var iframeDoc = iframe.contentWindow.document; 
          switch(sArea) 
          { 
            case "areaActivityHistory": 
               picklist = iframeDoc.all.actualend[0]; 
            
               /* change to suit your needs */ 
               option = HistoryOptions.All; 
               break; 
            case "areaActivities": 
               picklist = iframeDoc.all.scheduledend[0]; 
               /* change to suit your needs */ 
               option = ActivityOptions.All; 
               break; 
            default: return; 
          } 
          picklist.value = option; 
          picklist.FireOnChange(); 
        } 
      } 
    }
    

    Diese Funktion ändert die Filter für die offenen Aktivitäten und die History - gesetzt wird jeweils der Wert, welcher der Variablen 'option' zugewiesen wird.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Mittwoch, 28. Dezember 2011 10:07
  • Hallo Andreas, vielen Dank wieder für das Skript.

    Wir reden von CRM 2011, onPremise, Deutsches Sprachpacket.Das Kontaktformular ist nur geringfügig customiced, d.h. ein paar benutzerdefinierte Felder und ein paar ausgeblendete Bereiche. Keine sonstigen Skripte o.ä.

    Ich habe Dein Skript als Script-Webresource eingebunden und rufe die Funktion mit den von Dir angegebenen Parametern beim onLoad-Event auf. Über den Debugger (F12) kann ich sehen, dass bei der Zeile

    var viewCombo = frame.document.getElementById(fieldName);

    kein Objekt zurückgegeben wird. Der fieldName ist mit  "crmGrid_Account_ActivityPointers_datefilter" bei der Code-Ausführung belegt (ich habe die Doppel-Anführungszeichen auch schon mit einfachen Anführungszeichen beim Funktionsaufruf ausgetauscht, auch wenn das m.W. nach keinen Unterschied macht). Die Variable viewCombo bekommt aber kein Objekt zugewiesen.

    Bin momentan auch etwas ratlos.

    Liebe Grüße

    Stephan

    Mittwoch, 28. Dezember 2011 11:22
  • Hallo Stephan,

    Wenn du die Funktion im Contact-Formular mit deutschem Languagepack aufrufst heißt das Feld: "crmGrid_Contact_ActivityPointers_scheduledend" - das Feld heißt offensichtlich leider in jedem Formular je nach der Entität und Sprachpaket anders!

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    • Als Antwort markiert Thomas Devern Mittwoch, 28. Dezember 2011 12:13
    Mittwoch, 28. Dezember 2011 11:44
  • Hallo Andreas,

     

    passt! Jetzt funktioniert alles wie es soll! Herzlichen Dank!

    Liebe Grüße

    Andreas

    Mittwoch, 28. Dezember 2011 12:13
  • Hallo Andreas,

    schöne Lösung. Gibt es denn eine ähnliche Möglichkeit für die globale Activities-Homepage? (Wir wollen den Filter auf "heute").
    Das Problem wird wohl sein, dass es hier keine Form gibt an deren Events man sich attachen kann.
    Hast du trotzdem einen Ansatz wie man das erreichen könnte?

    Danke,
    Gruß,
    Thorsten

    Samstag, 11. Februar 2012 15:18
  • Hallo Thorsten,

    eine Möglichkeit wäre, einfach eine eigene ASPX-Seite über die Sitemap zu starten die nichts anderes macht als die eigentliche Activities-Homepage zu starten. Dadurch hast du dann die Möglichkeit, in deiner ASPX-Seite JavaScript unterzubringen, das die dann den Filter nach deinen Wünschen ändert. 


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website


    Montag, 13. Februar 2012 08:59
    Moderator
  • Hallo Andreas

    Vielen Dank! Funktioniert großartig!  (Hope that is the correct German, Thank you so much - this made my day!)

    Paula

    Dienstag, 30. Oktober 2012 17:33