Unicore
Partner Sage
Jesteś tu: Unicore Produkcja >> Przegląd >> Funkcje >> Obiekty biznesowe

Obiekty biznesowe w Unicore Produkcja

Korzystanie z obiektów biznesowych Unicore.Common

System Unicore Produkcja Premium udostępnia wszystkie obiekty biznesowe dostępne wewnątrz aplikacji oraz pozwala na tworzenie własnych obiektów. Umożliwia to korzystanie z obiektów produkcyjnych bezpośrednio w Symfonii w języku AmBasic oraz VBA.

Obiekt aplikacji FApplication - Unicore Produkcja Premium udostępnia jako obiekt COM zainicjowaną instancję systemu, która zawiera dostęp do kolekcji obiektów biznesowych oraz kolekcji własnych, zdefiniowanych obiektów.

Pobranie obiektu aplikacji w AmBasic:

dispatch FApplication = "Unicore.Common.Application.FApplication"

Obiekt aplikacji daje dostęp do kolekcji obiektów: Stanowisk Roboczych (WorkCenters), Maszyn (Machines), Pracowników (Employees), Zleceń Produkcyjnych (WorkOrders), Struktur (BOM), Procesów (Processes), Marszrut (Routings), Indeksów (Items), Harmonogramów (Schedules), Planów Produkcji (MRPManufactures), Planów Zapotrzebowania (MRPPurchases), Zamówień Obcych (SalesOrders), Kontrahentów (Contractors), oraz obiektów definiowanych przez użytkowników (Objects).

Przykładowy kod w AmBasic z wykorzystaniem kolekcji obiektów FApplication:

dispatch FApplication = "Unicore.Common.Application.FApplication"
int l = 0
print "Lista Stanowisk Roboczych:" + LF
while l < FApplication.WorkCenters.Count
l += 1
print FApplication.WorkCenters.Item(l).ShortName + LF
wend

Każda kolekcja zawiera propercję Count zawierającą ilość rekordów oraz metodę Item(indeks) zwracającą obiekt o podanym indeksie.

Z obiektów biznesowych można korzystać również poza obiektem aplikacji FApplication.

Przykładowy kod w AmBasic z wykorzystaniem obiektu Zlecenia Produkcyjnego.

dispatch WorkOrder = "Unicore.Common.BusinessObjects.CWorkOrder"
float planqty = 0
int l = 0
if WorkOrder.GetByShortName("08-ZP/20").Success then
print WorkOrder.WorkOrderStatus + LF
while l < WorkOrder.WorkOrderItems.Count
l += 1
planqty = Val(WorkOrder.WorkOrderItems.Item(l).PlanQty)
print WorkOrder.WorkOrderItems.Item(l).Item.ShortName + LF
print using "%f\n", planqty
wend
endif
Każdy obiekt biznesowy posiada następujące metody obsługujące:
  • Edit() - przejście obiektu w tryb edycji - funkcja niezbędna przy zmianie danych obiektu przed zapisem
  • Save() - zapisanie obiektu w trybie edycji
  • SaveAsNew() - zapisanie nowej instancji obiektu. W propercji ResultData zwracanego obiektu CResult znajduje się ID nowoutworzonego obiektu
  • Remove() - usunięcie obiektu
  • GetByID(klucz) - pobranie danych obiektu według podanego klucza rekordu
  • GetByShortName(kod) - działa dla obiektów słownikowych, pobiera dane obiektu według podanego kodu
  • ValidateBeforeRemove() - sprawdzenie czy dany obiekt można usunąć
  • ValidateBeforeSaveAsNew() - walidacja poprawności pól przed zapisem nowego obiektu, sprawdzenie unikalności kodu w przypadku obiektów słownikowych
  • ValidateBeforeSave() - walidacja poprawności pól danych przed zapisem.

Obiekt biznesowy zawiera kolekcje obiektów, z którymi jest powiązany relacyjnie. Na przykład Stanowisko Robocze zawiera Maszyny, które pracują w obrębie Stanowiska oraz Procesy, które są wykonywane na tym Stanowisku.

Przykładowy kod w AmBasic przedstawiający dostęp do kolekcji obiektów dostępnych z obiektu Stanowiska Roboczego:

dispatch WorkCenter = "Unicore.Common.BusinessObjects.CWorkCenter"
int count = 0
int l = 0
float totalhours = 0
if WorkCenter.GetByID(1).Success then
print "Stanowisko Robocze: " + WorkCenter.ShortName + LF
totalhours = Val(WorkCenter.TotalHours)
print using "Ilość godzin: %f\n", totalhours
count = WorkCenter.Machines.Count
while l < count
l += 1
print "Maszyna Stanowiska: "+ WorkCenter.Machines.Item(l).ShortName + LF
wend
count = WorkCenter.Processes.Count
l = 0
while l < count
l += 1
print "Proces technologiczny "+ WorkCenter.Processes.Item(l).ShortName + LF
wend
endif

Tworzenie własnych obiektów biznesowych

System Unicore Produkcja Premium umożliwia definiowanie i tworzenie własnych obiektów biznesowych, które można łączyć z obiektami biznesowymi istniejącymi w produkcji, jak również z innymi własnymi obiektami. Dzięki temu możemy tworzyć obiekty z dodatkowymi polami rozszerzającymi inne obiekty (np. obiekt rozszerzający pozycję Zamówienia Obcego o dodatkowe pola).

Definiowanie obiektu biznesowego

