June: SharePoint

Quick and easy: Embed a hyperlink into data view web part XSLT

UPDATE (01/17/08): This blog entry talks about more hyperlink XSL goodness: http://www.sharepointsecurity.com/blog/sharepoint/sharepoint-2007-development/rewriting-links-in-search-results-xslt.

Overview et obiectiva: I had created a simple bar chart to serve as component on a dashboard. I’ll save the details on building charts for another post, but I did not invent that technique (nor the question mark, for that matter). It turned out there was a bug in the chart and while I fixed that, I took the opportunity to convert some labels into hyperlinks that pointed at the underlying list behind the graph. Verbigratia, there is a label with value "Hold". I wanted to turn the label into a hyperlink so that the user could click on it and drill down to the specific entries in the list whose status value is "Hold".

Steps:

  1. Use visual studio for sharepoint-aware intellisense.
  2. Copy the DVWP’s XSLT into visual studio (create a blank project, add an XSL file to the project).
  3. Copy the link you want to use into the clipboard.
  4. Paste it into the right location in the XSL.
  5. Convert URL argument separators on the query string from "&" to "&"
  6. Url-encode individual arguments.
  7. Wrap that inside an <a href…> </a>

Verbigratia:

I have an URL:

http://[server]/[site]/Lists/Open Positions/AllItems.aspx?View={84EEA2F5-121B-40B7-946F-0FA704A1DAA1}&FilterField1=Recruiter&FilterValue1=Hold

I convert it into:

     <a href="Lists/Open Positions/AllItems.aspx?View={84EEA2F5-121B-40B7-946F-
0FA704A1DAA1}&amp;FilterField1=Recruiter&amp;FilterValue1=Hold"> Hold: </a>

I have manually transformed the first argument from:

{84EEA2F5-121B-40B7-946F-0FA704A1DAA1}

ad:

%7b84EEA2F5-121B-40B7-946F-0FA704A1DAA1}

(In this, the open brace transforms to { and the closing brace transforms to })

The second and third arguments’ parameters ("FilterField1=Recruiter" and "FilterValue1=Hold" respectively) do not need to be url-encoded because they do not contain any unsafe characters.

Notes:

This technique should generally work anywhere you want to embed a hyperlink in XSLT where the hyperlink includes parameters on the URL such as:

http://[server]/[site]/Lists/Open Positions/AllItems.aspx?View={84EEA2F5-121B-40B7-946F-0FA704A1DAA1}&FilterField1=Recruiter&FilterValue1=Hold

I got the URL itself by accessing the custom list and manually filtering on the status column (labeled "Recruiter" above).

The Beagle has Landed (Octobris 2007 issue)

(This is actually a little old news, but as my favorite fire station motto proclaims, "Better late than never").

Check it out here: http://www.sharepointbeagle.com/

If you have not already, be sure to sign up.

Utique, be sure to read articulum about a real-world SharePoint project (including requirements definition, KPI’s, content genera, dashboards and more) as well as my colleague’s article about the content query web part.

There’s lot of other good stuff too.

How to remove “View all site content” link

I’m asked this question nearly every week, normally in the context of a security discussion. An administrator/site creator has provisioned a site, configured security, arranged web parts and customized the quick launch to provide that oh-so-perfect set of options to the end user. Sed, out of the box, you can’t remove the "view all site content" link.

