Neuerstellung eines Master Keys im Secure Store nicht moeglich


Heute bin ich mal wieder ueber ein komisches Problem gestossen. Ich habe versuct, einen neuen Master Key fuer den Secure Store zu erstellen. Lustigerweise bekam ich immer wieder dieselbe Meldung:

Failed to generate/refresh key due to error:Secure Store Service did not performed the operation.

Auch die folgenden Meldungen sagten nicht viel aus:

The Secure Store Service application Secure Store Service Proxy is not accessible. The full exception text is: A previously issued token has not expired. New token will not be issued till the previously issued token expires.

und

Unexpected exception from endpoint address : https://<server&gt;:32844/61aa03399387449d9ba88aaa0715b633/SecureStoreService.svc/https

 

Ich hatte noch nie Probleme damit gehabt, und musste danach feststellen, dass es sich um ein simples Security Problem handelte. Der Account, welcher den Key erstellen will, brauch full access zur Secure Store Service Application.

SecStoreSettings

 

 

 

 

 

 

 

 

 

 

Danach war es kein Problem mehr
So long, Samuel

Business Connectivity Database is in compatibility range and upgrade is recommended -en-


Since SharePoint 2013 Public Update March 2013 there is a problem in Central Admin -> Manage Databases Upgrade Status where the Business Connectivity Database shows, that it is in compatibility Range and Upgrade is recommended.

DB_BDCUpgradeNeeded

Normally you can use PSCONFIG.EXE -cmd upgrade -inplace b2b (found in the c:\program files\common files\microsoft shared\webserver extensions\15\bin) to upgrade any database in compatibility mode. Also the Upgrade-SPContentDababase Command would be handy, if it was a Content Database. As in our scenario nothing of it works, I did some investigation and found, that it could be done with the Provision() method of the SharePoint API. There it states:

Weiterlesen

Mehrsprachigkeit für SharePoint 2013 mit Fokus “Collaboration”


In einem aktuellen projekt haben wir uns gefragt, wie wir in einem Kollaborativen Umfeld einige Seiten mit Mehrsprachigkeit versehen können. Wie in unserem Beispiel die Collaboration Community, die einerseits Informationen in D, FR und IT beinhaltet, jedoch im Grossteil entweder in der Corporage Language, oder in einer jeweiligen Landessprache, wenn alle Beteiligten die Sprache beherrschen. Es kann auch mal gemischter Content sein, Collaborative eben.

Natürlich könnten wir Variations benutzen, das wäre das naheliegende. Aber dann wäre die Diskussion in der Community auch getrennt, und dass will man ev. nicht. Ausserdem extra eine Publishing Seite machen, schien mir nicht zielführend, da es sich eben um eine Kollaborative seite handelt. SharePoint 2013 macht es mir ja einfach, Script Blöcke einzubauen, also hab ich mir überlegt, ob es nicht mit Javascript klappen könnte, die Browsersprache raus zu popeln und anhand dieser auf Sprachseiten (aspx Wikipages) zu routen. Nach ein paar Anläufen, mit tollen Hilfe von Thorsten Hans und Kevin Mees ist es uns dann gelungen, einen entsprechenden Script zu bauen.

Die Funktionsweise ist ziemlich simpel. Die Homepage der Community ist eine leere Seite, welche nur Javascript enthält und anhand der Browsersprache auf die richtige Home Seite verzweigt. Die sprachabhängigen Homeseiten wiederum enthalten zum Einen Text in der jeweiligen Sprache aber auch wiederverwendbare Elemente wie z.B. die Community Members. So haben wir dieselbe Datenbasis mit mehrsprachigen Info-Seiten.

Weiter war uns wichtig, dass de-ch, de-de, de-at oder fr und fr-ch gleich behandelt werden, und auch da haben wir eine Lösung gefunden. Wir beachten einfach die ersten zwei Zeichen.

Als Sahnehäubchen sind Wikipages ja eben Wikipages, und auf jeder Sprachseite implementieren wir noch DE | [[Community-Home-fr|FR]] | [[Community-Home-it|IT]] damit jederzeit auf eine andere Sprache umgeschaltet werden kann.

Multi Language Support

Und natürlich hier der Javascript, welcher verwendet wurde um auf die Sprachseiten (Wikipages) zu verzweigen

var browserLanguage = window.navigator.userLanguage || window.navigator.language;
var redirectTo = "/topic/collaborationcommunity/SitePages/Community-Home-de.aspx";
switch (browserLanguage.substring(0,2)) {
  case "de":
  break;
  case "fr":
  redirectTo ="/topic/collaborationcommunity/SitePages/Community-Home-fr.aspx";
  break;
  case "it":
  redirectTo ="/topic/collaborationcommunity/SitePages/Community-Home-it.aspx";
  break;
  default:
  break;
}
window.location = redirectTo;

Nicht jeder Browser ist gleichschnell, z.B. der IE ist mit Javascript langsam, und es dauert eine halbe Sekunde bis der Redirect erfolgt. Chrome sieht man keinen switch.

