Optionale Parameter verwenden

Dataverse stellt einen Satz optionaler Parameter oder Anforderungsheaderwerte bereit, die ein Entwickler einer Clientanwendung verwenden kann, um das Verhalten einzelner Anforderungen zu ändern. In diesem Artikel werden die Parameterwerte und Anforderungsheader beschrieben, die Sie verwenden können, um die gewünschten Verhaltensweisen zu erhalten.

Hinweis

Dieser Artikel stellt diese Parameter vor, erklärt sie jedoch nicht ausführlich. Bitte folgen Sie den Links für weitere Informationen, um die Szenarien für die Verwendung dieser Parameter vollständig zu verstehen.

Verwendung

Wie Sie diese optionalen Parameter verwenden, hängt davon ab, ob Sie das SDK für .NET oder die Web-API von Dataverse verwenden.

Normalerweise fügen Sie den Parameter der OrganizationRequest.Parameters-Sammlung der benannten Anforderungsklasse hinzu.

Hinweis

Sie können diese Parameter nicht mit den 7 Verknüpfungsmethoden angeben, die mit IOrganizationService verfügbar gemacht werden. Sie müssen die benannte Anforderungsklasse mit der IOrganizationService.Execute-Methode verwenden.

Eine Ausnahme besteht beim Festlegen von partitionid, dies wird als Attribut der Entitätsinstanz festgelegt. Weitere Informationen: Einen Datenvorgang mit der angegebenen Partition durchführen

Weitere Informationen:

Eine Lösungskomponente einer Lösung zuordnen

Wenn Sie Datenvorgänge für eine Lösungskomponente ausführen, können Sie sie einer Lösung zuordnen, indem Sie den eindeutigen Namen der Lösung mit dem Parameter SolutionUniqueName angeben.

Sie können diesen Parameter mit diesen Nachrichten verwenden:

  • AddPrivilegesRole
  • Create (POST)
  • Delete (DELETE)
  • MakeAvailableToOrganizationTemplate
  • Update (PATCH)

Die folgenden Beispiele erstellen eine Webressourcen-Lösungskomponente und fügen sie der Lösung mit dem eindeutigen Namen ExampleSolution hinzu.

static void CreateWebResourceInSolution(IOrganizationService service)
{
    Entity webResource = new("webresource");

    webResource["displayname"] = "Simple HTML web resource";
    webResource["content"] = "PCFET0NUWVBFIGh0bWw+CjxodG1sPgogIDxib2R5PgogICAgPGgxPkhlbGxvIFdvcmxkPC9oMT4KICA8L2JvZHk+CjwvaHRtbD4=";
    webResource["webresourcetype"] = new OptionSetValue(1);
    webResource["name"] = "sample_SimpleHTMLWebResource.htm";
    webResource["description"] = "An example HTML web resource";

    CreateRequest request = new();
    request.Target = webResource;
    request["SolutionUniqueName"] = "ExampleSolution";

    service.Execute(request);
}

Weitere Informationen:

Weitere Informationen:

Duplikaterkennung unterdrücken

Wenn Sie möchten, dass Dataverse einen Fehler auslöst, wenn ein neuer Datensatz, den Sie erstellen, oder ein Datensatz, den Sie aktualisieren, mit den Duplikaterkennungsregeln für einen anderen Datensatz übereinstimmt, müssen Sie die Zeile mithilfe des Parameters SuppressDuplicateDetection und einem Wert von „false“ erstellen oder aktualisieren.

Die folgenden Beispiele geben einen Fehler zurück, wenn Folgendes zutrifft:

  • Die Duplikaterkennung wird für die Umgebung aktiviert, wenn eine Zeile erstellt oder aktualisiert wird.
  • Für die account-Tabelle ist die Duplikaterkennung aktiviert
  • Eine Regel zur Duplikaterkennung wird veröffentlicht, die überprüft, ob der Konto-name-Wert exakt mit einer vorhandenen Zeile übereinstimmt
  • Es gibt einen vorhandenes Konto mit dem Namen Sample Account.
static void DemonstrateSuppressDuplicateDetection(IOrganizationService service)
{
    Entity account = new("account");
    account["name"] = "Sample Account";

    CreateRequest request = new()
    {
        Target = account
    };
    request.Parameters.Add("SuppressDuplicateDetection", false);

    try
    {
        service.Execute(request);
    }
    catch (FaultException<OrganizationServiceFault> ex)
    {
        throw ex.Detail.ErrorCode switch
        {
            -2147220685 => new InvalidOperationException(ex.Detail.Message),
            _ => ex,
        };
    }
}

Weitere Informationen:

Eine gemeinsam genutzte Variable zum Plug-In-Ausführungskontext hinzufügen

Verwenden Sie den tag-Parameter, um einen freigegebenen Variablenwert einzuschließen, auf den in einem Plug-In zugegriffen werden kann. Diese zusätzlichen Informationen ermöglichen es einem Plug-In, Logik anzuwenden, die von der Clientanwendung abhängt.

Hinweis

Dieser Parameter ist dafür gedacht, dass Clientanwendungen jeden gewünschten Wert festlegen können. Keine Microsoft-Funktion sollte erfordern, dass Sie einen bestimmten Wert in Ihrem Clientanwendungscode festlegen, um unterschiedliche Verhaltensweisen zu ermöglichen.

