2012-04-12 4 views
2

Ich habe ein Objekt mit einem Nachschlagefeld und möchte InlineEditSupport für dieses Feld innerhalb einer VisualForce-Seite verwenden.Visualforce Apex: InlineEditSuport auf Lookup/Reference Field

Der Befehl apex: outputField rendert das Suchfeld jedoch als Hyperlink, wodurch die inlineEditSupport-Logik überschrieben wird.

Zum Beispiel

<apex:page standardController="Contact"> 


    <apex:outputField value="{!Contact.LastName}"> 
     <apex:inlineEditSupport event="ondblclick"/> 
    </apex:outputField> 

    <apex:outputField value="{!Contact.AccountId}"> 
     <apex:inlineEditSupport event="ondblclick"/> 
    </apex:outputField> 


</apex:page> 

In diesem Beispiel würde das Feld Nachnamen von der Spitze wiedergegeben werden: OUTPUT-Tag und in ein editierbares Feld konvertieren, wenn doppelt geklickt.

Das Feld 'Konto' wird jedoch als Hyperlink zum Kontoeintrag selbst gerendert, der Maßnahmen vor dem Auslösen des Klickereignisses ergreift.

I kann machen dies funktioniert mit einem alternativen Javascript-Ereignis - d. H. Mouseover, aber das ist nicht besonders benutzerfreundlich. Ich muss eine konsistente Benutzererfahrung beibehalten und eine Doppelklick-Aktion verwenden.

Gibt es eine Möglichkeit, zu verhindern, dass das Feld Account als Link angezeigt wird, oder eine Möglichkeit, ein Bearbeitungssymbol daneben einzufügen?

Antwort

2

Ich lief in das gleiche Problem mit Inline-Bearbeitung in einem pageBlockTable Format. Wir fanden das nicht benutzerfreundlich.

I verwendet JavaScript (jQuery), um den Link in Klartext zu konvertieren und diese wie andere inlineEditable Felder verhalten:

/// Overwrite default functionality for lookup columns (links to object page) 
/// Change to text-only of name to prevent navigation away 
$('TABLE[id$=checklistTable] TBODY TR TD A[id^=lookup]').each(function() { 
    var text = $(this).html(); 
    $(this).parent().html(text); 
}); 

Dadurch werden alle Salesforce-Lookup-Felder innerhalb des passenden jQuery-Selektor konvertieren. Es hängt auch von der resultierenden HTML-Ausgabe ab, die Ankerlinks erzeugt, deren IDs mit "Lookup" beginnen (was bedeutet, dass SalesForce dies mit zukünftigen Updates ändern/brechen könnte).

+0

Also die Verwendung der Dollarzeichen und Caret-Symbole in Jquery haben eine ähnliche Bedeutung wie die in einem regulären Ausdruck. Das Dollarzeichen bedeutet, dass es am Ende der ID nach einer Übereinstimmung von "checklistTable" sucht. Das Caret bedeutet, dass es nach 'lookup' am Anfang der ID sucht. Ist das korrekt? – BrightIntelDusk

+1

Korrigieren. Weitere Informationen finden Sie in der Dokumentation zum Attributselektor: https://api.jquery.com/category/selectors/attribute-selectors/ –

0

Dies ist möglicherweise nicht der einfachste Weg, aber was ich bisher getan habe, ist eine Auswahlliste der Namen der Datensätze in der Suche zu erstellen. Ich denke, das ist für den Benutzer sowieso besser als eine Salesforce-Lookup-Box (es sei denn, es gibt Hunderte, nehme ich an). Was Sie tun müssten, ist eine Liste von Auswahloptionen im Controller zu erstellen und sie einer Variablen wie der Liste zuzuordnen und dann auf {! TheList} zu verweisen, wo Sie sie einfügen möchten (ungefähr; siehe Dokumentation). Die Auswahloptionen müssen den Datensatznamen als Label und die Datensatz-ID als Wert haben. Dann können Sie die ID direkt dem Suchfeld zuordnen.

+0

Danke Naomi. Dies löst das Problem nicht wirklich, da dies nicht mit InlineEditSupport funktioniert (und in diesem Fall gibt es zu viele mögliche Datensätze, die in einer Auswahlliste angezeigt werden können). –

0

Haben Sie mit salesforce doc versucht?

<apex:page standardController="Contact"> 
<apex:form > 
    <apex:pageBlock mode="inlineEdit"> 
     <apex:pageBlockButtons > 
      <apex:commandButton action="{!edit}" id="editButton" value="Edit"/> 
      <apex:commandButton action="{!save}" id="saveButton" value="Save"/> 
      <apex:commandButton onclick="resetInlineEdit()" id="cancelButton" value="Cancel"/> 
     </apex:pageBlockButtons> 
     <apex:pageBlockSection > 
      <apex:outputField value="{!contact.lastname}"> 
       <apex:inlineEditSupport showOnEdit="saveButton, cancelButton" hideOnEdit="editButton" event="ondblclick" changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/> 
      </apex:outputField> 
      <apex:outputField value="{!contact.accountId}"/> 
      <apex:outputField value="{!contact.phone}"/> 
     </apex:pageBlockSection> 
    </apex:pageBlock> 
</apex:form> 

+0

Dies ermöglicht keine Inline-Edit-Unterstützung für das Kontofeld. Das Problem wurde dadurch nicht gelöst. –