I wish you all a happy new year 2022 !!
It’s time for change
25 Samstag Dez 2021
Posted Uncategorized
in25 Samstag Dez 2021
Posted Uncategorized
inI wish you all a happy new year 2022 !!
19 Freitag Feb 2021
Posted Windows Server
inIch hatte heute in einer Serverwartung Probleme, dass der CPU ständig auf 100 % lief.
Grund dafür ist vor allem der NET Runtime Optimization Service gewesen in Kombination mit Microsoft Defender Antivirus. Dabei entsteht eine unangenehme Situation, vor allem wenn der Server länger nicht gewartet wird.
Was ist passiert:
Kurz ein wenig im Internet Recherchiert und dabei auf ein klassisches Problem gestoßen:
Diese beiden haben sich damit gegenseitig behindert und den gesamten Prozess verlangsamt.
Als Abhilfe habe ich daher folgende 2 Lösungsansätze gewählt:
Natürlich ist ein Server ohne aktives Sicherheitssystem kritisch, von daher habe ich den Defender danach wieder aktiviert. Doch der Server läuft jetzt wieder normal und kann die Windows Updates und alle anderen Programme ohne große Mühe laufen lassen.
CMD-Befehle:
Quellen:
14 Montag Mär 2016
Posted SharePoint 2010, SharePoint 2013
inGerade im Projekt-bereich kommt immer wieder die Anfrage, ob die Felder „Gesamtaufwand“ und „Ist-Aufwand“ aus der SharePoint Aufgabenliste mit der Outlook-Aufgabenliste gemapped werden können.
Dabei ist dies bereits automatisch hinterlegt. Im SharePoint muss dazu das Feld „Gesamtaufwand“ (Intern: TotalWork) und „Ist-Arbeit“ (Intern: ActualWork) in die Aufgabenliste übernommen werden.
Ich konnte bisher noch nicht herausfinden, wie weitere spezielle Felder ohne Anpassungen oder Programmierung (direkter Eingriff) verbunden werden können.
08 Dienstag Mär 2016
Posted SharePoint 2010, SharePoint 2013
inIn a SharePoint List „Tasks“ you have the point to open this List in MS Project.
If there are some custom / special fields / columns you would like to implement or map, you need to do this manually in MS Project. But what, if you would like do that automatically?
In SharePoint Object model there is a Property in the Task List in SharePoint „WSSSyncFieldMap“, which will be only created, if you open once the Task list in MS Project. So here a little script for you 🙂
$web = Get-SPWeb htttp://server $list = $web.Lists["Tasks"] $list.RootFolder.Properties["WSSSyncFieldMap"] = "<Fields><Field SPStaticName='PlannedEffort' ProjField='Number1'/></Fields>" $list.Update()
So in this case, the Field „PlannedEffort“ (of cource internal Field name in the Task List, maybe you created another field) in SharePoint is mapped to MS Project Column „Number 1“.
The only and really important thing is, that you can only map fields of the same Typ! And there is no error message, if you make something wrong. So please try it out once, before roll out somewhere 🙂
PS: If you running this Script via XML, don’t forget to change < and > into < and >
07 Montag Mär 2016
Posted SharePoint 2010, SharePoint 2013
inHello,
i have a Problem with a PowerShell Script running at a Customer for SharePoint.
We are going to set Permissions to a List. This is the typically Line:
$role = $targetWeb.RoleDefinitions["Read"]
Now interesting, that this was not working at all, because the Language of the Server – customer side – was german. ^^ So the Role Definition is „Lesend„.
2016-03-07T15:15:59:321 | SGSVR096 | 4112 | w3wp | 76 | 127.0.0.180 | | 0 | Error | ***** ECSpand.SharePoint.Helpers.PowerShell.PowerShellOperations -> Execute(string scriptText, bool forwardException) | Exception occured while executing script. Exception is: System.Management.Automation.MethodInvocationException: Exception calling "Add" with "1" argument(s): "Object reference not set to an instance of an object." ---> System.NullReferenceException: Object reference not set to an instance of an object. at Microsoft.SharePoint.SPRoleDefinitionBindingCollection.Add(SPRoleDefinition roleDefinition) at CallSite.Target(Closure , CallSite , Object , Object ) --- End of inner exception stack trace --- at System.Management.Automation.Runspaces.PipelineBase.Invoke(IEnumerable input) at ECSpand.SharePoint.Helpers.PowerShell.PowerShellOperations.Execute(String scriptText, Boolean forwardException)
But in one sitecollection, it was created in english, so I could not create one script for two different language packs. What to do? Ask for the Language / all Languages? Wow no it is too long. So see, what the RoleDefinitions can give us, and see here:
### Check for all Languages $roleForFull = $targetWeb.RoleDefinitions | where type -eq "Administrator" $roleForContribute = $targetWeb.RoleDefinitions | where type -eq "Contributor" $roleForRead = $targetWeb.RoleDefinitions | where type -eq "Reader"
Best greets!
Daniel
17 Mittwoch Feb 2016
Posted ECM, SharePoint 2013, Uncategorized
inHeute zeige ich euch, wie die Zusammenarbeit von SharePoint, Nintex und dox42 zu einer Workflow-History das Leben erleichtert 🙂
Ausgangssituation:
Die Workflow History (Aufgaben und Meldungen) sollen automatisiert in ein PDF Dokument eingefügt und am SharePoint abgelegt werden.
Beschreibung:
Know-How: SharePoint Basis, Nintex Workflow Designer, dox42 (http://www.dox42.com)
Zuerst fangen wir mit der Workflow Aktion an, welche wir von dox42 erhalten haben und über den Nintex Workflow Designer einbauen:
Diese wird wie folgt konfiguriert:
DocTemplate | http://SERVER/FormServerTemplates/Dok1.docx |
FileName | test_{ID}.pdf |
Library | LIBRARY_NAME |
Parameter1_Name | Wert – WorkflowID |
Parameter1_Value | {Workflowinstanz-ID} (Zeichenkette mit { und } zusammenbauen) |
Parameter2_Name | Wert – RequestID |
Parameter2_Value | ID vom aktuellen Element |
Server URL | http://SERVER:4100/dox42service.asmx |
Your_Site | http://SERVER/SITE |
Dox42Result | Workflow-Variable: Dox42_Result |
Anschließend muss eine Word Vorlage erstellt werden. Mithilfe des dox42 Plugins können so Steuerelemente eingebaut werden:
Das Datamap wird wie folgt erstellt:
Das Ergebnis kann sich sehen lassen:
Dieser Blog-Eintrag ist anonymisiert und von allen Vertragspartnern akzeptiert worden.
Für nähere Informationen kontaktiert mich einfach, ich knüpfe hier auch gerne die Kontakte dazu.
04 Donnerstag Feb 2016
Posted SharePoint 2010, SharePoint 2013
inVor kurzem ein neues interessantes Problem. In den Bibliotheks-Einstellungen gibt es eine Option für die „Einstellungen für Standardspaltenwerte“. Das Feature selbst ist recht interessant, wenn man fest vordefinierte Ordnerstrukturen verwendet. Denn so kann für jeden Ordner auch eine Eigenschaft mitgegeben werden, nach welcher im ECM Kontext sortiert, gruppiert und gesucht werden kann. Selbst wenn der User die Dokumente nur über den Windows Explorer in den SharePoint hochlädt oder im SharePoint ohne zusätzliche Angabe von Metadaten, so wird trotzdem diese eine (oder mehrere) Eigenschaft gespeichert.
Eigentlich ein cooles Feature. Wenn man jedoch gerade in Projekt-Kontext dabei ist, Templates zu erstellen, und beim Erstellen einer Webseite auf Basis des Templates, so wird gerade solch eine Einstellung nicht mitgenommen. Grund hierfür kann z.B. sein, dass der Forms-Ordner, welcher sich in der Bibliothek versteckt, nicht vollständig kopiert wird.
Folgendes Script könnte hierbei als Workaround unterstützen:
asnp microsoft.sharepoint.powershell ## Nach Initialisierung des Snapin erst das Template laden $sourceWeb = Get-SPWeb "http://URL_DES_TEMPLATES" $sourceList = $sourceWeb.Lists["NAME_DER_BIBLIOTHEK"] $sourceFolder = $sourceList.RootFolder.SubFolders["Forms"] $sourceConfigFile = $sourceFolder.Files["client_LocationBasedDefaults.html"] # In dieser Datei sind die Informationen gespeichert ## Jetzt die neue Website laden und dorthin die Datei kopieren $targetWeb = Get-SPWeb "http://URL_DER_NEUEN_SEITE" $targetList = $targetWeb.Lists["NAME_DER_BIBLIOTHEK"] $targetFolder = $targetList.RootFolder.SubFolders["Forms"] ## Vor dem eigentlichen Kopiervorgang muss der Inhalt noch an die neue Bibliothek angepasst werden $tmpString = [System.Text.Encoding]::ASCII.GetString($sourceConfigFile.OpenBinary()).Replace([uri]::EscapeUriString($sourceList.RootFolder.ServerRelativeUrl), [uri]::EscapeUriString($targetList.RootFolder.ServerRelativeUrl)) ## Jetzt kommt der 'Kopiervorgang' (Kopieren ist mit CopyTo nicht möglich, daher muss die Datei neu erstellt werden - Achtung: UTF-8 $targetConfigFile = $targetFolder.Files.Add("client_LocationBasedDefaults.html", [System.Text.Encoding]::UTF8.GetBytes($tmpString)) ## Fertig!
Viele Grüße!
08 Montag Jun 2015
Posted SharePoint 2013
inHallo zusammen,
mein aktuelles Problem besteht darin, eine Best-Practise Methode für den Umgang mit Massendaten herauszufinden.
Grundsätzlich:
Microsoft hat als Richtlinie definiert, dass nur eine bestimmte Anzahl von Dokumenten in einer Bibliothek vorhanden sein sollten, um die Performance nicht zu beeinträchtigen. Es können jedoch Ordner innerhalb der Bibliothek verwendet werden, um Dokumente besser zu verteilen.
Die Einschränkung gilt allerdings auch für die Anzeige von Dokumenten aus einer oder mehreren Bibliotheken. Diese Einschränkungen kennen viele unter dem Begriff „Resource Throttling“.
Beispiel:
In einer Bibliothek sind 250 Ordner, in welchen jeweils 500 Dokumente abgelegt sind. Somit sind insgesamt 125.000 Dokumente in der Bibliothek, allerdings in Ordner verteilt, um damit die Microsoft Richtlinien einzuhalten. Ein Zugriff auf die Bibliothek funktioniert, da immer weniger Dokumente / Ordner angezeigt werden, als das Resource Throttling eingestellt hatte.
Problem:
Über eine eigene WebPart-Seite sollen alle Dokumente angezeigt werden, die ein bestimmtes Attribut beinhalten. Die Suche erfolgt mittels SPQuery im C# Code.
Im Beispiel-Code wird eine Webseite http://Server/demo/test_resource/SitePages/Homeapge.aspx aufgerufen, welche dieses WebPart beinhaltet.
Es geht also um den C# Code und dem SPQuery auf eine Bibliothek (SPList).
SPList list = SPContext.Current.Web.Lists["Dokumente"]; SPListItemCollection items; SPQuery query = new SPQuery(); //query.ViewFields = "<FieldRef Name='FileLeafRef'/><FieldRef Name='Title'/><FieldRef Name='ContentType'/>"; // --> Die angegebenen Informationen führten zu keinerlei verbesserung, daher auskommentiert //query.ViewFieldsOnly = true; // --> Wie oben //query.ViewAttributes = "Scope=\"Recursive\""; // --> Das bedeutet, dass die Suche über alle Ordner hinweg durchgeführt wird. Hier stürzt sich der "Resource Throttling" drauf query.Query = "<Where><Eq><FieldRef Name='ecsPersNr' /><Value Type='Text'>" + g_url_PersNr + "</Value></Eq></Where>"; // --> Die Mitgabe einer Query ist natürlich notwendig, hier in diesem Beispiel eine bestimmte Nummer //query.QueryThrottleMode = SPQueryThrottleOption.Override; // --> Hier habe ich versucht, das Resource Throttling zu überschreiben, was allerdings zu keinem Ergebnis geführt hat SPFolder listFolder = list.RootFolder.SubFolders["0" + a.ToString().Trim()]; // --> Mit der Übergabe eines gezielten Ordners konnte ich schließlich innerhalb der Resource Throttling bleiben query.Folder = listFolder; // http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spquery.folder(v=office.15).aspx items = list.GetItems(query);
Es gab mehrere Lösungsansätze, allerdings hat keines zu einem Sauberen Ergebnis gebracht.
Außerdem habe ich noch zusätzlich ein weiteres Problem in dem oben genannten Code. Die Definition des Ordners mittels dem SPFolder.
Der Vorteil daraus ist natürlich, dass die SPQuery Suche nur noch in dem Ordner durchgeführt wird.
Der Nachteil ist allerdings, dass der Aufruf mittels SPFolder länger dauert, da dieser erst den Ordner „finden“ muss. Dadurch dauert der Vorgang einige Sekunden länger.
Problem 2:
Wenn im Code „Rekursiv“ hinterlegt ist, so sucht ja der Query über alle Ordner hinweg… gibt man aber ein SPFolder mit, so muss erst einmal Zeit für das laden des SPFolder geopfert werden, damit einem dann aber das Resource Throttling vom SharePoint nicht in die Knie zwingt.
Sind also alleine für den „Suchvorgang“ bereits mehr als 5.000 Elemente zur Verfügung gestellt, in denen gesucht wird, so klappt das nicht. -> Einschränkung wäre dann eben mittles Bibliotheken arbeiten. Nur ist die Frage, wie man schneller auf das gewünschte SPFolder kommt.
Soviel dazu. Falls jemand noch weitere Idee hat probiere ich diese gerne aus!
Viele Grüße!
03 Mittwoch Jun 2015
Posted SharePoint 2013
inSchönen guten Morgen zusammen!
SharePoint hat im Standard einen Inhaltstypen „Aufgaben“ und mehrere Listenvorlagen. In vielen Projekten sind diese Listen und Bibliotheken immer wieder hilfreich, da diese bereits viele tolle Zusatzfunktionen bieten (Kalender, Zeitachse, etc.).
Ein weiterer Vorteil davon ist, wenn eine Liste mehrfach verwendet wird (auch in Unterseiten), könnte so eine Suche per Inhaltstyp alle Einträge anzeigen. Tolle Sache!
Doch als ich dies mit den „Aufgaben“ getestet habe, ist mir folgendes aufgefallen:
Die Vorlagenliste „Aufgaben“ enthält den Inhaltstyp „Aufgaben“, welcher auch auf der Root-Ebene zu finden ist. Für Endkunden sollen solche WebParts konfigurierbar sein, daher gehe ich bewusst auf die internen Feldnamen, da diese nicht mehr vom User verändert werden können und der Administrator bei der Konfiguration keine GUIDs auslesen muss. Wenn ich allerdings über den Root-Inhaltstyp eine Suche starte, habe ich keine Möglichkeit nach dem Feld „Enddatum / Fristende“ zu suchen, da plötzlich keine Aufgaben mehr angezeigt werden. Suchtreffer ist leer.
Eine genauere Analyse des XML zeigt mir ein schockierendes Erlebnis. Die XMLs habe ich aus folgendem Pfad:
Hier ein Ausschnitt aus dem XML der Standard SharePoint Felder (C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATE\FEATURES\fields\fieldswss.xml):
<Field ID="{cd21b4c2-6841-4f9e-a23a-738a65f99889}" Name="TaskDueDate" Group="$Resources:Issue_Task_Columns" Type="DateTime" DisplayName="$Resources:core,Due_Date;" SourceID="http://schemas.microsoft.com/sharepoint/v3/fields" StaticName="TaskDueDate" Format="DateOnly"> </Field>
In der entsprechenden schema.xml Datei der Aufgabenliste-Vorlage (C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\TEMPLATES\FEATURES\TaskList) ist folgender Eintrag zu finden:
<Field Type="DateTime" ID="{cd21b4c2-6841-4f9e-a23a-738a65f99889}" Name="DueDate" DisplayName="$Resources:core,Due_Date;" Format="DateOnly" SourceID="http://schemas.microsoft.com/sharepoint/v3" StaticName="DueDate" >
Dabei ist sichtbar, dass der interne Feldname geändert wird.
Vorsicht also bei der Verwendung von internen Feldnamen, es kann durchaus passieren, dass diese in anderen Listen und Bibliotheken plötzlich anders heißen!
Viele Grüße
18 Dienstag Mär 2014
Posted SharePoint 2010, SharePoint 2013
inSollte eine Query Abfrage auf Objekte benötigt werden, welches bei Datum eingeschränkt wird (zB Alle Dokumente mit Bearbeitungsdatum von heute bis vor 30 Tage), wäre folgendes Beispiel:
<Where><And><Gt><FieldRef Name="Datumsfeld" /><Value Type="DateTime"><Today /></Value></Gt><Lt><FieldRef Name="Datumsfeld" /><Value Type="DateTime"><Today OffsetDays="30" /></Value></Lt></And></Where>