Reporting Services: Zostava modifikujúca údaje v DB

Publikoval Michal Kočí dňa 12.8.2006 o 16:21 v kategórii SQL

Stalo sa Vám niekedy, že ste potrebovali niekomu sprístupniť tabuľku, kde môže meniť zopár údajov a nechcelo sa Vám programovať kvôli tomu novú aplikáciu? Alebo ste niekedy rozmýšlali nad tým, ži cez nejaké známe rozhranie (SharePoint, Reporting Services, ...) ide povoliť modifikácia údajov uložených v DB? A viete, že sa dá spraviť zostava do Reporting Services, ktorá bude vedieť jednoducho modifikovať dáta v DB?

Občas máme požiadavku na povolenie modifikácie istej malej množiny údajov v databáze. V závislosti od rozsahu menených údajov a samozrejme od miesta ich uloženia (DB, súbory, SharePoint, ...) následne prijímame rozhodnutie, ako užívateľom modifikáciu povoliť. Obvykle ide o širšiu množinu údajov (viac stĺpcov jednej tabuľky, či dokonca viac tabuliek) a vtedy je pre užívateľa príjemné mať komfortné užívateľské rozhranie. Naposledy však vyvstala požiadavka modifikovať práve jeden stĺpec tabuľky, pričom na identifikáciu záznamu ktorý sa ide meniť slúžil ďaľší stĺpec tej istej tabuľky. Konkrétne podľa mena užívateľa bolo potrebné do tabuľky zaznačiť jeho login, ktorý sa hlási do externého systému. No a toto je presne prípad, kedy programovanie aplikácie podľa môjho názoru nemá zmysel. Lenže, aké prostredie použiť (zneužiť) tak, aby sa táto požiadavka dala splniť?

Šťastie nám prialo, pretože presne v tom období, kedy sme mali priniesť nejaké riešenie publikoval Jonathan Spink na serveri SQL Server Central článok A Report to Display and Edit User 'Rights', ktorý zjednodušene popisuje, ako spraviť zostavu, ktorá okrem zobrazenia dát umožní aj ich modifikáciu. Celý fígeľ spčíva v tom, že ako zdroj zostavy nie je SELECT príkaz, ale uložená procedúra. Tá vždy vráti dátovú množinu, ak jej však sú zaslané aj isté parametre, potom pred vrátením dátovej množiny dôjde k ich editácii.

V našom prípade report funguje nasledovne:

  • Zostava obsahuje dva parametre - Meno užívateľa (combo box) a Login do systému (text box)
  • Parameter Meno užívateľa obsahuje okrem všetkých užívateľov aj položku <Iba zobrazenie>
  • Ak je vybratá položka <Iba zobrazenie> tak zostava nemodifikuje dáta v databáze
  • Ak je vybratá iná položka než <Iba zobrazenie>, potom sa vybranému užívateľovi zmení login na ten, ktorý je vyplnený ako Login do systému
  • Defaultná hodnota parametra Meno užívateľa je práve <Iba zobrazenie>, aby pri prvotnom spustení nedošlo omylom ku zmene dát z dôvodu neznalosti zostavy
  • Zostava obsahuje upozornenie, že dokáže modifikovať dáta spolu s detailným popisom jej fukncionality
Týmto je zabezpečené, že ak si zostavu užívateľ zobrazí prvý krát, nedôjde k modifikácii dát a užívateľ bude upovedomený o funkcionalite zostavy. Je to podľa mňa dôležité, pretože zostavy by primárne mali slúžiť iba na zobrazenie údajov, nie na ich modifikáciu. Keďže je ale vývoj takéhoto riešenia jednoduchý, a upozornením by sa mali eliminovať ľudské chyby na minimálnu mieru, akceptujeme vo firme toto riešenie ako také, u ktorého akceptujeme porušenie predchádzajúceho pravidla (zostava = iba čítanie údajov). Záleží však samozrejme od vkusu...

Uložená procedúra u nás vyzerá nasledovne. Ak dostane parameter @OperatorId rovný -1 (čo je hodnota voľby <Iba zobrazenie>), potom modifikáciu záznamu nevykoná, inak nastaví login na hodnotu parametra @UserLogin (ak je ako hodnota poslaný prázdny reťazec, bude táto nastavená na NULL).

create procedure rep_loginy
(
    @OperatorId int,
    @UserLogin varchar(8)
)
as
begin
 
  if @OperatorId <> -1
  begin
 
    if @UserLogin = '' set @UserLogin = NULL
 
      update
        operators
      set
        user_login = @UserLogin
      where
        operator_id = @OperatorId
 
  end
 
  select        
    op.user_name,
    op.user_login
  from
    operators op
  order by
    op.user_name
 
end

Ako vždy pri navrhovaní riešenia, aj pri tomto je potrebné dôkladne zvážiť pre a proti. Pre hovorí najmä jednoduchá implementácia a možnosť použiť štandardné programovvé vybavenie. Proti hovorí najmä možné zmiatnutie užívateľov tým, že cez reportovací systém menia údaje. Komu sa však zdajú plusy prevyšujúce mínusy, tomu iste tento spôsob riešenia príde vhod. Nám vhod rozhodne prišiel.

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.