Dezvoltări, trei demo-uri scurte.
Construim doar pe DocNativ: înlocuiește html2pdf și rapoartele .RDL
Toate formularele noi se construiesc pe DocNativ. html2pdf și .RDL ies din uz.
Împingem o colecție de formulare gata făcute, care servește și ca referință estetică.
Colecția se actualizează singură la client; fiecare formular are versiuni.
De aici înainte, un formular nou înseamnă un șablon Microsoft Word.
Tehnologie Microsoft Word standard: câmpuri, grupuri, imagini. Nimic proprietar în fișier.
Fiecare «câmp» din Word e o coloană din procedura SQL. Ex: «DOC», «DATA», «UNITATE». Se inserează din Word: Insert → Quick Parts → Field → MergeField.
Un grup repetă o zonă pentru fiecare rând de date. «BeginGroup:row» … «EndGroup:row» = documentul; «BeginGroup:pozitii» … «EndGroup:pozitii» pe un rând de tabel = câte un rând pentru fiecare poziție. Grupurile se pot imbrica.
«Image:siglafirma» pune logo-ul firmei. Switch-urile Word controlează formatul: \* Upper (majuscule), \# "#,##0.00" (numere), \@ "dd.MM.yyyy" (date). PAGE / NUMPAGES pentru „Pagina X din Y”.
Șablon Word Bon de consum «DOC» «BeginGroup:pozitii» «nr» «DENUMIRE» «UM» «cant» «pret» «valoare» «EndGroup:pozitii»
Document generat
Bon de consum BC-1024
1 Ciment sac 10 25,00 250,00
2 Nisip mc 2 80,00 160,00
Dacă știi Word, știi să faci un formular.
Ovidiu Chiș
Andras
Un formular din colecția standard: șablon Word → date din ASiS → document generat.
Unealta mea preferată din ASiS.— un coleg
Rapoarte instant, fără efort de proiectare.
Același XML (antet, coloane, date), același apel. Diferența:
atributul
actiune.
declare @px xml set @px = ( select 'Cautare ' + @f_serie numeFisier, @actiune actiune, (select * from #coloane for xml raw, type) coloane, (select * from #date for xml raw, type) date, (select 'Sheet1' numeSheet, 14 _font_dim, 'bold' _font_atribut, '#ffffff' _culoare, '#1e2161' _culoare_fundal for xml raw, type) info, (select * from #antet for xml raw, type) antet for xml raw ('row')) exec GenExcelsauVizualizare @sesiune = @sesiune, @parXML = @px
Excel, ca până acumImplicit când lipsește
actiune. Fișierul .xlsx se generează prin
AsisService și se descarcă.
VizorXML-ul se salvează în
md.fistemp și se deschide
./vizor?uid=…: filtrare în header, coloane la
alegere, export.
De unde vine acțiuneaDin parametrii apelului:
@parXML.value('(//@actiune)[1]'), deci același
buton poate oferi ambele.
Ovidiu Chiș
Vlad
Deschid un Vizor → filtrez din header → ascund coloane → export.
Integrăm interfețe moderne, care deservesc mai bine scopul clientului
Pagini web obișnuite, infuzate cu date din ASiS.
Hărți, grafice și orice componentă JavaScript de pe piață.
Clientul primește ecranul de care are nevoie, în aplicația pe care o are deja.
Datele din ASiS în orice interfață vrei.
Două utilizări distincte: deschidere modală, din operație, sau tab propriu, din meniu.
-- în procedura operației (wOP…) set @xml = ( select @parXml.value('/*[1]/@uidTab','varchar(50)') uidTab, 'https://…/specifice/tb-26/tb-cazare.html' url, 90 procent -- % din înălțime for xml raw('deschideIframe')) select @xml for xml raw('Mesaje') select 1 inchideFereastra for xml raw, root('Mesaje')
-- configurare, o singură dată webConfigMeniu Meniu = 'ASIS_WEB', TipMacheta = 'IFRAME' webConfigTipuri Descriere = 'https://…/tb-26/tb-harta.html' ProcDate = 'wIaHartaOvidiu' -- opțional -- din orice operație (sau direct din meniu, fără cod) select 'ASIS_WEB' meniu, '' tip, '' subtip for xml raw('deschideTab'), root('Mesaje')
Ovidiu Chiș
TudorDorian
O interfață modernă (harți, grafice, componente noi) cu date din ASiS, deschisă din ASiS.
Securizare și API-uri moderne
Alex
ASiS vorbește cu orice sistem prin „linkuri”.
Un rând în tabelă = un endpoint HTTP. Procedura SQL decide status code, content type și conținut.
-- înregistrare: o linie → /asisservice/linkuri/ext/invoice_strr/{bd} insert into webConfigLinkuri(proceduraSql, codLink) values ('wScriuApelAPIeTarifare', 'invoice_strr') -- intrare: totul vine în @parXML @parXML.value('(/row/headers/row/@x-asis-auth)[1]', …) -- header @parXML.value('(/row/cale/row/@valoare)[1]', …) -- segment URL @parXML.value('xs:base64Binary(row[1]/@continut)', …) -- body POST -- ieșire: codul HTTP și conținutul, din SQL select (select 409 statusCode, 'application/json' contentType for xml raw, root('RaspunsLink')), (select 'ERROR' status, 'DUPLICATE_TRANSACTION' code, 'Tranzactie duplicata!' message for json path, without_array_wrapper) raspString
CRM ↔ ERP · 2023/asisservice?codlink=terti, comenzi,
nom, sold… GET/POST/PUT, hash de
securitate în URL, răspuns for json path cu
paginare și lastUpdate.
STRR → ASiS · 2025 (eTarifare)refresh_strr: cheie în header → token valabil 30
de zile. invoice_strr: 400 body lipsă sau JSON
invalid, 401 token, 409 duplicat, 200 → coada
STRR_Facturi. Swagger publicat.
Același mecanism, altă maturitateTabela și procedura n-au schimbat forma. S-a schimbat cât controlează SQL: de la un select brut la cod HTTP, validări și mesaje de eroare clare.
AI-ul scrie documentația în fișiere Markdown (.md). Din ele iese un manual web, ușor de actualizat și de publicat. Două exemple:
Pe Azure SQL Dev Hub, Microsoft publică skill-uri gata făcute pentru asistenții AI: le arată cum să lucreze corect cu SQL Server și Azure SQL.
microsoft.github.io/azure-sql-dev-hub