Customizing the Links SharePoint App to open links into new window using XSL Link

 

This article describe a simple way to format Links App web parts using XSL Link for SharePoint Server 2013 and SharePoint Online from Office 365.

Description

Into a Links app you can add new items by specifying URL, Description and Notes. By default all links stored in this lists are opened into the same windows/tab. This article purpose a new way to open links into another tab/windows by using a custom XSL file, without any programming skills or tools.

Remarks

There are many articles on the internet that are demonstrating the use of custom applications, JavaScript or programming languages. Other articles are referring to other type of links. (see References section)

Tested in SharePoint Server 2013 and SharePoint online from Office 365.

How it works

 

  1. Create a default Links app (Add an app, select Links, type the name example Links and press Ok).
  2. Open site contents, Site Assets, and upload the XSL file.
  3. Copy the shortcut of uploaded xsl file into your clipboard.
  4. Edit your page and insert Links App part.
  5. Check the webpart from page and select Web part Properties from Ribbon.
  6. From the right side expand Miscellaneous and paste your clipboard into the XSL Link text box and click Apply

How to add the XSL as XSL Link for Links App

Press Ok and Save the page.

XSL File

The file could be downloaded from Technet Gallery from the address:  https://gallery.technet.microsoft.com/Open-SharePoint-Links-into-76550ff1

<?xml version=”1.0″ encoding=”UTF-8″?>
<!–
#Project: Open Links in New Tab v1
#Author: Valy Greavu, MVP
#Date: 2014-11-26
#Version comment:
1:-
–>

<!– XLS Link SharePoint Definition –>
<xsl:stylesheet xmlns:x=”http://www.w3.org/2001/XMLSchema”
        xmlns:d=”http://schemas.microsoft.com/sharepoint/dsp”
        version=”1.0″
        exclude-result-prefixes=”xsl msxsl ddwrt”
        xmlns:ddwrt=”http://schemas.microsoft.com/WebParts/v2/DataView/runtime”
        xmlns:asp=”http://schemas.microsoft.com/ASPNET/20″
        xmlns:__designer=”http://schemas.microsoft.com/WebParts/v2/DataView/designer”
        xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
        xmlns:msxsl=”urn:schemas-microsoft-com:xslt”
        xmlns:SharePoint=”Microsoft.SharePoint.WebControls”
        xmlns:ddwrt2=”urn:frontpage:internal”>

    <xsl:output method=”html” indent=”no”/>
    <xsl:template match=”/” xmlns:x=”http://www.w3.org/2001/XMLSchema”>

    <!– Defining variable userd for all records from a Links list –>
    <xsl:variable name=”Rows” select=”/dsQueryResponse/Rows/Row” />
    <!– Display the list as a unsorted list. Also you can choose to create a table. –>   
    <ul>
        <xsl:for-each select=”$Rows”>
            <xsl:variable name=”LinkUrl”>
                <xsl:value-of select=”@URL”/>
            </xsl:variable>   
            <xsl:variable name=”LinkTitle”>
                <xsl:value-of select=”@URL.desc”/>   
            </xsl:variable>
            <li>
                <a href=”{$LinkUrl}” target=”_blank”>
                    <xsl:value-of select=”$LinkTitle” />
                </a>
            </li>
        </xsl:for-each>
    </ul>
    </xsl:template>

</xsl:stylesheet>   
<!– EOF –>

References

Validare CNP în #Excel și #SharePoint

După un concediu înfiorător de relaxant și o săptămână groaznică de acomodare, astăzi nu mi-am propus dar am reușit să încep cu ”motoarele în flăcări”. :)

Se face că un bun prieten are o mică problemă de rezolvat în SharePoint și anume aceea de validare a unor CNP-uri introduse într-o listă. Ce ar fi putut fi mai simplu, nu? :)

Ca să ajungi la o coloană calculată în SharePoint trebuie să ai ceva cunoștințe de Excel… așa că am pornit în realizarea formulei întâi în Excel.

Am aflat de un miraculos număr: 279146358279 pe care mulți colegi tehnici nu îl înțeleg dar pentru care am găsit o explicație pe comunitatea utilizatorilor de FoxPro:

