Skrypt z obsługą akceptacji Planu Produkcji

Jesteś tu:
← Wszystkie tematy

Przykład prezentuje możliwość wykorzystania cech i skryptów obiektów biznesowych do blokady utworzenia Zlecenia bez akceptacji Planu Produkcji. Dla przykładu należy założyć, że każda pozycja Planu Produkcji powinna zostać zatwierdzona przez Technologa, którzy dobierze odpowiednią Strukturę do planu oraz zatwierdzi pozycję.

Do prawidłowego działania skryptu należy utworzyć cechę analityczną o typie logicznym o nazwie Technolog w Planie Produkcji (Manufacture). Utworzoną cechę należy umieścić za pomocą Projektanta interfejsu w oknie pozycji Planu Produkcji dla roli lub użytkownika technolog.

Następnie w zakładce Systemowe \ Obiekty biznesowe należy wybrać obiekt WorkOrder (Zlecenie Produkcyjne) i w zakładce Zdarzenia – wstawić poniższy skrypt:

using System.Linq;
using System.Windows;
using Worm;
using Worm.Authentication;
using Worm.Ui.Wpf;
using Worm.Ui.Core;
using Worm.Ui.Wpf.Forms;
using Worm.Ui.Wpf.Views;

private Result CheckAccept(Unicore.Manufacture.Business.WorkOrder workOrder)
{
	var result = new Result();
	if(workOrder.Manufactures.Any())
	{
		foreach(Unicore.Manufacture.Business.Manufacture mrp in workOrder.Manufactures)
		{
			var fTechnolog = mrp.Features["Technolog"];
			if(fTechnolog != null && fTechnolog.Value != null && !((bool)fTechnolog.Value)) result.AddError("Brak zatwierdzenia planu przez Technologa!");
			if(result.Fail) result.AddError("Nie można zapisać Zlecenia Produkcyjnego do pozycji planu "+mrp.Item.Shortcut+" z powodu braku zatwierdzenia!");
		}
	}
	return result;
}

public override void OnObjectInserting (object sender, ObjectChangingEventArgs args) {
	if(args.IsRemote) return;
	var workOrder = args.DbObject as Unicore.Manufacture.Business.WorkOrder;
	var result = args.Result;
	result.Append(CheckAccept(workOrder));
}

public override void OnObjectUpdating (object sender, ObjectChangingEventArgs args) {
	if(args.IsRemote) return;
	var workOrder = args.DbObject as Unicore.Manufacture.Business.WorkOrder;
	var result = args.Result;
	if(workOrder.WorkOrderState == Unicore.Manufacture.Business.WorkOrderState.Released) result.Append(CheckAccept(workOrder));
}