måndag 27 augusti 2012

Programmatiskt skapa ett timestamp field i en sharepointlista

Då var det dags för lite Sharepoint. Inte min favorit-kopp té. Men ibland får man offra sig.

Fick i uppdrag att skapa en lista programmatiskt som innehåller bl.a. ett timestamp-fält. 

Eftersom jag hittat ytterst sparsamt med dokumentation och exempel kring hur man gör detta med kod så bestämde jag mig för att göra det omvända, dvs. skapa upp allt via GUI och sedan debugga och accessa fältet för att vad Sharepoint gjorde.

Det visar sig att man gör som här:
  • Sharepoint tillhandahåller alltid ett dolt fält "Created". Vill man lösa det snabbt kan man bara ändra egenskaper på detta fält så att det visas (toggla SPField-egenskapen ShowInDisplayForm), alt. lägga till det i önskad vy.
  • Det går att skapa ett s.k. "SPFieldCalculated" som läser upp innehållet från "Created" och formatterar det som ett datum.
För det senare fallet så gör man nåt i stil med:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite(siteUrl))
    {
        using (SPWeb web = site.RootWeb)
        {
            SPList list = web.Lists["test"];
            string fieldName = list.Fields.Add("Timestamptest", SPFieldType.Calculated, false);
            SPFieldCalculated field = list.Fields[fieldName] as SPFieldCalculated;
            field.Formula = "=Created";
            field.OutputType = SPFieldType.DateTime;
            field.ShowInEditForm = false;
            field.Update();
            list.Update();
            SPView defaultView = list.DefaultView;
            defaultView.ViewFields.Add(field);
            defaultView.Update();

        }
    }
});

Testar:







Et voila! En timestamp kolumn som pekar på "Created". Gött!

Inga kommentarer:

Skicka en kommentar