SharePoint Person/Group Column with REST API

With SharePoint REST API you can iterate through all columns. But what happens when you want to display a Person/Group column like the Author? You will get a User ID as a result.

To display the “Authors Full Name” instead of the ID just use the parameter $expand.

var listname = "My List";
var url =  _spPageContextInfo.webAbsoluteUrl + 
  "/_api/web/lists/getbytitle('"+listName+"')/items?
  "$select=Id,Title,Created,Author/Title&amp"+;
  "$top=20&amp"+;
  "$orderby=Created desc&amp"+;
  "$expand=Author";
...
$.ajax({
 url: url ,
 method: "GET",
 headers: {"Accept": "application/json; odata=verbose" },
 success: function (data) {
   if(data.d.results.length >0){
    for (var i = 0; i < data.d.results.length; i++){
     data.d.results[i].Author.Title
    }
   }
 }
...

And if you need to use the filter based on the Person/Group column here is how to declare it:

var urlPI = _spPageContextInfo.webAbsoluteUrl +
       "/_api/web/lists/getbytitle('"+listName+"')/items?"+
       "$select=Author,Author/Title"+
       "$top=5000"+
       "$orderby=Created desc"+
       "$expand=Author&"+
       "$filter=Author eq '"+_spPageContextInfo.userId+"'";

.

Current User with SPService

To get the current user info just use the SPServive to retrive all information you need.

var thisUsersValues = $().SPServices.SPGetCurrentUser({
fieldNames: [“Title”, “EMail”, “Office”, “LastName”, “FirstName”, “WorkPhone”],
debug: false
});
console.log(“Display name: “+ thisUsersValues.Title);

Validation on SharePoint forms

In some cases there is a business requirement where you need a mendatory column even if it isn’t as a mendatory column defined. Therefore you can use the standard .Net validation.

  • Open SharePoint Designer and create a new form.
  • Go to the place where you need an additional validation and disable the SharePoint control.
    Create a new .Net control by using asp:Textbox.
    Please keep in mind that your control should use the same ID. Use “__designer:bind” as well.
    For a better understanding what’s going on with the ddwrt:DataBind visit this site (http://www.bryancook.net/2009/09/understanding-sharepoints-ddwrtdatabind.html).
  • change the PropertyName and eventName from ‘Value’,’ValueChanged’ to ‘Text’,’TextChanged’
  • Add JavaScript Event

<!– New control –>
<span id=”suvNr”><asp:TextBox onkeydown=”return isNumberKey(event);”  runat=”server” id=”ff1{$Pos}” __designer:bind=”{ddwrt:DataBind(‘i’,concat(‘ff1’,$Pos),‘Text’,‘TextChanged’,’ID’,ddwrt:EscapeDelims(string(@ID)),’@Suppliernumber’)}” type=”number”/>
< /span><span id=”suvNrValidate”></span>

< !– Disable the SharePoint control: –>
<!–<SharePoint:FormField runat=”server” id=”ff1{$Pos}” ControlMode=”New” FieldName=”Suppliernumber” __designer:bind=”{ddwrt:DataBind(‘i’,concat(‘ff1′,$Pos),’Value’,’ValueChanged’,’ID’,ddwrt:EscapeDelims(string(@ID)),’@Suppliernumber’)}”/>
–>

  • disable the SharePoint Save Buttons and insert new one

<!– Original SharePoint Save Button must be disabled –>
<!– <SharePoint:SaveButton runat=”server” ControlMode=”New” id=”savebutton1″/>–>
<!– new Button Control –>
<input name=”Submit” type=”submit” value=”Submit” style=”font-size: 11px; width: 126px;” onclick=”javascript: if (!PreSaveAction()) return false; {ddwrt:GenFireServerEvent(‘__commit;__redirect={/sitedirectory/mm/SitePages/Home.aspx}’)}”/>

  • Add jQuery Script

<script type=”text/ecmascript” src=”http://code.jquery.com/jquery-1.11.1.js”></script>

  • Add Script

<script>
/* Disable the save control from the ribbon */
$( document ).ready(function() {
$( “a:contains(‘Save’)” ).css( “visibility”, “hidden” );
});

/* allows only characters*/
function isNumberKey(evt){
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode > 31 && (charCode < 48 || charCode > 57) && (charCode > 105 || charCode < 96))
{
alert(“Only characters are allowed!”);
return false;
}
return true;
}

/* Do actions before save form */
function PreSaveAction()
{
var valueSUV = $(“span#suvNr input”).val();
if(valueSUV.length > 0)
{
$( “span#suvNrValidate” ).text( “” );
return true;
}
$( “span#suvNrValidate” ).text( “You must specify a value for this required field.” );
$( “span#suvNrValidate” ).css({“color”:”red”,”padding-left”:”3px”});
}
</script>

Level of compliance in percentage and color

Display level of compliance in color and percentage.

=”<div style=’background-color:#a41515;text-align:left’>

<div style=’background-color:#20763a;width:”&ROUND([Phase 5]*100;0)&”%;’>

<div style=’text-align:center;width:100%;color:#fff;padding-left:2px;padding-right:2px;white-space:nowrap !important;word-wrap:normal !important’>”&ROUND([Phase 5]*100;0)&”%</div>

</div>”&”</div>”

SharePoint 2010 Kalenderview auf eine bestimmte Zeitspanne voreinstellen

Im SharePoint 2010 ist es möglich mittels dem URL QueryString die Kalenderview auf eine bestimmte Zeitspanne voreinzustellen. Dies kann durch das Anpassen des Links erfolgen:

http://IHREADRESSE/Lists/KALENDERNAME/calendar.aspx?CalendarDate=1/16/2012

CalendarDate=MM/DD/YYYY

Leider funktioniert der QueryString nach dem SP1 nicht mehr. Es wird lediglich die Darstellungszeile aktualisiert aber nicht die Termine. Diese werden nicht dargestellt.

Fix

Abhilfe kann dies durch Anpassung des QueryStrings erfolgen. Hier muss nur die Datumreihenfolge umgestellt werden:

…/calendar.aspx?CalendarDate=2012-1-16

CalendarDate=YYYY-MM-DD

Quelle: Blog sharepointwarrior

MasterPage PlaceHolder-Elemente

In der MasterPage sind PlaceHolder Elemente enthalten die als Platzhalter definiert werden. Es gibt PlaceHolder Elemente die zwingend erforderlich sind und die die je nach Anforderung hinzugefügt werden.

PlaceHolder Element Required
SiteActionMenu yes
PlaceHolderSearchArea yes
PlaceHolderMiniConsole yes
PlaceHolderHorizontalNav yes
PlaceHolderGlobalNavigationSiteMap yes
PlaceHolderBodyAreaClass yes
PlaceHolderGlobalNavigation no
PlaceHolderCalendarNavigator no
PlaceHolderBodyRightMargin no
PlaceHolderBodyLeftBorder no
PlaceHolderAdditionalPageHead no
onetidProjectPropertyTitle no
DesignModeConsole no

 

Definition der PlaceHolder Elemente

SiteActionMenu: Zeigt das Site Action Menü auf sofern die entsprechenden Berechtigungen existieren.
image

<PublishingSiteAction:SiteActionMenu runat="server"/>

PlaceHolderSearchArea: Platzhalter für die Suchboxen. In MOSS und MSSEX wird zusätzlich die erweiterte Suche angeboten.
image

<asp:ContentPlaceHolder id="PlaceHolderSearchArea" runat="server">
   <SharePoint:DelegateControl runat="server" ControlId="SmallSearchInputBox"/>
</asp:ContentPlaceHolder>

PlaceHolderMiniConsole: Plaziert die Mini Console z.B. für ein WiKi.
image

<asp:ContentPlaceHolder id="PlaceHolderMiniConsole" runat="server"/>

PlaceHolderHorizontalNav: Listet die einzelnen Hauptnavigationspunkte auf.
image

<asp:ContentPlaceHolder id="PlaceHolderHorizontalNav" runat="server">
  <%– YOUR MENU HERE –%>
</asp:ContentPlaceHolder>

PlaceHolderGlobalNavigationSiteMap: Zeigt das Site Action Menü auf sofern die entsprechenden Berechtigungen existieren.
image

<PublishingSiteAction:SiteActionMenu runat="server"/>

PlaceHolderBodyAreaClass: Nur für Style definition gedacht! Diese gilt für das body Style der Page.

<asp:ContentPlaceHolder id="PlaceHolderBodyAreaClass" runat="server"/>

PlaceHolderGlobalNavigation: Zeigt das Site Action Menü auf sofern die entsprechenden Berechtigungen existieren.
image

<asp:ContentPlaceHolder id="PlaceHolderGlobalNavigation" runat="server">
<%– YOUR TOP BAR HERE –%>
</asp:ContentPlaceHolder>

PlaceHolderCalenderNavigator: Zeigt das Site Action Menü auf sofern die entsprechenden Berechtigungen existieren.
image

<asp:ContentPlaceHolder id="PlaceHolderCalendarNavigator" runat="server" />

PlaceHolderBodyRightMargin: Rechter Abstand zum BrowserRahmen
image

<asp:ContentPlaceHolder id="PlaceHolderBodyRightMargin" runat="server">
<div class="ms-pagemargin"><IMG SRC="/_layouts/images/blank.gif" width=10 height=1 alt=""></div>
</asp:ContentPlaceHolder>

PlaceHolderBodyLeftBorder: Abstandselement auf der Einstiegsseite zwischen der Quick Launch und dem Bodyframe
image

<asp:ContentPlaceHolder id="PlaceHolderBodyLeftBorder" runat="server">

PlaceHolderAdditionalPageHead: Für die Plazierung von ergänzenden Header Informationen. Man kann dies ebenfalls dazu verwenden um eigene CSS einzubinden.
image

<asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead" runat="server"/>

onetidProjectProtertyTitle: Fügt den Site Titel als Link ein Seitentitel als Link ein
 image

<SharePoint:SPLinkButton runat="server" NavigateUrl="~site/" id="onetidProjectPropertyTitle">
    <SharePoint:ProjectProperty Property="Title" runat="server" />
</SharePoint:SPLinkButton>

DesignModeConsole: Zeit den “Edit Bar” welcher während der Bearbeitung der Seite zur Verfügung steht.
imageimage

<asp:ContentPlaceHolder ID="WSSDesignConsole" runat="server">
  <wssuc:DesignModeConsole id="IdDesignModeConsole" runat="server"/>
</asp:ContentPlaceHolder>

Excel Services veröffentlichen auf dem SharePoint Server nicht möglich

Excel verweigert den Zugriff zum localen SharePoint Server. Die Eingabe der URL wird nicht unterstützt!

Für diverse Test habe ich eine virtuelle Testumgebung geschaffen die wie folgt aussieht: Windows Server 2008/SP1, SharePoint Server 2007, SQL Server 2008, Office Enterprice 2007, SharePoint Designer 2007, Visual Studio 2008.

Nun began ich Excel Services auszuprobieren und bin dabei auf ein Problem gestossen. Es war mir nicht möglich ein Excel Workbook mittels der Funktion Veröffentlichen–> Excel Services auf dem SharePoint Server zu publizieren. Siehe Bild.

In der Adressleiste als auch im Feld Dateiname war mir nicht möglich die URL einzugeben. Sobald ich die URL eingetippt und bestätigt habe erhielt ich die Meldung: “Path does not exist.  Check Path and try again”.

Nach einigen Google-Treffern bin ich auf das Blog von Andrew gestossen. Er beschreibt das mittels der Option Desktop Experience, die als Server Features definiert ist, Abhilfe geschaffen wird. Siehe Bild:

Nach der Installation und Server Restart kann der Zugriff mittels der URL erfolgen. Excel kann nun die URL als SharePoint Listen und Bibliotheden auflisten. Siehe Bild.

Fazit: Eine unscheinbare Option mit grosser Auswirkung für die Testumgebung.

AutoCount selbst bestimmen

Die Standard AutoWert Berechnung ist nicht immer zuverlässig. Es gibt Konstellationen bei dem der AutoWert nicht immer eindeutig ist. Um eine Eindeutigkeit zu erreichen, ist es daher von Vorteil, den AutoWert selbst zu berechnen.

Die Ausführung kann sowohl auf der Schaltfläche als auch in der _upCustomPump.asp erfolgen. Das Beispiel zeigt hier die Ausführung auf der Schaltfläche:

<%
Set l_spPump = Server.CreateObject(“UpHtmlDbTools.UpDataPump”)
l_SQLQuery = “SELECT Max(lid) + 1 As MaxCount FROM xappautocount ”
l_spPump.QueryInit l_spSess, l_SQLQuery
l_MaxLid = l_spPump.value(“MaxCount”)
l_spPump.CloseQuery

if l_lLid = -1 and l_MaxLid = 0 then
l_MaxLid =1
end if
%>

document.forms[0].xcount.value = ‘<%= l_MaxLid %>’;