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
oderTimeZoneIndependent
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
oderTimeZoneIndependent
werden so behandelt, als hätten sie das VerhaltenUserLocal
, 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 alsUserLocal
. 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
undModifiedOn
bei den standardmäßigen und angepassten Tabellen ist standardmäßig aufUserLocal
festgelegt, und die verwaltete EigenschaftDateTimeAttributeMetadata.CanChangeDateTimeBehavior
ist aufFalse
festgelegt, was bedeutet, dass Sie das Verhalten dieser Spalten nicht ändern können. Benutzer können zwar den Wert der verwalteten EigenschaftDateTimeAttributeMetadata.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
aufTrue
festgelegt. Dies bedeutet, dass Sie das Verhalten einer angepassten Datums- und Zeitspalte vonUserLocal
auf entwederDateOnly
oderTimeZoneIndependent
ä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
aufTrue
festgelegt, es sei denn, die Spalte oder die übergeordnete Tabelle ist nicht anpassbar.Hinweis
Wenn Sie die Eigenschaft
DateTimeAttributeMetadata.DateTimeBehavior
einer Spalte vonUserLocal
aufDateOnly
aktualisieren, stellen Sie sicher, dass Sie auch die EigenschaftDateTimeAttributeMetadata.Format
vonDateAndTime
aufDateOnly
ändern. Andernfalls tritt eine Ausnahme auf.Die folgenden standardmäßigen Datums- und Zeitspalten in Dataverse sind standardmäßig auf
DateOnly
festgelegt und die verwaltete EigenschaftDateTimeAttributeMetadata.CanChangeDateTimeBehavior
ist aufFalse
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 EigenschaftDateTimeAttributeMetadata.CanChangeDateTimeBehavior
aufTrue
festgelegt, und Sie können das Verhalten dieser Spalten nur aufDateOnly
ä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:
- Rufen Sie den Zeitzonenoffset des Benutzers mit der Component Framework UserSettings.getTimeZoneOffsetMinutes-Methode oder Xrm.Utility.getGlobalContext().userSettings.getTimeZoneOffsetMinutes-Methode ab und ändern Sie Ihre Skripte, um dies zu berücksichtigen.
- Ändern Sie das Spaltenverhalten von
UserLocal
inTimeZoneIndependent
, sodass eingegebene Zeiten nicht angepasst werden. Dies ist nur möglich, wenn für die Spalte keine Zeitzonen gelten.
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).