”Scopul cifrelor de control este să semnaleze dacă vreuna din cifrele utile a fost schimbată. Există o întreagă terorie a cifrelor de control și o gramada de algoritmi cu diferite toleranțe. In cazul codurilor până la 10 cifre algoritmul respectiv folosește numerele prime de o cifră in ordine descrescăstoare: 7, 5, 3, 2, 1, după care se repetă până se acoperă lungimea codului. Este un algoritm cu o toleranță foarte mică la erori.

In cazul codurilor mai mari de 10 cifre se folosește un algoritm mai complicat ținându-se cont și de alte elemente, cum ar fi în cazul CNP faptul că cifrele de pe anumite poziții nu pot avea orice valoare. Totuși algoritmul nu este perfect, se poate vedea clar că cifra de control este 1 în cazul în care  restul împărțirii la 11 este 1 sau 10. Cu alte cuvinte CNP-urile 1640228240011 și 2640228240011 sunt amandouă valide deși diferă doar o cifră, deci un baiat ar putea fi confundat cu o fată fără ca eroarea să fie sesizată de un computer.”

Pentru cei care nu cunosc structura CNP se pot informa la adresa: http://www.hangman.ro/cnp/. Tot la această adresă mai explicată odată constanta de verificare.

Varianta de lucru în Excel

Să revenim la modelul de validare în Excel. Descărcați fișierul Validare CNP. În prima foaie de calcul există un model descompus al metodei de calcul:

ValidareCNP Descompus

În foaia a doua, este un tabel care face o îmbinare a validărilor din celulele S, T, U si V.

ValidareCNP Compus

Pentru cei care nu pot descărca fișierul formula de calcul este:

=IF(AND(INT(MID([@CNP];13;1))=IF(MOD(2*INT(MID([@CNP];1;1))+7*INT(MID([@CNP];2;1))+9*INT(MID([@CNP];3;1))+1*INT(MID([@CNP];4;1))+4*INT(MID([@CNP];5;1))+6*INT(MID([@CNP];6;1))+3*INT(MID([@CNP];7;1))+5*INT(MID([@CNP];8;1))+8*INT(MID([@CNP];9;1))+2*INT(MID([@CNP];10;1))+7*INT(MID([@CNP];11;1))+9*INT(MID([@CNP];12;1));11)=10;1;MOD(2*INT(MID([@CNP];1;1))+7*INT(MID([@CNP];2;1))+9*INT(MID([@CNP];3;1))+1*INT(MID([@CNP];4;1))+4*INT(MID([@CNP];5;1))+6*INT(MID([@CNP];6;1))+3*INT(MID([@CNP];7;1))+5*INT(MID([@CNP];8;1))+8*INT(MID([@CNP];9;1))+2*INT(MID([@CNP];10;1))+7*INT(MID([@CNP];11;1))+9*INT(MID([@CNP];12;1));11));INT([@CNP])>0);”CNP CORECT”;”CNP GRESIT”)

Adaptare în SharePoint

După ce am obținut formula concatenată în Excel, implementarea în SharePoint este doar o adaptare a acesteia.

Se crează așadar o listă simplă personalizată în care am schimbat coloana Title cu CNP și am mai adăugat o coloană nouă Stare de tip calculated column. Valoare coloanei calculate este:

=IF(AND(INT(MID(CNP,13,1))=IF(MOD(2*INT(MID(CNP,1,1))+7*INT(MID(CNP,2,1))+9*INT(MID(CNP,3,1))+1*INT(MID(CNP,4,1))+4*INT(MID(CNP,5,1))+6*INT(MID(CNP,6,1))+3*INT(MID(CNP,7,1))+5*INT(MID(CNP,8,1))+8*INT(MID(CNP,9,1))+2*INT(MID(CNP,10,1))+7*INT(MID(CNP,11,1))+9*INT(MID(CNP,12,1)),11)=10,1,MOD(2*INT(MID(CNP,1,1))+7*INT(MID(CNP,2,1))+9*INT(MID(CNP,3,1))+1*INT(MID(CNP,4,1))+4*INT(MID(CNP,5,1))+6*INT(MID(CNP,6,1))+3*INT(MID(CNP,7,1))+5*INT(MID(CNP,8,1))+8*INT(MID(CNP,9,1))+2*INT(MID(CNP,10,1))+7*INT(MID(CNP,11,1))+9*INT(MID(CNP,12,1)),11)),INT(CNP)>0),”CNP CORECT”,”CNP GRESIT”)

