none
Anfrage abschließen aus Plugin oder JavaScript RRS feed

  • Frage

  • Hallo liebes Foren Team,

    vorab, ich benutze CRM 2011 Online, gehostet

     

    Ich weiss dass es einen CloseIncidentRequest gibt, aber diese möchte ich eigentlich nicht nehmen, weil ich den user auffordern möchte, einen Lösungsgrund anzugeben. Es soll also die IncidentResulution Form geöffnet werden.

     -->

            


    Einfach den Link auszuführen habe ich porbiert, so wird die Anfrage leider nicht geschlossen.

    Bekommt man das so hin oder muss ich mich mit der CloseIncidentRequestClass zufrieden geben ?

     

    Mit freundlichem Gruß, Jan

    Dienstag, 25. Oktober 2011 14:39

Antworten

  • Hallo Jan,

    was in deiner Frage fehlt, ist der Kontext, in dem sich der Benutzer befindet. Offenbar befindet er sich ja nicht in der eigentlichen Anfrage, da man ja von dort aus ganz einfach die Anfrage mit der Angabe eines Lösungsgrundes schließen kann.

    Grundsätzlich ist es ja so, dass du auch bei einem CloseIncidentRequest ebenso einen Lösungsgrund angeben musst. Genau genommen musst du sogar eine IncidentResolution mit angeben, die dem Formular "Anfrage abschließen" entspricht.

    Wenn deine Frage also ist, wie du eine Anfrage per PlugIn oder JavaScript schließen kannst, ist die Antwort tatsächlich CloseIncidentRequest.

    Viele Grüße,
    Jürgen


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de
    Dienstag, 25. Oktober 2011 14:49
    Moderator
  • Hallo Jan,

    Also mit Plugin wirst du deine Anforderung sicher nicht lösen können - die Logiken von Plugins laufen nur am Server und somit hast du keine Möglichkeit am Client ein Fenster zu öffnen. Wenn du das Fenster einfach per URL aufrufst fehlt dir die Javascript-Logik, die vor und nach dem Aufruf dieses Fensters von einer Anfrage aus, ausgeführt wird.

    Eigentlich müsstest du so vorgehen: Du müsstest dir die Javascript-Logik in der Webseite einer Anfrage zum Abschließen suchen (einige Funktionen mit dementsprechenden Aufrufen). Diese Logik müsstest du dann in deiner benutzerdefinierten Entität genauso nachprogrammieren. Die Frage ist, ob sich dieser Aufwand wirklich lohnt.

    Ich würde die Anforderung eher so realisieren: Wenn dieses, von dir angesprochene, Event in der benutzerdefinierten Entität ausgelöst wird, würde ich ein Textfeld für den Lösungsgrund auf dem Formular als Pflichtfeld einblenden. Somit kann der Datensatz erst wieder gespeichert werden, wenn hier ein Text ausgefüllt ist. Diesen Speichervorgang kannst du dann am Server per Plugin fangen und die verknüpfte Anfrage mit einem CloseIncidentRequest und der eingegebenen Lösungsbeschreibung schließen.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    • Als Antwort vorgeschlagen Andreas Buchinger Montag, 31. Oktober 2011 12:20
    • Als Antwort markiert Jan1992 Montag, 31. Oktober 2011 12:51
    Dienstag, 25. Oktober 2011 15:38
  • So dieser Thread ist nun endlich abgeschlossen:

     

    Die Lösung für das Problem:

     

    In der benutzerdef. Entität habe ich nun die Felder für Beschr. und Titel der Caseresolution angegeben. In meinem Plugin schließe ich dann den Case mit dem CloseIncidentRequest.
    Falls der Anfrage noch offene Aktiväten angehängt sind, so wird die Meldung per InvalidPluginExecutionException dem Benutzer ausgegeben.

     

    Den Case zu Canceln, erfolgt einfach über ein

    SetStateRequest
    

    MfG, Jan

     


    Mittwoch, 2. November 2011 08:30