dispatch FApplication = "Unicore.Common.Application.FApplication"
dispatch Object = FApplication.NewObject("CPozycjaZO")
print "Typ obiektu: "+ Object.Type + LF
if Object.Definition.Fields.Count == 0 then
// definicja pól definicji obiektu
// String = 1  Numeric = 2   Int = 3   Date = 4  Boolean = 5
Object.Definition.AddField("idzo", 3)
Object.Definition.AddField("szerokosc", 2)
Object.Definition.AddField("opis", 1)
endif
int l = 0
print "Pola definicji obiektu" + LF
while l < Object.Definition.Fields.Count
l += 1
print Object.Definition.Fields.Item(l).FieldName + " - "+
Object.Definition.Fields.Item(l).GetFieldType() + LF
wend

Powyższy przykład pokazuje utworzenie obiektu o typie CPozycjaZO (typ jest określany przez użytkownika, może to być dowolna nazwa) jako zmiennej Object. Następnie tworzona jest definicja dla tego obiektu Object.Definition.Fields.

Po utworzeniu nowej instancji obiektu danego typu FApplication.NewObject("typ_obiektu") możemy nadać oraz odczytać wartości poszczególnych pól z definicji tego obiektu, na przykład:

// Ustawianie wartości pól obiektu
Object.Edit()
Object.SetField("idzo", 1)
Object.SetField("opis", "Przykładowy opis pozycji ZO")
Object.SetField("szerokosc", 1.5)
// Odczyt wartości pól obiektu
print "Opis: "+ Object.GetField("opis") + LF
print "Szerokość: " + Object.GetField("szerokosc") + LF
print "Id zo: " + Object.GetField("idzo")

Obiekt z nadanymi wartościami pól możemy zapisać. Każdy obiekt definiowany standardowo zawiera dwie propercje: ID - klucz obiektu, Type - typ obiektu oraz metody obsługujące obiekt: Edit(), Save(), SaveAsNew(), Remove().

if Object.ID < 0 then
Object.SaveAsNew()
else
if Object.Save().Success then
print "Zapisano poprawnie"
endif
endif

Dostęp do obiektów definiowanych poprzez obiekt aplikacji

Do obiektów definiowanych przez użytkownika mamy dostęp poprzez obiekt aplikacji FApplication, w następujący sposób:

dispatch FApplication = "Unicore.Common.Application.FApplication"
dispatch Object = FApplication.NewObject("CPozycjaZO")
print "Lista obiektów CPozycjaZO" + LF
int l = 0
int count = FApplication.Objects("CPozycjaZO").Count
print using "Ilość obiektów: %l\n", count
while l < count
l += 1
Object = FApplication.Objects("CPozycjaZO").Item(l)
print Object.GetField("opis") + " ; " + Object.GetField("szerokosc") + LF
wend

Pobieranie danych obiektu definiowanego

dispatch FApplication = "Unicore.Common.Application.FApplication"
dispatch Object = FApplication.NewObject("CPozycjaZO")
Object.GetByField("opis", "Opis obiektu najlepiej unikalny w przypadku pobierania obiektu wg tego pola")


Powyższy przykład powoduje utworzenie nowego obiektu użytkownika o zdefiniowanym typie CPozycjaZO, a następnie pobranie danych tego obiektu według pola opis. W przypadku pobierania danych według danego pola zaleca się, aby te pole było unikalne np. klucz obiektu lub kod obiektu.

Łączenie obiektów z innymi obiektami biznesowymi Produkcji

Obiekt można łączyć z dowolnym innym obiektem biznesowych w następujący sposób:

Object.Link("WorkCenter", 1)

powoduje połączenie obiektu Object z obiektem Stanowiska Roboczego (WorkCenter) o ID = 1. Połączone obiekty można odczytać w następujący sposób:

int i = 0
dispatch WorkCenter = "Unicore.Common.BusinessObjects.CWorkCenter"
if WorkCenter.GetByID(1).Success then
print "Stanowisko Robocze " + WorkCenter.ShortName + LF
while i < WorkCenter.Objects("CPozycjaZO").Count
i += 1
Object = WorkCenter.Objects("CPozycjaZO").Item(i)
print "Obiekt Stanowiska: "+ Object.GetField("opis") + LF
wend
endif

Powyższy przykład przedstawia dostęp do obiektów typu przez połączony obiekt Stanowiska Roboczego. Można również w drugą stronę: od obiektu zdefiniowanego (CPozycjaZO) dostać się do połączonego obiektu Stanowiska Roboczego, jak również do innych obiektów biznesowych w następujący sposób:

while i < Object.WorkCenters.Count
i += 1
WorkCenter = Object.WorkCenters.Item(i)
print "Stanowisko Obiektu CPozycjaZO: "+ WorkCenter.ShortName + LF
wend


Analogicznie z poziomu własnego obiektu mamy dostęp do wszystkich encji biznesowych Produkcji: Items (Indeksy), Products (Towary produkowane), Components (Towary zakupowane), Schedules (Harmonogramy), WorkCenters (Stanowiska Robocze), Machines (Maszyny), BOM (Struktury), BOMItem (Składniki Struktur), Processes(Procesy), Routings (Marszruty), RoutingsProcesses (Procesy Marszrut), RoutingsOperations (Operacje Marszrut), SalesOrders (Zamówienia Obce), SalesOrderItems (pozycje Zamówień Obcych), WorkOrders (Zlecenia Produkcyjne), WorkOrdersItems (pozycje Zleceń Produkcyjnych), WorkOrdersIssues (Rozliczenia Składników Zleceń), WorkOrdersLabors (Realizacji Zleceń), WorkOrdersLaborsResources (Rozliczenia pracowników), WorkOrdersBOM (Struktury Zleceń), WorkOrdersRoutings (Marszruty Zleceń), Employees (Pracownicy), MRPManufactures (Plany produkcji), MRPPurchases (Plany zapotrzebowania).