Skocz do zawartości

[Sfera] Zdarzeniowa, dostęp do obiektów, debugowanie


Zobacz rozwiązanie Rozwiązane przez Radomił Ząbik,

Polecane posty

Przygotowałem Sobie proof of concept dla Sfery zdarzeniowej, na podstawie waszego szablonu Visual Studio. I mam generalnie problem uruchomić. Strzelam, że brakuje mi jakieś pierdoły, przejrzałem wasze przykłady wzdłuż i wszerz i diabeł ogonem zakrył :(

Więc kod w uproszczeniu jest taki:

using InsERT.Moria.Procesy;
using InsERT.Moria.Rozszerzanie;
using System;

namespace SferaZdarzeniowaTest
{
    public class ZlecenieSerwisoweSferaZdarzeniowaPlugin : KlientSferyZdarzeniowej<IZlecenieSerwisowe>
    {
        private readonly IZleceniaSerwisowe _zlecenia;

        //// Metoda uruchamiana po zapisie obiektu.
        public override void PoZapisieObiektu(IKontekstZdarzeniaPoZapisieObiektu<IZlecenieSerwisowe> kontekst)
        {
            if (kontekst.StanZapisanegoObiektu != StanZapisanegoObiektu.Dodany) return;

            int identyfikatorZapisanegoZlecenia = (int)kontekst.IdDanych;
            IZlecenieSerwisowe zlecenieDodane = _zlecenia.Znajdz(p => p.Id == identyfikatorZapisanegoZlecenia);

            /*
            using (IZlecenieSerwisowe zlecenie = _zlecenia.Utworz())
            {
                zlecenie.Zapisz();
            }
            */

        }

    }
}

Powyższy kod po uruchomieniu, daje takie oto efekty w logach:

<?xml version="1.0" encoding="utf-8"?>
<Exception>
  <Type>System.NullReferenceException</Type>
  <Time>2022-11-06 16:54:52</Time>
  <Description>Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.</Description>
  <Method>Void PoZapisieObiektu(InsERT.Moria.Rozszerzanie.IKontekstZdarzeniaPoZapisieObiektu`1[InsERT.Moria.Procesy.IZlecenieSerwisowe])</Method>
  <HelpLink />
  <StackTrace>   w SferaZdarzeniowaTest.ZlecenieSerwisoweSferaZdarzeniowaPlugin.PoZapisieObiektu(IKontekstZdarzeniaPoZapisieObiektu`1 kontekst)
   w InsERT.Moria.Rozszerzanie.Zdarzenia.KlientSferyZdarzeniowejInternal`2.&lt;&gt;c.&lt;PoZapisieObiektu&gt;b__11_1(KontekstZdarzeniaPoZapisieObiektu`1 kontekst, KlientSferyZdarzeniowej`1 klient)
   w InsERT.Moria.Rozszerzanie.Zdarzenia.KlientSferyZdarzeniowejInternal`2.Wykonaj[TKontekst](Object bo, Func`2 kontekstCreator, Action`2 akcja, Action`1 kontynuacja)</StackTrace>
  <EnviromentStackTrace>   w System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   w System.Environment.get_StackTrace()
   w InsERT.Mox.Helpers.Logging.ExceptionFileSaver.StackTraceElement()
   w InsERT.Mox.Helpers.Logging.ExceptionFileSaver.SaveExceptionInFile(Exception ex, String file)
   w InsERT.Mox.Helpers.Logging.ExceptionFileSaver.Save(Exception exception, String&amp; exceptionFilePath)
   w InsERT.Mox.Helpers.Logging.Logger.LogException(Exception exception, String message)
   w InsERT.Mox.Helpers.Logging.LogHelper.LogException(Exception exception)
   w InsERT.Mox.UIFramework.ExceptionExtensions.Log(Exception exception)
   w InsERT.Moria.Rozszerzanie.Zdarzenia.KlientSferyZdarzeniowejInternal`2.Wykonaj[TKontekst](Object bo, Func`2 kontekstCreator, Action`2 akcja, Action`1 kontynuacja)
   w InsERT.Moria.Rozszerzanie.Zdarzenia.KlientSferyZdarzeniowejInternal`2.PoZapisieObiektu(IUchwyt uchwyt, Object bo, Object id, Nullable`1 operatingMode)
   w InsERT.Moria.Rozszerzanie.Zdarzenia.EventPluginsProxy.&lt;&gt;c__DisplayClass79_0.&lt;OnAfterChangesAccepted&gt;b__0(IKlientSferyZdarzeniowejInternal k)
   w InsERT.Moria.Rozszerzanie.Zdarzenia.EventPluginsProxy.WykonajNaKlientach(RodzajZdarzenia rodzaj, Action`1 akcja)
   w InsERT.Moria.Rozszerzanie.Zdarzenia.EventPluginsProxy.OnAfterChangesAccepted(AfterChangesAcceptedJoinpoint joinpoint)
   w InsERT.Moria.Rozszerzanie.Zdarzenia.EventPluginsProxy.Execute(IJoinpoint joinpoint)
   w InsERT.Mox.Aop.RuntimeWeavedJoinpoint.Proceed()
   w InsERT.Mox.Aop.Weaver.RuntimeWeave(RuntimeWeavedJoinpoint joinpoint, Action coreOperation)
   w InsERT.Mox.BusinessObjects.BusinessObject`3.HandleAfterChangesAcceptedNotification(Object sender, AfterChangesAcceptedEventArgs args)
   w InsERT.Mox.Work.UnitOfWork.NotifyAfterChangesAccepted(Boolean changesWereSaved)
   w InsERT.Mox.Work.UnitOfWork.SaveChanges()
   w InsERT.Mox.UIFramework.DataSourceBase.SaveChanges(UnitOfWork work, ISaveChangesCancelHandler cancelHandler)
   w InsERT.Mox.UIFramework.DataSourceBase.SaveChanges(ISaveChangesCancelHandler cancelHandler)
   w InsERT.Moria.BusinessResources.ObjectServiceBaseZWsparciemObslugiBledow`1.SaveChanges()
   w InsERT.Moria.Procesy.UI.ZlecenieSerwisoweService.SaveChanges()
   w InsERT.Mox.UIFramework.ObjectServiceBase`1.SaveChangesAndContinue(Action`1 continuation)
   w InsERT.Mox.UIFramework.ObjectServiceBase`1.SaveChangesAndClose()
   w InsERT.Mox.UIFramework.ObjectServiceBase`1.OnSaveChangesCloseCommand()
   w InsERT.Mox.UIFramework.ObjectServiceBase`1.ActionReentrantBlocker.IgnoreReentrant(Action action)
   w InsERT.Mox.UIFramework.ObjectServiceBase`1.&lt;&gt;c__DisplayClass412_0.&lt;ObjectServiceBaseCommand&gt;b__0(Object p)
   w InsERT.Mox.MvvmSupport.DelegatingCommand`1.Execute(Object parameter)
   w InsERT.Mox.UIFramework.TextCommandProgressStatic.&lt;&gt;c__DisplayClass0_0.&lt;DecorateForOperationLog&gt;b__0(DelegatingCommand c, Object p)
   w InsERT.Mox.UIFramework.TextCommandProgress.&lt;&gt;c__DisplayClass22_0.&lt;DecorateCommand&gt;g__newExecute|0(Object p)
   w InsERT.Mox.MvvmSupport.DelegatingCommand`1.Execute(Object parameter)
   w MS.Internal.Commands.CommandHelpers.CriticalExecuteCommandSource(ICommandSource commandSource, Boolean userInitiated)
   w System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
   w System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   w System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   w System.Windows.Threading.DispatcherOperation.InvokeImpl()
   w System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
   w MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(Object obj)
   w System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   w System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   w System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   w MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
   w System.Windows.Threading.DispatcherOperation.Invoke()
   w System.Windows.Threading.Dispatcher.ProcessQueue()
   w System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp; handled)
   w MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean&amp; handled)
   w MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   w System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   w System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   w System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   w MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   w MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG&amp; msg)
   w System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   w System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
   w System.Windows.Window.ShowHelper(Object booleanBox)
   w System.Windows.Window.Show()
   w System.Windows.Window.ShowDialog()
   w InsERT.Moria.Startup.UI.NexoAppBase.Go()
   w InsERT.Moria.Gestor.GestorApp.Main(String[] args)</EnviromentStackTrace>
