Share via


Verhalten und Format der Spalte für Datum und Uhrzeit mithilfe von Code konfigurieren

Wenn Sie Benutzer und Büros auf der ganzen Welt haben, ist es wichtig, Datums- und Uhrzeitwerte in mehreren Zeitzonen ordnungsgemäß darzustellen. Der DateTimeAttributeMetadata (DateTimeAttributeMetadata-Entitätstyp oder die DateTimeAttributeMetadata-Klasse ) wird verwendet, um Spalten vom Typ DateTime in Microsoft Dataverse zu definieren und zu verwalten. Verwenden Sie die Eigenschaft DateTimeBehavior (für SDK für .NET siehe DateTimeBehavior-Eigenschaft), um zu definieren, ob Datums- und Zeitwerte mit oder ohne Zeitzoneninformation gespeichert werden sollen, und verwenden Sie die DateTimeAttributeMetadata.Format-Eigenschaft, um das Anzeigeformat dieser Spalten festzulegen.

Sie können auch den Anpassungsbereich in Dataverse verwenden, um das Verhalten und das Format der Datums- und Zeitspalten zu definieren. Weitere Informationen: Verhalten und Format der Datums- und Uhrzeitspalten.

Hinweis

Alle Datums- und Zeitspalten in Dataverse unterstützen Werte ab dem 1.1.1753 12:00 Uhr.

Wenn das Feld „Nur Datum“ oder „Datum/Uhrzeit“ in einer Lösung enthalten ist, können Sie das Verhalten eines vorhandenen verwalteten Felds nur dann ändern, wenn Sie der Herausgeber sind. Um eine Änderung an diesen Feldern vorzunehmen, muss ein Upgrade an der Lösung vorgenommen werden, mit dem die Spalte „Nur Datum“ oder „Datum/Uhrzeit“ hinzugefügt wird. Weitere Informationen: Upgrade oder Update einer Lösung.

Das Verhalten einer Datums- und Zeitspalte festlegen

Sie können DateTimeBehavior (DateTimeBehavior komplexer Typ oder DateTimeBehavior-Klasse) verwenden, um einen Wert für DateTimeAttributeMetadata-Entitätstyp.DateTimeBehavior anzugeben anzugeben. Das DateTimeBehavior enthält folgende Mitglieder; jedes Mitglied gibt eine Zeichenfolge mit demselben Wert wie dem Mitgliedsnamen zurück:

Mitgliedsname und Wert Beschreibung
UserLocal - Speichert den Datums- und Uhrzeitwert als UTC-Wert im System.
- Der Abrufvorgang gibt den UTC-Wert zurück.
- Der Aktualisierungsvorgang konvertiert den UTC-Wert in den Zeitzonenwert des aktuellen Benutzers und speichert dann den aktualisierten Wert im Istzustand oder als Entsprechung des UTC-Werts. Dies ist von dem Wertetyp abhängig (DateTimeKind), der für den Aktualisierungsvorgang angegeben ist. Wenn der angegebene Wert dem UTC-Typ angehört, wird er im Istzustand gespeichert. Andernfalls wird der entsprechende UTC-Wert gespeichert.
- Durch das Abrufen des formatierten Werts erfolgt eine Konvertierung von UTC in die aktuelle Zeitzone des Benutzers auf Grundlage der Zeitzonen- und Gebietsschemaeinstellung des Benutzers.
- Für das Web-API wird die Spalte als DateTimeOffset dargestellt.
- Dieses Verhalten wird für Systemspalten wie CreatedOn und ModifiedOn verwendet und kann nicht geändert werden. Sie sollten dieses Verhalten für angepasste Spalten verwenden, in denen Sie Datums- und Zeitwerte mit den Zeitzoneninformationen speichern wollen.
DateOnly - Speichert den tatsächlichen Datumswert ohne Zeitwert.
- Beim Abrufen des formatierten Werts wird der Datumswert angezeigt.
- Für die Web-API wird die Spalte als Datum dargestellt.
- Dieses Verhalten sollte für angepasste Spalten verwendet werden, die Geburtstage und Jahrestage speichern, bei denen die Zeitinformation nicht erforderlich ist.
TimeZoneIndependent - Speichert die tatsächlichen Datums- und Uhrzeitwerte im System unabhängig von der Benutzerzeitzone.
- Für die Abruf- und Aktualisierungsvorgänge wird keine Zeitzonenkonvertierung durchgeführt. Es werden tatsächliche Datums- und Uhrzeitwerte im System zurückgegeben und aktualisiert, unabhängig von der Benutzerzeitzone.
- Beim Abrufen des formatierten Werts wird der Datums- und Uhrzeitwert (ohne Zeitzonenkonvertierung) gemäß dem Format angezeigt, das von der Zeitzonen- und Gebietsschemaeinstellung des aktuellen Benutzers angegeben wird.
- Für das Web-API wird die Spalte als DateTimeOffset dargestellt.
- Dieses Verhalten sollte für Spalten verwendet werden, die Informationen wie die Ein- und Auscheckzeit für Hotels speichern.

