Modify “Upload To” (“Destination Library”) Choices For Discussions

I will start out with a caveat by saying that I have not tried this script on 2013.  However, the “Upload file” dialog also has an iframe like 2010, so I believe it should work, or will work with some minor alterations.

The problem we had is that users have permissions to contribute to multiple document libraries, however, for a specific discussion board, we wish to have them upload their attachments (when not using the “Attach File” option, but rather the “Upload file” option), to a specific document library.  The beauty of having the users create their posts using this method is that it allows the content to be directly embedded in the post itself, rather than having to click on the “View Properties” link to get to the attachment.

doc-libraries

SharePoint however, does not present a way to modify the list of upload locations it presents.  Whilst browsing the interwebs, I did find ways that recommend modifying the underlying aspx pages, however, trying to adhere to what Microsoft recommends, I never modify these pages unless it has been recommended.

upload-embed-attachment

Undesired choice appears in “Upload Document” select box:

upload-location-choices

Find the value of the option we wish to remove:

find-choice-to-remove
Add the following script to your masterpage. This assumes you already have a reference to jQuery lying around. You may need to update the “live” reference to “on” if you have a new version.

//for removing the load detecting

var hideRibbonTimeout = 0;

var newButtonPresent = false;

 

//check to see if this the discussion board we want to trim

if (jQuery('#s4-titlerow a:contains(Product)').length > 0) {

       setTimeout(HideRibbonButton, 10);

}

//replace the current "Upload File" button to override the SharePoint button

