none
OnLoad-Event - Timing Eingabefelder beim Aufbau der Form

    Frage

  • Hallo Community,

    in einer Form (MSCRM 2011, OnPremise, UR11) wird bei Event OnLoad sehr umfangreicher JScript-Code verarbeitet. Auf der Form gibt es z.B. eine Check-Box, bei deren Klick per OnChange weiterer JScript-Code ausgeführt wird.

    Je nach Systemauslastung kann das Laden der Form incl. JScript-Ausführung schon mal 3 bis 5 Sekunden dauern.

    Jetzt das Problem: Während der Ladezeit kann der Anwender bereits Eingaben in Erfassungsfeldern vornehmen - z.B. die Check-Box klicken -, obwohl das JScript aus dem OnLoad noch nicht komplett ausgeführt wurde.

    Weiß jemand eine Möglichkeit, die Form bis zur Abarbeitung des OnLoad-JScripts gegen Eingaben zu sperren? Der Umfang des Jscripts kann leider nicht reduziert werden ;-) 

    Hat jemand eine Idee zur Problemlösung?

    Beste Grüße,

    Stephan

    Montag, 3. Juni 2013 14:48

Antworten

  • Hallo,

    "quick and dirty" könntest du die betroffenen Felder/Abschnitte im Standard ausblenden (über Anpassung des Formulares oder am Anfang der onload-Routine) und ganz am Ende des onload-Ereignisses wieder verfügbar machen.

    Ebenfalls könntest du im onchange der Checkbox prüfen, ob der Klick "schon zuläassig" ist/war, bspw. über JavaScript-Variablen mit entsprechener Gültigkeit/Scope oder versteckten Formular-Feldern.

    Montag, 3. Juni 2013 16:19
  • Hallo,

    Du könntest am Anfang deiner umfangreichen JavaScript Funktion die Felder bzw. Controls deaktivieren und am Ende freigeben.

    z.B.

    Xrm.Page.getControl(fieldName).setDisabled(true);
    
    //sonstige Aktionen
    
    Xrm.Page.getControl(fieldName).setDisabled(false);
    
    

    hier ist eine Anleitung für das komplette Formular:

    http://blogs.inetium.com/blogs/azimmer/archive/2011/04/01/disabling-an-entire-form-in-crm-2011.aspx

    Beste Grüße


    Steve Sämmang, Vienna, Austria
    Blog: xrm.io Website: simplic.at

    Montag, 3. Juni 2013 16:48
  • Hallo Stephan,

    Ich vermute du hast RU12 oder 13 auf deinem CRM-System - hier wurde eingeführt, dass die Webressourcen asynchron geladen werden. Daher entsteht auch dein Problem, dass die Form fertig geladen ist, jedoch die JScripts noch nicht geladen bzw. ausgeführt sind.

    Ich glaube allerdings nicht, dass du dein Problem zu 100% löst indem du die Felder am Beginn deines OnLoad sperrst - wenn die Webressource noch gar nicht fertig geladen ist hilft dir der Code auch nicht weiter. Ich würde hier eher so vorgehen, dass du entweder die Felder direkt im Formularassistent als readonly markierst oder du das OnChange der Felder im OnLoad auch aufrufst. Wenn du die Felder im Assistent sperrst kannst du diese jederzeit per Script im nachhinein wieder aufmachen.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Dienstag, 4. Juni 2013 08:11

