20.01.2011, 11:39 | #1 |
Участник
|
Ошибка need to start transaction before commit
В своем коде использую фреймворк "Ascentium_CrmService" для копирования сущностей... Смысл в том что я сначала получаю все атрибуты исходной сущности,а потом перебираю и создаю новую.. код самого создания ниже..
Код: var beIncident = new BusinessEntity("incident"); for (var j = 0; j < beResult.length; j++) { var oField = beResult[j]; var oName = oField[0]; var oBO = oField[1]; if (oName != "createdby" && oName != "createdon" && oName != "modifiedon" && oName != "incidentid" && oName != "ownerid" && oName != "owningbusinessunit" && oName != "statecode" && oName != "statuscode") { if (oName == "title") { beIncident.attributes[oName] = oBO.value + " КОПИЯ"; } else if(oName == "customerid") { beIncident.attributes[oName] = new CrmLookup("account", oBO.value); } else { beIncident.attributes[oName] = oBO.value; } } } var sNew_IncidentId = oService.Create(beIncident); Гугл по поводу этого не многословен...может тут кто-то знает? |
|
20.01.2011, 11:51 | #2 |
Moderator
|
Хм, а отладживаться вы пробовали?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
21.01.2011, 13:35 | #3 |
Участник
|
Попробовал посмотреть что происходит. Ошибка возникает на вызове сервиса
X++: <?sXml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Header> <CrmAuthenticationToken xmlns="http://schemas.microsoft.com/crm/2007/WebServices"> <AuthenticationType xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">0</AuthenticationType> <CrmTicket xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes"></CrmTicket> <OrganizationName xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">Payment</OrganizationName> <CallerId xmlns="http://schemas.microsoft.com/crm/2007/CoreTypes">00000000-0000-0000-0000-000000000000</CallerId> </CrmAuthenticationToken> </soap:Header> <soap:Body> <Create xmlns="http://schemas.microsoft.com/crm/2007/WebServices"> <entity xsi:type="incident"> <new_invoicedate>2011-01-19T00:00:00+03:00</new_invoicedate> <ticketnumber>CAS-05105-WHK6D5</ticketnumber> <subjectid>{08E99922-A2FF-4834-A00E-1D3E0D5971BF}</subjectid> <isdecrementing>1</isdecrementing> <new_invoicevat_base>113</new_invoicevat_base> <severitycode>1</severitycode> <title>test </title> <modifiedby>{55798C5C-87F4-DE11-AF95-00155D8E4B06}</modifiedby> <new_invoicevat>113</new_invoicevat> <customerid type="account">{9F1F74AE-47CD-DD11-870C-0003FFC1F036}</customerid> <new_invoiceamount_base>100</new_invoiceamount_base> <new_manager_peyment>{ADF7EE54-87F4-DE11-AF95-00155D8E4B06}</new_manager_peyment> <productserialnumber>1234</productserialnumber> <new_office>{90E3C441-FFCC-DD11-870C-0003FFC1F036}</new_office> <new_systemuser_respon>{55798C5C-87F4-DE11-AF95-00155D8E4B06}</new_systemuser_respon> <new_supplier>{B78ACFC7-6095-DF11-AA67-00155D8E4B06}</new_supplier> <new_paymentdone>0</new_paymentdone> <timezoneruleversionnumber>0</timezoneruleversionnumber> <exchangerate>1</exchangerate> <followupby>2011-01-31T00:00:00+03:00</followupby> <new_invoiceamount>100</new_invoiceamount> <prioritycode>2</prioritycode> <new_legalentity>{B3F6B417-EC37-DF11-8CBE-00155D8E4B06}</new_legalentity> <incidentstagecode>1</incidentstagecode> <transactioncurrencyid>{CB1A9219-98BF-DD11-AF67-0003FFC1F036}</transactioncurrencyid> </entity> </Create> </soap:Body> </soap:Envelope> |
|
21.01.2011, 14:33 | #4 |
Moderator
|
Цитата:
Поставьте код инструкцию Код: dubugger;
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
21.01.2011, 15:08 | #5 |
Участник
|
Не, я использую вполне человеческий фреймворк и часто им пользуюсь http://mmcrm.ru/?p=790. Именно дебаггером я это и достал. Я поставил дебаггер на метод Create и проследил весь путь вплоть до отправки запроса на создание. Этот самый запрос я выше и процитировал.
|
|
22.01.2011, 14:47 | #6 |
Moderator
|
Я знаю что это за фреймворк! Не нужно тыкать мне ссылки на сайты плагиаторов, предпочитаю читать в оригинале.
Какую мысль я пытался до вас донести: очень похоже, что это внутренняя ошибка фреймворка, поэтому искать ее нужно дебагером. Не метод который ее возвращает, а внутри этого метода. Если же это ошибка самого сервера, то нужно читать логи и делать выводы. В любом случае те бесполезные строки кода, которые вы привели к решению проблемы нас нисколько не приближают.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.01.2011, 18:00 | #7 |
Участник
|
В общем при копировании сущности "incident" есть какой-то атрибут который копировать нельзя. Я пробовал скопировать сущность из кода c# та же самая ошибка. Атрибут incidentid я конечно удалял и раньше + я сделал список разрешенных атрибутов, куда занес все используемые видимые атрибуты с формы, остальные стал удалять и все прекрасно создалось.
Последний раз редактировалось Kipetcoff; 26.01.2011 в 18:02. |
|
27.01.2011, 08:51 | #8 |
Moderator
|
Так может быть поделитесь своими наблюдениями? Значения каких атрибутов не следует заполнять создавая Обращение?
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
27.01.2011, 17:00 | #9 |
Участник
|
Я исключил из приведенного ниже списка все созданные мной атрибуты сущности "incident" и получился такой список
arrAllowed.Add("subjectid"); arrAllowed.Add("title"); arrAllowed.Add("productserialnumber"); arrAllowed.Add("customerid"); arrAllowed.Add("isdecrementing"); arrAllowed.Add("caseorigincode"); arrAllowed.Add("contractid"); arrAllowed.Add("contractdetailid"); arrAllowed.Add("transactioncurrencyid"); arrAllowed.Add("followupby"); arrAllowed.Add("casetypecode"); На самом деле я сейчас посмотрел тут запрос который я написал в первый раз и увидел что поле "ticketnumber" наверняка и есть то самое злополученое поле, которое нельзя копировать. Оно генерируется автоматически и наверняка присвоение не приветствуется. Последний раз редактировалось Kipetcoff; 27.01.2011 в 17:04. |
|
27.01.2011, 17:01 | #10 |
Чайный пьяница
|
Цитата:
Тут надо по одному параметру накидывать, чтобы понять какой именно вызвал ошибку.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
27.01.2011, 17:08 | #11 |
Moderator
|
Согласен. Гораздо интереснее понять "что нельзя", нежели что можно.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
27.01.2011, 17:20 | #12 |
Участник
|
Цитата:
severitycode modifiedby timezoneruleversionnumber exchangerate prioritycode incidentstagecode Потом добавил "ticketnumber". И вот он попался!! Так что все таки ОН.)) |
|
27.01.2011, 17:28 | #13 |
Чайный пьяница
|
Наверное очень много зависит от деплоймента...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
28.01.2011, 09:41 | #14 |
Moderator
|
Ну, может быть и он... Его же какая-то хранимка обновляет, может и случилась какая-то коллизия транзакций... Хотя поддержу Андрея: мне тоже удавалось записать в это поле произвольную муру.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|