Invalid data has been used to update the list item. The field you are trying to update may be read only.


I got this error while updating an splistitem. It was coming while trying to update “Person or Group” type column.

This is the correct way to update the column of type “Person or Group”.

itemApprovalAssignment["Title"] = txtTitle.Text.Trim();
                    itemApprovalAssignment["Assign_x0020_To"] = oweb.EnsureUser(peAssignTo.CommaSeparatedAccounts);

i.e. to use EnsureUser method.

Bye..

Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))


I was getting the above error while deploying the Site Definition in SharePoint. The unique thing about this error was that after some time it used to get resolved itself.

Then while searching for it i found the following solution for it which is to Stop the Indexing Service.

And it really worked.

Bye..

Updating a Picklist Attribute from within a Plugin


Hi,

Just a sample code for updating a picklist attribute for an entity instance.

  public void  Execute(IPluginExecutionContext context)
{
DynamicEntity entity = (DynamicEntity)context.InputParameters.Properties["Target"];
if (entity.Name == "new_test")
{
// Post Create event so get the guid from Output Parameters
Guid testId = (Guid)context.OutputParameters.Properties["id"];

ICrmService crmService = context.CreateCrmService(true);
DynamicEntity myTest = new DynamicEntity();
myTest.Name = "EntityName";

// Set the key property
KeyProperty myTestGuid = new KeyProperty();
myTestGuid.Name = "EntityPrimaryKeyID";
Key myTestKey=new Key();
myTestKey.Value = testId;
myTestGuid.Value = myTestKey;
myTest.Properties.Add(myTestGuid);

// Picklist property to be updated
PicklistProperty myPP = new PicklistProperty();
myPP.Name = "new_picklist";
myPP.Value = new Picklist();
myPP.Value.name = "nameOfThePicklistValue";
// picklist value
myPP.Value.Value = 2;
myTest.Properties.Add(myPP);
try
{
    crmService.Update(myTest);
}
catch (SoapException ex)
{

    TextWriter log1 = TextWriter.Synchronized(File.AppendText(@"C:\g.txt"));
    log1.WriteLine("MyMessage exception :-" + ex.Detail.InnerXml );
    log1.Close();
}
}
}
}

 

 

Bye…

Resource (.resx) files in Custom Content Type


These are the steps we need to follow

Suppose this the custom content type

<?xml version=”1.0″ encoding=”utf-8″?>
<Elements Id=”555705e7-e69f-4670-a972-c7bab158f935″ xmlns=”http://schemas.microsoft.com/sharepoint/”>
<ContentType ID=”0x010100923d6eee64764f08baa6903fb9095a6c”
Name=”GContentType”
Group=”Development”
Description=”Developing Content Type”
Version=”0″>
<FieldRefs>
<FieldRef ID=”{38ae2eb9-fca6-448b-9c8d-47abfeb7fbb5}” Name=”GContentTypeField” />
</FieldRefs>
</ContentType>
<Field ID=”{38ae2eb9-fca6-448b-9c8d-47abfeb7fbb5}”
Type=”Text”
Name=”GContentTypeField”
DisplayName=”$Resources:GED,Mission”
StaticName=”GContentTypeField”
Hidden=”FALSE”
Required=”FALSE”
Sealed=”FALSE” />
</Elements>

Here GED would be the name of resource files and mission is the Key Name.

Resource

GED.resx file needs to be deployed to ..12\Resources directory.

And in the feature.xml set

DefaultResourceFile=”GED”

http://innersharepoint.blogspot.com/2009/10/how-to-locolize-site-columns-using.html

http://blogs.msdn.com/b/joshuag/archive/2009/03/07/using-resource-files-resx-when-developing-sharepoint-solutions.aspx

Bye..

Displaying Image from File Attachment control in InfoPath form inside SSRS report.


I was assigned the task of displaying images attached to InfoPath form using file attachment control in one of the SQL Server Reporting Services Report.

For this we need to add an image control and set it’s property in the following manner

Image Source :- Database

Then select appropriate DataSet, Image Field and MimeType