</Exception>

Moim głównym podejrzanym jest ta linia ...

private readonly IZleceniaSerwisowe _zlecenia;

... ale niestety nie mam pewności, której linii dotyczy błąd. Co ciekawe, wcześniej (aby było śmiesznie, bez uruchomienia Laboratorium dla Sfery Zdarzeniowej), dostałem błędy, o złych identyfikatorach. W każdym razie, fajnie by było, jakby się dało taką Sferę zdarzeniową zmusić, do pokazaniu na której linii się wysypała, o ile to możliwe, ułatwiło by to debugowanie.

Link to postu
10 minut temu, Radomił Ząbik napisał:

Moim głównym podejrzanym jest ta linia ...

private readonly IZleceniaSerwisowe _zlecenia;

Na pewno nie, to jest tylko deklaracja zmiennej, ale nigdzie nie widać jej inicjalizacji, widać za to odwołanie do niej - jeśli odwołuje się Pan do null'a to nie mogło to się skończyć inaczej.

 

16 minut temu, Radomił Ząbik napisał:

... ale niestety nie mam pewności, której linii dotyczy błąd.

Można też dodać szczegółowe logi do rozwiązania.

 

11 minut temu, Radomił Ząbik napisał:

W każdym razie, fajnie by było, jakby się dało taką Sferę zdarzeniową zmusić, do pokazaniu na której linii się wysypała, o ile to możliwe, ułatwiło by to debugowanie.

