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.