Showing posts with label SharePoint. Show all posts
Showing posts with label SharePoint. Show all posts

Friday, February 19, 2010

Troubleshooting: Cannot import Web Part Error

Corey Roth has posted a nice guide to troubleshooting the dreaded 'Cannot import Web Part' error: Troubleshooting: Cannot import Web Part Error.

Has helped me a couple of times to get to the bottom of errors when deploying a web part.

Thursday, February 18, 2010

Create a Custom NewForm/EditForm for a SharePoint List

After bullishly breaking an existing SharePoint List by taking a copy of the NewForm.aspx and making custom changes to it, I tried to resurrect the pages by following several sets of instructions on the web:

Unfortunately I think I had already gone to far down the line trying to ressurect it and it was beyond my skills and patience to repair it. So I exported the data from the existing list and imported it into a newly created list.

I then found a Create a Custom NewForm.aspx for a SharePoint List tutorial here which worked a treat to implement my custom changes. Looks like it all turned out ok in the end but was another fun SharePoint lesson learned the hard way.

Wednesday, February 17, 2010

Consuming SharePoint Web Services with WCF

I had a few problems getting the WCF config correct to call SharePoint web services so thought I would share the solution that worked for me:

ClientCredentials - client credentials are required

using (ListsSoapClient proxy = new ListsSoapClient())
{
proxy.ClientCredentials.Windows.ClientCredential = new NetworkCredential();
...
}

Web.config or app.config - NTLM required

 <system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="ListsSoap" maxReceivedMessageSize="9999999">
<readerQuotas maxBytesPerRead="9999999"/>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://corporate-portal.ccc/_vti_bin/Lists.asmx" binding="basicHttpBinding" bindingConfiguration="ListsSoap" contract="SPLists.ListsSoap" name="ListsSoap"/>
</client>
</system.serviceModel>

Thursday, February 11, 2010

SharePoint 'Code blocks are not allowed in this file'

When trying to customise the GroupBoard Workspace ASPX pages I was getting the following error:

'Code blocks are not allowed in this file'

Thanks to this post on the MSDN forum we got past the problem:

<PageParserPaths>
<PageParserPath VirtualPath="/pages/[file name].aspx" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true" />
</PageParserPaths>

Using JavaScript to get a value using the SharePoint FieldInternalName

From the SharePoint JavaScripts blog:


