IF-THEN-ELSE in xPath

Există multă documentație și exemple pe Internet legate de utilizarea condițiilor IF-THEN-ELSE în formularele personalizate în InfoPath din SharePoint. De ce încă despre InfoPath? Pentru că este încă un produs suportat în versiunea de SharePoint 2016 și a fost prelungit suportul pentru InfoPath 2013. De ce xPath? Pentru că va mai rezista ceva timp.

În modimage clasic în xPath 1.0, cel care poate fi folosit pe formularele InfoPath 2013, nu există o sintaxă de tip IF-THEN-ELSE dar există o adaptare a acesteia, oarecum mai complicată dar care funcționează inclusiv pentru IF-uri imbricate.

În mod simplificat sintaxa este:

concat(
substring(TrueResult, 1, (BoolCondition) * string-length(TrueResult)),
substring(ElseResult, 1, (not(BoolCondition)) * string-length(ElseResult))
)

Formula poate fi scrisă pe mai multe rânduri sau pe un singur rând caracterele Enter nefiind interpretate în execuție. O altă formă a IF-THEN-ELSE-ului este prezentată în forma:

concat(
    substring(TrueResult, 1 div BoolCondition),
    substring(ElseResult, 1 div not(BoolCondition))
    )

Din punctul meu de vedere formula în schimb nu este la fel de exactă, rezultatul pentru True fiind de multe ori altertat, mai ales când se operează cu numere.

 

Introducerea unei noi condiții pe ramura IF-THEN transformă formula în:

concat(
    substring(
            concat(
                substring(
                    TrueResult1
                    , 1, (BoolCondition) * string-length(
                    TrueResult1
                    )),
                substring(
                    ElseResult1
                    , 1, (not(BoolCondition)) * string-length(
                    ElseResult1
                    ))
                )
            , 1, (BoolCondition) * string-length(
            concat(
                substring(
                    TrueResult1
                    , 1, (BoolCondition) * string-length(
                    TrueResult1
                    )),
                substring(
                    ElseResult1
                    , 1, (not(BoolCondition)) * string-length(
                    ElseResult1
                    ))
                )
            )),
    substring(
            ElseResult2
            , 1, (not(BoolCondition)) * string-length(
            ElseResult2
            ))
    )

Condițiile folosesc operatorii clasici: =, >, etc. În cazul în care valoarea comparată în condiție este un număr trebuie să folosim funcția number(câmp).

Prezentul articol este mai mult un exemplu de calculare a unui câmp dintr-un formular pe baza alegerilor sau datelor introduse de un utilizator. Practic există și alte metode de lucru, xPath fiind una din metodele foarte dificile. Astfel, dacă avem un formular prin intermediul căruia dorim să comparăm două valori, Value1 și Value2 atunci pentru a rezolva problema trebuie să folosim următoarea formulă:

image

Formularul conține două câmpuri cu numele Value1 și Value2 și un buton care determină valoarea textului afișat prin utilizarea formulei respective:

image

Pas cu pas implementarea:

1. Am creat un formular simplu în SharePoint cu cele două coloane;

2. Am personalizat formularul în InfoPath și am adăugat butonul Compare…

3. La acțiunea butonului am pus setare valoare câmp Title la formula de mai sus.

Simplu, nu? Smile

Condițiile cumulative

În IF-uri mai avem de multe ori și condiții cumulative. Pentru a specifica acest cumul de condiții trebuie să folosim operatorul AND sau OR după caz.

Formula devine în acest caz:

concat(
    substring(TrueResult, 1, (BoolCondition1 and BoolCondition2) * string-length(TrueResult)),
    substring(ElseResult, 1, (not(BoolCondition1 and BoolCondition2)) * string-length(ElseResult))
    )

 

Exemplu de formulă pentru compararea sumară a trei valori:

