Почему имя файла компании предоставляется веб-службой?
Я понимаю, что для доступа к компании, которая в настоящее время не открыта в QuickBooks, веб-службе необходимо предоставить QuickBooks Web Connector местоположение файла в качестве возвращаемого значения для authenticate()
вызов.
Это кажется мне задом наперед. Почему веб-служба должна сообщать веб-соединителю, где находится соответствующий файл компании? Разве не имеет смысла управлять им через Web Connector?
Вот соответствующее объяснение, которое я нашел в Руководстве для программиста QuickBooks Web Connector:
- Если ваш веб-сервис хочет попробовать другую компанию, укажите путь к компании в возвращаемой строке. (Вы можете указать пустую строку, если хотите использовать любой открытый файл компании.) Веб-коннектор ответит, попытавшись снова подключиться к QuickBooks, используя эту предоставленную строку.
Зачем веб-сервису попробовать другую компанию?
Почему веб-сервис выполняет второе из этих действий, а не просто останавливается? На практике этот подход используется, когда веб-служба запоминает путь к файлу компании от сеанса к сеансу (рекомендуемая практика) и хочет иметь запасной вариант для использования любого файла компании, открытого в настоящий момент в QuickBooks (путем ответа на вызов connectionError с помощью пустая строка).
Это не так случайно, как может показаться. Когда веб-служба добавляется к веб-соединителю, веб-соединитель сохраняет уникальный FileID как расширение личных данных в указанной компании. В результате веб-служба всегда может проверить, что он обращается к ожидаемому файлу компании, просто проверив возвращение CompanyRet вашему веб-сервису при первом вызове sendRequestXML веб-коннектора в последовательности обмена данными. (Проверьте список расширений данных для ожидаемого FileID.)
Это похоже на плохой опыт конечного пользователя; если они перемещают файл своей компании (при условии, что они хотят, чтобы Web Connector работал без открытия QuickBooks), веб-служба не будет работать до тех пор, пока этот путь не будет обновлен на стороне сервера. Кажется совершенно правдоподобным, что конечный пользователь мог бы сделать это, не зная, что это что-то сломает.
Почему так устроено? И что еще более важно: есть ли способ обойти это?
1 ответ
Почему так устроено?
Потому что так его построил Intuit.
Это можно обойти?
Нет.