Всем привет!

 

Пытаюсь обновить номер документа работая через oData.

var context = new BPMonline(new Uri(AUTHSERVICE_URI));

            context.Credentials = new NetworkCredential("userName", "userPassword");

            

            var response = context.DocumentCollection.ExecuteAsync().Result;

            var doc = response.Item2.First();

            doc.Number = "newValue";

            context.UpdateObject(doc);  

            

            var resp = context.SaveChangesAsync(SaveChangesOptions.BatchWithIndependentOperations).Result;

 

Выполнение кода ошибок не дает. Однако, обновление не происходит.

Что не так?

Нравится

1 комментарий

Михаил, в примере в академии код не совсем такой, как Ваш, там используется не SaveChangesAsync, а просто SaveChanges. Вам нужно именно асинхронно?

public static void UpdateCreatioEntityByOdatetWcfExample()
{
    // Создание контекста приложения Creatio.
    var context = new Creatio(serverUri);
    // Определение метода, который добавляет аутентификационные cookie при создании нового запроса.
    context.SendingRequest += new EventHandler<SendingRequestEventArgs>(OnSendingRequestCookie);
    // Из колллекции контактов выбирается тот, по которому будет изменяться информация.
    var updateContact = context.ContactCollection.Where(c => c.Name.Contains("Test")).First();
    // Изменение свойств выбранного контакта.
    updateContact.Notes = "New updated description for this contact.";
    updateContact.Phone = "123456789";
    // Сохранение изменений в модели данных сервиса.
    context.UpdateObject(updateContact);
    // Сохранение изменений данных в Creatio одним запросом.
    var responces = context.SaveChanges(SaveChangesOptions.Batch);
}

Плюс смущает не такая аутентификация у Вас, как в этом примере:

static void OnSendingRequestCookie(object sender, SendingRequestEventArgs e)
{
    // Вызов метода класса LoginClass, реализующего аутентификацию переданного в параметрах метода пользователя.
    LoginClass.TryLogin("CreatioUserName", "CreatioUserPassword");
    var req = e.Request as HttpWebRequest;
    // Добавление полученных аутентификационных cookie в запрос на получение данных.
    req.CookieContainer = LoginClass.AuthCookie;
    e.Request = req;
}

Это сделано, поскольку логин и пароль передаются в отдельный сервис, который затем выдаёт куки, которые в дальнейшем используем при следующих запросах.

 

Чтобы выяснить, дело в этих отличиях или чём-то другом, попробуйте, работают ли стандартные примеры.

 

Также проверьте в Fiddler, идут ли при выполнении этих строк в программе нужные HTTP-запросы в сторону сервера, есть ли на них ответы оттуда или сообщения об ошибках.

Показать все комментарии