Вопрос

Проблема с созданием объекта по протоколу OData

Пытаюсь создать объект с помощью протокола OData и метода POST.

HTTP запрос выглядит так:

<АдресБазы>/0/ServiceModel/EntityDataService.svc/PaymentsCollection/

Использую следующий XML в теле запроса:

<?xml  version="1.0" encoding="utf-8"?> 
<entry     xmlns="http://www.w3.org/2005/Atom"
            xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
            xmlns:georss="http://www.georss.org/georss"
            xmlns:gml="http://www.opengis.net/gml"
            xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
            xml:base="https://dev-maksimedia.bpmonline.com/0/ServiceModel/EntityDataService.s…">            
    <content type="application/atom+xml"> 
         <m:properties>
            <d:Name>0000-000001</d:Name>
            <d:OperationDate>2019-06-11T00:00:00</d:OperationDate>
            <d:AmountWithTax>110636.25</d:AmountWithTax>
            <d:Payer>Кафе-кондитерская "Зефир"</d:Payer>
            <d:PurposeOfPayment></d:PurposeOfPayment>
            <d:UsrTypeOperationId>681c7f54-2a15-4e6e-8888-249ce691dcf6</d:UsrTypeOperationId>
            <d:CreatedOn>2019-06-11T00:00:00</d:CreatedOn>
            <d:ModifiedOn>2019-06-11T00:00:00</d:ModifiedOn>
            <d:ModifiedById>410006e1-ca4e-4502-a9ec-e54d922d2c00</d:ModifiedById>
            <d:CreatedById>410006e1-ca4e-4502-a9ec-e54d922d2c00</d:CreatedById>
            <d:CurrencyId>5fb76920-53e6-df11-971b-001d60e938c6</d:CurrencyId>
            <d:TaxPercent>0</d:TaxPercent>
            <d:AmountWithOutTax>0</d:AmountWithOutTax>
            <d:ContractNumber></d:ContractNumber>
            <d:CheckingAccount></d:CheckingAccount>
            <d:Recipient></d:Recipient>
            <d:PayerAccount></d:PayerAccount>
            <d:UsrStringINNkontragent></d:UsrStringINNkontragent>
            <d:UsrStringVIDoper></d:UsrStringVIDoper>
            <d:UsrBooleanChek>false</d:UsrBooleanChek>
            <d:UsrBooleanModified1C>false</d:UsrBooleanModified1C>
            <d:UsrGUID1c>34917119-1e98-11e6-a31d-14dae9b19a48</d:UsrGUID1c>
          </m:properties> 
   </content> 
</entry>

 

HTTP запрос возвращает код 201 - объект создан. И даже возвращает XML  с описанием созданного объекта, где даже id присвоен:

 

