47 lines
1.8 KiB
Markdown
47 lines
1.8 KiB
Markdown
# CRM10 — Operacje masowe
|
|
|
|
> Wspólne fakty o typie, podstawowe typy i szablon wzorca: [../crm.md](../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`](../rowcondition.md)) |
|
|
| Masowa aktualizacja | jedna transakcja, paczki (patrz [`safe-code.md`](../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`](../datapack-guidedrow.md)) |
|
|
|
|
**Snippet:**
|
|
|
|
```csharp
|
|
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.
|
|
|
|
---
|
|
|