Развертывание гибкого приложения salesforce.com без Visualforce

КРАТКАЯ ВЕРСИЯ. У меня есть приложение Flex, которое использует API Salesforce.com. Я пытаюсь развернуть его на удаленном сервере, но продолжаю получать сообщение «Ошибка при входе в систему». когда я пытаюсь выполнить вход на серверы Salesforce. Что дает?

ДЛИННАЯ ВЕРСИЯ (возможно, кто-то позже сочтет это полезным): у меня есть гибкое приложение, которое является надстройкой для salesforce.com.

Если я загружу его как статический файл в salesforce, а затем вставлю на страницу visualforce, он будет работать нормально. В этом методе используется loginBySessionId, а не loginByCredentials.

Я хотел бы иметь возможность запускать его вне серверов Salesforce. IE, я хотел бы разместить приложение на моем собственном сервере, чтобы люди вводили свои учетные данные в приложении, а оно входило на серверы salesforce. Таким образом, если кто-то хочет попробовать мое приложение, ему не обязательно быть администраторами отдела продаж и не нужно устанавливать приложение на страницу Visualforce.

Вот в чем проблема. Если я ввожу данные для входа и запускаю их из компилятора, он подключается и загружает нужные данные. Если я экспортирую его как производственную версию, он все равно будет работать нормально. Однако, если я загружаю файлы релиза на свой сервер или передаю их на другой компьютер и запускаю их локально, я получаю сообщение «Ошибка при входе в систему». Кажется, у некоторых других были похожие проблемы, но нет решений и ничего нового. .

Что еще более странно, если я перенесу файлы проекта на другой компьютер и перекомпилирую их, он внезапно сработает. По сути, мне кажется, что мне нужно перекомпилировать приложение для каждого компьютера, на котором я планирую его запускать, но это непрактично. Тем не менее, я не понимаю, как это может иметь значение, если компилировать одно против другого. И да, те же версии flash, те же версии Flex.

Есть ли у кого-нибудь предложения по решению этой проблемы? Я просто неправильно понимаю, как развертывать гибкие приложения, или это какая-то неприятная вещь с API-интерфейсом Salesforce, и есть обходной путь?

Еще одна вещь, которая делает эту проблему особенно неприятной, заключается в том, что я не могу использовать отладчик, потому что, если я компилирую его на другом компьютере, он работает, поэтому, чтобы получить сообщение об ошибке, я должен построить, а затем перенести на другой компьютер. Я чувствую, что это может быть ключом к проблеме, но я не знаю, как это сделать.

Вот некоторый применимый код, довольно простой:

<flexforforce:F3WebApplication 
    id="app" statusChanged="statusChangedHandler(event)"       
    loginComplete="loginCompleteHandler(event)" 
    loginFailed="loginFailedHandler(event)" 
    sessionExpired="sessionExpiredHandler(event)" 
    serverUrl="http://na9.salesforce.com/services/Soap/u/19.0" 
    requiredTypes="Account,Contact,Opportunity,Lead,Task,User" />

protected function loginClickHandler( event : MouseEvent ) : void {
    _username = '[email protected]';
    _password = 'PASSWORD+SECURITY_TOKEN';
    CursorManager.setBusyCursor();
    app.loginByCredentials( _username, _password );
}

person Dave S    schedule 07.07.2011    source источник
comment
Достаточно справедливо, добавил короткую версию, оставив длинную на тот случай, если кто-то обнаружит это позже (материалы по продажам / гибкости действительно плохо документированы)   -  person Dave S    schedule 07.07.2011
comment
Я бы предположил, что это связано с междоменной песочницей, вам нужно убедиться, что он загружает файл /services/Soap/crossdomain.xml, а не корневой (который, я считаю, будет по умолчанию)   -  person superfell    schedule 07.07.2011


Ответы (1)


Чтобы уточнить, вам, вероятно, понадобится что-то вроде этого при инициализации:

flash.system.Security.loadPolicyFile("http://na9.salesforce.com/services/Soap/crossdomain.xml");

Причина, по которой он работает, когда вы его компилируете, заключается в том, что большая часть безопасности по умолчанию не применима, когда на том же компьютере, что и скомпилированный. Черт возьми, вы даже можете получить доступ к жесткому диску с помощью путей (например, относительного URL-пути к изображению на жестком диске) - попробуйте запустить swf на другом компьютере и бум.

Это отличный показатель того, что вы столкнулись с проблемой безопасности плеера / виртуальной машины :)

person Nate    schedule 07.07.2011
comment
Спасибо, это имеет смысл, но я пробовал это несколькими способами, но, похоже, безуспешно. Похоже, он загружает файл политики, но по-прежнему не позволяет мне войти в систему. Также пробовал установить Security.allowDomain (''); Security.allowInsecureDomain (''); и никаких кубиков. Это находится в обработчике инициализации в приложении верхнего уровня. - person Dave S; 07.07.2011
comment
попробуйте изменить serverUrl на https, в наши дни для большинства учетных записей Salesforce требуется https. - person superfell; 07.07.2011
comment
также вызовы входа обычно идут на login.salesforce.com, поэтому вам также необходимо загрузить правильный файл политики для этого хоста. - person superfell; 07.07.2011
comment
Superfell, спасибо, пробовал это и несколько вариантов, похоже, не работает. URL-адрес сервера должен быть https :, файлы политики должны быть http? - person Dave S; 08.07.2011