No to tego właśnie służy debugowanie, bez problemu można też debugować biblioteki (Debug->Attach to Process), nie bardzo rozumiem dlaczego Pan o tym pisze zamiast to zrobić ?

Link to postu

No niby Pan nic bezpośrednio nie napisał, ale jednak pomogło mi to znaleźć problem i uruchomić rozwiązanie. Klienci muszą Pana uwielbiać ;)

26 minut temu, Daniel Kozłowski napisał:

No to tego właśnie służy debugowanie, bez problemu można też debugować biblioteki (Debug->Attach to Process), nie bardzo rozumiem dlaczego Pan o tym pisze zamiast to zrobić ?

Przepraszam, nie znałem. C# to chyba z 7 język, jaki znam i potrzebny mi tylko, jak trzeba coś zadziałać z NEXO, a z Visual Studio stosunkowo niedawno zacząłem używać, więc nie znam jeszcze tych wszystkich udogodnień, które ze Sobą niesie.

 

To teraz pytanie z innej beczki, aczkolwiek kontynuacja. W przykładowym kodzie, po dodaniu nowego zlecenia serwisowego, chcę utworzyć kolejne zlecenie serwisowe. Sfera zdarzeniowa, zadziała oczywiście także wtedy, co doprowadzi do pięknej pętli. Tak, wiem, mogę Sobie użyć pola własnego lub innego, aby takie automatyczne zlecenie zidentyfikować i go nie przetwarzać. Widzę też SposobEdycji, tutaj nie jestem pewien, czy rozwiązanie sferyczne otrzyma w takim przypadku 1?

image.thumb.png.dfa332bbf386d80205941f40082e6416.png

A może istnieje jakaś możliwość oznaczenia na obiekcie, aby przypadkiem takiej sfery zdarzeniowej potem nie uruchomił?

 

Jeszcze pytanie uzupełniające do Sfery Zdarzeniowej - czy IDbConnectionFactory, działa na niej normalnie?