Das folgende Codebeispiel zeigt, wie Sie das Verhalten UserLocal für eine neue Datum-Zeit-Spalte festlegen:

/// <summary>
/// Create a new DateTime column for the Account table with UserLocal behavior
/// </summary>
/// <param name="service">Authenticated IOrganizationService instance</param>
static void CreateUserLocalDateTimeColumn(IOrganizationService service) {

   int _languageCode = 1033; //English

   DateTimeAttributeMetadata dtAttribute = new()
   {
       SchemaName = "new_SampleDateTimeAttribute",
       DisplayName = new Label("Sample Date Time Attribute", _languageCode),
       RequiredLevel = new AttributeRequiredLevelManagedProperty(AttributeRequiredLevel.None),
       Description = new Label("Created by SDK Sample", _languageCode),
       DateTimeBehavior = DateTimeBehavior.UserLocal,
       Format = Microsoft.Xrm.Sdk.Metadata.DateTimeFormat.DateAndTime,
       ImeMode = ImeMode.Disabled
   };

   CreateAttributeRequest request = new()
   {
       EntityName = Account.EntityLogicalName,
       Attribute = dtAttribute
   };

   service.Execute(request);
}

Im Beispielcode können Sie den Wert für die Eigenschaft DateTimeBehavior festlegen, indem Sie den direkten Zeichenfolgenwert angeben: DateTimeBehavior = "UserLocal"

Wenn Sie das Verhalten beim Erstellen einer Datums- und Zeitspalte nicht angeben, wird die Spalte standardmäßig mit dem Verhalten UserLocal erstellt.

Wichtig

  • Sobald Sie eine Datums- und Zeitspalte mit dem auf DateOnly oder TimeZoneIndependent festgelegten Verhalten erstellt haben, können Sie das Verhalten der Spalte nicht mehr ändern. Weitere Informationen: Verhalten einer DatumZeit-Spalte ändern
  • Die Datums- und Zeitspalten mit dem Verhalten DateOnly oder TimeZoneIndependent werden so behandelt, als hätten sie das Verhalten UserLocal, wenn sie in einer früheren Version des Clients Dynamics 365 for Outlook im Offline-Modus bearbeitet werden. Dies liegt daran, dass der Client die neuen Verhalten nicht versteht und sie nicht anders behandelt als UserLocal. Beim Upgrade werden keine Datums- und Zeitspalten in die neuen Verhaltensweisen umgewandelt, sodass die beste Vorgehensweise hier wäre, alle Dataverse-Clients auf die neueste Version zu aktualisieren, bevor ein Anpasser eine der neuen Verhaltensweisen adaptiert. Wenn Sie online sind, funktioniert die Bearbeitung von Daten für Spalten mit den neuen Verhaltensweisen problemlos.

Festlegen des Formats der Spalte für Datum und Uhrzeit

Verwenden Sie die Eigenschaft Format, um das Format der Datums-/Zeitanzeige der Spalte festzulegen, unabhängig davon, wie sie im System gespeichert ist. Sie können die Enumeration DateTimeFormat (DateTimeFormat-Enumerationstyp oder DateTimeFormat Enum) verwenden, um das Anzeigeformat anzugeben: DateAndTime oder DateOnly.