concat(
    substring(„Ambele valori sunt mai mari”, 1,
        ((number(dfs:dataFields/my:SharePointListItem_RW/my:Value1)>number(dfs:dataFields/my:SharePointListItem_RW/my:Value3))
        and (number(dfs:dataFields/my:SharePointListItem_RW/my:Value2)>number(dfs:dataFields/my:SharePointListItem_RW/my:Value3))) *
        string-length(„Ambele valori sunt mai mari”)),
    substring(„Una din valori este mai mica”, 1,
        (not((number(dfs:dataFields/my:SharePointListItem_RW/my:Value1)>number(dfs:dataFields/my:SharePointListItem_RW/my:Value3))
        and (number(dfs:dataFields/my:SharePointListItem_RW/my:Value2)>number(dfs:dataFields/my:SharePointListItem_RW/my:Value3)))) *
        string-length(„Una din valori este mai mica”))
    )

Sper să vă fie util!

UAIC – The PhD Series of Doctoral Schools

După mai multe luni de muncă, studiu legislativ și operațiuni tehnice, îmi revine deosebita onoare de a anunța în nume personal lansarea publică a platformei PhD Series of Doctoral Schools din cadrul Universității Alexandru Ioan Cuza Iași.

SiglaPhDSeriesCadrul legal de funcționare al platformei este:

  • Legea Educației Naționale, nr. 1 din 5 Ianuarie 2011, Art. 168.
  • HOTĂRÂREA GUVERNULUI Nr. 681 din 29 iunie 2011, publicată în Monitorul Oficial al României, Partea I nr. 551/2011 privind aprobarea Codului studiilor universitare de doctorat.
  • Legea drepturilor de autor, Actualizata 2014. Legea 8/1996 CAPITOLUL VI: Limitele exercitarii dreptului de autor, Art. 33, modificat de LEGEA nr. 285 din 23 iunie 2004 pentru modificarea şi completarea Legii nr. 8/1996 privind dreptul de autor şi drepturile conexe, Art. I, Pct. 21.
  • Legea 8 din 1996 actualizată – privind dreptul de autor şi drepturile conexe
  • Legea 8 din 1996 actualizată noiembrie 2014  – versiune în limba engleză
  • Legea 126 din 1923 – asupra proprietăţii literare şi artistice
  • Decretul nr. 321/1956 – privind dreptul de autor
  • OG 25 din 2006 republicată – privind întărirea capacităţii administrative a Oficiului Român pentru Drepturile de Autor – Versiune actualizată la data de 27/06/2011
  • OUG 43 din 2010 – pentru modificarea unor acte normative în vederea reducerii sau simplificării administrative a unor autorizaţii/avize/proceduri ca urmare a măsurilor asumate de Guvernul României în cadrul Planului de simplificare aferent Memorandumului de înţelegere dintre Comunitatea Europeană si România, semnat la Bucureşti şi la Bruxelles la 23 iunie 2009
  • Legea 99/2011 privind aprobarea Ordonanţei de urgenţă a Guvernului nr. 43/2010 pentru modificarea unor acte normative în vederea reducerii sau simplificării administrative a unor autorizaţii/avize/proceduri ca urmare a măsurilor asumate de Guvernul României în cadrul Planului de simplificare aferent Memorandumului de înţelegere dintre Comunitatea Europeană si România, semnat la Bucureşti şi la Bruxelles la 23 iunie 2009
  • HG 1095 din 2000 – pentru aprobarea Normelor metodologice privind modul de depunere şi de distrugere a suporturilor, materialelor, fonogramelor, marcajelor holografice sau a copertelor confiscate
  • HG 974 din 2001 – privind programul de cooperare între Guvernul României şi Organizaţia Mondială a Proprietăţii Intelectuale (O.M.P.I.)
  • Convenţia din 14/07/1967 pentru instituirea Organizaţiei Mondiale a Proprietăţii Intelectuale
  • HG 401 din 2006 – privind organizarea, funcţionarea, structura personalului si dotările necesare îndeplinirii atribuţiilor Oficiului Român pentru Drepturile de Autor
  • HG 1086 din 2008 – privind stabilirea tarifelor pentru operaţiunile efectuate de Oficiul Român pentru Drepturile de Autor contra cost şi pentru aprobarea Normelor metodologice privind nivelul de constituire, condiţiile de repartizare şi de utilizare a fondului de stimulente pentru personalul Oficiului Român pentru Drepturile de Autor

