Skip to content

Commit 01ece65

Browse files
committed
chore: moved hasstandardfieldchanged and added additional default fields
1 parent 1d100a4 commit 01ece65

7 files changed

Lines changed: 50 additions & 23 deletions

File tree

Generator/DTO/Attributes/Attribute.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ protected Attribute(AttributeMetadata metadata)
2020
{
2121
IsPrimaryId = metadata.IsPrimaryId ?? false;
2222
IsCustomAttribute = metadata.IsCustomAttribute ?? false;
23-
IsStandardFieldModified = MetadataExtensions.StandardFieldHasChanged(metadata, languagecode);
2423
DisplayName = metadata.DisplayName.UserLocalizedLabel?.Label ?? string.Empty;
2524
SchemaName = metadata.SchemaName;
2625
Description = metadata.Description.UserLocalizedLabel?.Label.PrettyDescription() ?? string.Empty;

Generator/DTO/Attributes/BooleanAttribute.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ internal class BooleanAttribute : Attribute
66
{
77
public string TrueLabel { get; }
88
public string FalseLabel { get; }
9-
109
public bool? DefaultValue { get; }
1110

1211
public BooleanAttribute(BooleanAttributeMetadata metadata)

Generator/DTO/Attributes/ChoiceAttribute.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Microsoft.Xrm.Sdk.Metadata;
2-
using Newtonsoft.Json;
32

43
namespace Generator.DTO.Attributes;
54

@@ -14,15 +13,15 @@ public class ChoiceAttribute : Attribute
1413
public ChoiceAttribute(PicklistAttributeMetadata metadata) : base(metadata)
1514
{
1615
Options = metadata.OptionSet.Options.Select(x => new Option(
17-
x.Label.UserLocalizedLabel?.Label ?? string.Empty,
16+
x.Label.UserLocalizedLabel?.Label ?? string.Empty,
1817
x.Value,
1918
x.Color,
2019
x.Description.UserLocalizedLabel?.Label.PrettyDescription() ?? string.Empty));
2120
Type = "Single";
2221
DefaultValue = metadata.DefaultFormValue;
2322
}
2423

25-
public ChoiceAttribute(MultiSelectPicklistAttributeMetadata metadata): base(metadata)
24+
public ChoiceAttribute(MultiSelectPicklistAttributeMetadata metadata) : base(metadata)
2625
{
2726
Options = metadata.OptionSet.Options.Select(x => new Option(
2827
x.Label.UserLocalizedLabel?.Label ?? string.Empty,

Generator/DataverseService.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,12 @@ private static Record MakeRecord(
136136
{
137137
var attributes =
138138
relevantAttributes
139-
.Select(metadata => GetAttribute(metadata, entity, logicalToSchema, logger))
139+
.Select(metadata =>
140+
{
141+
var attr = GetAttribute(metadata, entity, logicalToSchema, logger);
142+
attr.IsStandardFieldModified = MetadataExtensions.StandardFieldHasChanged(metadata, entity.DisplayName.UserLocalizedLabel?.Label ?? string.Empty);
143+
return attr;
144+
})
140145
.Where(x => !string.IsNullOrEmpty(x.DisplayName))
141146
.ToList();
142147

Generator/MetadataExtensions.cs

Lines changed: 38 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,46 +20,55 @@ internal static string PrettyDescription(this string description) =>
2020
.Replace("\"", @"”")
2121
.Replace("\n", " ");
2222

23-
public static bool StandardFieldHasChanged(this AttributeMetadata attribute)
23+
public static bool StandardFieldHasChanged(this AttributeMetadata attribute, string entityDisplayName)
2424
{
25-
if (attribute.IsCustomAttribute) return false;
25+
if (attribute.IsCustomAttribute ?? false) return false;
2626

2727
var languagecode = attribute.DisplayName.UserLocalizedLabel?.LanguageCode;
2828

29-
var fields = GetDefaultFields(languagecode);
29+
var fields = GetDefaultFields(entityDisplayName, languagecode);
3030
return fields.StandardDescriptionHasChanged(attribute.LogicalName, attribute.Description.UserLocalizedLabel?.Label ?? string.Empty)
3131
|| fields.StandardDisplayNameHasChanged(attribute.LogicalName, attribute.DisplayName.UserLocalizedLabel?.Label ?? string.Empty);
3232
}
3333

3434
private static bool StandardDisplayNameHasChanged(this IEnumerable<(string LogicalName, string DisplayName, string Description)> fields, string logicalName, string displayName)
3535
{
36-
return fields
36+
return !fields
3737
.Where(f => f.LogicalName == logicalName)
38-
.Any(f => displayName.Equals(f.DisplayName, StringComparison.OrdinalIgnoreCase));
38+
.Any(f => displayName.Equals(f.DisplayName));
3939
}
4040

4141
private static bool StandardDescriptionHasChanged(this IEnumerable<(string LogicalName, string DisplayName, string Description)> fields, string logicalName, string description)
4242
{
43-
return fields
43+
return !fields
4444
.Where(f => f.LogicalName == logicalName)
45-
.Any(f => description.Equals(f.Description, StringComparison.OrdinalIgnoreCase));
45+
.Any(f => description.Equals(f.Description));
4646
}
4747

48-
private static IEnumerable<(string LogicalName, string DisplayName, string Description)> GetDefaultFields(int? languageCode)
48+
private static IEnumerable<(string LogicalName, string DisplayName, string Description)> GetDefaultFields(string entityDisplayName, int? languageCode)
4949
{
5050
switch (languageCode)
5151
{
5252
case 1030:
53-
return DanishDefaultFields;
53+
return DanishDefaultFields.Concat(new[] {
54+
("statuscode", "Statusårsag", $"Årsag til statussen for {entityDisplayName}"),
55+
("statecode", "Status", $"Status for {entityDisplayName}"),
56+
});
5457
case 1033:
55-
return EnglishDefaultFields;
58+
return EnglishDefaultFields.Concat(new[] {
59+
("statuscode", "Status Reason", $"Reason for the status of the {entityDisplayName}"),
60+
("statecode", "Status Reason", $"Status of the {entityDisplayName}"),
61+
});
5662
default:
57-
return EnglishDefaultFields;
63+
return EnglishDefaultFields.Concat(new[] {
64+
("statuscode", "Status Reason", $"Reason for the status of the {entityDisplayName}"),
65+
("statecode", "Status Reason", $"Status of the {entityDisplayName}"),
66+
}); ;
5867
}
5968
}
6069

6170
// This list is incomplete as same field may have different names and description.
62-
private static List<(string LogicalName, string DisplayName, string Description)> EnglishDefaultFields => new()
71+
private static List<(string LogicalName, string DisplayName, string Description)> EnglishDefaultFields = new()
6372
{
6473
( "activityadditionalparams", "Activity Additional Parameters", "Additional information provided by the external application as JSON. For internal use only." ),
6574
( "activityid", "Activity", "Unique identifier of the activity." ),
@@ -143,7 +152,7 @@ private static bool StandardDescriptionHasChanged(this IEnumerable<(string Logic
143152
};
144153

145154
// This list is incomplete as same field may have different names and description.
146-
private static List<(string LogicalName, string DisplayName, string Description)> DanishDefaultFields => new()
155+
private static List<(string LogicalName, string DisplayName, string Description)> DanishDefaultFields = new()
147156
{
148157
( "activityadditionalparams", "Flere parametre for aktivitet", "Yderligere oplysninger leveret af det eksterne program som JSON. Kun til intern brug." ),
149158
( "activityid", "Aktivitet", "Entydigt id for aktiviteten." ),
@@ -156,15 +165,19 @@ private static bool StandardDescriptionHasChanged(this IEnumerable<(string Logic
156165
( "allparties", "Alle parter i aktiviteter", "Alle aktivitetsparter, der er knyttet til denne aktivitet." ),
157166
( "community", "Social kanal", "Viser, hvor kontakt om den sociale aktivitet stammer fra, f.eks. fra Twitter eller Facebook. Dette felt er skrivebeskyttet." ),
158167
( "createdby", "Oprettet af", "Entydigt id for den bruger, der oprettede aktiviteten." ),
159-
( "createdon", "Dato for oprettelse", "Dato og klokkeslæt for oprettelse af aktiviteten." ),
168+
( "createdby", "Oprettet af", "Entydigt id for den bruger, der oprettede posten." ),
169+
( "createdon", "Dato for oprettelse", "Dato og klokkeslæt for oprettelse af posten." ),
170+
( "createdon", "Oprettet", "Dato og klokkeslæt for oprettelse af aktiviteten." ),
160171
( "createdonbehalfby", "Oprettet af (stedfortræder)", "Entydigt id for den stedfortrædende bruger, der oprettede aktivitetspointeren." ),
172+
( "createdonbehalfby", "Oprettet af (stedfortræder)", "Entydigt id for den stedfortræderbruger, der oprettede posten." ),
161173
( "deliverylastattemptedon", "Dato for seneste leveringsforsøg", "Dato og klokkeslæt for det seneste forsøg på levering af aktiviteten." ),
162174
( "deliveryprioritycode", "Leveringsprioritet", "Prioritet for levering af aktiviteten til mailserveren." ),
163175
( "description", "Beskrivelse", "Beskrivelse af aktiviteten." ),
164176
( "descriptionblobid", "Id for beskrivelsesfil", "Fil, der indeholder beskrivelsesindhold." ),
165177
( "exchangeitemid", "Id for Exchange-element", "Meddelelses-id'et for aktivitet, der returneres fra Exchange Server." ),
166178
( "exchangerate", "Valutakurs", "Valutakurs for den valuta, der er tilknyttet aktivitetspointeren, i forhold til grundvalutaen." ),
167179
( "exchangeweblink", "Exchange WebLink", "Viser weblinket for aktivitet af typen mail." ),
180+
( "importsequencenumber", "Importsekvensnummer", "Sekvensnummer for den import, der oprettede denne post." ),
168181
( "instancetypecode", "Tilbagevendende forekomsttype", "Forekomsttype for en tilbagevendende serie." ),
169182
( "isbilled", "Er faktureret", "Angiver, om aktiviteten blev faktureret som en del af løsning af en sag." ),
170183
( "ismapiprivate", "Er privat", "Kun til intern brug." ),
@@ -173,13 +186,21 @@ private static bool StandardDescriptionHasChanged(this IEnumerable<(string Logic
173186
( "lastonholdtime", "Seneste tid for I venteposition", "Indeholder dato- og klokkeslætsstemplet for den seneste tid for I venteposition." ),
174187
( "leftvoicemail", "Har lagt talebesked", "Har lagt talebeskeden" ),
175188
( "modifiedby", "Ændret af", "Entydigt id for den bruger, der sidst ændrede aktiviteten." ),
189+
( "modifiedby", "Ændret af", "Entydigt id for den bruger, der ændrede posten." ),
176190
( "modifiedon", "Sidst opdateret", "Dato og klokkeslæt for den seneste ændring af aktiviteten." ),
191+
( "modifiedon", "Ændret", "Dato og klokkeslæt for ændring af posten." ),
177192
( "modifiedonbehalfby", "Ændret af (stedfortræder)", "Entydigt id for den stedfortrædende bruger, der senest ændrede aktivitetspointeren." ),
193+
( "modifiedonbehalfby", "Ændret af (stedfortræder)", "Entydigt id for den stedfortræderbruger, der ændrede posten." ),
178194
( "onholdtime", "Tid for I venteposition (minutter)", "Viser, hvor længe posten var i venteposition i minutter." ),
195+
( "overriddencreatedon", "Posten blev oprettet den", "Dato og klokkeslæt for overførsel af posten." ),
179196
( "ownerid", "Ejer", "Entydigt id for den bruger eller det team, der ejer aktiviteten." ),
197+
( "ownerid", "Ejer", "Ejer-id" ),
180198
( "owningbusinessunit", "Ejende afdeling", "Entydigt id for den afdeling, der ejer aktiviteten." ),
199+
( "owningbusinessunit", "Ejende afdeling", "Entydigt id for den afdeling, der ejer posten" ),
181200
( "owningteam", "Ejende team", "Entydigt id for det team, der ejer aktiviteten." ),
201+
( "owningteam", "Ejende team", "Entydigt id for det team, der ejer posten." ),
182202
( "owninguser", "Ejende bruger", "Entydigt id for den bruger, der ejer aktiviteten." ),
203+
( "owninguser", "Ejende bruger", "Entydigt id for den bruger, der ejer posten." ),
183204
( "postponeactivityprocessinguntil", "Udskyd aktivitetsbehandlingen indtil", "Kun til intern brug." ),
184205
( "prioritycode", "Prioritet", "Aktivitetens prioritet." ),
185206
( "processid", "Proces", "Entydigt id for processen." ),
@@ -198,9 +219,12 @@ private static bool StandardDescriptionHasChanged(this IEnumerable<(string Logic
198219
( "statuscode", "Statusårsag", "Årsag til aktivitetens status." ),
199220
( "subject", "Emne", "Det emne, der er tilknyttet aktiviteten." ),
200221
( "timezoneruleversionnumber", "Versionsnummeret for tidszonereglen", "Kun til intern brug." ),
222+
( "timezoneruleversionnumber", "Versionsnummer for tidszoneregel", "Kun til intern brug." ),
201223
( "transactioncurrencyid", "Valuta", "Entydigt id for den valuta, der er tilknyttet aktivitetspointeren." ),
202224
( "traversedpath", "(Udfaset) Gennemløbet sti", "Kun til intern brug." ),
203225
( "utcconversiontimezonecode", "Tidszonekode til UTC-konvertering", "Den tidszonekode, der var i brug ved oprettelse af posten." ),
226+
( "utcconversiontimezonecode", "Tidszonekode for UTC-konvertering", "Den tidszonekode, der var i brug ved oprettelse af posten." ),
227+
( "versionnumber", "Versionsnummer", "Versionsnummer" ),
204228
( "versionnumber", "Versionsnummer", "Versionsnummer for aktiviteten." )
205229
};
206230
}

Website/components/Attributes.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { EntityType, AttributeType } from "@/lib/Types"
44
import { TableHeader, TableRow, TableHead, TableBody, TableCell, Table } from "./ui/table"
55
import { Button } from "./ui/button"
66
import { useState } from "react"
7-
import { ArrowUpDown, ArrowUp, ArrowDown, Search, X, PencilOff, Pencil } from "lucide-react"
7+
import { ArrowUpDown, ArrowUp, ArrowDown, Search, X, PencilOff, Pencil, EyeOff, Eye } from "lucide-react"
88
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "./ui/select"
99
import { Input } from "./ui/input"
1010
import { AttributeDetails } from "./entity/AttributeDetails"
@@ -62,7 +62,7 @@ function Attributes({ entity, onSelect }: { entity: EntityType, onSelect: (entit
6262
)
6363
}
6464

65-
if (hideStandardFields) filteredAttributes = filteredAttributes.filter(attr => attr.IsCustomAttribute);
65+
if (hideStandardFields) filteredAttributes = filteredAttributes.filter(attr => attr.IsCustomAttribute || attr.IsStandardFieldModified);
6666

6767
if (!sortColumn || !sortDirection) return filteredAttributes
6868

@@ -151,7 +151,7 @@ function Attributes({ entity, onSelect }: { entity: EntityType, onSelect: (entit
151151
title="Control customfields"
152152
>
153153
{
154-
hideStandardFields ? <PencilOff className="w-4 h-4" /> : <Pencil className="w-4 h-4" />
154+
hideStandardFields ? <EyeOff className="w-4 h-4" /> : <Eye className="w-4 h-4" />
155155
}
156156
</Button>
157157
{(searchQuery || typeFilter !== "all") && (

Website/lib/Types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export const enum CalculationMethods {
4343
export type BaseAttribute = {
4444
IsPrimaryId: boolean;
4545
IsCustomAttribute: boolean;
46+
IsStandardFieldModified: boolean;
4647
DisplayName: string,
4748
SchemaName: string,
4849
Description: string | null,

0 commit comments

Comments
 (0)