Wenn die Eigenschaft DateTimeAttributeMetadata.DateTimeBehavior auf DateOnly gesetzt ist, können Sie den Wert der Eigenschaft DateTimeAttributeMetadata.Format nicht auf DateAndTime setzten oder ändern.

Datums- und Uhrzeitabfrageoperatoren für DateOnly-Verhalten werden nicht unterstützt

Zeitbezogene Abfrageoperatoren werden für das DateOnly-Verhalten nicht unterstützt. Im Gegensatz zu den zeitspezifischen Abfrageoperatoren, die hier aufgeführt werden, alle anderen Abfrageoperatoren unterstützt.

  • Älter als X Minuten
  • Älter als x Stunden
  • Letzte X Stunden
  • Nächste X Stunden

Weitere Informationen: Datenoperatoren für Datum und Uhrzeit

Verwenden von OData-APIs zum Senden von lokalen Datums- und Uhrzeitwerten des Benutzers

Wenn ein Benutzer in Microsoft Power Platform ein Datum und eine Uhrzeit in der benutzerspezifischen Zeitzone über die Benutzeroberfläche eingibt, setzt eine automatische Berechnung die Daten auf das richtige Datum und die richtige Uhrzeit. Es führt eine Analyse durch, um jedes übermittelte Datum basierend auf den Spalten- und Benutzeroberflächeneinstellungen in den entsprechenden UTC-Wert zu ändern. Beim Senden eines Datums- und Uhrzeitwerts mithilfe des Web-API-Vorgangs findet die Berechnung nicht statt, was zu unerklärlichen Datenanzeigen führt. Wenn Sie sich beispielsweise in der pazifischen Zeitzone befinden und 4/4/2021 12:00 eingeben, passiert Folgendes:

  • Original: Absender von 4/4/2021 12:00 befindet sich in der pazifischen Zeitzone.
  • Über die Benutzeroberfläche gesendet und als lokaler Benutzer abgerufen: 4/4/2021 12:00
  • Über die API gesendet und als lokaler Benutzer abgerufen: 4/4/2021 04:00

Über die Benutzeroberfläche senden

Die Benutzeroberfläche ist auf „Ortszeit Benutzer“ und die Spalte auf „Ortszeit Benutzer“ eingestellt.

  • Ursprünglicher Wert: 4/4/2021 12:00 in der pazifischen Zeitzone.
  • Wert in UTC berechnet und in Dataverse gespeichert: 4/4/2021 12:00 + 8:00 = 4/4/2021T20:00:00Z. Dies liegt daran, dass PST -8:00 von UTC ist, also wird +8 zum gespeicherten Wert addiert.
  • Wert bei Anzeige in der Benutzeroberfläche von einem Benutzer in der pazifischen Zeitzone: 4/4/2021 12:00. Die Benutzeroberfläche wendet die Berechnung der UTC-Abweichung von -8:00 auf 04.04.2021T20:00:00Z für den richtigen Wert an.

Über die API senden

Die Benutzeroberfläche ist auf „Ortszeit Benutzer“ und die Spalte auf „Ortszeit Benutzer“ eingestellt.

  • Ursprünglicher Wert: 04/04/2021T12:00:00 oder 04/04/2021T12:00:00Z – keine Abweichung oder UTC-Indikator vorhanden. Der Absender befindet sich in der pazifischen Zeitzone.
  • Wert in UTC berechnet und in Dataverse gespeichert: Bei der Übermittlung von OData-APIs wird keine Benutzeroberflächenberechnung durchgeführt, daher wird der Wert als 4/4/2021T12:00:00Z gespeichert.
  • Wert bei Anzeige in der Benutzeroberfläche von einem Benutzer in der pazifischen Zeitzone: 4/4/2021 4:00. Die Benutzeroberfläche wendet die UTC-Abweichungsberechnung von -8:00 auf den Wert in Dataverse an.

Um dieses Problem bei der Verwendung von API-Aufrufen zu vermeiden, um Daten in lokale Spalten der Ortszeit Benutzer einzugeben, müssen Sie die Abweichung des Benutzers berechnen, der die Daten übermittelt, und die Abweichung anwenden.

