Skocz do zawartości

Rodzaj asortymentu - czy można dodać inne?

Polecane posty

Rodzaj na ten moment jest czymś dla samego działania programu (pewnie w przyszłości się pojawi opcja własnych typów, tak jak ostatnio wprowadzone dokumenty własne) - nie da się tworzyć własnych.

 

Można prosić o info po co? Bo pewnie można to zrealizować polem własnym albo cechą/grupą/działem.

Edytowane przez Ernest Sadowski
Link to postu

Tak jak wspomniał Pan Ernest, nie ma możliwości dodania własnych rodzajów asortymentu. Aktualnie można to rozwiązać w następujący sposób:

  1. Utworzyć pole własne asortymentu przechowujące te 3 pierwsze znaki nazwy grupy.
  2. Użyć pola własnego w numeracji symboli.
  3. Wypełnić pole 3 pierwszymi znakami nazwy grupy sferą zdarzeniową.

W przypadku zagadnień związanych ze sferą zdarzeniową zachęcam do kontaktu z lokalnym serwisantem, których listę można znaleźć poniżej:

Link to postu

Proszę o podpowiedź czy dobrze próbuję napisać poniższy kod sfery zdarzeniowej?

public class UzupelnienieSkrotuGrupyAsortymentu : KlientSferyZdarzeniowej<IAsortyment>
{
    private const string ALIAS_POLA_WLASNEGO = "Skrót grupy";

    public override void PoZmianieWlasciwosciObiektu(IKontekstZdarzeniaPoZmianieWlasciwosciObiektu<IAsortyment> kontekst)
    {
        if (PoleWlasneSkrotGrupyIstnieje(kontekst.Uchwyt)
            && kontekst.Dane is Asortyment asortyment)
        {
            asortyment.PolaWlasneAdv2.Set(ALIAS_POLA_WLASNEGO, StworzSkrotGrupy(asortyment.Grupa_Id));
        }
    }

    private string StworzSkrotGrupy(string skrotgrupy)
    {
        if (String.IsNullOrWhiteSpace(skrotgrupy)
            return null;

        return skrotgrupy.Substring(0, 3);
    }

    private bool? _poleWlasneSkrotGrupyIstnieje;
    private bool PoleWlasneSkrotGrupyIstnieje(IUchwyt uchwyt)
    {
        if (!_poleWlasneSkrotGrupyIstnieje.HasValue)
        {
            var zaawansowanePolaWlasne = uchwyt.PodajObiektTypu<IZaawansowanePolaWlasne>();
            _poleWlasneSkrotGrupyIstnieje = zaawansowanePolaWlasne.PosiadaZaawansowanePoleWlasne<Asortyment>(ALIAS_POLA_WLASNEGO);
        }

        return _poleWlasneSkrotGrupyIstnieje.Value;
    }
}

 

Link to postu

Idea jest ok, ale kilka rzeczy trzeba dociągnąć ;)

1. Przy reagowaniu na zmiany własności jakiegoś obiektu warto określić, że chcemy reagować tylko na zmianę tego co nas interesuje. W powyższym kodzie nawet zmieniając nazwę, opis czy uwagi będzie się uruchamiała Pana procedura. Można wtedy skorzystać z IKontekstCzegośTamWSferzeZdarzeniowej.NazwaWlasnosci mniej więcej tak:

if (PoleWlasneSkrotGrupyIstnieje(kontekst.Uchwyt)
    && kontekst.Dane is Asortyment asortyment
    // wykonujemy kod TYLKO gdy zmieniła się grupa
    && kontekst.NazwaWlasciwosci == nameof(Asortyment.Grupa))
{
  //...
}

2. Do funkcji StworzSkrotGrupy próbuje Pan podać identyfikator grupy. Już pomijając fakt, że encja Asortyment nie posiada własności Grupa_Id ;) zakładam, że chce Pan tam podać NAZWĘ grupy żeby z niej wyciągnąć trzy pierwsze znaki. Wtedy po prostu przechodząc od asortymentu do ustawionej grupy pobieramy jej nazwę:

asortyment.PolaWlasneAdv2.Set(ALIAS_POLA_WLASNEGO, StworzSkrotGrupy(asortyment.Grupa?.Nazwa));

Małe wyjaśnienie odnośnie tego "pytajnika" - grupa może NIE być ustawiona wtedy własność asortyment.Grupa zwróci null co jest prostą drogą do ulubionego wyjątku programistów C# - odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu. Ten znak zapytania zabezpiecza nas przed tym i jeśli to co jest przed nim jest null'em to całe wyrażenie również zwraca null. Oczywiście można to też zapisać jawnie:

asortyment.PolaWlasneAdv2.Set(ALIAS_POLA_WLASNEGO, StworzSkrotGrupy(asortyment.Grupa == null ? null : asortyment.Grupa.Nazwa));

3. Tutaj:

if (String.IsNullOrWhiteSpace(skrotgrupy)

brakuje nawiasu na końcu przez co kod się nie skompiluje. Dodatkowo piętro niżej zwraca Pan null - lepiej zwrócić pusty ciąg znaków ("" lub string.Empty).

 

Poza tym powinno być OK.

 

  • Lubię to 1
Link to postu

Proszę o wskazówkę (link do instrukcji?) w jaki sposób "zainstalować" kod w programie. Dziękuję.

 

Poprawiony kod:

public class UzupelnienieSkrotuGrupyAsortymentu : KlientSferyZdarzeniowej<IAsortyment>
{
    private const string ALIAS_POLA_WLASNEGO = "Skrót grupy";

    public override void PoZmianieWlasciwosciObiektu(IKontekstZdarzeniaPoZmianieWlasciwosciObiektu<IAsortyment> kontekst)
    {
        if (PoleWlasneSkrotGrupyIstnieje(kontekst.Uchwyt)
            && kontekst.Dane is Asortyment asortyment
			&& kontekst.NazwaWlasciwosci == nameof(Asortyment.Grupa))
        {
            asortyment.PolaWlasneAdv2.Set(ALIAS_POLA_WLASNEGO, StworzSkrotGrupy(asortyment.Grupa?.Nazwa));
        }
    }

    private string StworzSkrotGrupy(string skrotgrupy)
    {
        if (String.IsNullOrWhiteSpace(skrotgrupy))
            return string.Empty;

        return skrotgrupy.Substring(0, 3).ToUpper();
    }

    private bool? _poleWlasneSkrotGrupyIstnieje;
    private bool PoleWlasneSkrotGrupyIstnieje(IUchwyt uchwyt)
    {
        if (!_poleWlasneSkrotGrupyIstnieje.HasValue)
        {
            var zaawansowanePolaWlasne = uchwyt.PodajObiektTypu<IZaawansowanePolaWlasne>();
            _poleWlasneSkrotGrupyIstnieje = zaawansowanePolaWlasne.PosiadaZaawansowanePoleWlasne<Asortyment>(ALIAS_POLA_WLASNEGO);
        }

        return _poleWlasneSkrotGrupyIstnieje.Value;
    }
}

 

Edytowane przez Marek K
Dodano .ToUpper()
Link to postu

Najlepiej jest skorzystać z szablonów projektów dla Visual Studio. Proszę spojrzeć do dokumentacji SDK w sekcji Pierwsze kroki -> Szablony projektów dla Visual Studio gdzie opisana jest instalacja szablonów. Kompilując projekt utworzony na bazie jednego z szablonów (tutaj najlepiej wybrać oczywiście szablon "Sfera zdarzeniowa") jest tworzony automatycznie instalator rozwiązania, którym można łatwo wdrożyć swoje rozwiązanie na bazie nexo.

Link to postu

Chciałbym poszerzyć kod tak aby pobierał nazwę szablonu asortymentu (na podstawie, którego tworzę asortyment), a następnie ustawiał grupę to tej samej nazwie. Zakładając, że stworzę grupy i szablony o takich samych nazwach.

Czy jest to możliwe?

Proszę o wskazówkę jak zapisać nazwę szablonu do zmiennej.

Edytowane przez Marek K
Link to postu
×
×
  • Dodaj nową pozycję...