Alle Antworten

  • Hallo Jan,

    was in deiner Frage fehlt, ist der Kontext, in dem sich der Benutzer befindet. Offenbar befindet er sich ja nicht in der eigentlichen Anfrage, da man ja von dort aus ganz einfach die Anfrage mit der Angabe eines Lösungsgrundes schließen kann.

    Grundsätzlich ist es ja so, dass du auch bei einem CloseIncidentRequest ebenso einen Lösungsgrund angeben musst. Genau genommen musst du sogar eine IncidentResolution mit angeben, die dem Formular "Anfrage abschließen" entspricht.

    Wenn deine Frage also ist, wie du eine Anfrage per PlugIn oder JavaScript schließen kannst, ist die Antwort tatsächlich CloseIncidentRequest.

    Viele Grüße,
    Jürgen


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de
    Dienstag, 25. Oktober 2011 14:49
    Moderator
  • Danke für die Antwort,

     

    ich schätze ich habe mich falsch ausgedrükt.

    Folgendes: Ich habe eine eigene Entität aus der man eine Anfrage abschließen können soll.

    Wenn ein bestimmtes Event aus der benutzerdefinierten Entität ausgelöst wird, soll dieses oben abgebildete Fenster aufpoppen.

     

    Das möchte ich erreichen.


    Wie geht das via Plugin oder JavaScript ?


    MfG Jan

    Dienstag, 25. Oktober 2011 14:56
  • Hallo Jan,

    per Plug-In kannst du als einzige Oberfläche nur eine Fehlermeldung anzeigen lassen. Wenn du also nur ein serverseitiges Event hast, kommst du so nicht weiter, da du auf ein solches wiederum nicht per JScript reagieren kannst.

    Wie genau ist denn dein Szenario? Um was für eine benutzerdefinierte Entität handelt es sich denn und was macht der Anwender damit, so dass du dann mit dem Öffnen des Dialoges reagieren möchtest?

    Viele Grüße,
    Jürgen

     

     


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de
    Dienstag, 25. Oktober 2011 15:28
    Moderator
  • Hallo Jan,

    Also mit Plugin wirst du deine Anforderung sicher nicht lösen können - die Logiken von Plugins laufen nur am Server und somit hast du keine Möglichkeit am Client ein Fenster zu öffnen. Wenn du das Fenster einfach per URL aufrufst fehlt dir die Javascript-Logik, die vor und nach dem Aufruf dieses Fensters von einer Anfrage aus, ausgeführt wird.

    Eigentlich müsstest du so vorgehen: Du müsstest dir die Javascript-Logik in der Webseite einer Anfrage zum Abschließen suchen (einige Funktionen mit dementsprechenden Aufrufen). Diese Logik müsstest du dann in deiner benutzerdefinierten Entität genauso nachprogrammieren. Die Frage ist, ob sich dieser Aufwand wirklich lohnt.

    Ich würde die Anforderung eher so realisieren: Wenn dieses, von dir angesprochene, Event in der benutzerdefinierten Entität ausgelöst wird, würde ich ein Textfeld für den Lösungsgrund auf dem Formular als Pflichtfeld einblenden. Somit kann der Datensatz erst wieder gespeichert werden, wenn hier ein Text ausgefüllt ist. Diesen Speichervorgang kannst du dann am Server per Plugin fangen und die verknüpfte Anfrage mit einem CloseIncidentRequest und der eingegebenen Lösungsbeschreibung schließen.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    • Als Antwort vorgeschlagen Andreas Buchinger Montag, 31. Oktober 2011 12:20
    • Als Antwort markiert Jan1992 Montag, 31. Oktober 2011 12:51
    Dienstag, 25. Oktober 2011 15:38
  • Ok Danke euch für die Antwort,

     

    als erstes zu Jürgen Beck, das Szenario:

    Ich erkläre es kurz: Wenn zu einer Anfrage eine Aktivität hinzugefügt wird, poppt bei mir folgendes fenster auf, wo einer unsere Servicemitarbeiter die Anfrage bearbeiten kann.

     

    Wenn er jetzt wie hier dargestellt auf "Anfrage abschließen - Erfolgreich" klickt, soll mein Fenster von oben kommen.

     

    Und zu Andreas buchinger:

    Ja Andreas, Genauso habe ich es auch umgesetzt, (Feld in Form und in Plugin dann Case Schließen) Dass Doofe hierbei ist aber, dass wenn noch Offene Aktivitäten im Case sind, er natürlich nicht geschlossen wird und es kommt ne Excepion, und davon bekommt der user natürlich nichts mit ...

     

    Lg Jan

    Montag, 31. Oktober 2011 10:03
  • Hallo Jan,

    wenn ich Dich richtig verstehe, möchtest Du eigentlich "nur" automatisch (d.h. wenn in Deiner Benutzerdefinierten Entität wenn ein Ereignis eintritt) die zugehörige Anfrage mit dem Originalanfragenabschlusdialog schließen.

    Meine Idee: rufe per javascript im auslösenden Ereignis die Anfrage auf und übergebe dabei einen zusätzlichen Parameter. In der Anfrage im onload füge eine javascript-function hinzu, die prüft ob der zusätzliche Parameter übergeben wurde und rufe dann sofort die Funktion des Schließenbuttons auf. Damit hast Du wieder den original Anfrageschließendialog und auf alle Standardfunktionen der Überprüfung, ob noch offene Aktivitäten existieren.
    Ich hoffe das bringt weiter. Andreas(a)Donaubauer.com www.crmfaq.de
    Montag, 31. Oktober 2011 10:34
  • Hallo Jan,

    Freut mich, dass dir mein Beitrag geholfen hat.

    Den von dir angesprochenen Fehler würde ich wie folgt behandeln: Entweder du fängst die Exception und gibst eine Fehlermeldung auf die Benutzeroberfläche zurück (InvalidPluginExecutionException) oder du schließt vor dem Abschluss der Anfrage autom. alle verkünpften Aktivitäten - so würde der Fehler nicht mehr auftreten.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    • Als Antwort vorgeschlagen Andreas Buchinger Montag, 31. Oktober 2011 12:20
    • Als Antwort markiert Jan1992 Montag, 31. Oktober 2011 12:51
    • Tag als Antwort aufgehoben Jan1992 Montag, 31. Oktober 2011 12:51
    Montag, 31. Oktober 2011 12:20
  • Hallo Andreas,

     

    vielen lieben Dank erstmal an dich, dass du dir zeit für lösungsvorschläge nimmst, und nicht "husch husch" antowortest !


    Ich denke ein autom. schließen lasse ich lieber, weil in unserem Betrieb die Aktivitäten nicht einfach geschlossen werden können.

     

    Und nun nochmal zu Invalid Plugin Execution Ex -> Es funktioniert jetzt alles, bis auf das Fehlermeldung auf der Benutzeroberfläche ausgeben.

     

    Hier bekomme ich auf der Benutzeroberfläche immer den Fehler:  System.ServiceModel.FaultException

    "Need to start a transaction before commit"

     

    Wie kann ich das noch grade biegen ?

     

    lg Jan

    Montag, 31. Oktober 2011 12:48
  • Hallo Jan,

    Das Problem mit dem autom. Schließen von Aktivitäten verstehe ich - immer ein heikles Thema!

    Der von dir genannte Fehler tritt normalerweise auf, wenn du in deinem Plugin eine InvalidPluginExecutionException wirfst und danach noch Aktualisierungen am System vornehmen willst. Das Problem ist, dass durch das Werfen der Exception die Transaktion in der das Plugin läuft beendet wird...

    Ich hoffe das bringt die Lösung, ansonsten poste bitte die entsprechenden Codeausschnitte.

    Liebe Grüße,

    Andreas


    Andreas Buchinger
    Microsoft Dynamics Certified Technology Specialist
    MCPD: SharePoint Developer 2010
    Montag, 31. Oktober 2011 13:43
  • Hallo Jan,

    anstatt den Dialog zu öffnen, würde ich hier einfach zusätzliche Felder in dem bestehenden Dialog einblenden und auf Basis dieser den Case schließen. Das ist viel einfacher zu entwickerln und sogar auch noch supported.

    Du solltest natürlich vorher abfangen, ob noch offene Aktivitäten existieren. Und sofern es eine Exception in einem synchronen Plug-In passieren, werden diese auch dem Benutzer direkt angezeigt, so dass hier nicht verloren geht.

    Viele Grüße,
    Jürgen


    Jürgen Beck

    Dipl. Kfm./Wirtschaftsinformatik
    MVP, MCSD.NET, MCITP DBA, MCDBA, MCSE
    Microsoft Certified Business Management Solutions Professional
    Microsoft Certified CRM Developer
    Microsoft Certified Trainer

    ComBeck IT Services & Business Solutions
    Microsoft Gold Certified Partner
    Microsoft Small Business Specialist

    Developing & Supporting Business Applications from small business to big enterprises covering scores of sectors

    http://www.combeck.de

    Montag, 31. Oktober 2011 14:38
    Moderator
  • So dieser Thread ist nun endlich abgeschlossen:

     

    Die Lösung für das Problem:

     

    In der benutzerdef. Entität habe ich nun die Felder für Beschr. und Titel der Caseresolution angegeben. In meinem Plugin schließe ich dann den Case mit dem CloseIncidentRequest.
    Falls der Anfrage noch offene Aktiväten angehängt sind, so wird die Meldung per InvalidPluginExecutionException dem Benutzer ausgegeben.

     

    Den Case zu Canceln, erfolgt einfach über ein

    SetStateRequest
    

    MfG, Jan

     


    Mittwoch, 2. November 2011 08:30