Bei dem obigen Beispiel: 4/4/2021 12:00 müsste über die API als 04.04.2021T12:00:00-08:00 übermittelt werden. Die ursprüngliche Uhrzeit und das ursprüngliche Datum sowie die Abweichungsberechnung der Zeitzone des aktuellen Benutzers. Alternativ kann der Absender die Berechnung vor dem Einreichen durchführen und 4/4/2021T20:00:00Z einreichen.

Wenn Sie sich dafür entscheiden, die Offset-Berechnung einzubeziehen, können Sie Z, einen UTC-Indikator, nicht verwenden, da Dataverse ihn nicht akzeptiert.

Ändern des Verhaltens einer Datums- und Zeitspalte

Sie können eine Datums- und Zeitspalte aktualisieren, um ihr Verhalten zu ändern, wenn Sie die Rolle „System Anpasser“ in Ihrer Dataverse-Instanz haben und die verwaltete Eigenschaft DateTimeAttributeMetadata.CanChangeDateTimeBehavior für die Datums- und Zeitspalte auf True festgelegt ist.

Achtung

Bevor Sie das Verhalten einer Datums- und Zeitspalte ändern, sollten Sie alle Abhängigkeiten der Spalte überprüfen, wie z. B. Geschäftsregeln, Workflows und berechnete oder Rollup-Spalten, um sicherzustellen, dass es keine Probleme als Folge der Änderung des Verhaltens gibt. System-Anpasser können das Ändern des Verhaltens bestehender Datums- und Zeitspalten mit der verwalteten Eigenschaft DateTimeAttributeMetadata.CanChangeDateTimeBehavior einschränken.

Zumindest sollten Sie nach dem Ändern des Verhaltens einer Datums- und Zeitspalte jeden Datensatz für Geschäftsregeln, Workflows, berechnete Spalten und Rollup-Spalten öffnen, der von der geänderten Datums- und Zeitspalte abhängig ist, die Informationen überprüfen und den Datensatz speichern, um sicherzustellen, dass das neueste Spaltenverhalten und der neueste Wert verwendet werden.

Öffnen Sie nach der Änderung des Daten- und Zeitverhaltens einer berechneten oder Rollup-Spalte den Editor für die Definition der berechneten oder Rollup-Spalte und speichern Sie die Spaltendefinition, um sicherzustellen, dass die Spalte auch nach der Verhaltensänderung gültig ist. System-Anpasser können den Spaltendefinitions-Editor für berechnete oder Rollup-Spalten öffnen, indem sie auf Bearbeiten neben Feldtyp im Anpassungsbereich in Dataverse klicken. Mehr Informationen: Definieren Sie berechnete Spalten, um Berechnungen zu automatisieren und Definieren Sie Rollup-Spalten, die Werte aggregieren

  • Das Verhalten der Spalten CreatedOn und ModifiedOn bei den standardmäßigen und angepassten Tabellen ist standardmäßig auf UserLocal festgelegt, und die verwaltete Eigenschaft DateTimeAttributeMetadata.CanChangeDateTimeBehavior ist auf False festgelegt, was bedeutet, dass Sie das Verhalten dieser Spalten nicht ändern können. Benutzer können zwar den Wert der verwalteten Eigenschaft DateTimeAttributeMetadata.CanChangeDateTimeBehavior dieser Spalten für angepasste Tabellen ändern, aber sie können das Verhalten der Spalten trotzdem nicht ändern.

  • Für neue angepasste Datums- und Zeitspalten wird die verwaltete Eigenschaft DateTimeAttributeMetadata.CanChangeDateTimeBehavior auf True festgelegt. Dies bedeutet, dass Sie das Verhalten einer angepassten Datums- und Zeitspalte von UserLocal auf entweder DateOnly oder TimeZoneIndependent ändern können; andere Verhaltensübergänge sind nicht zugelassen.

    Für angepasste Datums- und Zeitspalten, die Teil einer Dataverse-Organisation sind, wird die verwaltete Eigenschaft DateTimeAttributeMetadata.CanChangeDateTimeBehavior auf True festgelegt, es sei denn, die Spalte oder die übergeordnete Tabelle ist nicht anpassbar.

    Hinweis

    Wenn Sie die Eigenschaft DateTimeAttributeMetadata.DateTimeBehavior einer Spalte von UserLocal auf DateOnly aktualisieren, stellen Sie sicher, dass Sie auch die EigenschaftDateTimeAttributeMetadata.Format von DateAndTime auf DateOnly ändern. Andernfalls tritt eine Ausnahme auf.

  • Die folgenden standardmäßigen Datums- und Zeitspalten in Dataverse sind standardmäßig auf DateOnly festgelegt und die verwaltete Eigenschaft DateTimeAttributeMetadata.CanChangeDateTimeBehavior ist auf False dieser Spalten festgelegt, was bedeutet, dass Sie das Verhalten dieser Spalten nicht ändern können:

    Datums- und Zeitspalte Übergeordnete Tabelle
    anniversary Contact
    birthdate Contact
    duedate Rechnung
    estimatedclosedate Lead
    actualclosedate Chance
    estimatedclosedate Chance
    finaldecisiondate Chance
    validfromdate Produkt
    validtodate Produkt
    closedon Angebot
    expireson Angebot

    Das Verhalten dieser Spalten ist auf UserLocal und die verwaltete Eigenschaft DateTimeAttributeMetadata.CanChangeDateTimeBehavior auf True festgelegt, und Sie können das Verhalten dieser Spalten nur auf DateOnly ändern. Keine anderen Verhaltensübergänge sind erlaubt.

