In diesem Beispiel wird das HelloWorldWidget
aus dem vorherigen Kapitel geändert, um ein Widget zu werden welches einen aktuellen Datensatz nutzt, um seinen Inhalt aufzubauen.
Steuerelement
Um Parameter nutzen zu können muss das Widget von DataWidget
erben. In diesem Fall wird das Widget von OrmDataWidget
erben, da das Widget Infos bezüglich Datensätze nutzt.
public class HelloWorldWidget : OrmDataWidget
DataWidgets
müssen die Funktion GetConsumedParameterDefinitions
implementieren, welche eine Liste von Kompatibel WidgetParameterDefinition
zurückliefert.
public override IReadOnlyList<WidgetParameterDefinition> GetConsumedParameterDefinitions()
{
return new List<WidgetParameterDefinition> { { new OrmsWidgetParameterDefinition() } };
}
Das HelloWorldWidget
kann jetzt mit einer Parameterquelle konfiguriert werden:
- Keine: Wenn das Widget keine braucht,
- Seite: Wenn die Seite einen kompatiblen Parametertyp bereitstellt. Seiten können entweder
GridViewConfigWidgetParameter
oderOrmsWidgetParameter
bereitstellen, - Widget: Wenn die Quelle ein anderes in der Seite konfiguriertes Widgets sein soll. In dem Fall wird ein zusätzliche Auswahl angezeigt, in der man ein kompatibles Widget selektieren kann.
Controller
Der HelloWorldWidgetController
erweitert nun DataWidgetControllerBase
. Damit hat der Controller den Parameter im JSON Format in der Eigenschaft ParameterJsonString
und kann ihn de-serialisieren. Wenn der Controller ein Parameter erhält, wird das HelloWorldWidget
nun einen anderen Text anzeigen.
public class HelloWorldWidgetController : DataWidgetControllerBase
{
public ActionResult Index(string textLanguage)
{
HelloWorldWidgetViewModel viewModel = new HelloWorldWidgetViewModel();
if (string.IsNullOrWhiteSpace(textLanguage))
viewModel.ErrorText = "No language configured";
else
switch (textLanguage.ToUpper())
{
case "DE":
viewModel.SalutationText = "Hallo";
viewModel.ToSalutate = "Welt";
break;
default:
viewModel.SalutationText = "Hello";
viewModel.ToSalutate = "world";
break;
}
string jsonParameter = GetParameterJsonString();
if (!string.IsNullOrWhiteSpace(jsonParameter))
{
OrmsWidgetParameter parameter = null;
List<OrmsWidgetParameter> deserializedParameterList = JsonConvert.DeserializeObject<List<OrmsWidgetParameter>>(jsonParameter);
if (deserializedParameterList != null)
{
parameter = new OrmsWidgetParameter();
// In this example we merge the parameters. But other approaches could be valid.
parameter.Merge(deserializedParameterList, true);
}
if (parameter != null && parameter.Orms != null && parameter.Orms.Any())
{
OrmData ormData = parameter.Orms.First();
OrmBABase orm = API.Api.ORM.GetOrm(ormData.OrmTypeGuid, ormData.OrmGuid);
viewModel.ToSalutate = orm.EntityTitle;
}
}
return PartialView(viewModel);
}
}
Anmerkungen
Wenn das DataWidget den OrmTyp wissen soll
OrmDataWidget
können den OrmTyp mittels die Methode GetOrmTypeGuid
lesen:
Guid? OrmType = GetOrmTypeGuid();
Wenn das Widget nicht ohne Parameter gerendert sein kann
Dann muss das Widget die folgende Funktion so überschreiben:
public override Guid[] WidgetParameterSourceFilter(string propertyName)
{
List<Guid> ret = new List<Guid>();
if (CanUseWidgetParameterFromPage)
ret.Add(EnumWidgetParameterSource.Page);
ret.Add(EnumWidgetParameterSource.OtherWidget);
return ret.ToArray();
}