Für die langsamen Browser haben wir noch die allgemeinen elemente auf die Home Seite gepackt, und per loading gif ein asynchrones Laden der Seite simuliert.

loading

Das sieht dann so aus:

CommunitySwitch

So sind die User glücklich, auch wenn der Browser eine halbe Sekunde zum umschalten braucht, und wir haben eine sehr einfache und günstige Lösung für diese Bereiche einer Kollaborationsplattform, die eben ggf. trotzdem Mehrsprachig sein sollen.

So long, Samuel

Was fehlt eigentlich in Office 365 gegenüber on Premise?


Office 365 bzw. SharePoint 2013 Online vs. SharePoint 2013 on Premise. Genau diese Frage habe ich mir gestellt, und bin in einer Übersicht auf dem Technet fündig geworden. Grundsätzlich ist es nicht diese Gegenüberstellung, doch ich habe mir die Mühe gemacht, herauszupopeln, was denn nun von den Features in Office 365 bzw. SharePoint Online gegenüber der On Premise Version fehlt. Ich habe einfach die Features genommen, die im Online NO oder N/A haben, das ergibt den GAP zu on Premise. Natürlich sind einige davon „reine“ Admin Features, aber es hat doch ein paar gewichtige darunter, wie das Content Cross Site Publishing.

Hier die Liste: (vom Original: http://technet.microsoft.com/en-us/library/jj819267.aspx)

Feature Availlable in   O365
No
Custom Site Provisioning No
No
N/A
N/A
N/A
N/A
N/A
No
N/A
N/A
Quota Templates N/A
Read-Only Database Support N/A
Remote Blog Storage N/A
Request Management N/A
Request throttling N/A
Resource throttling N/A
N/A
N/A
N/A
Streamlined Central Administration N/A
System Status Notifications N/A
Unattached Content Database Recovery N/A
Upgrade evaluation site collections No
Usage Reporting and Logging No
No
N/A
PowerPoint Automation Services No
No
WCM: Catalog No
WCM: Cross-site publishing No
No
WCM: Image Renditions No
No
No
Word Automation Services No
No
No
No
Content Search Web Part No
No
No
No
No
Search connector framework No
No
No
No

So long, Samuel

Aus dem Alltag: Fehler beim Erstellen des BI Centers


Wenn Sie ein BI Center aus SharePoit 2013 erstellen wollen, müssen zwei Bedingungen erfüllt sein.

  1. Das Publishing Feature muss in der Site Collection aktiviert sein
  2. Performance Point muss aktiviert sein.

Fehlt das Publishing, so gibt SharePoint eine klare Ansage, dass Publishing fehlt. Beim Performance Point Feature erscheint eine allseits beliebte SharePoint Meldung:

Dependency feature ‚PPSMonDatasourceCtype‘ (id: 05891451-f0c4-4d4e-81b1-0dabd840bad4) for feature ‚BICenterDataConnections‘ (id: 3d8210e9-1e89-4f12-98ef-643995339ed4) is not activated at this scope.

Super, damit kann ich ja wiedermal viel anfangen Trauriges Smiley. Aus diesem Grund dieser Blogpost, Perfromance Point Feature aktivieren und los geht’s.

image

image

image

image

So long, Samuel

Probleme bei der Installation von SharePoint (Configuration Database Fail)


Problem

Wieder einmal in meinem SharePoint Leben bin ich auf ein neues Problem gestossen. Beim laufen lassen des Configuration Wizzards hatte ich folgende Fehlermeldung:

Failed to create the configuration database.
An exception of type System.Collections.Generic.KeyNotFoundException was thrown. Additional exception information: The given key was not present in the dictionary.
System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
at System.ThrowHelper.ThrowKeyNotFoundException()
at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
at Microsoft.SharePoint.Utilities.SPUtility.GetUserPropertyFromAD(SPWebApplication webApplicaiton, String loginName, String propertyName)
at Microsoft.SharePoint.Administration.SPManagedAccount.GetUserAccountControl(String username)
at Microsoft.SharePoint.Administration.SPManagedAccount.Update()
at Microsoft.SharePoint.Administration.SPProcessIdentity.Update()
at Microsoft.SharePoint.Administration.SPApplicationPool.Update()
at Microsoft.SharePoint.Administration.SPWebApplication.CreateDefaultInstance(SPWebService service, Guid id, String applicationPoolId, SPProcessAccount processAccount, String iisServerComment, Boolean secureSocketsLayer, String iisHostHeader, Int32 iisPort, Boolean iisAllowAnonymous, DirectoryInfo iisRootDirectory, Uri defaultZoneUri, Boolean iisEnsureNTLM, Boolean createDatabase, String databaseServer, String databaseName, String databaseUsername, String databasePassword, SPSearchServiceInstance searchServiceInstance, Boolean autoActivateFeatures)
at Microsoft.SharePoint.Administration.SPWebApplication.CreateDefaultInstance(SPWebService service, Guid id, String applicationPoolId, IdentityType identityType, String applicationPoolUsername, SecureString applicationPoolPassword, String iisServerComment, Boolean secureSocketsLayer, String iisHostHeader, Int32 iisPort, Boolean iisAllowAnonymous, DirectoryInfo iisRootDirectory, Uri defaultZoneUri, Boolean iisEnsureNTLM, Boolean createDatabase, String databaseServer, String databaseName, String databaseUsername, String databasePassword, SPSearchServiceInstance searchServiceInstance, Boolean autoActivateFeatures)
at Microsoft.SharePoint.Administration.SPAdministrationWebApplication.CreateDefaultInstance(SqlConnectionStringBuilder administrationContentDatabase, SPWebService adminService, IdentityType identityType, String farmUser, SecureString farmPassword)
at Microsoft.SharePoint.Administration.SPFarm.CreateAdministrationWebService(SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword)
at Microsoft.SharePoint.Administration.SPFarm.CreateBasicServices(SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword)
at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, IdentityType identityType, String farmUser, SecureString farmPassword, SecureString masterPassphrase)
at Microsoft.SharePoint.Administration.SPFarm.Create(SqlConnectionStringBuilder configurationDatabase, SqlConnectionStringBuilder administrationContentDatabase, String farmUser, SecureString farmPassword, SecureString masterPassphrase)
at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.CreateOrConnectConfigDb()
at Microsoft.SharePoint.PostSetupConfiguration.ConfigurationDatabaseTask.Run()

