I'm using a custom auto-complete component as described here:


I've abstracted the code in the AutoCompleteController into a separate dynamic query utility, so in the auto complete controller I can just call the dynamic utility class from the auto complete controller like this:

global class AutoCompleteController {

global static SObject[] findSObjects(string obj, string qry, string addFields, string profilename) 
    return DynamicQueryBuilderUtilty.buildQuery(obj, qry, addFields, profilename);


This works fine and the query utility can be used in other situations. I'm wondering if I can abstract further given the following scenario. There are a variety of applications in the org for many different divisions and business groups. Each application uses its own service layer to make calls to the database.

VFPage >> Controller >> Service Layer >> Database

Is there a way to structure the component so it can be encapsulated in different service layer classes and just pass the appropriate arguments to the auto complete controller?

Thanks for any help.

  • But this component is already reuseable. I am not understanding your goal. can u clear more on this.
    – Ankuli
    Commented Apr 18, 2015 at 12:58
  • 1
    Can you provide an example of another use case that needs to call the code but cannot call it as written? I do not understand what you are asking. Commented Apr 19, 2015 at 4:37

1 Answer 1


If I have it got correctly.

You can create a dynamic component and reuse it(say passing attribute value while creating dynamic component, the way you are doing at reusable component)

<apex:page controller="SimpleDynamicController">
    <apex:dynamicComponent componentValue="{!dynamicDetail}" />

/* Controller */
public class SimpleDynamicController extend serviceLayer{

//serviceLayer has the abstract method.
//so every vf page controller can override this method, and assign the appropriate value
// like object Name, fields for autocomplete etc.

    public override Component.Apex.Detail getDynamicDetail() {
        Component.Apex.ResuableCompoenet RC = new Component.Apex.ResuableCompoenet();
        RC.attribute1 = 'fields';
        RC.attribute2 = false;
        return RC;


//component code
<apex:component ......>
    <apex:attribute name="attribute1" ...... />
    <apex:attribute name="attribute2" ...... />

  • @dman : is this the solution you was looking for ?
    – Ankuli
    Commented Apr 20, 2015 at 12:45
  • Hi @Ankuli, thank you for your help with this. I'm working on implementing your solution. I will respond back with details if I cannot get it to work as you suggested.
    – Dman100
    Commented Apr 21, 2015 at 2:37
  • 1
    I didn't downvote your answer. I just removed the line where you explicitly asked for an upvote. Commented Apr 22, 2015 at 13:01

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .