SharePoint+SPServices: Jednoduchá kontrola unikátnosti IČ společnosti s možností uložení i v případě duplicity

SharePoint verze 2010 a novější obsahuje v definici sloupce volbu Vynutit jedinečné hodnoty – tato volba zajistí, že pokud máte například seznam dodavatelských společností a chcete vynutit jejich unikátnost pomocí sloupce IČ, můžete jednoduchým zatržením volby funkci aktivovat. Funkce má však několik much a pro tento způsob kontroly se zrovna nehodí, problémy jsou minimálně dva:

  • Co pokud chci jenom kontrolu s možností uložení? Později budu chtít například ukládat i pobočky společností se stejným IČ?
  • Co když uživatel v jednom případě vyplní formát jako 28708636 a druhý jako 287 08 636?

[more]

    V tomto případě je už nutné sáhnout po kustomizaci pomocí javascriptu a vytvořit malý script, který sjednotí formát, ořeže nepovolené znaky a ve finále i zkontroluje duplicitu IČ s možností uložení.

    Pro příklad jsem použil volně dostupnou javascript knihovnu SPServices na http://spservices.codeplex.com/, která obsahuje spoustu užitečných funkcí pro každodenní použití, za zmínku určitě stojí kaskádové seznamy, zobrazení souvisejících informací z lookupu, našeptávač (autocomplete), filtr dropdownu, vyplnění defaultních hodnot atd., více přímo v dokumentaci http://spservices.codeplex.com/documentation

    Prerequisity jsou rovněž popsány v dokumentaci, je potřeba jQuery a SPServices scripty nahrát do knihovny SharePoint a přidat reference do masterpage, případně do samotné stránky formuláře, více v detailní dokumentaci na CodePlexu.

    <script language="javascript" type="text/javascript" src="/jQueryLibraries/jquery-1.11.0.min.js"></script>

    <script language="javascript" type="text/javascript" src="/jQueryLibraries/jquery.SPServices-2014.01.min.js"></script>

    Pak už jen vložit následující script na stránku formuláře, kde chcete provádět kontrolu:

    $("input[title='IČ']").bind('keypress', function (event) {
        var regex = new RegExp("^[a-zA-Z0-9]+$");
        var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
    });
    
    $("input[title='IČ']").bind("change", function () {
        var input = $(this),
            text = input.val().replace(/[^a-zA-Z0-9-_\s]/g, "");
        if (/_|\s/.test(text)) {
            text = text.replace(/_|\s/g, "");
        }
        input.val(text);
    });
    
    $().SPServices.SPRequireUnique({
        columnStaticName: "ICSpolecnosti",
        duplicateAction: 0,
        ignoreCase: true,
        initMsg: "IČ musí být unikátní.",
        initMsgCSSClass: "ms-vb",
        errMsg: "Společnost se zadaným IČ již existuje!",
        errMsgCSSClass: "ms-formvalidation",
        showDupes: false,
        completefunc: null
    });

    Výsledek:

    image

    Script lze samozřejmě jednoduše upravit tak, aby mimo zobrazení upozornění, byl uživatel při uložení záznamu také vyzván dialogem k potvrzení, že je si vědom duplicity a zda opravdu chce nový záznam s tímto IČ opravdu založit.