Link to postu
Godzinę temu, Radomił Ząbik napisał:

No niby Pan nic bezpośrednio nie napisał...

Wskazałem fragmenty kodu i przyczynę, która mogła powodować problem... Wskazałem sposób, który pozwala "debugować" każde rozwiązanie, w każdym języku i znaleźć tę "linię, której dotyczy błąd"... Wskazałem nazwę operacji, za pomocą której debuguje się biblioteki w VS... To jak według Pan wygląda "bezpośrednia" odpowiedź na taką wypowiedź bez pytania ?  

 

Godzinę temu, Radomił Ząbik napisał:

...ale jednak pomogło mi to znaleźć problem i uruchomić rozwiązanie.

Niestety rozwiązaniem się już Pan nie podzielił.

 

Godzinę temu, Radomił Ząbik napisał:

Klienci muszą Pana uwielbiać ;)

Gdyby tak nie było, to chyba nie byliby moimi klientami, nikogo do niczego nie zmuszam, jedynie zachęcam ;) Jak często też powtarzam "nie jestem od pocieszania tylko od informowania", a to że często mam niepocieszające odpowiedzi nie zależy już ode mnie tylko od problemu / sytuacji.

 

Godzinę temu, Radomił Ząbik napisał:

Przepraszam, nie znałem.

Nie podał Pan tej informacji, ale to też nie powód do przepraszania.

 

Godzinę temu, Radomił Ząbik napisał:

C# to chyba z 7 język, jaki znam i potrzebny mi tylko, jak trzeba coś zadziałać z NEXO, a z Visual Studio stosunkowo niedawno zacząłem używać, więc nie znam jeszcze tych wszystkich udogodnień, które ze Sobą niesie.

Ja wychodzę z założenia, że lepiej znać dobrze programy jednego producenta niż siedmiu i analogicznie jeden język programowania / środowisko niż siedem, stąd bardzo szybko ograniczyłem się tyko do programów firmy Insert, języka C# i środowiska VS, a i tak brakuje czasu na uzupełnianie wiedzy w tych obszarach.

 

Godzinę temu, Radomił Ząbik napisał:

Widzę też SposobEdycji, tutaj nie jestem pewien, czy rozwiązanie sferyczne otrzyma w takim przypadku 1?

Niestety nie wiem, ze Sfery nexo jeszcze mało korzystałem, można to sprawdzić opisanymi wcześniej metodami i/lub poczekać na podpowiedź z firmy InsERT.

 

Godzinę temu, Radomił Ząbik napisał:

A może istnieje jakaś możliwość oznaczenia na obiekcie, aby przypadkiem takiej sfery zdarzeniowej potem nie uruchomił?

W GT jest dostępny mechanizm atrybutów, który pozwala dodawać do obiektów dodatkowe dane, które nie są widoczne i dostępne z interfejsu użytkownika, ale są dostępne przez Sferę - w nexo nie ma / nie znam takiego mechanizmu.

 

Godzinę temu, Radomił Ząbik napisał:

Jeszcze pytanie uzupełniające do Sfery Zdarzeniowej - czy IDbConnectionFactory, działa na niej normalnie?

Powinna.

Edytowane przez Daniel Kozłowski
Link to postu
13 minut temu, Daniel Kozłowski napisał:

Wskazałem fragmenty kodu i przyczynę, która mogła powodować problem... Wskazałem sposób, który pozwala "debugować" każde rozwiązanie, w każdym języku i znaleźć tę "linię, której dotyczy błąd"... Wskazałem nazwę operacji, za pomocą której debuguje się biblioteki w VS... To jak według Pan wygląda "bezpośrednia" odpowiedź na taką wypowiedź bez pytania ?  

Brakuje Panu linii takiej i takiej, jest w dokumentacji, przegapił Pan to, było by chyba jednak bardziej dla mnie zrozumiałe, prosty człowiek jestem i tyle, bezpośredni. Do takich odpowiedzi widać mnie przyzwyczaił Insert. Ale tak, utwierdził mnie Pan, w tym czego brakuje i na co powinienem zwrócić uwagę i naprowadził na użycie debugera, chociaż on niewiele tutaj pomógł, bo wskazywał na null, tam gdzie tego się obawiałem.