Here to display the Image properly we need to write a Report Assembly with the following code.

public static class FileDecoder
    {
        /// <summary>
        /// Takes string value for image from the infopath form
        /// and converts it to proper bytes for displaying it as an image
        /// </summary>
        /// <param name="imageData">string representation of the image</param>
        /// <returns>corrected byte array</returns>
        public static byte[] GetCorrectedByte(string imageData)
        {
            byte[] attachmentNodeBytes = Convert.FromBase64String(imageData);
            // Position 20 contains a DWORD indicating the length of the
            // filename buffer. The filename is stored as Unicode so the
            // length is multiplied by 2.
            int fnLength = attachmentNodeBytes[20] * 2;
            // The file is located after the header, which is 24 bytes long
            // plus the length of the filename. 
            byte[] fileContents = new byte[attachmentNodeBytes.Length – (24 + fnLength)];

            for (int i = 0; i < fileContents.Length; ++i)
            {
                fileContents[i] = attachmentNodeBytes[24 + fnLength + i];
            }

            return fileContents;
        }

    }

 

And set the value for image control as

=(Namespace).FileDecoder.GetCorrectedByte(Fields!fieldName.Value)

ImageFromDB

 

Bye..

InfoPath forms and SQL Server Reporting Services


Hi,

I recently worked on a report project having InfoPath form in SharePoint’s InfoPath library as it’s Data Source.

For understanding purpose let’s start with a very simple InfoPath form having two text boxes in it named txtFirstName and txtLastName.

Form

Let’s first define a Data Source for our report.

Name:- InfoPathDataSource

Type:- XML

Connection String : (Suppose the url for our InfoPath library is following

http://nrana-1710-vm1:2575/Sample/Forms/AllItems.aspx and the name of the InfoPath form is PersonalInfo.

So in this case our connection string would be

http://nrana-1710-vm1:2575/Sample/PersonalInfo.xml

Now let’s create a new DataSet having InfoPathDataSource as its data source.

Name :- InfoPathDataSet

Data source :- InfoPathDataSource

Command Type :- Text

Query String :-  ( For defining query string we need to first open up the PersonalInfo.xml file. Paste the following url in IE http://nrana-1710-vm1:2575/Sample/PersonalInfo.xml and download and open the xml file.

Suppose this is the content of the PersonalInfo.xml file

<?xml version="1.0" encoding="utf-8"?>
<?mso-infoPathSolution
name="urn:schemas-microsoft-com:office:infopath:Sample:-myXSD-2010-05-26T09-16-03"
solutionVersion="1.0.0.10"
productVersion="12.0.0.0"
PIVersion="1.0.0.0"
href="
http://nrana-1710-vm1:2575/Sample/Forms/template.xsn"?>
<?mso-application
progid="InfoPath.Document"
versionProgid="InfoPath.Document.2"?>

<my:myFields xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-05-26T09:16:03" xml:lang="en-US">
    <my:txtFirstName>Nishant </my:txtFirstName>
    <my:txtLastName>Rana</my:txtLastName>
</my:myFields>

The  Query String to retrieve First and Last name value would be

<Query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-05-26T09:16:03"
xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xml:lang="en-us">
    <ElementPath>
        my:myFields           
    {
        my:txtFirstName(String),
        my:txtLastName(String)       
    }
    </ElementPath>
</Query>

We also define a parameter in our data set to which we would pass the url to the infopath form i.e.

http://nrana-1710-vm1:2575/Sample/PersonalInfo.xml

That’s it, now if we run the query we can get values for first name and last name.

In case if your InfoPath xml form is looks like this

<my:myFields xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-05-12T05:10:51" xml:lang="en-US">
    <my:group1>
        <my:group2>
            <my:field1>2</my:field1>
            <my:field2>nishu</my:field2>………….

Than the Element Path of Query String would be like

<ElementPath>
        my:myFields/my:group1/my:group2          
    {
        my:field1(String),
        my:field2(String)       
    }
    </ElementPath>

Bye…

Nishant Rana's Weblog

Everything related to Microsoft .NET Technology

Skip to content ↓