|
28.03.2012, 09:30 | #1 |
Участник
|
a33ik, спасибо, исправил, но теперь он пишет, что это значение Null:
его надо отделить в другой плагин на post-operation? при выполнении плагина Заказ создается, но после этого CRM говорит, что salesorderdetail думает, что salesorderid из этой сущности Null X++: Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Attribute: salesorderid cannot be set to NULLDetail: <OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"> <ErrorCode>-2147220989</ErrorCode> <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> <Message>Attribute: salesorderid cannot be set to NULL</Message> <Timestamp>2012-03-28T05:19:56.3402878Z</Timestamp> <InnerFault i:nil="true" /> <TraceText> [ClassLibrary7: CreateSalesOrder.Order] [64e3abde-0978-e111-af6d-000c29c05d09: CreateSalesOrder.Order: Update of new_zayavka] Order: System.ServiceModel.FaultException`1[Microsoft.Xrm.Sdk.OrganizationServiceFault]: Attribute: salesorderid cannot be set to NULL ( Microsoft.Xrm.Sdk.OrganizationServiceFault). </TraceText> </OrganizationServiceFault> X++: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Client; using Microsoft.Xrm.Sdk.Query; using System.ServiceModel; using System.ServiceModel.Description; namespace CreateSalesOrder { public class Order : IPlugin { public void Execute(IServiceProvider serviceProvider) { ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); try { IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); Entity record = (Entity)context.InputParameters["Target"]; if (record.LogicalName == "new_zayavka") { record["new_inn"] = "sdf"; record["new_name_nai"] = record["new_inn"]; Entity pricelevel = new Entity("pricelevel"); Entity currency = new Entity("transactioncurrency"); Entity account = new Entity("account"); bool vispricelocked = false; Entity salesorder = new Entity("salesorder"); salesorder["name"] = "TEST"; salesorder["pricelevelid"] = new EntityReference(pricelevel.LogicalName, new Guid("156ABFBD-3704-DF11-9297-005056C00008")); salesorder["transactioncurrencyid"] = new EntityReference(currency.LogicalName, new Guid("9E79B15D-1937-E111-A8B6-08002739EA86")); salesorder["customerid"] = new EntityReference(account.LogicalName, new Guid("46053320-E952-E111-81DB-000C29C05D09")); salesorder["ispricelocked"] = vispricelocked; // Obtain the organization service reference. IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); service.Create(salesorder); Guid id_1 = new Guid(salesorder["salesorderid"].ToString()); Entity salesorderdetail = new Entity("salesorderdetail"); salesorderdetail["new_orda"] = new EntityReference("salesorder", id_1); salesorderdetail["salesorderid"] = salesorder["salesorderid"]; Entity product = new Entity("product"); Entity uom = new Entity("uom"); salesorderdetail["productid"] = new EntityReference(product.LogicalName, new Guid("AC341411-4347-E111-9250-000C29C05D09")); salesorderdetail["uomid"] = new EntityReference(uom.LogicalName, new Guid("5D15C954-A08E-DB11-934C-000E0C6AB271")); IOrganizationServiceFactory serviceFactory1 = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service1 = serviceFactory1.CreateOrganizationService(context.UserId); service1.Create(salesorderdetail); } } catch (Exception ex) { tracingService.Trace("Order: {0}", ex.ToString()); throw; } } } } |
|
28.03.2012, 10:24 | #2 |
Чайный пьяница
|
Есть небольшая проблема - вы не оттуда получаете идентификатор salesorder. Попробуйте так:
Guid id_1 = service.Create(salesorder);
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: mistah (1). |
28.03.2012, 11:28 | #3 |
Участник
|
a33ik, он, видимо, теперь считает, что я пытаюсь создать еще один Заказ:
X++: Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Cannot insert duplicate key.Detail: <OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"> <ErrorCode>-2147220937</ErrorCode> <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> <Message>Cannot insert duplicate key.</Message> <Timestamp>2012-03-28T07:23:18.3667022Z</Timestamp> <InnerFault i:nil="true" /> <TraceText> [ClassLibrary7: CreateSalesOrder.Order] [64e3abde-0978-e111-af6d-000c29c05d09: CreateSalesOrder.Order: Update of new_zayavka] Order: System.ServiceModel.FaultException`1[Microsoft.Xrm.Sdk.OrganizationServiceFault]: Cannot insert duplicate key. ( Microsoft.Xrm.Sdk.OrganizationServiceFault). </TraceText> </OrganizationServiceFault> X++: IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); service.Create(salesorder); Guid id_1 = service.Create(salesorder); Entity salesorderdetail = new Entity("salesorderdetail"); salesorderdetail["new_orda"] = new EntityReference("salesorder", id_1); salesorderdetail["salesorderid"] = id_1; Entity product = new Entity("product"); Entity uom = new Entity("uom"); salesorderdetail["productid"] = new EntityReference(product.LogicalName, new Guid("AC341411-4347-E111-9250-000C29C05D09")); salesorderdetail["uomid"] = new EntityReference(uom.LogicalName, new Guid("5D15C954-A08E-DB11-934C-000E0C6AB271")); IOrganizationServiceFactory serviceFactory1 = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service1 = serviceFactory1.CreateOrganizationService(context.UserId); service1.Create(salesorderdetail); |
|
28.03.2012, 12:34 | #4 |
Участник
|
Цитата:
т.е. для создания salesorderDetail нам необходимо id salesOrder, который появиться только после создания salesOrder. есть ли возможность как-либо связать эти две сущности, для передачи в контекст? |
|
28.03.2012, 15:19 | #5 |
Чайный пьяница
|
Цитата:
Сообщение от spirius
А существует ли возможность сделать создание этих двух сущностей одновременно? (напирмер с использованием CrmServiceContext.SaveChanges() )
т.е. для создания salesorderDetail нам необходимо id salesOrder, который появиться только после создания salesOrder. есть ли возможность как-либо связать эти две сущности, для передачи в контекст?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
28.03.2012, 15:34 | #6 |
Участник
|
Цитата:
Сообщение от a33ik
Для создания чайлодовой сущности вам необходим идентивикатор парентовой. Я не пробовал, но может получиться следующий трюк (для 4.0 работал, для 2011 - не пробовал) - задайте идентификатор создаваемого SalesOrder и используйте тот же идентификатор при заполнении EntityReference salesorderid для SalesOrderDetail.
Последний раз редактировалось g.Naukovych; 28.03.2012 в 16:18. |
|
29.03.2012, 10:46 | #7 |
Участник
|
Цитата:
т.е. если сделать, например: context.AddObject(entity1); context.AddObject(entity2); context.SaveChanges(); будет ли вначале создана entity1, а затем создана entity2? p.s. AddRelatedObject() похоже может помочь. p.p.s. Спасибо за ответы=) несколько проблем решил=) |
|
29.03.2012, 11:01 | #8 |
Участник
|
а зачем это делать?
Создать сущность можно 1 строкой. В чем разница context.AddObject(entity1); или service.Create(entity1); |
|
|
|