Nachdem Sie das Verhalten von einer Spalte aktualisiert haben, müssen Sie die Anpassungen veröffentlichen, damit die Änderung wirksam wird. Das Aktualisieren des Verhaltens einer Datums- und Zeitspalte stellt sicher, dass alle Werte, die nach der Änderung des Spaltenverhaltens eingegeben/aktualisiert wurden, im System gemäß dem neuen Verhalten gespeichert werden. Dies wirkt sich nicht auf die Werte aus, die bereits in der Datenbank gespeichert sind, und sie werden weiterhin als UTC-Werte gespeichert. Wenn Sie jedoch die vorhandenen Werte mit SDK abrufen oder in der Benutzeroberfläche anzeigen, werden die vorhandenen Werte gemäß dem neuen Verhalten der Spalte angezeigt. Wenn Sie z. B. das Verhalten einer angepassten Spalte für ein Konto von UserLocal auf DateOnly geändert haben und einen vorhandenen Datensatz eines Kontos mit SDK abrufen, werden Datum und Uhrzeit als <Date> angezeigt, gefolgt von der Uhrzeit als 12 AM (00:00:00). Entsprechend wird bei der Verhaltensänderung von UserLocal in TimeZoneIndependent der tatsächliche Wert in der Datenbank im Istzustand ohne Zeitzonenkonvertierungen angezeigt.

Der folgende Beispielcode demonstriert, wie Sie das Verhalten einer Datums- und Zeitspalte aktualisieren können:

/// <summary>
/// Update the behavior of a DateTime column
/// </summary>
/// <param name="service">Authenticated IOrganizationService instance</param>
static void UpdateBehaviorOfDateTimeColumn(IOrganizationService service) {

    // Retrieve the attribute to update its behavior and format
    RetrieveAttributeRequest retrieveColumnRequest = new()
    {
        EntityLogicalName = Account.EntityLogicalName,
        LogicalName = "new_sampledatetimeattribute",
        RetrieveAsIfPublished = false
    };
    // Execute the request
    RetrieveAttributeResponse attributeResponse =
                    (RetrieveAttributeResponse)service.Execute(retrieveColumnRequest);

    // Modify the values of the retrieved attribute
    DateTimeAttributeMetadata retrievedAttributeMetadata =
                    (DateTimeAttributeMetadata)attributeResponse.AttributeMetadata;

    retrievedAttributeMetadata.DateTimeBehavior = DateTimeBehavior.DateOnly;
    retrievedAttributeMetadata.Format = Microsoft.Xrm.Sdk.Metadata.DateTimeFormat.DateOnly;

    // Update the attribute with the modified value
    UpdateAttributeRequest updateRequest = new()
    {
        Attribute = retrievedAttributeMetadata,
        EntityName = Account.EntityLogicalName,
        MergeLabels = false
    };
    service.Execute(updateRequest);


    // Publish customizations to the account 
    PublishXmlRequest pxReq = new()
    {
        ParameterXml = "<importexportxml><entities><entity>account</entity></entities></importexportxml>"
    };
    service.Execute(pxReq);
}
 

