Files

1.8 KiB

CRM10 — Operacje masowe

Wspólne fakty o typie, podstawowe typy i szablon wzorca: ../crm.md.

CRM-W18 — Operacje na zbiorze kontrahentów

Cel: wykonać operację na wielu kontrahentach efektywnie i bezpiecznie.

Warianty:

Wariant Mechanizm
Iteracja z warunkiem serwerowy LINQ crm.Kontrahenci[(Kontrahent k) => …] (patrz rowcondition.md)
Masowa aktualizacja jedna transakcja, paczki (patrz safe-code.md)
Masowa zmiana formy prawnej worker ZmienFormePrawnaKontrahentowWorker
Masowe przypisanie kategorii worker KontrahenciPrzypiszKategorieWorker
Masowa weryfikacja VAT/VIES (online) KontrahenciBialaListaWorker, KontrahenciDaneZMfWorker, KontrahenciDaneZViesWorker
Eksport / import datapack / business.xml (patrz datapack-guidedrow.md)

Snippet:

var crm = session.GetCRM();

// Masowa zmiana: ustaw blokadę sprzedaży dla kontrahentów bez NIP — filtr serwerowy + 1 transakcja
using (var t = session.Logout(editMode: true))
{
    foreach (Kontrahent k in crm.Kontrahenci.WgKodu[(Kontrahent k) =>
                 k.NIP == null && k.StatusPodmiotu == StatusPodmiotu.PodmiotGospodarczy])
    {
        k.BlokadaSprzedazy = true;
    }
    t.Commit();
}
session.Save();

Pułapki:

  • Nie ładuj całej tabeli do pamięci — filtr serwerowy (SubTable[condition]).
  • Duże operacje dziel na paczki (krótkie transakcje), by nie blokować innych użytkowników i nie zwiększać ryzyka konfliktu optymistycznego (safe-code §13.1).
  • Workery masowe (*Worker na typie Kontrahenci) mają property [Context] Kontrahent[] — przy użyciu programowym ustaw tablicę zaznaczonych rekordów.