function HideRibbonButton() {

       $('a[id*="UploadFile-Large"]').replaceWith('<a class="ms-cui-ctl-large newDialog" id="btnUpload" aria-describedby="Ribbon.EditingTools.CPInsert.Links.UploadFile_ToolTip" mscui:controltype="Button" role="button" id="Ribbon.EditingTools.CPInsert.Links.UploadFile-Large"><span unselectable="on" class="ms-cui-ctl-largeIconContainer"><span unselectable="on" class=" ms-cui-img-32by32 ms-cui-img-cont-float"><img unselectable="on" alt="" src="/_layouts/1033/images/formatmap32x32.png" style="top:-224px; left: -64px;"></span></span><span unselectable="on" class="ms-cui-ctl-largelabel">Upload<br>File</span></a>');

       if (jQuery('.newDialog').length> 0) {

              newButtonPresent = true;

       }

       hideRibbonTimeout++;

       if (hideRibbonTimeout < 1000) {

              if (newButtonPresent == false{

                     setTimeout(HideRibbonButton, 10);

              }

       }

}

//handle the "Upload File" click and create our own upload

$('#btnUpload').live('click'function () {

       newButtonPresent = true;

       SP.UI.ModalDialog.showModalDialog({

              url: L_Menu_BaseUrl + "/_layouts/RteUploadDialog.aspx?LCID=1033&Dialog=UploadDocument&UseDivDialog=true",

              title: "Upload a file",

              dialogReturnValueCallback: function (result, value) {

                     if (result == SP.UI.DialogResult.OK) {

                           //adds the link to the body of the discussion post

                           $('.ms-rtestate-write').append($(value));

                     }

              }

       });

       setTimeout(function () {         

       //finds the upload choice dialog box

              var dlg = SP.UI.ModalDialog.get_childDialog();

              if (dlg != null) {

                     var dlgWin = $("html"window.parent.document);

                     //get the iframe with the select box

                     var dlgCont = $(dlgWin).find("#dialogTitleSpan:contains('Upload a file')").parent().parent().parent().find('iframe');

                     //remove the option we want taken out

                     $(dlgCont).contents().find("#ctl00_PlaceHolderRteDialogBody_TargetList option[value='3141e042-d74f-440d-b836-a82b79a576f5']").hide();

              }

       }, 1000);

});

 

Upload choice has been removed and users are now directed to upload to the correct document library.

choice-removed

ADFS Authentication Unable To Connect To Reporting Services (Workaround)

When trying to set up a datasource in SharePoint 2013 with Reporting Services Integration, if you want to pass through the user’s identity to the report, you will get an error if you try to use the “Windows authentication (integrated) or SharePoint User”.  This is because SharePoint does not allow for SAML / ADFS auth to go through using the build in C2WTS.

Can not convert claims identity to windows token. This may be due to user not
 logging in using windows credentials.

saml-ssrs-beforeThere is a workaround for this that does not require any extra programming, however, it may be an  inconvenience to your users.  Set the mode as “Prompt for credentials” and then check the “Use as windows credentials” checkbox.

saml-ssrs-after

This will allow reporting services to connect to the datasource using the users’ Windows auth account, and allow the report to run.  The downside is they will have to enter their user name and password whenever they want to run the report.

saml-ssrs-enter-username-pw

Success!

saml-ssrs-report-runs

Reporting Services Content Type Names – Wrong Display Names

If you have upgraded from SharePoint 2010 to 2013, and find that the Content Type titles look a bit odd for Reporting Services content types, you may want to change those to something more familiar.  There is a relatively simple fix.

For example, they appear as:

$Resources:ReportServerContentTypeGroup;

   $Resources:DataSourceContentTypeName; Document Home
   $Resources:ReportBuilderContentTypeName; Document Home
   $Resources:ReportBuilderModelName; Document Home

Correct display:

Report Server Content Types

   Report Builder Model Document Home
   Report Builder Report Document Home
   Report Data Source Document Home

So for example, when to create a new report library, and you start adding content types for your reports, you may see something like this:

poorly-named-content-types

To fix this, go to “Site Actions”, “Site Settings.” Click on “Site Content Types.”

navigate-to-content-types

Click on the content type you need to update, and then click on “Name, description, and group”

content-type-settings

Change the title text for the three content types, and give it a group.  For instance:

Report Data Source
Report Builder Model
Report Builder Report

Group: Reporting Services

rename-content-type

Once you have done that, go back into your library, and delete out the previous content types, and re-add them.

updated-content-types

You should then get the correct names displayed when you need to add a new reporting file.

updated-titles

Reporting Services – System Settings (Error: Sorry something went wrong)

While trying to set up Reporting Services for SharePoint 2013, I ran into a “Something went wrong” message in Reporting Services.

The confusing part is that I was able to provision SQL Server Reporting Services, both verifying that the service was indeed “STARTED” and that I had successfully created a service application and proxy using the GUI from Central Admin.

new-ssrs-app

service-started

reporting-services-application

reporting-services-system-s

Clicking on the application (“Reporting Services”) brought me to the configuration area, however, when I went in to set it up, I received an error message stating: “Sorry, something went wrong”.

sorry-something-went-wrong

This left me scratching my head. I determined that the SQL 2012 feature: “Reporting Services – SharePoint” must not have been successfully installed.

To check this, you will want to go to C:\Program Files\Common Files\microsoft shared\Web Server Extensions\15\WebServices.  Once here, look for the “Reporting” folder.

directory-before

As you can see, there is no “Reporting” folder.  It is missing entirely.  To remedy this, I first attempted to install the feature via my SSRS 2012 SP1 installation disc.

install-step-1

install-step-2 install-step-3 install-step-4

However, when I got the step that would allow me to install the feature, it indicated it had already been installed.

install-step-5

Thus I thought the solution was to re-install it, but this was as far as the SQL 2012 SP1 disc would take me in terms of reinstalling.  To get around this, I first attempted to uninstall the  feature through Control Panel / Programs.  However, that gave me an error message :  ‘Install-SPRSServiceInstall-SPRSService’ is not recognized, when I got to the final uninstall step.

I unprovisioned the service application in Central Admin, and STOPPED the service on the server, and tried again. No luck.

Also , attempting to uninstall the application through Powershell yielded the same “not recognized” results using the following uninstall commands:

Install-SPRSService -uninstall
Install-SPRSServiceProxy -uninstall

Finally, I discovered a solution.  It turns out that the full installation disc for SQL 2012 SP1 apparently was not sufficient.  Instead, just the SP1 exe need to be installed on top of what is already there, not the full install of SQL 2012 SP1, but just the SP1 bits.

Download it here: http://www.microsoft.com/en-us/download/details.aspx?id=35575

Be sure to choose the correct download, and not the full version.

download-sql2012-sp1-only

After grabbing this, run the install.

run-sp1-install

Verify that that “Reporting” folder is now present.

directory-after

Finally, you can provision your services:

Install-SPRSService
Install-SPRSServiceProxy
get-spserviceinstance -all |where {$_.TypeName -like "SQL Server Reporting*"} | Start-SPServiceInstance

new-ssrs-app

service-started

reporting-services-application

Then click on “System Settings” in your app.

system-settings-success

Success!!!