AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.03.2012, 09:30   #1  
mistah is offline
mistah
Участник
 
169 / 13 (1) ++
Регистрация: 11.11.2011
Адрес: Коньково
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  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Есть небольшая проблема - вы не оттуда получаете идентификатор salesorder. Попробуйте так:

Guid id_1 = service.Create(salesorder);
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: mistah (1).
Старый 28.03.2012, 11:28   #3  
mistah is offline
mistah
Участник
 
169 / 13 (1) ++
Регистрация: 11.11.2011
Адрес: Коньково
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  
spirius is offline
spirius
Участник
 
34 / 12 (1) ++
Регистрация: 27.02.2012
Цитата:
Сообщение от a33ik Посмотреть сообщение
Есть небольшая проблема - вы не оттуда получаете идентификатор salesorder. Попробуйте так:

Guid id_1 = service.Create(salesorder);
А существует ли возможность сделать создание этих двух сущностей одновременно? (напирмер с использованием CrmServiceContext.SaveChanges() )
т.е. для создания salesorderDetail нам необходимо id salesOrder, который появиться только после создания salesOrder.
есть ли возможность как-либо связать эти две сущности, для передачи в контекст?
Старый 28.03.2012, 15:19   #5  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Цитата:
Сообщение от spirius Посмотреть сообщение
А существует ли возможность сделать создание этих двух сущностей одновременно? (напирмер с использованием CrmServiceContext.SaveChanges() )
т.е. для создания salesorderDetail нам необходимо id salesOrder, который появиться только после создания salesOrder.
есть ли возможность как-либо связать эти две сущности, для передачи в контекст?
Для создания чайлодовой сущности вам необходим идентивикатор парентовой. Я не пробовал, но может получиться следующий трюк (для 4.0 работал, для 2011 - не пробовал) - задайте идентификатор создаваемого SalesOrder и используйте тот же идентификатор при заполнении EntityReference salesorderid для SalesOrderDetail.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 28.03.2012, 15:34   #6  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
Цитата:
Сообщение от a33ik Посмотреть сообщение
Для создания чайлодовой сущности вам необходим идентивикатор парентовой. Я не пробовал, но может получиться следующий трюк (для 4.0 работал, для 2011 - не пробовал) - задайте идентификатор создаваемого SalesOrder и используйте тот же идентификатор при заполнении EntityReference salesorderid для SalesOrderDetail.
Да это работает. Но вcе равно необходимо создавать объекты в порядке salesorder -> salesorderdetail
__________________
Мой блог https://procrm.tv

Последний раз редактировалось g.Naukovych; 28.03.2012 в 16:18.
Старый 29.03.2012, 10:46   #7  
spirius is offline
spirius
Участник
 
34 / 12 (1) ++
Регистрация: 27.02.2012
Цитата:
Сообщение от g.Naukovych Посмотреть сообщение
Да это работает. Но вcе равно необходимо создавать объекты в порядке salesorder -> salesorderdetail
а есть ли некий порядок создавания сущностей, при добавлении их в контекст с помощью AddObject(entity)?
т.е. если сделать, например:
context.AddObject(entity1);
context.AddObject(entity2);
context.SaveChanges();
будет ли вначале создана entity1, а затем создана entity2?

p.s. AddRelatedObject() похоже может помочь.
p.p.s. Спасибо за ответы=) несколько проблем решил=)
Старый 29.03.2012, 11:01   #8  
g.Naukovych is offline
g.Naukovych
Участник
MCBMSS
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
405 / 130 (5) +++++
Регистрация: 23.03.2011
а зачем это делать?
Создать сущность можно 1 строкой.
В чем разница context.AddObject(entity1); или service.Create(entity1);
__________________
Мой блог https://procrm.tv
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Leon's CRM Musings: Book Review: Microsoft Dynamics CRM 2011 Administration Bible Blog bot Dynamics CRM: Blogs 0 19.12.2011 12:11
crminthefield: Overview: Microsoft Dynamics CRM 4.0 Update Rollup 19 Blog bot Dynamics CRM: Blogs 0 26.08.2011 01:13
Danny Varghese: Dynamics CRM 2011 Licensing Blog bot Dynamics CRM: Blogs 0 18.05.2011 03:15
ukcrm: CRM 4.0 Client Upgrade To CRM 2011 Blog bot Dynamics CRM: Blogs 0 23.04.2011 07:11
dynamics-community.at: Linksammlung CRM 2011 Blog bot Dynamics CRM: Blogs 0 19.01.2011 21:11

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:20.