Izbitor de asemănător, nu? :)

Rezultatul:

Validare CNP Lista SharePoint 2013

În cazul în care vă propuneți să realizați formula în InfoPath pentru validarea funcției trebuie să știm că există o serie de diferențe printre care: funcția MID() este înlocuită cu funcția substring(), funcția MOD() nu există ci este înlocuită de operatorul mod care nu funcționează la fel ca cel din Excel, și altele printre care inexistența atât de utilului IF-THEN-ELSE.

Evaluarea CNP-ului în timp real

Să trecem la puțină treabă de MVP :)

Așadar, ”clientul” dorește ca după ce a completat câmpul de CNP să-i apară în mod automat, fără să dea submit, ca în exemplul anterior, dacă CNP-ul a fost completat corect sau nu:

image

În ecranul curent apar pe lângă starea de validare încă două variabile de lucru.

Starea este calculată în InfoPath prin compararea stării unor câmpuri calculate cu xPath. După cum spuneam în paragraful anterior în xPath nu avem IF-THEN-ELSE. În schimb în articolul Conditional Default Values putem vedea mai multe metode de înlocuire a IF-ului.

Personal am testat și utilizat metoda:

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

Ca să ajung în schimb la rezultatul final, trebuie menționat că xPath nu suportă funcții logice imbircate (IF-uri în IF-uri) de aceea a trebuit să separ într-o variabilă de lucru denumită nan2 rezultatul unei funcții logice intermediare:

NAN2:

substring(CNP; 13; 1) = concat(substring(1; 1; (nan = 10) * string-length(1)); substring(nan; 1; (not(nan = 10)) * string-length(nan)))

nan-ul în formulă este de faptu modul calculat de interpretare a formulei de validare a CNP-ului.

NAN:

(2 * substring(CNP; 1; 1) + 7 * substring(CNP; 2; 1) + 9 * substring(CNP; 3; 1) + 1 * substring(CNP; 4; 1) + 4 * substring(CNP; 5; 1) + 6 * substring(CNP; 6; 1) + 3 * substring(CNP; 7; 1) + 5 * substring(CNP; 8; 1) + 8 * substring(CNP; 9; 1) + 2 * substring(CNP; 10; 1) + 7 * substring(CNP; 11; 1) + 9 * substring(CNP; 12; 1)) – 11 * (ceiling((2 * substring(CNP; 1; 1) + 7 * substring(CNP; 2; 1) + 9 * substring(CNP; 3; 1) + 1 * substring(CNP; 4; 1) + 4 * substring(CNP; 5; 1) + 6 * substring(CNP; 6; 1) + 3 * substring(CNP; 7; 1) + 5 * substring(CNP; 8; 1) + 8 * substring(CNP; 9; 1) + 2 * substring(CNP; 10; 1) + 7 * substring(CNP; 11; 1) + 9 * substring(CNP; 12; 1)) / 11) – 1)

Starea finală este determinată printr-un alt șir de evaluare care are legătură cu NAN2.

Starea:

concat(substring(„CNP CORECT”; 1; (nan2 = „true”) * string-length(„CNP CORECT”)); substring(„CNP GRESIT”; 1; (not(nan2 = „true”)) * string-length(„CNP GRESIT”)))

Concluzii

Câteva ore bune de muncă dar o statisfacție pozitivă că dacă îți pui ceva în cap doar lenea te poate ține departe de rezultate.

Sper să fie util cuiva!

How To Run An Effective Sharepoint Pilot Project

Any large software solution implementation involves a pilot project that should test the platform’s capability of meeting some long term objectives. The decision to run a pilot project should be made by taking into consideration some variables specific for the company, such as:

  • The level of knowledge and experience of the administrators team;
  • The training needs for the support team of level 1 and 2;
  • An applicability study on the future platform’s structure and the emulation of the information flow inside the organization;

A pilot project must be the main assessment support for the future platform and applications that will be used. A key component is the estimation of the storage space that will be allocated for the feature project, the type and the sizes of the files, how the files will be loaded and the information source.

Blog la WordPress.com.

SUS ↑