Microsoft Developer Network > Forenhomepage > Microsoft Dynamics Foren > Microsoft Dynamics CRM (Deutsch) > Default-Filtereinstellungen in verknüpften Aktvitiäten

Beantwortet Default-Filtereinstellungen in verknüpften Aktvitiäten

  • Dienstag, 27. Dezember 2011 08:06
     
     

    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


Antworten

  • Mittwoch, 28. Dezember 2011 10:07
     
     Beantwortet Enthält Code

    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 11:44
     
     Beantwortet

    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
    •  

Alle Antworten

  • Dienstag, 27. Dezember 2011 10:09
     
     Vorgeschlagene Antwort Enthält Code

    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
  • Dienstag, 27. Dezember 2011 16:34
     
      Enthält Code

    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


  • Mittwoch, 28. Dezember 2011 10:07
     
     Beantwortet Enthält Code

    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 11:22
     
      Enthält Code

    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:44
     
     Beantwortet

    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 12:13
     
     

    Hallo Andreas,

     

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

    Liebe Grüße

    Andreas

  • Samstag, 11. Februar 2012 15:18
     
     

    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

  • Montag, 13. Februar 2012 08:59
    Moderator
     
     

    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