Înițierea proiectului de publicare a tezelor de doctorat a fost reglementată de Hotărârea nr. 11 din din 24.06.2015 a Biroului Executiv al Consiliului de Administraţie  al Universităţii „Alexandru Ioan Cuza” din Iaşi, responsabili de implementare și reglementare fiind:

  • Prorector pentru programe de masterat şi studii doctorale, prof.univ.dr. Ovidiu- Gabriel Iancu
  • Director CSUD, prof.univ.dr. Ovidiu Cârjă
  • Şef Serviciu Asigurarea Calităţii, Gheorghe Chelaru
  • Lector dr. Valerică Greavu-Şerban
  • Secretar Șef UAIC – Oana Adriana Constandache
  • Şef Departament Media UAIC, Cristina Munteanu
  • Membrii Biroului pentru Studii Universitare de Doctorat: Nicoleta- Mihaela Leontie, Gabriela Costin și Elena-Violeta Tănase
  • economist doctorand, Dan Pîrlogeanu
  • redactor șef Editura Universității Alexandru Ioan Cuza Iași, Dana Lungu
  • Oficiul Juridic al Universității Alexandru Ioan Cuza Iași.

La ora actuală s-au publicat în cadrul platformei tezele de doctorat începând cu anul 2012 până în prezent. Pentru moment, publicul larg va avea acces doar la rezumatele tezelor de doctorat.

La ora actuală în baza de date sunt postate 731 de teze în format complet și 723 de lucrări în rezumat.

În scopul diseminării la nivel global a cercetării școlilor doctorale din cadrul UAIC, baza de date este organizată în formatul de jurnal științific de tip open access (ISSN: 2501-1375 / ISSN-L: 2501-1375​​), forma de implementare aleasă oferind cititorilor un mecanism concret de acces și citare a lucrărilor sau rezumatelor publicate. De asemenea, ISSN-L va permite în timp indexarea conținutului bazei de date în alte baze de date științifice de la nivel internațional.

Funcționalități tehnice

Accesul la baza de date se realizează prin accesul la site-ul: http://phdthesis.uaic.ro/

PhDSeries Home SiteDin partea de conținut a paginii de prezentare a site-ului, utilizatorii vor putea accesa tezele grupate pe ani și scoli doctorale în funcție de domeniul de interes.

La fiecare început de nou an calendaristic va fi lansat un nou număr al jurnalului The PhD Series of Doctoral Schools cu colecția de teze și rezumate ale tezelor susținute public în anul precedent.

Baza de date a tezelor de doctorat respectă și garanteză drepturile de autor, proprietatea intelectuală și drepturile de autor precum întreaga responsabilitate asupra conținutului lucărilor și rezumatelor publicate aparținând autorilor lucrărilor. În cazul în care unul sau mai mulți autori solicită publicarea integrală (nu în rezumat) a tezei de doctorat, vă rugăm să ne contactați la adresa de e-mail: phdthesis@uaic.ro. În baza de date se vor publica exclusiv lucrări în rezumat sau în extenso a cercetătorilor care își susțin tezele de doctorat în cadrul UAIC.

În partea din stânga sus a paginii cititorii pot regăsi caseta de căutare în care pot introduce numele unui autor sau cuvinte cheie din titlul lucrării, cuvintele cheie ale lucrării sau conținutul acesteia. În cazul în care rezultatul căutării returnează o lucrare cu conținut integral nu veți putea să o accesați în mod anonim. Doar lucrările în rezumat pot fi accesate public.

Utilizatorii autentificați beneficiază de funcționalități suplimentare de filtrare a conținutului.

PhDSeries DB Filtering

Aspecte tehnico-financiare

Din punct de vedere tehnic platforma a fost implementată pe serverele Departamentului de Calitate din cadrul UAIC, achiziționate din fonduri proprii UAIC pentru un proiect anterior. Licențele de sisteme de operare, baze de date și platforma de management al documentelor SharePoint au fost achiziționate tot prin același proiect. Valoarea totală a achizițiilor dedicate pentru Departamentul de Calitate a fost sub 15.000 Eur. Costul achizițiilor dedicate pentru baza de date a tezelor a fost de (0) zero Eur. Costurile privind consultața și implementarea tehnică a platformei SharePoint și a bazei de date cu tezele de doctorat a fost în jur de 6000 lei net în două tranșe egale.

Baze de date similare