Konvertieren des Verhaltens von Datums- und Uhrzeitwerten in der Datenbank

Wenn Sie eine Datums- und Zeitspalte aktualisieren, um ihr Verhalten von UserLocal auf DateOnly oder TimeZoneIndependent zu ändern, werden die vorhandenen Spaltenwerte in der Datenbank nicht automatisch umgewandelt. Die Verhaltensänderung wirkt sich nur auf die Werte aus, die in der Spalte nach der Änderung des Verhaltens eingegeben oder aktualisiert werden. Die vorhandenen Datums- und Uhrzeitwerte im System liegen weiterhin als UTC vor und werden von Dataverse gemäß dem neuen Verhalten angezeigt, wenn sie durch das SDK oder in der Benutzeroberfläche abgerufen werden (siehe vorheriger Abschnitt). Für Spalten, deren Verhalten von UserLocal auf DateOnly geändert wurde, können Sie die vorhandenen UTC-Werte in der Datenbank in den entsprechenden DateOnly-Wert umwandeln, um Datenanomalien zu vermeiden, indem Sie die Nachricht ConvertDateAndTimeBehavior verwenden.

Die Nachricht ermöglicht Ihnen die Angabe einer Konvertierungsregel (Wenn Sie mit dem SDK für .NET arbeiten, sehen Sie ConvertDateAndTimeBehaviorRequest.ConversionRule-Eigenschaft), um die Zeitzone auszuwählen, die für die Konvertierung der Werte aus UTC in DateOnly verwendet wird. Sie können einen der folgenden Konvertierungsregeln angeben:

  • SpecificTimeZone: Konvertiert einen UTC-Wert gemäß dem angegebenen Dataverse-Zeitzonencode in einen DateOnly-Wert. In diesem Fall müssen Sie auch einen Wert für die ConvertDateAndTimeBehaviorRequest.TimeZoneCode-Eigenschaft angeben.
  • CreatedByTimeZone: Konvertiert einen UTC-Wert in einen DateOnly-Wert, der dem Benutzer, der den Datensatz erstellt hat, in der Benutzeroberfläche angezeigt wird.
  • OwnerTimeZone: Konvertiert einen UTC-Wert in einen DateOnly-Wert, der dem Benutzer, der den Datensatz besitzt, in der Benutzeroberfläche angezeigt wird.
  • LastUpdatedByTimeZone: Konvertiert einen UTC-Wert in einen DateOnly-Wert, der dem Benutzer, der den Datensatz zuletzt aktualisiert hat, in der Benutzeroberfläche angezeigt wird.

Sie können eines der vier Mitglieder der DateTimeBehaviorConversionRule-Klasse, verwenden, um einen gültigen Wert für die ConversionRule-Eigenschaft anzugeben.

Hinweis

Sie müssen in Ihrer Dataverse-Instanz über die Systemadministratorrolle verfügen, um die ConvertDateAndTimeBehaviorRequest-Klasse auszuführen.

Wenn Sie ConvertDateAndTimeBehavior ausführen (Wenn Sie mit dem SDK für .NET arbeiten, lesen Sie ConvertDateAndTimeBehaviorRequest-Nachricht), wird ein Systemauftrag (asynchroner Vorgang) erstellt, um die Konvertierungsanforderung auszuführen. Die Spalte ConvertDateAndTimeBehaviorResponse.JobId in der Antwort auf die Nachricht zeigt die ID des Systemjobs an, der als Ergebnis der Konvertierungsanforderung erstellt wird. Nachdem der Systemauftrag abgeschlossen wurde, müssen Sie die Auftragsdetails (AsyncOperation.Message) überprüfen, um Konvertierungsdetails oder Fehler anzuzeigen.

Hinweis