16 minut temu, Daniel Kozłowski napisał:

Niestety rozwiązaniem się już Pan nie podzielił.

Tak, bo chciałem domknąć resztę moich wątpliwości i na końcu opublikuje cały kod - widać to często po moich wątkach, że tak robię. Nie chciałem wrzucić skrawku, póki całość nie będzie miała tej ewentualnej pętli, rozwiązanej porządnie. Brakowało poniższego kodu, tak wiem, proszę nie komentować tej wpadki, nie wiem, jak to pominąłem:

public ZlecenieSerwisoweSferaZdarzeniowaPlugin(IZleceniaSerwisowe zlecenia) { _zlecenia = zlecenia; }
18 minut temu, Daniel Kozłowski napisał:

Gdyby tak nie było, to chyba nie byliby moimi klientami, nikogo do niczego nie zmuszam, jedynie zachęcam ;) Jak często też powtarzam "nie jestem od pocieszania tylko od informowania", a to że często mam niepocieszające odpowiedzi nie zależy już ode mnie tylko od problemu / sytuacji.

Póki co tak 50%/50% nie wiem Co sądzić w tej kwestii. Dysponuje Pan ogromną wiedzą. Wolałbym się wzajemnie jednak szanować i podchodzić łagodnie, a jednak odczuwam w Pana komentarzach nutę dziekciu, stąd może tak, jak nie inny komentarz z mojej stronie, po ciężkim tygodniu. Bez urazy.

20 minut temu, Daniel Kozłowski napisał:

Ja wychodzę z założenia, że lepiej znać dobrze programy jednego producenta niż siedmiu i analogicznie jeden język programowania / środowisko niż siedem, stąd bardzo szybko ograniczyłem się tyko do programów firmy Insert, języka C# i środowiska VS, a i tak brakuje czasu na uzupełnianie wiedzy w tych obszarach.

I ja robię podobnie, ale co w przypadku, gdy buduję dla klienta rozwiązanie webowe, które np. zarządza produkcją lub komunikuje się z różnego rodzaju API, ale te dane trzeba wprowadzić do programu Insert - no nie będę wzywał programisty dodatkowego, bo ani to się nie opłaci, plus zanim go wdrożę co chcę osiągnąć itp, to szybciej to napiszę. Nie chcę też bawić się w bezpośrednie wgrywanie danych do SQL, aby klient nie miał problemów, szanuje bazy Insert. Generalnie 95% przypadków w Sferze można na luzie ogarnąć, nawet z tak elementarną wiedzą w C# jak moja, dzięki dobrze napisanej dokumentacji i bibliotekom Sfery. Programistą jestem od 20 lat, więc dla mnie to jak jazda sporadyczna bardzo dużym samochodem, po prostu jadę bardzo ostrożnie. Pan Sobie wyobrazi, że ja generalnie dopiero od roku piszę w Visual Studio, wcześniej korzystałem z rozwiązania darmowego, które było w porównaniu do VS, jak notatnik, a i tak dało się z powodzeniem napisać dobrze działające programy, bez tych wszystkich wtyczek, podpowiedzi, czy samoistnego uzupełnianiu różnych rzeczy. Ogólnie patrząc na rozwiązania, z którymi w życiu miałem kontakt, to Sfera jest "zajebista", naprawdę (tak wiem, w GT było lepiej, też robiłem na nie rozwiązania), dlatego lubię na nią pisać, jest to dla mnie forma hobby. A moje wątki na forum, nie jednemu pomogły, bo prędzej czy później, ktoś będzie szukał tego co ja, a ja mam spore możliwości, w zakresie tworzonych rozwiązań.

31 minut temu, Daniel Kozłowski napisał:

Niestety nie wiem, ze Sfery nexo jeszcze mało korzystałem, można to sprawdzić opisanymi wcześniej metodami i/lub poczekać na podpowiedź z firmy InsERT.

No poczekam na nich. Może warto będzie rozbudować ten znacznik, właśnie do identyfikacji źródła. A może po prostu da się zapobiegać w samej aplikacji, aby nie wywoływała zdarzeń. Tak między nami, to jestem lekko zaskoczony, że to działa i nie zostało pominięte.

32 minuty temu, Daniel Kozłowski napisał:

W GT jest dostępny mechanizm atrybutów, który pozwala dodawać do obiektów dodatkowe dane, które nie są widoczne i dostępne z interfejsu użytkownika, ale są dostępne przez Sferę - w nexo nie ma / nie znam takiego mechanizmu.

No to było by przydatne, nie ukrywam, ale może za parę lat ... przez 6 lat jak tutaj jestem, to Sfera się bardzo zmieniła, na lepsze oczywiście.

Link to postu
15 godzin temu, Radomił Ząbik napisał:

To teraz pytanie z innej beczki, aczkolwiek kontynuacja. W przykładowym kodzie, po dodaniu nowego zlecenia serwisowego, chcę utworzyć kolejne zlecenie serwisowe. Sfera zdarzeniowa, zadziała oczywiście także wtedy, co doprowadzi do pięknej pętli. Tak, wiem, mogę Sobie użyć pola własnego lub innego, aby takie automatyczne zlecenie zidentyfikować i go nie przetwarzać. Widzę też SposobEdycji, tutaj nie jestem pewien, czy rozwiązanie sferyczne otrzyma w takim przypadku 1?

image.thumb.png.dfa332bbf386d80205941f40082e6416.png

A może istnieje jakaś możliwość oznaczenia na obiekcie, aby przypadkiem takiej sfery zdarzeniowej potem nie uruchomił?

Chyba wszystkie pozostałe wątpliwości zostały już wyjaśnione i pozostała ta jedna. SposobEdycji pozwala rozróżnić obiekt dodawany/edytowany "bezinterfejsowo" (automatycznie, sferycznie, zbiorczo, itp.) od obiektu dodawanego/edytowanego ręcznie przez użytkownika nexo. Może Pan skorzystać z tej właściwości, ale odsieje Pan w ten sposób wszystkie zlecenia serwisowe dodawane "bezinterfejsowo", a nie tylko te dodawane przez plugin sfery zdarzeniowej.

Alternatywnie, można skorzystać z flagi w samym pluginie. Każdy plugin nexo jest singletonem i ma taki sam cykl życia jak aplikacja nexo. Powinno więc zadziałać takie rozwiązanie:
 

private bool _trwaDodawanieZleceniaSerwisowego = false;

public override void PoZapisieObiektu(IKontekstZdarzeniaPoZapisieObiektu<IZlecenieSerwisowe> kontekst)
{
	if (_trwaDodawanieZleceniaSerwisowego)
		return;
	
	try
	{
		_trwaDodawanieZleceniaSerwisowego = true;
		using (IZlecenieSerwisowe zlecenie = _zlecenia.Utworz())
		{
			zlecenie.Zapisz();
		}
	}
	finally
	{
		_trwaDodawanieZleceniaSerwisowego = false;
	}
}

 

  • Lubię to 2
Link to postu
  • 2 tygodnie później...

Dobra, mam jeszcze jedno pytanie. Sfera Zdarzeniowa działa Sobie na programach NEXO, jeśli jest wrzucona do bazy dystrybucyjnej i podłączona do podmiotu i potrafi Siebie wzajemnie wywołać. Ale czy triggery w niej wprowadzone, zadziałają także na normalnych programach Sferycznych, działających na takim podmiocie? Jeśli nie, to czy można je jakoś wywoływać?

Link to postu
8 minut temu, Radomił Ząbik napisał:

Ale czy triggery w niej wprowadzone, zadziałają także na normalnych programach Sferycznych, działających na takim podmiocie?

