2010-09-24 2 views
3

Мне сложно понять, что здесь происходит. Я пытаюсь скопировать некоторый javascript onClick для кнопки в представлении списка Force.com для настраиваемого объекта. Вот JS.Инструментарий AJAX - проблема с выполнением webservice

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


var myURL = sforce.apex.execute("MyWebServices", "myUrl", {}); 

и вот веб-сервис, который я пытаюсь позвонить.

global class MyWebServices { 

    webservice static String myUrl(){ 
    return 'www.foo.com'; 
    } 

} 

Когда я нажимаю кнопку, я получаю немного предупреждения всплывающего говоря:

«Проблема с OnClick JavaScript для этой кнопки или ссылки встречались: Невозможно вызвать метод„выполнить“из undefined " Когда я повторяю члены« sforce », нет« вершины ».

Я использую буквально тот же синтаксис в другой кнопке в этой же организации, единственной разницей является метод, который я вызываю. Эта кнопка работает. На самом деле, если я скопирую код из сценария проблемы и поставлю его во главе рабочего скрипта на другой кнопке, он будет работать. Что мне здесь не хватает?

Подробнее о двух элементах кнопки этой проблемы: Одна кнопка (работает) - это кнопка просмотра списка на Учетной записи, другая (сломанная) - на кнопке пользовательского списка объектов для Foo__c.

Я использую этот код для обоих:

{!REQUIRESCRIPT("/soap/ajax/10.0/apex.js")} 
{!REQUIRESCRIPT("/soap/ajax/10.0/connection.js")} 
alert(sforce.apex.execute("HammockWebServices", "crossCoverageUrl", {})); 

на счете она работает отлично, на Foo__c это не делает. Я попытался переключить порядок инструкций REQUIRE ... без видимого эффекта.

Помимо этикетки и названия кнопок, они, кажется, определены одинаково: Кнопка Список Дисплей Флажки Выполнить JavaScript OnClickJavaScript

Есть объект уровня разрешений, профили, или совместное использование правил, которые влияют на которые Javascript пакеты могут быть доступны? (Заметьте, что даже в этом случае я пробовал это как системный администратор и не получал нигде ...)

+0

ИМХО, вы хотите использовать visualforce для этого.Это избавит вас от многих головных болей вместо того, чтобы иметь дело с инструментарием ajax, который является самой, самой первой итерацией инструментов, созданных salesforce, и их гораздо сложнее использовать. –

ответ

0

Использует ли ваша организация пространство имен? Если это так, то синтаксис вызова функции слегка меняется от:

var myURL = sforce.apex.execute("MyWebServices", "myUrl", {}); 

к:

var myURL = sforce.apex.execute("MyNamespace.MyWebServices", "myUrl", {}); 
+0

нет пространств имен. Плюс, я был бы (хотя и не глубоко .. это продавец) удивился, что он сказал бы мне, что «apex» был undef, если проблема была пространством имен метода apex webservice. – Ben

0

Я думаю, connection.js нужно загрузить, прежде чем apex.js, попробуйте изменить порядок.

Edit: от apex.js

if (!sforce) { 
    throw "unable to find sforce. Make sure that connection.js is loaded before apex.js script"; 
} 

Но так как изменение порядка сценариев, похоже, не имеют никакого эффекта, может быть, проблема с версиями API? Я вижу, что вы используете версию 10, которая довольно старая, ваш класс Apex также использует ту же версию? Попробуйте изменить версии, чтобы увидеть, что работает.

+0

Включил его в действие. Более того, в другой кнопке, которая работает, или если я перемещаю этот код на другую кнопку, он работает в упорядоченном порядке, – Ben

+0

Я получаю ошибку javascript, когда я пытаюсь использовать его с apex.js, загруженным первым. Однако это может зависеть от страницы, на которой расположена пользовательская кнопка - какая страница SF работает, а какая нет? –

+0

Я обновил детали вопроса с этой информацией - – Ben

0

«соединение» должно быть указано до «вершины». Он устанавливает основной объект sforce.

+2

Этот ответ уже был предложен. Лучше всего в этом случае, вместо того, чтобы читать этот ответ, как только вы [получите достаточную репутацию (15)] (http://stackoverflow.com/privileges), переместите ответ (ы), который, по вашему мнению, решите проблему. – Ktash