In Dynamics CRM 4.0, file attachment to entities is pretty simple as compared to CRM 3.0. UploadFromBase64DataAnnotationRequest and UploadFromBase64DataAnnotationResponse object are both deprecated. Instead a new attribute has been introduces in annotation object with documentbody that accepts string in base64 encoding. Please find the below sample:
Reading file data into Byte array and then converting it to base64. Since I am using in memory object of StringBuilder class so I have just used str.ToString() to return string.
Byte[] data;
ASCIIEncoding encode = new ASCIIEncoding();
data = encode.GetBytes(str.ToString());
string b64 = Convert.ToBase64String(data);
Next, simply create the annotation entity and set the attributes as below:
annotation note = new annotation();
note.subject = “Test Export”;
note.filename = “exported.txt”;
note.mimetype = “text/html”;
note.documentbody = b64;
note.objectid = new Lookup();
note.objectid.type = “new_export”;
note.objectid.Value = entityid;
note.objecttypecode = new EntityNameReference();
note.objecttypecode.Value = “new_export”;
Guid annotationId = service.Create(note);
Filed under: CRM Development, MSCRM General | Tagged: Annotation, Attachment, CRM, CRM 4, Note


Hi, I want to create CRM workflow which updates the case follow up date based on priority. I
f priority is high –> follow up date would be 24 hrs (1 day) after the case create date.
If priority is normal –> follow up date would be 72 hrs (1 day) after the case create date
Now the problem is that CRM includes (or counts) the weekends (Saturday/Sundays) while calculating the days after 3 days. I want to exclude these non business days to be counted in workflow.
Is there any ways we can avoid saturdays/sundays while dynamically setting date values in CRM 4.0 workflow? Any idea??
Thanks
Regards,
Mayank
Hi
This is regarding notes entity.
Consider a scenario: I have user level access on Company and user level at notes. If another user comes and add a note into my company record.Then logically i should not be allow to update/delete that record. But i can do so.
Logically speaking it should not happen. Hence the access level permission for notes and attachement are either delete every thing or none.. kindly give me suggestion.
Hi,
Have you any example code of attaching a .PDF , .xlsx or .DOC(X) files as attachments to Email? I have got the .txt files to work but I am having difficulty getting the others to work.
Thanks,
Have you changed the mimetype. you need to be very carefull in specifying mimetype.
note.mimetype = “text/html”;
I have tried application/msword , application/pdf . For the word doc I see the text but a lot of untranslated chars as well. PDF file just says not enough data to show image. I think it must be something to do with the streamreader and encoding code ?
I have to send email with attachment created for specific Case. How I can do it?
Also, how I can save the path of the original attachment before it added to Annotation Table?
I want to attach a word document to notes, if i use the above method the formatting of document is lost.
Is there any way so that i can attach the document alongwith formating.
Hi Wahid,
you need to set the approperiate mime type for file to be attached. YOu can set the mime type to “application/msword” for Microsoft word documents. You can give a try!
Hi Ayaz,
Do you know if it’s possible to have a rich text format on Note section? Can we create our own field type and assign the new type to any entity?
Thanks in advance.
Hi Jaka,
Its not possible out of the box.
Thanks. But do you know anyone (or ISV) that have developed this stuff? Do you think it’s even possible?
Thanks.
Its very much possible using unsupported ways. People have developed custom controls for CRM. just google.
Just thinking how can you achieve this. You can even introduce your own tab on the form as Notes and then add iframe and aspx page to enter/read text using rich text box. when submit simply add this text as note to the entity using CRM sdk. So there are endless possibilities. But if you are desinging a complex solution or vertical, i recommend to use supported ways as upgrade will cost a lot in case of unsupported customization.
Another issue…
I have attatched an xlsx document in CRM 4.0, and it has been created in tabel: annotation.
Now i would like to make use of this annotation in my code. Need to access a sheet within this file and use the data to update other entities i CRM.
I have retrievde the annotation by the objectid.
and decoded the content of documentbody (a string) using Convert.FromBase64String, and have now a byte-array.
My question is what to do next, in order to re-create the xlsx file in-memory ?
Any suggestions ?
You need to look at OpenXML that mcirosoft use to play with office 2007 file. Also look at
http://ayazahmad.wordpress.com/2007/08/23/generate-excel-2007-sheets-from-mscrm-data-%e2%80%93-openxml-show/
It may help you.
Hi,
I working on small project of integrating with CRM.Basically just creating a Letter activity with doc attachment to Note. Your example will definitely help me. Just wondering if you a complete example. Also I have been struggling with setting Owner for the activity object.
Please help me, I am very newbie to CRM customisation.
Regards,
Ismail Mogal
Thank you for your article!
Hi,
I want to get the file associated with a note in CRM 3.0.
I know how to get the note, the file name, but not the file contents.
How do I do this?
Use following code to upload file to an annotation.
//#1
FileInfo pointer = new FileInfo( “c:/test.pdf”);
FileStream fileStream = pointer.OpenRead();
byte[] byteData = new byte[(int)fileStream.Length];
fileStream.Read(byteData, 0, (int)fileStream.Length);
string encodedData = System.Convert.ToBase64String(byteData);
//#2
fileStream.Flush();
fileStream.Close();
//#3
UploadFromBase64DataAnnotationRequest upload =
new UploadFromBase64DataAnnotationRequest();
upload.AnnotationId = newNoteID;
upload.FileName = “test.pdf”;
//#4
upload.MimeType = “application/pdf”;
//#5
upload.Base64Data = encodedData;
//#6
UploadFromBase64DataAnnotationResponse uploaded =
(UploadFromBase64DataAnnotationResponse)myCRMService.Execute(upload);