2016-07-21 2 views
0

У меня есть плагин на Update (pre-op) InvoiceDetail, в котором я получаю связанный Invoice, чтобы получить от него дополнительную информацию (т. Е. Выбранный профиль налога на уровне счетов-фактур) в CRM 2016.Получить запуск обновления в плагине

Вот как я это делаю:

//xrmObjects is an object containing all useful objects in plugins/workflow... 
var invoice = RetrieveEntity(xrmObjects.Service, xrmObjects.TracingService, image["invoiceid"] as EntityReference, new ColumnSet("invoiceid", "pricelevelid", "customerid", "opportunityid", "xtc_tax_definition")); 

Эта специфическая строка кода выше запускает другой Update на InvoiceDetail

Он повторно это метод вызывается выше:

public static Entity RetrieveEntity(IOrganizationService service, ITracingService tracingService, EntityReference target, ColumnSet columnSet) 
{ 

    Entity entity = new Entity(); 

    try 
    { 
     entity = CrmServiceExtensions.ExecuteWithRetry<RetrieveResponse>(service, new RetrieveRequest 
     { 
      Target = target, 
      ColumnSet = columnSet 

     }).Entity; 
    } 
    catch (Exception ex) 
    { 
     tracingService.Trace($"Error retrieving {target.LogicalName}: {ex.Message}"); 
     throw; 
    } 

    return entity; 

} 

Вот ExecuteWithRetry:

public static T ExecuteWithRetry<T>(IOrganizationService service, OrganizationRequest request) 
      where T : OrganizationResponse 
     { 
      T response = null; 
      int i = 0; 

      // Maximum of five iterations. 
      while (i < 5) 
      { 
       try 
       { 
        response = (T)service.Execute(request); 

        // If the Execute does not throw an Exception, break the loop 
        break; 
       } 
       catch (System.Web.Services.Protocols.SoapException e) 
       { 
        // Retry if the SoapException is a "Generic SQL Error", 
        // otherwise rethrow the SoapException. 
        // "Generic SQL Error" might indicate a deadlock. 
        if (e.Detail.InnerText.ToLower().Contains("generic sql error")) 
        { 
         ++i; 
         // Wait (sleep thread) for i * 1000 milliseconds. 
         // So, first iteration waits 1 second, 
         // while fifth iteration will wait 5 seconds. 
         System.Threading.Thread.Sleep(i * 1000); 
        } 
        else throw; 
       } 
      } 

      if (i >= 5) 
      { 
       throw new Exception("ExecuteWithRetry: too many retries"); 
      } 

      return response; 
     } 

Я подтверждено, что ничего фанки не происходит, то сообщение об обновлении на InvoiceDetail запускается снова на линии response = (T)service.Execute(request);

Я также попробовав использовать раннюю привязку и контекст для извлечения счета-фактуры, но методы LoadProperty, которые загружают счет-фактуру, делают то же самое ....

using (XrmServiceContext ctx = new XrmServiceContext(xrmObjects.Service)) 
{ 

    Xrm.InvoiceDetail image = xrmObjects.PluginContext.PreEntityImages["invoicedetail"].ToEntity<Xrm.InvoiceDetail>(); 

    try 
    { 
     ctx.LoadProperty(image, "invoice_details"); 
    } 
    catch (Exception ex) 
    { 
     throw new InvalidPluginExecutionException($"Error retrieving invoice details' invoice: {ex.Message}"); 
    } 

} 

Я ничего не вижу в настройках своих шагов, которые это сделают. Есть идеи?

+1

Я предполагаю, что вы сделали очевидное и проверили, что в сообщении Invoice 'Retrieve' нет плагинов? – jasonscript

+0

@jasonscript Действительно, у меня нет рабочих процессов/плагинов, настроенных для этого сообщения, и этого объекта (фактически нет для счета-фактуры) –

+1

. Таким образом, при выполнении запроса по счету-фактуре во время обновления детали счета-фактуры возникает другой триггер обновления плагина счета-фактуры произойти? – Daryl

ответ

1

Вместо использования LoadProperty, я просто извлекаться счет вручную, как так

var invoice = ctx.InvoiceSet.SingleOrDefault(x => x.Id == image.InvoiceId.Id); 

Вместо:

ctx.LoadProperty(image, "invoice_details"); 

По какой-то причине LoadProperty будет привести к нежелательному сообщение об обновлении на деталях ребенок счет-фактура ..

 Смежные вопросы

  • Нет связанных вопросов^_^