<script type="text/javascript">  
/*************************************************************
Type:
Singelline tekst and multiline tekst (Plain text), Number, Currency = text
Multichoice checkbox = checkbox (returns commaseparated values)
Date (returns date only, but works with both DateOnly and DateAndTime) = date
RadioButton = radio
Dropdown = dropdown
Yes/No = bool
Hyperlink or picture (returns commaseparated: description,url) = url
Lookup - single (below and over 20 items), MultiLookup (returns array) = lookup
Lookup Multiple - you can use plain 'lookup', but if you want only "multi" = lookupMulti
Person - DisplayName = personDisplay
Person - LoginName = personLogin
Use: var value = returnValue('checkbox','FieldInternalNameOfYourField');
*************************************************************/
function returnValue(type, fieldInternalName) {
var arr = document.getElementsByTagName('!');//get all comments
for (var i=0;i < arr.length; i++ ) {
// Date
if (type=='date' && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
var fieldTitle = arr[i].innerHTML.substring(arr[i].innerHTML.indexOf('FieldName=')+11,arr[i].innerHTML.indexOf('\n')-2);
var tags = document.getElementsByTagName('input');
for (var i=0; i < tags.length; i++) {
if (tags[i].title == fieldTitle && tags[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.innerHTML.indexOf('FieldName="'+fieldTitle+'"') > -1)
{
return tags[i].value;
}
}
// RadioButton - Credit to http://blog.markuso.com/ - slightly modified by me to use FieldInternalName
}else if(type=='radio' && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
var tags = document.getElementsByTagName("input");
for (var i=0; i < tags.length; i++) {
var nameString = tags[i].name;
// get selected radio button value only
if (tags[i].type == "radio") {
var tagParentHTML = tags[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.innerHTML;
if (tagParentHTML.indexOf('FieldInternalName="'+fieldInternalName+'"') > -1) {
var radioButtons = document.getElementsByName(nameString);
var radioValue = "";
for (var x=0; x < radioButtons.length; x++) {
if (radioButtons[x].checked) {
radioValue = radioButtons[x].parentElement.title;
break;
}
}
var o = document.createElement("INPUT");
o.type = "hidden";
o.value = radioValue;
return o.value;
}
}
}
return null;
// Checkbox
}else if(type=='checkbox') {
var arr = [];
var arrValue = [];
var tags = document.getElementsByTagName("input");
for (var i=0; i < tags.length; i++) {
if (tags[i].type == "checkbox") {
var tagParentHTML = tags[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.parentElement.innerHTML;
if (tagParentHTML.indexOf('FieldInternalName="'+fieldInternalName+'"') > -1) {
arr.push(tags[i].id);
}
}
}
for (var x=0; x < arr.length; x++) {
var chkBox = document.getElementById(arr[x]);
if (chkBox.checked) {
arrValue.push(chkBox.parentElement.title);
}
}
return arrValue.toString();
// Text or Dropdown
}else if((type=='text' || type=='dropdown') && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
return arr[i].parentNode.childNodes[1].childNodes[0].value;
// Hyperlink or Picture
}else if(type=='url' && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
// returns commaseparated (description,url) so it can be split later
var hyperlink = [];
hyperlink.push(arr[i].parentNode.childNodes[1].childNodes[4].value);
hyperlink.push(arr[i].parentNode.childNodes[1].childNodes[1].value);
return hyperlink;
// Bool
}else if(type=='bool' && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
return arr[i].parentNode.childNodes[1].childNodes[0].checked;
// Lookup
}else if(type=='lookup' && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
// Under 20 items
var opt = arr[i].parentNode.childNodes[1].childNodes[0].options;
if(opt!=null) {
for (var x=0;x<opt.length;x++) {
if(opt[x].selected == true) {
return (opt[x].innerHTML);
}
}
}else if(opt==null){
if(arr[i].parentNode.childNodes[1].childNodes[0].childNodes[0]!= null) {
// Over 20 items
return arr[i].parentNode.childNodes[1].childNodes[0].childNodes[0].value;
}else{
// MultiLookup - optionally you can call the script with type='lookupMulti'
var arrSelected = [];
var fieldId = arr[i].parentNode.childNodes[1].childNodes[0].id;
var selectResultId = fieldId.substr(0,fieldId.indexOf('MultiLookupPicker')) + 'SelectResult';
var selectResultField = document.getElementById(selectResultId);
for(var x=0;x < selectResultField.length; x++){
arrSelected.push (selectResultField[x].innerHTML);
}
return arrSelected.toString();
}
}
}
// Lookup Multi (can also use plain 'lookup' as spacified above
else if(type=='lookupMulti' && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
var arrSelected = [];
var fieldId = arr[i].parentNode.childNodes[1].childNodes[0].id;
var selectResultId = fieldId.substr(0,fieldId.indexOf('MultiLookupPicker')) + 'SelectResult';
var selectResultField = document.getElementById(selectResultId);
for(var x=0;x < selectResultField.length; x++){
arrSelected.push (selectResultField[x].innerHTML);
}
return arrSelected.toString();
// Person
}else if(type=='personDisplay' && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
var rawString = arr[i].parentNode.childNodes[1].innerHTML;
if(rawString.indexOf('isresolved="True"')>0){
// user resolved OK
// Use these for DisplayName
var displayName = rawString.indexOf('displaytext="');
var start = displayName + 13;
var stopp = displayName + rawString.substring(rawString.indexOf('displaytext="')).indexOf('key="')-2;
var user = rawString.substring(start, stopp);
return user;
}else{
// user not resolved
return "";
}
}else if(type=='personLogin' && arr[i].innerHTML.match('FieldInternalName="' + fieldInternalName + '"')) {
var rawString = arr[i].parentNode.childNodes[1].innerHTML;
if(rawString.indexOf('isresolved="True"')>0){
// Use these for Loginname
var loginName = rawString.indexOf('isresolved="True"');
var start = loginName + rawString.substring(rawString.indexOf('isresolved="True"')).indexOf('key="')+5;
var stopp = loginName + rawString.substring(rawString.indexOf('isresolved="True"')).indexOf('">');
var user = rawString.substring(start, stopp);
return user;
}else{
// user not resolved
return "";
}
}

}
}
</script>