<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom"
        xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
        xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
        xml:base="<Здесь адрес базы>/0/ServiceModel/EntityDataService.svc/">
    <id>https://dev-maksimedia.bpmonline.com/0/ServiceModel/EntityDataService.s…;
    <category term="Terrasoft.Configuration.Payments"
            scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
    <link rel="edit"
            title="Payments"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/CreatedBy"
            type="application/atom+xml;type=entry"
            title="CreatedBy"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/CreatedBy"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ModifiedBy"
            type="application/atom+xml;type=entry"
            title="ModifiedBy"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/ModifiedBy"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Currency"
            type="application/atom+xml;type=entry"
            title="Currency"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/Currency"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/UsrLookup…"
            type="application/atom+xml;type=entry"
            title="UsrLookupKontragentOplata"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/UsrLookupKontragentOplata"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/UsrLookup…"
            type="application/atom+xml;type=entry"
            title="UsrLookupOrderPP"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/UsrLookupOrderPP"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/UsrTypeOp…"
            type="application/atom+xml;type=entry"
            title="UsrTypeOperation"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/UsrTypeOperation"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/InvoicePa…"
            type="application/atom+xml;type=feed"
            title="InvoicePaymentsCollectionByPayment"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/InvoicePaymentsCollectionByPayment"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/PaymentsF…"
            type="application/atom+xml;type=feed"
            title="PaymentsFileCollectionByPayments"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/PaymentsFileCollectionByPayments"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/PaymentsI…"
            type="application/atom+xml;type=feed"
            title="PaymentsInFolderCollectionByPayments"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/PaymentsInFolderCollectionByPayments"/>
    <link rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/PaymentsI…"
            type="application/atom+xml;type=feed"
            title="PaymentsInTagCollectionByEntity"
            href="PaymentsCollection(guid'6952eb12-ca22-4014-8376-cad0981dd21e')/PaymentsInTagCollectionByEntity"/>
    <title/>
    <updated>2019-06-20T10:21:49Z</updated>
    <author>
        <name/>
    </author>
    <content type="application/xml">
        <m:properties>
            <d:Id m:type="Edm.Guid">6952eb12-ca22-4014-8376-cad0981dd21e</d:Id>
            <d:Name>0000-000001</d:Name>
            <d:CreatedOn m:type="Edm.DateTime">2019-06-11T02:00:00</d:CreatedOn>
            <d:CreatedById m:type="Edm.Guid">410006e1-ca4e-4502-a9ec-e54d922d2c00</d:CreatedById>
            <d:ModifiedOn m:type="Edm.DateTime">2019-06-11T02:00:00</d:ModifiedOn>
            <d:ModifiedById m:type="Edm.Guid">410006e1-ca4e-4502-a9ec-e54d922d2c00</d:ModifiedById>
            <d:ProcessListeners m:type="Edm.Int32">0</d:ProcessListeners>
            <d:CurrencyId m:type="Edm.Guid">5fb76920-53e6-df11-971b-001d60e938c6</d:CurrencyId>
            <d:OperationDate m:type="Edm.DateTime">2019-06-11T02:00:00</d:OperationDate>
            <d:AmountWithTax m:type="Edm.Decimal">110636.25</d:AmountWithTax>
            <d:TaxPercent m:type="Edm.Decimal">0</d:TaxPercent>
            <d:AmountWithOutTax m:type="Edm.Decimal">0</d:AmountWithOutTax>
            <d:ContractNumber/>
            <d:CheckingAccount/>
            <d:Payer>Кафе-кондитерская "Зефир"</d:Payer>
            <d:Recipient/>
            <d:PurposeOfPayment/>
            <d:PayerAccount/>
            <d:UsrLookupKontragentOplataId m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:UsrLookupKontragentOplataId>
            <d:UsrLookupOrderPPId m:type="Edm.Guid">00000000-0000-0000-0000-000000000000</d:UsrLookupOrderPPId>
            <d:UsrStringINNkontragent/>
            <d:UsrStringVIDoper/>
            <d:UsrBooleanChek m:type="Edm.Boolean">false</d:UsrBooleanChek>
            <d:UsrBooleanModified1C m:type="Edm.Boolean">false</d:UsrBooleanModified1C>
            <d:UsrTypeOperationId m:type="Edm.Guid">681c7f54-2a15-4e6e-8888-249ce691dcf6</d:UsrTypeOperationId>
            <d:UsrGUID1c>34917119-1e98-11e6-a31d-14dae9b19a48</d:UsrGUID1c>
        </m:properties>
    </content>
</entry>

 

НО!!! В BPM'online объект не появляется!

При попытке найти объект по ключевым полям так же ничего не находится.

В чём может быть проблема???

У меня такой же вопрос

4 комментария

Здравствуйте! Возможно у Вас нет прав на данную запись. Что бы наверняка отобразилась необходимо просматривать под пользователем который входит в роль системные администраторы.

Права уже полнее некуда. Попробовал через фидлер делать запрос. Та же история. Сообщает об успешности создания, даже даёт ссылка на переход к новому элементу. Но после перехода по ссылке

<АдресБазы>/0/ServiceModel/EntityDataService.svc/PaymentsCollection(guid'a1e115fc-70f6-414e-a506-e535dba00fba')

выдает: 

<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" class=" FB_FW_ext Bco">

<code>4</code>

<message xml:lang="">

Resource not found for the segment 'PaymentsCollection'.

</message>

<innererror>

<message>

Resource not found for the segment 'PaymentsCollection'.

</message>

<type>System.Data.Services.DataServiceException</type>

<stacktrace>

at System.Data.Services.Providers.DataServiceExecutionProviderWrapper.GetSingleResultFromRequest(SegmentInfo segmentInfo) at System.Data.Services.DataService`1.CompareETagAndWriteResponse(RequestDescription description, IDataService dataService, IODataResponseMessage responseMessage) at System.Data.Services.DataService`1.HandleRequest()

</stacktrace>

</innererror>

</error>

 

Проблема по прежнему не решена.

Скорее всего, дело в неверных namespace в XML-запросе. В будущих версиях доработают ответ сервера, а сейчас рекомендуется использовать корректные namespace. Пример верного запроса можно увидеть в статье в академии.

А если на уровне объекта вставка происходит, а реально в базе записи не появилось, дело может быть в какой-то встроенной в БП объекта логике на Saving, либо в базе на триггере instead of insert на вставку в эту таблицу. Либо запись на мгновение вставляется, но потом удаляется логикой БП по сигналу вставки или по таймеру.

Кроме фиддлера, если есть возможность, посмотрите профайлером запросы в базу.

В других справочниках создание объектов проходит отлично, а именно в справочник Payments не хочет добавлять. Никаких тригеров и бизнес логики, которая бы чтото удаляля и правила не нашел. В итоге просто создал новый юзерский справочник для ввода оплат.

Войдите или зарегистрируйтесь, чтобы комментировать