Tak.

 

11 minut temu, Radomił Ząbik napisał:

Jeśli nie, to czy można je jakoś wywoływać?

Jest tylko jeden sposób - należy zmodyfikować dane w bazie danych, na które zareaguje trigger, kto to zrobi / jaka aplikacja nie ma znaczenia.

  • Lubię to 1
Link to postu
17 minut temu, Radomił Ząbik napisał:

Ale czy triggery w niej wprowadzone, zadziałają także na normalnych programach Sferycznych, działających na takim podmiocie? Jeśli nie, to czy można je jakoś wywoływać?

Mam wątpliwości, czy dobrze zrozumiałem pytanie. Faktycznie chodzi o triggery bazodanowe, czy o "triggery" w znaczeniu zdarzeń sferycznych - o to, czy zdarzenia zadziałają w aplikacji sferycznej?

Link to postu
1 minutę temu, Jacek Izydorczyk napisał:

No to dobre pytanie 🙂 a nazewnictwo nietrafione 😉

Ok racja, skrót myślowy, bo w sumie Sfera zdarzeniowa, to forma triggera. Aczkolwiek, opisując to nomenklaturą Insert, to wyszło by coś na zasadzie, czy Sfera, zadziała w Sferze ;)

Chodzi o to:

- mamy podmiot, do którego mamy dodaną Sferę zdarzeniową, która coś wykona powiedzmy podczas dodawania WZ

- mamy na nim rozwiązanie własne, które dodaje WZ

Pytanie, czy jak rozwiązanie własne, dodaj WZ, to zadziałają funkcję Sfery Zdarzeniowej, która jest na tym podmiocie? Jeśli, nie, to czy można takie funkcje wywołać. A idąc dalej, czy można sprawdzić, jakie pakiety są odpalone, tak jak to widać w oknie pod skrótem Ctrl+Shif+H. Teraz chyba wyczerpałem pytanie.

Link to postu
27 minut temu, Radomił Ząbik napisał:

Chodzi o triggery zdarzeń sferycznych - bazodanowych w temat nie mieszam ;)

Odnosiłem się do triggerów bazodanowych.

 

22 minuty temu, Radomił Ząbik napisał:

Ok racja, skrót myślowy, bo w sumie Sfera zdarzeniowa, to forma triggera. Aczkolwiek, opisując to nomenklaturą Insert, to wyszło by coś na zasadzie, czy Sfera, zadziała w Sferze ;)

Mamy sferę obiektową i sferę zdarzeniową (nomenklatura z Navireo).

 

24 minuty temu, Radomił Ząbik napisał:

Chodzi o to:

- mamy podmiot, do którego mamy dodaną Sferę zdarzeniową, która coś wykona powiedzmy podczas dodawania WZ

- mamy na nim rozwiązanie własne, które dodaje WZ

Pytanie, czy jak rozwiązanie własne, dodaj WZ, to zadziałają funkcję Sfery Zdarzeniowej, która jest na tym podmiocie? Jeśli, nie, to czy można takie funkcje wywołać. 

Powinno to działać analogicznie jak triggery bazodanowe, czyli nie jest ważne co uruchomi zdarzenie ze sfery zdarzeniowej - programy InsERT, rozwiązanie wykorzystujące sferę obiektową czy operacja wykonywana w sferze zdarzeniowej (analogicznie działa to w Navireo).

 

27 minut temu, Radomił Ząbik napisał:

A idąc dalej, czy można sprawdzić, jakie pakiety są odpalone, tak jak to widać w oknie pod skrótem Ctrl+Shif+H. Teraz chyba wyczerpałem pytanie.

Obecnie uruchamianie są wszystkie rozwiązania dodatkowe zainstalowane w podmiocie(dla odróżnienia w Navireo można określić czy ma być włączone, czy nie z dokładnością do operacji, zdarzenia).

  • Dziękuję 1
Link to postu
×
×
  • Dodaj nową pozycję...