Mark Wagner provides the answer hic (http://www.crsw.com/mark/Lists/Posts/Post.aspx?ID=36). His write-up is terrific on two levels. It provides an answer to the question, "How do I remove the View All Site Content" link? Igitur, it answers the immediate follow-on question: How do I easily enable the view all site content link on a site-by-site basis?

As a bonus: His approach works for WSS, not just MOSS.

</finem>

Scribet ad mea blog!

Vivos et Simplex: Configurare musco quaerere specialis libraria document

See UPDATE (Ego) below (11/24/07) on How to Configure Microsoft Office SharePoint Server 2007 to Index and Crawl Network Folders for Search

Objective: I want to execute a search restricted to a specific document library. In hoc, the document library contains training documents.

Steps:

1. Record the URL of the document library.

2. Create a scope:

Go to central administration.

Access the SSP.

Go to "Search Settings".

Scroll down to the scope section and select "View Scopes".

Create a new scope. Give it a name and useful description.

3. Define scope crawl rules:

Add a rule that defines the document library for this scope.

Select "web address" for "Scope Rule Type".

Enter the name of your folder (videre #1 above).

Accept the default value of "Include".

Wait for the scope to update (or start it manually).

4. Enable the scope in a site collection.

Go to site collection where you want to use this scope.

Add your new scope to the appropriate display group or groups.

5. Quaerere!

Ad hoc, you’re done. Assuming the scope is properly defined, it will be available in the scopes drop downs for simple and advanced searches and when you search using that scope, you’ll just get results you expect.

Notes:

I wrote this blog entry because my searches for simple scope setup turned up dry using phrases like:

  • configure scopes in MOSS
  • configure search scope moss
  • scopes in sharepoint 2007
  • scopes in sharepoint
  • search a document library moss
  • scopes primer moss

You can create a search scope on a folder, not just the entire document library.

A scope can be shared across multiple site collections (Hinc, a "shared service").

You can create the scope at the site collection level itself. Autem, I prefer to go to central admin because I can start the crawl from there. You cannot start the crawl from the site collection.

UPDATE (Ego) tamquam 11/24/07:

Kai Shang put together a great post entitled How to Configure Microsoft Office SharePoint Server 2007 to Index and Crawl Network Folders for Search @ http://kaishenghoo.spaces.live.com/blog/cns!8A7458DB12CA5AC9!206.entry

Nec pulmenti vobis! Scelerisque vitae est elit Nazi products of NLB?

Hodie, I tried to access a document library via windows explorer. This doc lib is living inside a system that consists of two WFE’s load balanced by some kind of Cisco NLB solution. (Si / cum retiacula pythones indica mihi quid sit, Ego hoc update stipes).

Windows explorer couldn’t connect. I did some research and eventually, retiacula magos dixisse WebDAV est infirma / non sustinetur / beneath the dignity of the NLB.

Ita, assuming the network wizards aren’t just telling me the network wizard equivalent of "take a long walk off a short bridge", Ego autem mirari — facit NLB, natura, disable WebDAV? Do we lose our windows file explorer interface to SharePoint? Is Cisco the IUS Nazi?

Curo MUSCUS / WSS environments — custodiens cum Microsoft scriptor notitia basis

Microsoft creates knowledge base articles day in and day out and some of those are darned important to know about if you live in the SharePoint world.

Ego ad velocitatem aequare cum eis via per obsequium praebeant ad bonum folks www.kbalertz.com. KBAlertz enables you to sign up for your favorite MS technology and they send you digest versions of Microsoft KB articles via email.

Policy Web Application, Situs securitatem et tuitionem qr — Scire configuration

(Updated 11/29 Qualiter ad obvius occasus per telam application consilium UI)

I had one of those "why is MOSS doing this to me????" moments today. In finem, BENE mea culpa.

We have an enterprise MOSS project going on and we want to secure "place holder" sites so that no user may access it or see it. That’s easy:

  1. Vade ad site.
  2. Confrínget securitatem hereditátem.
  3. Aufero sulum user / coetus a site permissiones.

Supremus administrator collection site licentia relinquere iustum ad ad situm videre.

Si quis alius ligna in, ut non sit satis videre, et eatenus ab omni loco solitis locis.

Sed … non fuit. Simul, I suddenly realize that my "Joe User" standard user test account with no priv’s other than restricted read access has a "Site Actions" choice everywhere he goes. I double check one thing and double check something else. I pick up the phone to call a colleague, but put it down and check something else. I go for a walk and try everything all over again. I call a colleague and leave a message. And then, tandem, Invenio apud Ethan scriptor blog, his opening graph makes it quite simple:

MUSCUS 2007 Web Application vocatur novus pluma habet Politiae. Hi sunt permissiones quod securitatem Web Application purum alligatur. Hi omni securitate occasus, ut securitatem occasus dominari in situ positus est congeries sive Site (Meaning) quod pro gradu user.

A quick visit to web application policies shows that "NT Authority\authenticated users" had been granted Full Read. I removed them from the list and everything finally started working as expected. I believe they were added in the first place by someone with the mistaken impression that that is best method to grant read access to everyone in the enterprise. It does, sed, eliquare a quote, "It does not mean what you think it means."

Access web application policies this way:

  1. Perge ad Centralis Administration
  2. Lego Application Management
  3. Select "Policy for Web Application"
  4. Quod in screen, make sure you pick the correct web application. Enim me, Fusce a ipsum id elit consectetuer arcu ille qui non vult.

Cum hanc quaestionem, Lorem Ipsum verbis, vel in posterum minime mirum quantum in hac iuvatur:

Visibilium omnium actiones users Site

Actiones users ad omnes aspectabili Site

site securitatem actiones non sunt ornaverunt

impetrarunt MUSCUS site

introductio securitatem musco

Technorati Tags:

Vivos et Simplex: Uti certa Keyword Quaero Praecessi Core in Quaerere

Quick and Simple Instructions:

Edit a page and add a Search Core Results web part.

Edit that web part and expand "Fixed Keyword Query".

Add the fixed keyword query (e.g. ContentType:"Training invoice" TrainingInvoiceNumber:1111)

Expand Results Query Options and change "Cross-Web Part query ID" to a value other than "User Query" (e.g. "Query 2").

Notes:

Using core search results in this manner allowed me to create a page that shows information from another site collection. The client has two major site collections: Departments and Products.

The product site collection contains, naturally enough, product information. Each product in the site collection aggregates data from multiple sources.

One of the departments, codes and testing, is on such source. When users access product XYZ, they should see codes and testing data directly on the XYZ main page. Since codes and testing is hosted in another site collection, it’s a little awkward. We decided to use the core search results web part since search spans site collections. Codes and Testing manages product data via a custom list that is constrained by a specific content type. Aa keyword query that uses first the content type and then the product number narrow down the search to a single row in the custom list.

The keyword query above is an AND. It returns documents of content type "Training Invoice" and where the invoice number equals "1111".

A nice benefit from this approach: We can edit the XSL from the core search results web part and generate any format that we want.

En (http://devcow.com/blogs/jdattis/archive/2007/04/17/SharePoint_2007_How_to_Rollup_Content_from_multiple_Site_Collections.aspx) for another blogger’s discussion on this topic.

</finem>Scribet ad mea blog.

Dico me de tua blog!

If you maintain a blog that is at least minimally connected to SharePoint, please let me know in comments. I would love to add you to my blog list.

If you maintain a blog that is not connected to SharePoint but want me to add it anyway, let me know. I’ll may create a separate blog list.

Please give:

  • Your blog URL (Manifestum)
  • A short description of your blog.

I want to keep the link to "active" blogs, which I’m roughly defining as one post per week and minimum three months old. If you don’t meet that "requirement" add your name to comments anyway. It’s *my* list so I can break my own rule if I want to.

Gratias!

Operarius Lorem ipsum et materia Template — Cimice decrementum in in Template

The client noticed a bug today with the above mentioned template.

Course managers create courses. When creating a course, in maximum numerus of procurator quod specificat sedes praesto.

The template provides for self-service enrollment. I enroll and a workflow attached to the registration list decrements the "available seats" sociatur Utique.

Individuals may also unregister from a course. The bug lies here. Unregistering from a course does not increment the available seats counter. Ut ex, available seats is not accurate. This bug is compounded by the fact that when available seats decrements to zero, non plus sui ministerium adnotatione admittitur.

Fortunate, Microsoft provides the workflow for this process. Even better, suus sea workflow creatus per SharePoint Designer.

Haec altum gradu sequantur vestigia figere eam:

  1. Ignis sursum SDP.
  2. Obvius fundatur off site disciplina template.
  3. Access "Attendee unregistration" workflow.
  4. Insert his gradibus (Duo gradus, quorum primus ego):
    1. Adice Cursus:Repleti sedes minus 1 (Output INCERTUS:calc)
    2. (igitur) Item in update Cursus

Click Perago et es fieri.

Collaborative offa:


SharePoint amet:

imaginem

Complevit workflow:

imaginem

Descende-conputat EXERCITATIO:

imaginem

Item cursuum in update:

imaginem