Wir empfehlen, die Konvertierung mehrerer Spalten in einem einzigen Konvertierungsauftrag zu gruppieren und jeweils nur einen einzigen Konvertierungsauftrag auszuführen, um sicherzustellen, dass es keine Konflikte bei der Konvertierung gibt und um eine optimale Systemleistung zu erzielen.

Folgende wichtige Punkte sollten bei der Verwendung der ConvertDateAndTimeBehavior-Nachricht berücksichtigt werden:

  • Sie sollten während der Ausführung der Nachricht keine größeren Änderungen an den Lösungen in Dataverse vornehmen, wie z. B. das Importieren einer Lösung oder das Löschen von einer Spalte oder übergeordneten Tabelle. Derartige Änderungen führen möglicherweise zu unerwartetem Verhalten; Datenverluste treten jedoch nicht auf.
  • Die Updates, die im System als Ergebnis der Ausführung der Nachricht vorgenommen wurden, führen keine Workflows und Plug-Ins aus.
  • Aktualisierungen, die im System infolge der Ausführung der Nachricht vorgenommen werden, ändern nicht den Wert „zuletzt geändert am“ für die Spalten, werden aber überprüft, um die Administratoren bei der Ermittlung des Zeitpunkts der Konvertierung und die ursprünglichen/geänderten Werte für die Spalte zu unterstützen.

Im folgenden Beispielcode wird gezeigt, wie die Meldung verwendet wird:

/// <summary>
/// Demonstrates use of the ConvertDateAndTimeBehavior message
/// </summary>
/// <param name="service">Authenticated IOrganizationService instance</param>
static void ConvertDateAndTimeBehavior(IOrganizationService service)
{

    ConvertDateAndTimeBehaviorRequest request = new()
    {
        Attributes = new EntityAttributeCollection()
        {
            new KeyValuePair<string, StringCollection>("account", new StringCollection()
            { "new_sampledatetimeattribute" })
        },
        ConversionRule = DateTimeBehaviorConversionRule.SpecificTimeZone.Value,
        TimeZoneCode = 190, // Time zone code for India Standard Time (IST) in Dataverse
        AutoConvert = false // Conversion must be done using ConversionRule
    };

    // Execute the request
    var response = (ConvertDateAndTimeBehaviorResponse)service.Execute(request);

    Console.WriteLine($"Asynchronous Job ID: {response.JobId}");
}

Der Web-Client handhabt die Zeitzonenkonvertierung anders als Einheitliche Oberfläche

Webclient wurde in 2019 eingestellt. Wenn Sie Client-Skripte auf den Nachfolger, Einheitliche Oberfläche, migrieren, beachten Sie den Unterschied in der Art und Weise, wie die beiden Clients die Zeitzonenkonvertierung für Ortszeit-Benutzer-Spalten handhaben.

Im Webclient wurde die Zeitzonenkonvertierung nicht auf der Clientseite durchgeführt. Wenn ein Benutzer 2018-10-15 07:30 in ein Webclient-Formular eingab, gab die Client-API Xrm.Page.getAttribute(<column name>).getValue() 2018-10-15 07:30 zurück. Dieser Wert wird an den Server gesendet und dort werden beim Speichern des Werts Zeitzonenanpassungen vorgenommen.

Im Unified Client wird die Zeitzonenkonvertierung auf der Clientseite durchgeführt. Wenn ein Benutzer in der Zeitzone UTC+8 2018-10-15 07:30 in ein Unified Client-Formular eingibt, gibt die Client-API formContext.getAttribute(<column name>).getValue() den angepassten Wert 2018-10-14T23:30:00Z zurück. Der Server akzeptiert den Wert unverändert und führt keine weiteren Zeitzonenanpassungen durch.

Um diesen Unterschied zu berücksichtigen, können Sie Folgendes durchführen:

Siehe auch

Funktionsweise und Format der Datums- und Uhrzeitspalte
Probleme mit Datum und Uhrzeit in modellgesteuerten Apps beheben
Spalten-Übersicht
ConvertDateAndTimeBehaviorRequest-Klasse
DateTimeAttributeMetadata-Klasse
Blog: Spielt es eine Rolle, wie Sie Datums- und Uhrzeitdaten übermitteln?

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).