Invalid parameter ‘regardingobjectidtype=account’ in Request.QueryString

Im CRM ist es möglich via URL ein Formular zum Erfassen eines neuen Datensatzes zu öffnen. Dabei können  meisten Felder eines Formulars direkt mit URL-Parameter gesetzt werden. Bsp. zum Setzen des Feldes “Name”:

/main.aspx?etn=account&extraqs=name%3DNew%20Account&pagetype=entityrecord

https://msdn.microsoft.com/en-us/library/gg334375.aspx

Es gibt jedoch Ausnahmen wie bsp. das Feld “RegardingObjectId” auf einer Aktivität-Entität. Dieses Feld kann (wahrscheinlich da es sich um ein ActivityParty handelt) nicht via URL gesetzt werden. Versucht man es trotzdem findet man im CRM-Server-Trace folgenden Fehler:

System.InvalidOperationException: CRM Parameter Filter - Invalid parameter 'regardingobjectidtype=account' in Request.QueryString

Ist das Setzen des Feldes jedoch trotzdem gewünscht, kann mit Form-Parametern gearbeitet werden. Hierzu sind drei Parameter notwendig:

image

Diese drei Parameter können in der URL dem Formular übergeben werden:

main.aspx?etn=phonecall&newWindow=true&pagetype=entityrecord&extraqs=is_regardingobjectid%3D%7B67D26E69-082B-4F30-B70D-EF202530CD41%7D%26is_regardingobjectidtype%3Daccount%26is_regardingobjectidname%3DCompanyname

Auf dem Formular kann nun mit Hilfe von JavaScript das Feld “RegardingObjectId” gesetzt werden:

function addToPartyListFromFormParameters(propertyName, idBaseName, replaceExisting) {
    var queryParams = Xrm.Page.context.getQueryStringParameters();
    var idParam = queryParams[idBaseName];
    var nameParam = queryParams[idBaseName + "name"];
    var typeParam = queryParams[idBaseName + "type"];

    if (idParam && nameParam && typeParam) {
        addToPartyList(propertyName,
            {
                Id: idParam,
                Name: nameParam,
                LogicalName: typeParam,
            }, replaceExisting
        );
        return true;
    }
    return false;
}

Ein möglicher Inhalt wie die Funktion “addToPartyList” aussehen könnte, kann hier gefunden werden:

https://rajeevpentyala.wordpress.com/2012/04/02/get-and-set-partylist-fields-using-jscript/


Businessrules & JavaScript: Ausführungsreihenfolge

Businessrules (Geschäftsregeln) und JavaScript können gut miteinander, solange keine Abhängigkeiten bestehen. Wichtig ist dann die Ausführungsreihenfolge zu kennen:

  1. Custom JavaScripts
  2. Business Rules

Testen kann man dies relativ einfach: Dazu wird eine Businessrule erstellt, welche beim Ändern der Daten des Feldes “Firmenname” die Telefonnummer befüllt:

image

Auf demselben Feld “Firmenname” wird die folgende JavaScript-Funktion registriert:

function setTelephone()
{
      Xrm.Page.getAttribute(“telephone1″).setValue(“+41 31 741 22 22″);
}

Ergebnis: Der Wert von “Telefon” lautet “+41 31 741 11 11”.

Will man also beispielsweise mit Hilfe von Business Rules Feldern Werte zuweisen und dann mit JavaScript den Datensatz speichern, werden die Änderungen nicht gespeichert. In diesem Fall ist es ratsam alles mit JavaScript zu realisieren. Dasselbe gilt, wenn man mit JavaScript auf Daten zugreifen will, welche mit Businessrules gesetzt werden.