Alle Antworten

  • Hallo,

    "quick and dirty" könntest du die betroffenen Felder/Abschnitte im Standard ausblenden (über Anpassung des Formulares oder am Anfang der onload-Routine) und ganz am Ende des onload-Ereignisses wieder verfügbar machen.

    Ebenfalls könntest du im onchange der Checkbox prüfen, ob der Klick "schon zuläassig" ist/war, bspw. über JavaScript-Variablen mit entsprechener Gültigkeit/Scope oder versteckten Formular-Feldern.

    Montag, 3. Juni 2013 16:19
  • Hallo,

    Du könntest am Anfang deiner umfangreichen JavaScript Funktion die Felder bzw. Controls deaktivieren und am Ende freigeben.

    z.B.

    Xrm.Page.getControl(fieldName).setDisabled(true);
    
    //sonstige Aktionen
    
    Xrm.Page.getControl(fieldName).setDisabled(false);
    
    

    hier ist eine Anleitung für das komplette Formular:

    http://blogs.inetium.com/blogs/azimmer/archive/2011/04/01/disabling-an-entire-form-in-crm-2011.aspx

    Beste Grüße


    Steve Sämmang, Vienna, Austria
    Blog: xrm.io Website: simplic.at

    Montag, 3. Juni 2013 16:48
  • Hallo Stephan,

    aber mal eine andere Frage:
    Darf ich fragen, was so komplex ist, dass das JS eine Laufzeit von 3 bis 5 Sekunden hat? Gibt es nicht ggf. auch eine Möglichkeit die Laufzeit des Skripts zu verringern?

    Schöne Grüße,

    Nils Frohloff

    Montag, 3. Juni 2013 17:29
  • Hallo Stephan,

    Ich vermute du hast RU12 oder 13 auf deinem CRM-System - hier wurde eingeführt, dass die Webressourcen asynchron geladen werden. Daher entsteht auch dein Problem, dass die Form fertig geladen ist, jedoch die JScripts noch nicht geladen bzw. ausgeführt sind.

    Ich glaube allerdings nicht, dass du dein Problem zu 100% löst indem du die Felder am Beginn deines OnLoad sperrst - wenn die Webressource noch gar nicht fertig geladen ist hilft dir der Code auch nicht weiter. Ich würde hier eher so vorgehen, dass du entweder die Felder direkt im Formularassistent als readonly markierst oder du das OnChange der Felder im OnLoad auch aufrufst. Wenn du die Felder im Assistent sperrst kannst du diese jederzeit per Script im nachhinein wieder aufmachen.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010

    Dienstag, 4. Juni 2013 08:11
  • Sorry das ich so spät antworte.

    Besten Dank für den Vorschlag. Ich werde es mal mit dem Ausblenden von Abschnitten probieren, da einzelne Felder logikabhängig bereits reichlich ein-/ausgeblendet werden.

    Vorab besten Dank,

    Stephan

    Montag, 1. Juli 2013 16:14
  • Sorry das ich erst jetzt antworte.

    Da viele Controls bereits beim OnLoad logikabhängig, ein-/ausgeblendet werden, ist das für mich keine Lösung. Ich werde es mal über ausblenden aller Register versuchen.

    Einstweilen besten Dank,

    Stephan

    Montag, 1. Juli 2013 16:17
  • Hallo Nils,

    sorry, das ich erst jetzt antworte. Das beim OnLoad ausgeführte JS ist sehr komplex und macht diverse Prüfungen im Zusammenhang mit einer SAP-Replikation und weiteren Logikprüfungen. Es gibt auch weitere Möglichkeiten die Laufzeit zu verringern z.B. Nutzung des IE9 oder IE10 - darf allerdings aus Anforderungsgründen z.Z. nur mit IE8 genutzt werden. Der JS-Code ist auch noch nicht 'gepackt', das wird auch noch mal ein paar Millisekündchen bringen. Die Antwortzeit ist lastabhängig von verschiedenen Niederlassungsstandorten und im seltenen Schlechtfall dauert das Laden schon mal mehrere Sekunden. Nur dann tritt das Problem auf.

    Beste Grüße,

    Stephan

    Montag, 1. Juli 2013 16:29
  • Hallo Andreas,

    siehe weitere Antworten. Das OnLoad-Script setzt bereits die Felder logikabhängig und dauert halt in Ausnahmefällen. Ich probiere es mal über ausblenden der betroffenen Register und wenn im Hintergrund alle Controls aktiviert/deaktiviert sind, blende ich die Register wieder ein.

    Beste Grüße,

    Stephan

    Montag, 1. Juli 2013 16:32
  • Hallo Raul,

    die Thematik ist noch aktuell. Ich war längere Zeit verhindert zu antworten und habe dies jetzt nachgeholt.

    Gruss,

    Stephan

    Montag, 1. Juli 2013 16:34