W SDK do nexo znajduje się przykład "nexoPolaWlasne2", który pokazuje wszystkie możliwości API dostępowego do nowych pól własnych. Fragment kodu, który przytoczył Pan na początku tego postu pochodzi właśnie z przykładu "nexoPolaWlasne2". Jest on długi, dlatego że pokazuje wszystkie możliwości pracy ze słownikiem czyli odczyt wszystkich wartości słownika, odczyt klucza obcego z pola i zapis klucza obcego w polu.
Oczywiście w realnym rozwiązaniu własnym można to skrócić, a więc w Pana przypadku:
zamiast:
var towarPW = towarBO.Dane.PobierzEncjeZaawansowanychPolWlasnych();
var niebieski = sfera.PodajObiektTypu<ISlownikiWlasne>()["kolory"].Znajdz("niebieski").Dane;
towarPW.UstawWartoscPola("Poleslownikowe2", niebieski);
będzie:
var poleSlownikowe2 = zaawansowanePolaWlasne.PobierzZaawansowanePoleWlasne<Asortyment>("Poleslownikowe2");
var slownikWlasny = (ISlownikoweZrodloDanych<int, PozycjaSlownikaWlasnego>)poleSlownikowe2.PobierzDefinicjeSlownika();
var pozycjaNiebieska = slownikWlasny.UtworzZapytanieLinqTypowane().First(p => p.Wartosc == "niebieski");
towarBO.Dane.PolaWlasneAdv2.Set<int?>("Poleslownikowe2", pozycjaNiebieska.Id);
Jeśli chodzi o pętlę, to będzie analogicznie:
zamiast:
string dictk; string dictv; string dictn;
foreach(dynamic dict in results.dict) {
dictk = dict.k; dictn = dict.n; dictv = dict.v;
var wartoscslownika = sfera.PodajObiektTypu<ISlownikiWlasne>()[dictk].Znajdz(dictv).Dane;
towarPW.UstawWartoscPola(dictn,wartoscslownika); }
będzie:
string dictk; string dictv; string dictn;
foreach(dynamic dict in results.dict) {
dictk = dict.k; dictn = dict.n; dictv = dict.v;
var poleWlasne = zaawansowanePolaWlasne.PobierzZaawansowanePoleWlasne<Asortyment>(dictn);
var slownikWlasny = (ISlownikoweZrodloDanych<int, PozycjaSlownikaWlasnego>)poleWlasne.PobierzDefinicjeSlownika();
var wartoscslownika = slownikWlasny.UtworzZapytanieLinqTypowane().First(p => p.Wartosc == dictv);
towarBO.Dane.PolaWlasneAdv2.Set<int?>(dictn, wartoscslownika.Id); }