Wednesday, October 3, 2012

To insert image into Rich Text Area field dynamically using Apex


I would like to give you a brief that whenever a user wants to upload any file (Image) and wants that it directly get inserted into the Rich Text Area field.

So I have developed a code wherein any user can upload any image file and provides the document name where it will stored and get dynamically inserted onto the Rich Text Area field.


Kindly refer this & modify it according to your requirement and test it before deploying it in your Org.


***************Apex Class***************

public class ImagInsertionIntoRichText
{

public String naam{get;set;}
public ID folderid{get;set;}
public Blob file{get;set;}

public void insrt()
{

Document d= new Document();

d.name = naam;
d.body=file; // body field in document object which holds the file.
d.folderid='00l90000000inFEAAY'; //folderid where the document will be stored insert d;
insert d;

Case cs = new Case();
cs.FirstExample__Comments__c = '<img src="https://rustagiankit-developer-edition--c.ap1.content.force.com/servlet/servlet.FileDownload?file='+d.id+'" width="500" height="281"></img>'; //FirstExample is namespace & Comments__c is Rich Text Area field
cs.Status = 'New';
cs.Origin = 'Web';
insert cs;
}
}
*************************************
***************VF page***************

<apex:page controller="ImagInsertionIntoRichText">
<apex:form>
<apex:outputLabel value="Document Name"></apex:outputLabel>
<apex:inputText id="name" value="{!naam}"/>

<apex:outputLabel value="Upload Document"></apex:outputLabel>
<apex:inputfile value="{!file}"></apex:inputfile>

<apex:commandButton value="Save" action="{!insrt}" id="save"/>
</apex:form>
</apex:page>
**************************************
NOTE :- If you have a existing image stored in the Document, then you can only refer to below mentioned snippet of code only :-


Case cs = new Case();
cs.FirstExample__Comments__c = '<img src="https://rustagiankit-developer-edition--c.ap1.content.force.com/servlet/servlet.FileDownload?file=01590000000QPTY" width="500" height="281"></img>';
cs.Status = 'New';
cs.Origin = 'Web';
insert cs;

Monday, October 1, 2012

To invoke Apex using the AJAX toolkit & to remove the HTTP 500 error when showHeader="false"



The AJAX toolkit includes built-in support for invoking Apex, so I have tried to call a webservice method through sforce.apex.execute . The execute method takes primitive data types, sObjects, and lists of primitives or sObjects.

To call a webService method with no parameters, use {} as the third parameter.

I have developed a sample code, kindly refer this:-

---------------------------VF page ------------------------------------

<apex:page sidebar="false" showHeader="true" >
<head> 
         <script src="/soap/ajax/15.0/connection.js" type="text/javascript"></script>
         <script src="/soap/ajax/15.0/apex.js" type="text/javascript"></script>

<script type="text/javascript"> 
function sendUserName(){
                      //FirstExample is namespace
                     //Additionthrughsforce is ClassName
                    //addition is methodname
                   //third parameters are the argument sent to the method
var res = sforce.apex.execute("FirstExample.Additionthrughsforce","addition",{numOne:4,numTwo:5});
return false;
}
</script>
</head>
<body>
<apex:form>
<apex:commandButton onclick="sendUserName();" value="Call"/>
</apex:form>
</body>
</apex:page>

----------------------------Apex Class----------------------

global class Additionthrughsforce {
webservice static Integer addition(integer numOne, integer numTwo){
return numOne + numTwo;
}
}

****Please Note****


When showHeader="true " ,it was successful to call an public webservice method but when showHeader="false" , it fails with the status code as 500.

I have received an 500 (Internal Server Error) in the javascript console (Chrome) when invoking Apex from sforce.apex.execute.


Workaround when showHeader="false" would be to add
**var __sfdcSessionId = '{!GETSESSIONID()}';**