Mulțumesc în nume personal, Conducerii UAIC pentru investirea cu încredere în implementarea acestui proiect major precum și tuturor celorlalți colegi pentru entuziasmul și determinarea cu care s-au implicat pentru clarificarea tuturor aspectelor tehnice și legislative. Sperăm să vă fie util și mulțumim pentru diseminarea acestui articol.

#SharePoint Business Forms – Liste vs Biblioteci (2)

În primul episod al acestei serii scriam despre versiunile de SharePoint care suportă personalizarea formularelor de introducere a datelor în SharePoint. În acest articol voi prezenta câteva detalii despre modul de stocare a datelor în SharePoint și modul în care luăm decizia pentru o formă de implementare sau alta.

Puțină teorie

Fiecare proces economic poate fi abstractizat: date de intrare + prelucrări + date de ieșire. În cadrul companiilor majoritatea proceselor economice sunt standardizate, fapt care permite automatizarea acestora prin utilizarea aplicațiilor financiar-contabile și nu numai.

De exemplu, la nivel simplificat procesul economic de vânzare poate fi: primim comanda de la client, livram marfa cu factura sau aviz, încasăm banii. Asta înseamnă că o aplicație trebuie să permită introducerea de date într-un formular de comandă, maparea cu o altă aplicație sau modul sau tabelă de stocuri, completarea câmpurilor de pe un formular de factură, scăderea automată a stocului, înregistrarea creanței, stingerea creanței.  Pentru aceste tipuri de procese există foarte multe soluții pe piață, de la aplicații stand-alone la aplicații ERP de tip client-server sau web-based. În funcție de furnizor sau de modulele comandate, scopul aplicațiilor ERP este de a automatiza fiecare proces economic din cadrul companiei, inclusiv pentru modulele de Marketing, HR, Clienți etc.  Fiind produse foarte scumpe, multe companii preferă să cumpere module esențiale sau doar module fără personalizări ale produsului pentru adaptarea la specificul proceselor de business locale.

În urma acestor decizii, apar o serie de procese economice și funcționale care nu sunt automatizate și care se derulează în modul clasic pe documente de hârtie (paper based) sau documente Office atașate în e-mailuri. SharePoint-ul și alte produse de document management oferă funcționalități avansate pentru gestionarea documentelor electronice, sau pentru documentele paper based scanate și încărcate electronic în aceste sisteme, cu scopul partajării, aprobării sau arhivării.

Dintr-un document Office sau PDF nu pot fi extrase informații sau date pentru realizarea rapoartelor de sinteză, de aceea, scopul prezentului articol este de a identifica metode și a propune forme electronice de înregistrare a datelor cu scopul de a obține rapoarte.

Specificul stocării datelor: liste vs formulare

Pentru a se putea instala un SharePoint are nevoie de o bază de date. Chiar dacă sunt multe articole care descriu modul de lucru al SharePoint-ului cu alte tipuri de baze de date, rămâne preferată de majoritatea implementatorilor utilizarea SQL Server cu diferitele sale variante. Trebuie să menționăm că în versiunea SharePoint 2016 nu va mai fi disponibilă versiunea de SharePoint Foundation (ediție gratuită), iar instalarea SharePoint Server pe mediile de producție folosind SQL Server Express nu este recomandată. Toate tipurile de documente (Office și PDF) sunt stocate in format hexazecimal direct în câmpuri ale bazei de date în tabela DocStreams. În Office 365 modul și locul de stocare a fișierelor este transparent față de administratori și utilizatorii finali.

Date din liste sunt stocate în mod netransparent în SharePoint dar pot fi folosite ca surse de date pentru alte liste și librării. Crearea unei liste presupune crearea structurii tabelare asemănător tabelelor din bazele de date prin definirea numelui, tipului de câmp și eventualele formatări, restricții și validări.

image

