Mein Modul erstellt ein benutzerdefiniertes Inhaltselement durch den Controller:Feldindex für Abfragen nicht aktualisiert, wenn Wert programmatisch
private ContentItem createContentItem()
{
// Add the field
_contentDefinitionManager.AlterPartDefinition(
"TestType",
cfg => cfg
.WithField(
"NewField",
f => f
.OfType(typeof(BooleanField).Name)
.WithDisplayName("New Field"))
);
// Not sure if this is needed
_contentDefinitionManager.AlterTypeDefinition(
"TestType",
cfg => cfg
.WithPart("TestType")
);
// Create new TestType item
var newItem = _contentManager.New("TestType");
_contentManager.Create(TestItem, VersionOptions.Published);
// Set the added boolean field to true
BooleanField newField = ((dynamic)newItem).TestType.NewField as BooleanField;
newField.Value = true;
// Set title (as date created, for convenience)
var time = DateTime.Now.ToString("MM-dd-yyyy h:mm:ss tt", CultureInfo.InvariantCulture).Replace(':', '.');
newItem.As<TitlePart>().Title = time;
return newItem;
}
Das Endergebnis ist dies ein neues Testtype Element mit einem Feld, das auf true gesetzt wird. Das Anzeigen des Inhaltselements im Dashboard sowie das Überprüfen von ContentItemVersionRecord in der Datenbank bestätigen, dass der Wert korrekt festgelegt wurde.
Abfragen auf Feldern, die auf diese Weise festgelegt werden, scheinen jedoch nicht ordnungsgemäß zu funktionieren. Ich habe den Datensatz IntegerFieldIndexRecord gefunden, den ich für Prognosen verwende, um die Abfrageergebnisseiten zu füllen. Der Wert von TestField bleibt dabei auf 0 (falsch) anstelle von 1 (wahr).
Wenn Sie auf die Bearbeitungsseite des Inhaltselements gehen und einfach auf "Speichern" klicken, wird IntegerFieldIndexRecord korrekt aktualisiert, was bedeutet, dass der Wert jetzt von der Abfrage erfasst wird. Wie kann der Datensatz für programmatisch festgelegte Feldwerte aktualisiert werden?
Relevante Abschnitt der Migration:
SchemaBuilder.CreateTable(typeof(TestTypePartRecord).Name, table => table
.ContentPartRecord()
);
ContentDefinitionManager.AlterTypeDefinition(
"TestType",
cfg => cfg
.DisplayedAs("Test Type")
.WithPart(typeof(TitlePart).Name)
.WithPart(typeof(ContainablePart).Name)
.WithPart(typeof(CommonPart).Name)
.WithPart(typeof(IdentityPart).Name)
);
Edit: Die Lösung für dieses ist, um manuell den Projektionsindexdatensatz zu ändern, wenn ein Feldwert zu ändern, mit diesem Aufruf:
_fieldIndexService.Set(testResultItem.As<FieldIndexPart>(),
"TestType", // Resolves as TestTypePart, which holds the field
"newField",
"", // Not sure why value name should be empty, but whatever
true, // The value to be set goes here
typeof(bool));
Haben Sie versucht, _contentManager.Publish (TestItem) '? –
Die Antworten unten behebt das Problem. Es sieht so aus, als würde der Handler von FieldIndexPart den Datensatz nicht automatisch ändern, wenn sich der Wert des Feldes ändert.Publishing sollte es auslösen, tut es aber nicht. – ub3rman123