SalesForce: вы можете открыть текстовое поле с помощью пользовательской кнопки - PullRequest
1 голос
/ 24 февраля 2012

Я создаю пользовательскую кнопку, и у меня пока есть это:

{!REQUIRESCRIPT("/soap/ajax/8.0/connection.js")}

var lead = new sforce.SObject("Lead");
lead.id = "{!Lead.Id}";
lead.OwnerId = "ID";
lead.Status = "STATUS";

var result = sforce.connection.update([lead]);

if (result[0].getBoolean("success"))
{
    // Refresh window
    window.location.reload();
}
else
{
    alert("Error saving lead");
}

Это все работает отлично и вносит изменения, которые я желаю, но я также хочу, чтобы при нажатии кнопки и до того, как что-либо будет сохранено, я хочу:

lead.Reason__c

Текстовое поле для всплывающего окна, как если бы вы дважды щелкнули по нему, чтобы пользователь мог указать причину нажатия кнопки

Я пробовал код как:

lead.Reason__c.open
lead.Reason__c.edit

Но мне не повезло, и я в значительной степени просто колю в темноте с этим.

Я надеюсь, что кто-то может помочь, Спасибо всем

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Правильный способ по-настоящему симулировать двойной щелчок - отправка события двойного щелчка на элемент; эта страница содержит отличную справку о том, как это сделать.Я могу подтвердить, что вы можете создать пользовательскую кнопку, которая отправляет двойной щелчок в поле редактирования SFDC и действует так, как будто пользователь сам дважды щелкнул по полю.Быстрый и грязный пример:

var evObj = document.createEvent('MouseEvents');
evObj.initMouseEvent( 'dblclick', true, true, window, 1, 12, 345, 7, 220, false, false, true, false, 0, null );
document.getElementById('lea13_ilecell').dispatchEvent(evObj);

Однако для вас это не будет разумным подходом, поскольку после двойного щелчка по полю, как вы знаете, отображаются кнопки «Сохранить» и «Отмена»пользователю без возможности переопределить его поведение так, как вам нужно.Вы можете взломать это с помощью некоторой магии jQuery, но я бы порекомендовал подход mmix, это намного более звучно.Если ваши требования выходят за рамки одного текстового поля, вам может потребоваться включить некоторые модные динамические диалоговые окна HTML / CSS или VisualForce, но в зависимости от того, что вам нужно, быстрый ответ - самый простой ответ.

1 голос
/ 24 февраля 2012

Поскольку у вас есть только одно поле, вам не нужна форма, я бы порекомендовал вам использовать окно подсказки javascript, и если оно возвращает что-то, отличное от нуля (null -> пользователь нажал кнопку отмены), сделайте свою магию

{!REQUIRESCRIPT("/soap/ajax/8.0/connection.js")}

var reason = prompt("Enter reason", "");
if (reason != null) {
    var lead = new sforce.SObject("Lead");
    lead.id = "{!Lead.Id}";
    lead.OwnerId = "ID";
    lead.Status = "STATUS";
    lead.Reason__c = reason;

...
}

PS: Я бы также рекомендовал использовать более свежий инструментарий ajax, чем 8.0 :), сейчас мы на 24.0. Я сомневаюсь, что они устареют старые, но вы никогда не знаете.

...