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 oder OrmsWidgetParameter 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 = ParameterJsonString;

		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();
}