Добрый день. Скачал триал версию BPMonline. Хочу немного разобраться в структуре.
Например у меня задача изменить объект (какой либо справочник) из внешнего приложения. Отсюда(http://academy.terrasoft.ua/documents/docs/technic/SDK/7.4.0/WorkWithBpm...) я понял что это возможно, через HTTP.
Но непонятен URL к которому нужно отправить запрос. А конкретно, что такое "имя прилоджения"? Где его брать? Нужно ли гдето регистрировать? Может есть более подробная документация по этой теме или примеры?
http[s]://имя_сервера>/имя_приложения_bpm'online>/0/ServiceModel/EntityDataService.svc
Нравится
Это всего лишь адрес вашего сайта, вроде https://mycompany.bpmonline.com/0/Nui/ViewModule.aspx#SectionModuleV2/CampaignSectionV2
Имя приложения - это alias application'a вашего сайта в IIS. Обычно application именуют 0, 1, 2... и т.д.
Спасибо. С этим вроде разобрался, через URL в браузере возвращается XML.
Но проблемы с авторизацией теперь, если AJAX запрос делать
var request=newRequest();
var url="https://test.bpmonline.com/0/ServiceModel/EntityDataService.svc";
var param = JSON.stringify({
"UserName":"Иванов Иван",
"UserPassword":"ХХХХХХХХ"
});
request.onreadystatechange=function()
{
if (request.readyState==4) {
if (request.status==200) {
var answer=request.responseText;
alert(answer)
}
else alert('Ошибка '+request.status+" Попробуйте еще раз!");
}
}
request.open("POST", url, true);
request.setRequestHeader("Content-Type", "application/json");
//request.setRequestHeader("Authorization", "Basic " + Base64.encode("Иванов Иван" + ":" + "ХХХХХХХХ"));
request.send(param);
Ответ: 401Unauthorized
Как правильно через AJAX авторизацию запроса сделать? Пробовал и так, и как в коммнте в коде, и прям в URL подставлял логин и пароль.
Михаил, достал для Вас следующие примеры:
Запросы на добавление данных
Для того, чтобы добавить запись, нужно послать серверу POST запрос, указав значения колонок в теле запроса. В качестве ответа придет представление созданной Entity. Ниже создается контакт, ему проставляются значения полей Id, Name, BirthDate, Gender. Данные в обе стороны передаются в формате JSON.
Пример запроса на добавление с использованием API Sencha Touch
var serviceUrl = "http://tscoredev5:88/BPMonline540Solution/0/ServiceModel/EntityDataService.svc/"; Ext.Ajax.request({ url: serviceUrl + 'ContactCollection', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', 'Authorization': 'Basic ' + Ext.util.base64.encode('S.Karlo:S.Karlo') }, jsonData: { Id: 'C624E607-C6B2-4A3D-9E6D-06E17FAA35C9', Name: 'John Best', BirthDate: new Date(123321123321), Gender: {__metadata: { uri: serviceUrl + 'GenderCollection(guid\'FC2483F8-65B6-DF11-831A-001D60E938C6\')' }} }, method: 'POST' });
Запросы на обновление данных
Для обновления данных нужно послать HTTP запрос с кастомным OData-специфическим типом операции MERGE. если послать запрос с типом операции PUT, то все колонки Entity, не указанные в запросе будут заполнены своими значениями по-умолчанию.
Пример запроса на обновление с использованием API Sencha Touch
var serviceUrl = "http://tscoredev5:88/BPMonline540Solution/0/ServiceModel/EntityDataService.svc/"; Ext.Ajax.request({ url: serviceUrl + 'ContactCollection(guid\'5B62E943-155F-42CE-A41A-EFA650BAA0A0\')', headers: { 'Content-Type': 'application/json', 'Authorization': 'Basic ' + Ext.util.base64.encode('S.Karlo:S.Karlo') }, jsonData: { Name: 'John', BirthDate: new Date(123321123321), Gender: {__metadata: { uri: 'GenderCollection(guid\'FC2483F8-65B6-DF11-831A-001D60E938C6\')' }} }, method: 'MERGE' });
Запросы на удаление данных
Тут все просто:
Пример запроса на удаление с использованием API Sencha Touch
var serviceUrl = "http://tscoredev5:88/BPMonline540Solution/0/ServiceModel/EntityDataService.svc/"; Ext.Ajax.request({ url: this.serviceUrl + 'ContactCollection(guid\'C624E607-C6B2-4A3D-9E6D-06E17FAA35C9\')', headers: { 'Authorization': 'Basic ' + Ext.util.base64.encode('S.Karlo:S.Karlo') }, method: 'DELETE' });
Спасибо заа примеры. Но проблема на данный момент с авторизацией.
Перепробовал уже все что на форуме нашел
1) Тут (http://www.community.terrasoft.ru/forum/topic/10573) описана проблема один в один, но я так понял, не решилась. Имя пользователя, на всякий случай, поменял на латиницу. Права на Операцию - "Доступ к Odata" есть, а вот на доступ к Объекту я не понял, как имнно установить. Но проблема скорее всего не в них.
2) Тут (http://www.community.terrasoft.ru/forum/topic/9613) описан достутп через PHP, а заодно попробовал обратится к серверу авторизации (..ServiceModel/AuthService.svc/Login). Ответ:{"Message":"Authentication failed.","StackTrace":null,"ExceptionType":"System.InvalidOperationException"}
В чем проблема, не представляю. Может еще какоето разрешение в админке требуется? Или дополнительные параметры авторизации, типа "WorkspaceName", "TimeZoneOffset", "Language"
Насчет прав доступа на объекты:
Вам нужно войти в Дизайнер системы –> Управление конфигурацией –> Конфигурация. В строке поиска ввести заголовок объекта и нажать ‘Enter’. Найти в результатах нужный объект и посмотреть его Название.
Перейти на вкладку «Администрирование: Доступ к объектам», применить фильтр по заголовку и найти нужный объект. Внизу, на вкладке «Доступ к объекту для внешних ресурсов» добавить доступ для сотрудника, под которым вы авторизируетесь.
Если нужно получить коллекцию, например Контактов, то даём права на Contact, а для обращения к коллекции добавляем слово «Collection» = «ContactCollection».