Lustigerweise war die ConfigDB aber vorhanden:

Ursache

Die Fehlermeldung lässt den Schluss zu, dass das Problem offenbar nicht in SharePoint liegt. (at Microsoft.SharePoint.Utilities.SPUtility.GetUserPropertyFromAD(SPWebApplication webApplicaiton, String loginName, String propertyName)).
Ausserdem hat es wohl mit den Managed Accounts zu tun (at Microsoft.SharePoint.Administration.SPManagedAccount.GetUserAccountControl(String username))

Nach etwas Suchen, fand ich heraus, dass es sich um Probleme mit den Read Berechtigungen im Active Directory handelt.

Lösung

Offensichtlich hat Ihr AD Administrator entschieden, nicht alle Attribute freizugeben. Gehen Sie zur Lösung wie folgt vor:

  1. Lassen Sie eine AD Gruppe erstellen
  2. Alle managed Accounts (Farm, Services, Crawl, WebAppPool) in die Gruppe einfügen
  3. Die Gruppe auf Domain Ebene mit Read all Attributes berechtigen

Danach funktioniert die Installation.

so long, Samuel

User direkt zur Benachrichtigungsfunktion senden


Kennen Sie das Szenario?

Sie möchten gerne, dass sich die User Company News abonieren, damit alle Mitarbeitenden direkt informiert werden, wenn es neue Mitteilungen auf dem Intranet gibt. Nun muss man ihnen heute erklären, wie sie (z.B. im Falle eines Blogs, welcher sich super zum Erfassen von News eignet) sich mühsam zur Liste der Posts navigieren und dort ihre Alerts einstellen müssen. Dies kann ganz einfach umgangen werden, indem Sie den Usern den direkten Link auf die News Abonierung zur Verfügung stellen.

In der Layoutsfolder gibt es die Standardseite SubNew.aspx, die für die Erfassung von Benachrichtigungen vorgesehen ist. Nachfolgend eine Beschreibung, wie man nun den Link zusammenschustert:

Wir brauchen also als erstes den Link zu dieser Seite: http://www.yourdomain.com/managedpath/sitecollection/site/_layouts/SubNew.aspx

Als nächstes wird als Parameter die Listen ID übergeben, in der Notation: ?List={BDE4649E-0825-4E6A-B931-638844C43BFF}

Die ID in den Klammern {} ist die List ID der Liste oder Bibliothek, für welche Sie die Benachrichtigung erstellen wollen. Sie erhalten die ID, indem Sie in die Listeneinstellungen gehen, und dann sehen Sie die ID der Liste im Link.

image

Der Link sieht z.B. dann so aus: “http://www.sharepointcommunity.ch/tt/_layouts/listedit.aspx?List=%7BBDE4649E%2D0825%2D4E6A%2DB931%2D638844C43BFF%7D” wobei Sonderzeichen natürlich uminterpretiert werden müssen: %7B={ und %2D= und %7D = } Die ID der Liste ist somit: {BDE4649E-0825-4E6A-B931-638844C43BFF}

Damit der User bei Cancel oder nach einem Klick auf OK nicht zu der Liste zurückgeführt wird, hängen wir der URL noch ein Ziel an, wo der User danach landen soll, in der Notation: &Source=/managedpath/sitecollection/site

Das wars, nun haben wir zusammengesetzt den gesamten Link: http://yourdomain.com/managedpath/sitecollection/site/_layouts/SubNew.aspx(List={BDE4649E-0825-4E6A-B931-638844C43BFF}&Source=/managedpath/sitecollection/site

Mit dem Schnellstart oder als Eintrag in einer Hyperlink Liste können sie so von überall her dem User die Möglichkeit geben, sich auf eine beliebige Liste zu subscriben.

So long, Samuel