În cadrul unei liste se pot înregistra doar structuri de date normalizate, interconectarea entităților sau dinamica unor înregistrări constând în utilizarea mai multor liste. Etapa de adăugare a unei înregistrări într-o listă presupune scrierea unei singure linii, nefiind posibilă adăugarea simultană de înregistrări în mai multe liste. Folosind tehnica fluxurilor de lucru, o înregistrare creată într-o listă poate declanșa crearea unor înregistrări automate în alte liste. Pe lângă problema înregistrării dinamice a datelor, în cazul proceselor complexe listele pot avea un număr mare de coloane (maximum 276). Normal că în momentul în care se stabilește un număr de coloane atât de mare este greu de crezut că cineva se va apuca să le creeze manual. De aceea, în urmă cu ceva timp am încercat să dezvolt un script de creare a coloanelor unei liste bazându-mă pe descrierea CAML a unei liste. Puteți descărca și utiliza for free produsul CAML Creator de pe Technet. Pentru detalii de utilizare și execuție folosiți referința de pe Youtube.

Exemplu de formular pentru o cerere de avans pentru deplasare sau decontare în funcție de necesități:

image

Fiecare din câmpurile din dreapta este o coloană separată în lista asimilată de SharePoint. Modul de funcționare al acestui formular  îl voi prezenta într-un episod următor.

În partea de deconturi un angajat trebuie să completeze o serie de documente justificative.

image

În derularea procesului efectiv nu avem de unde să știm câte facturi poate aduce un om dintr-o deplasare, de aceea cel mai corect din punct de vedere al afacerii este ca aceștia să poată introduce o linie nouă pentru fiecare document justificativ. Utilizând liste de date nu putem construi linii dinamice, așa cum spuneam anterior. Dar angajatul poate trece cu virgulă sau alt separator toate facturile dintr-o categorie în același câmp și valoarea cumulată a acestora pe coloana de valoare.

Bibliotecile de formulare stochează diferit informațiile, permițând dezvoltatorului crearea unor formulare cu un număr dinamic de înregistrări. În mare parte dezavantajul acestui format este că datele nu sunt normalizate și nu pot fi văzute în SharePoint asemănător unei liste, valorile de pe linii multiple beneficiind totuși de o serie de funcții de numărare, sumă sau se pot face operațiuni de cumulare (merge).

Chiar dacă pot fi completate prin browser sau prin InfoPath Filler, stocarea datelor introduse se realizează prin intermediul fișierelor XML, a căror structură depinde de fiecare tip de aplicație în parte.

Exemplu de formular InfoPath cu completare în Browser:

image

Tipul acesta de formulare suportă un număr variabil de linii, pe baza regulilor de publicare fișierul având nume în funcție de câmpurile selectate.

Stocarea în format XML (vezi imagine) poate provoca probleme de centralizare a datelor, fiind necesară crearea unor servicii Web dedicate extragerii datelor din fișiere multiple.

image

Personal, pentru centralizare prefer o metodă semiautomată: maparea schemei XML într-un fișier Excel și importul mai multor fișiere nenormalizate în Excel.

Alte aspecte

Listele precum și formularele InfoPath suportă atașarea de fișiere pentru justificarea anumitor acțiuni în cadrul unui proces. În liste fișierele atașate vor putea fi ulterior descărcate în format Windows Explorer, în formulare, fișierele fiind reprezentate în format binar în conținutul fișierului XML final. Personal nu recomand utilizarea excesivă a fișierelor atașate pe liste sau formulare pentru că apare avantajul lipsei de acces direct la fișier. Ele pot fi indexate și regăsite ulterior prin funcțiile de search.

Semnarea electronică am explicat-o în articolul cu Fișa de lichidare. Listele nu suportă semnare electronică. Formularele permit inclusiv în browser semnarea electronică. Trebuie doar să amintesc faptul că în momentul modificării unui formular care conține semnături electronice se invalidează toate semnăturile deja aplicate pe documentele din Biblioteca de formulare.

Sursele de date pentru forlularele personalizate trebuie să aibă o dimensiune cât mai redusă cu putință. În momentul în care o sursă de date conține un număr semnificativ de înregistrări (100+), procesul de conversie al formularului în pagină web va consuma o perioadă însemnată de timp pentru a putea reprezenta toate opțiunile posibile din drop-down-urile dintr-un formular renderizat.

Cam atât pentru moment. Voi reveni într-un episod următor cu elemente de business logics, fluxurile de aprobare și un exemplu concret de formular pentru avansuri și deconturi.

O zi bună!

Blog la WordPress.com.

SUS ↑