Um auf den Wert in einem Plug-In zuzugreifen, verwenden Sie die IExecutionContext.SharedVariables-Auflistung

if (context.SharedVariables.ContainsKey("tag")){
    string tagValue = context.SharedVariables["tag"];
}

Die folgenden Beispiele übergeben diesen Wert: A string value beim Erstellen eines Kontodatensatzes.

static void DemonstrateTag(IOrganizationService service)
{
    Entity account = new("account");
    account["name"] = "Sample Account";

    CreateRequest request = new()
    {
        Target = account
    };
    request.Parameters.Add("tag", "A string value");
    service.Execute(request);
}

Weitere Informationen finden Sie unter Gemeinsam genutzte Variablen

Einen Datenvorgang mit der angegebenen Partition durchführen

Wenn Sie elastische Tabellen mit einer Partitioning-Strategie verwenden, können Sie mit dem Parameter partitionid eine eindeutige Zeichenfolge übergeben, um auf nicht-relationale Tabellendaten innerhalb einer Speicher-Partition zuzugreifen.

Die folgenden Beispiele verwenden den partitionid-Wert von deviceId, wenn ein contoso_sensordata-Datensatz abgerufen wird.

private static Entity RetrieveRecord(
    IOrganizationService service,
    Guid contosoSensorDataId,
    string deviceId,
    string sessionToken)
{
    EntityReference entityReference = new("contoso_sensordata", contosoSensorDataId);

    RetrieveRequest request = new()
    {
        ColumnSet = new ColumnSet("contoso_value"),
        Target = entityReference,
        ["partitionId"] = deviceId, //To identify the record
        ["SessionToken"] = sessionToken //Pass the session token for strong consistency
    };
    var response = (RetrieveResponse)service.Execute(request);
    return response.Entity;

}

Alternativ können Sie den Wert partitionid mit dem alternativen Schlüsselstil verwenden.

Benutzerdefinierte synchrone Logik umgehen

Synchrone Logik muss während der Transaktion angewendet werden und kann die Leistung einzelner Vorgänge erheblich beeinträchtigen. Bei der Durchführung von Massenvorgängen kann die zusätzliche Zeit für diese einzelnen Vorgänge die erforderliche Zeit erhöhen. Verwenden Sie den BypassCustomPluginExecution-Parameter, wenn Sie die Leistung beim Ausführen von Massendatenvorgängen verbessern möchten.

Wichtig

Der aufrufende Benutzer muss die Berechtigung prvBypassCustomPlugins haben.

Es gibt zwei Möglichkeiten, diesen Parameter mit dem SDK für .NET zu verwenden.

Legen Sie den Wert als optionalen Parameter fest

Das folgende Beispiel bestimmt den optionalen BypassCustomPluginExecution-Parameter beim Erstellen eines neuen Kontodatensatzes mithilfe der CreateRequest-Klasse.

static void DemonstrateBypassCustomPluginExecution(IOrganizationService service)
{
    Entity account = new("account");
    account["name"] = "Sample Account";

    CreateRequest request = new()
    {
        Target = account
    };
    request.Parameters.Add("BypassCustomPluginExecution", true);
    service.Execute(request);
}

Legen Sie die CrmServiceClient.BypassPluginExecution-Eigenschaft fest

Das folgende Beispiel setzt die CrmServiceClient.BypassPluginExecution-Eigenschaft beim Erstellen eines neuen Kontodatensatzes:

var service = new CrmServiceClient(connectionString);  

service.BypassPluginExecution = true;

var account = new Entity("account");
account["name"] = "Sample Account";

service.Create(account);

Da diese Einstellung auf den Dienst angewendet wird, bleibt sie für alle Anforderungen gesetzt, die über den Dienst gesendet werden, bis sie auf false gesetzt wird.

Hinweis

Diese Eigenschaft ist nicht im Dataverse.Client.ServiceClient, aber in den Dataverse.Client.Extensions.CRUDExtentions-Methoden verfügbar.

Weitere Informationen: Synchrone Logik umgehen

Power Automate-Flows umgehen

Wenn Massendatenvorgänge auftreten, die Flows auslösen, erstellt Dataverse Systemaufträge zum Ausführen der Flows. Wenn die Anzahl der Systemaufträge sehr groß ist, kann dies zu Leistungsproblemen für das System führen. In diesem Fall können Sie das Auslösen der Flows umgehen, indem Sie den optionalen Parameter SuppressCallbackRegistrationExpanderJob verwenden.

Die CallbackRegistration-Tabelle verwaltet Flow-Trigger, und es gibt einen internen Vorgang namens expander, der die registrierten Flow-Trigger aufruft.

Hinweis

Wenn diese Option verwendet wird, erhalten die Flow-Besitzer keine Benachrichtigung, dass ihre Flow-Logik umgangen wurde.

static void DemonstrateSuppressCallbackRegistrationExpanderJob(IOrganizationService service)
{
    Entity account = new("account");
    account["name"] = "Sample Account";

    CreateRequest request = new()
    {
        Target = account
    };
    request.Parameters.Add("SuppressCallbackRegistrationExpanderJob", true);
    service.Execute(request);
}

Weitere Informationen: Power Automate-Flows umgehen

Siehe auch

Nachrichten mit dem SDK für .NET verwenden
Web-API: HTTP-Anforderungen erstellen und Fehler beheben: Weitere Header
Benutzerdefinierte Geschäftslogik umgehen

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).