Изменение ошибки выбрасывания Subgrid filter в динамике crm 2015

Добрый день. Я столкнулся с ДЕЙСТВИТЕЛЬНО странной проблемой, пытаясь изменить сетку данных, и Google не повезло. Я использую приведенные ниже javascripts для установки выборки и макета подсетки под названием «Opp_Prods».

function timeOutReassignFilter()
{
console.log("About to setTimeout");
    setTimeout(SetProductView, 1000);
console.log("Set TimeOut");
}

function SetProductView()
{
try
{
var accountId = Xrm.Page.data.entity.getId();
var viewId = '{00000000-0000-0000-0000-000000000001}';
var entityName = "opportunityproduct";
var viewDisplayName = "Associated Opportunity Products View";

console.log("About to set fetchxml: " + accountId);
var fetchXml = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>" + 
  "<entity name='opportunityproduct'>" +
    "<attribute name='productid' />" +
    "<attribute name='productdescription' />" +
    "<attribute name='priceperunit' />" +
    "<attribute name='quantity' />" +
    "<attribute name='new_serialnumber' />" +
    "<attribute name='extendedamount' />" +
    "<attribute name='opportunityproductid' />" +
    "<order attribute='productid' descending='false' />" +
    "<link-entity name='opportunity' from='opportunityid' to='opportunityid' alias='ac'>" +
      "<filter type='and'>" +
        "<condition attribute='parentaccountid' operator='eq' value='" + accountId + "' />" + //uiname='Test Account' 
      "</filter>" +
    "</link-entity>" +
  "</entity>" +
"</fetch>";

console.log("About to set layoutXml");
var layoutXml = "<grid name='Opp_Prods' object='1' jump='productid' select='1' icon='1' preview='1'>" +
    "<row name='result' id='myproductid'>" +
        "<cell name='productdescription' width='150' />" +
        "<cell name='productid' width='150' />" +
        "<cell name='priceperunit' width='150' />" +
        "<cell name='quantity' width='150' />" +
        "<cell name='extendedamount' width='150' />" +
        "<cell name='new_serialnumber' width='150' />" +
        "<cell name='opportunityproductid' width='150' />" +
    "</row>" +
"</grid>";

console.log("About to set Control by adding custom view.");
//    Xrm.Page.getControl("opp_prods").addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, true);

document.getElementById("Opp_Prods").control.SetParameter("fetchXML", fetchXml);
document.getElementById("Opp_Prods").control.SetParameter("layoutXML", layoutXml);
Xrm.Page.ui.controls.get("Opp_Prods").refresh();
console.log("Custom View Added.");
}
catch(err)
{
console.log(err);
}
}

При загрузке формы выдает следующую ошибку:

Необработанное исключение: System.ServiceModel.FaultException`1 [[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, версия = 7.0.0.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35]]: System.Xml.XmlException: Microsoft Dynamics В CRM произошла ошибка. Справочный номер для администраторов или службы поддержки: #E63BFD86Detail:
-2147220970 System.Xml.XmlException: в Microsoft Dynamics CRM произошла ошибка. Справочный номер для администраторов или службы поддержки:

E63BFD86 2015-08-25T16:13:21.2028543Z

<ErrorCode>-2147220970</ErrorCode>
<ErrorDetails xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic"

/> System.InvalidCastException: в Microsoft Dynamics CRM произошла ошибка. Справочный номер для администраторов или службы поддержки:

F2D68509

<Timestamp>2015-08-25T16:13:21.2028543Z</Timestamp>
<InnerFault i:nil="true" />
<TraceText i:nil="true" />   </InnerFault>   <TraceText i:nil="true" /> </OrganizationServiceFault>

А вот полная трассировка из наших журналов трассировки CRM:

[2015-08-25 11:24:37.314] Процесс: w3wp |Организация:f6d279c3-1548-e511-80bd-00155d001302 |Поток: 118 |Категория: Приложение |Пользователь: 00000000-0000-0000-0000-000000000000 |Уровень: Ошибка |ReqId: 021d486e-5560-4f4e-a87a-a138ee9f8f3f | ErrorInformation.LogError ilOffset = 0x17

Отчет об ошибках MSCRM: -------------------------------------------------------------- -------------------------------------------------- -------- Ошибка: System.InvalidCastException: невозможно привести объект типа «System.DBNull» к типу «Microsoft.Xrm.Sdk.OptionSetValue». в Microsoft.Crm.Application.Controls.Grid.UI.PropertyTemplatePropertiesConfigurationColumn.BindData(WebControl parentControl, IRowDataSource rowData) в System.Web.UI.Control.DataBind(логическое значение raiseOnDataBinding) в System.Web.UI.Control.DataBindChildren() в System.Web.UI.Control.DataBind (логическое значение raiseOnDataBinding) в System.Web.UI.WebControls.GridView.CreateRow (Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, логическое значение dataBind, Object dataItem, DataControlField [] поля, TableRowCollection rows, PagedDataSource pagedDataSource)
в System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) в System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) в System.Web.UI. WebControls.GridView.PerformDataBinding (данные IEnumerable) в System.Web.UI.WebControls.DataBoundControl.OnDataSourc eViewSelectCallback (данные IEnumerable) в System.Web.UI.WebControls.DataBoundControl.PerformSelect() в Microsoft.Crm.Application.Controls.Grid.UI.LayoutProviderGridList.RenderGridData (вывод HtmlTextWriter) в Microsoft.Crm.Application.Controls.Grid. UI.LayoutProvider.Render (вывод HtmlTextWriter) в Microsoft.Crm.Application.Controls.GridUIProvider.Render (выход HtmlTextWriter) в Microsoft.Crm.Core.Application.WebServices.AppGridWebServiceHandler.GetRefreshResponseHtml (IGridUIProvider uiProvider, StringBuilder sbTemp) в Microsoft.Crm .Core.Application.WebServices.AppGridWebServiceHandler.Refresh (String gridXml, StringBuilder sbXml, StringBuilder sbHtml, логическое значение returnJsonData) в Microsoft.Crm.Core.Application.WebServices.AppGridWebServiceHandler.ProcessRequestInternal (контекст HttpContext)

Сообщение об ошибке: System.InvalidCastException: невозможно преобразовать объект типа «System.DBNull» в тип «Microsoft.Xrm.Sdk.OptionSetValue». в Microsoft.Crm.Application.Controls.Grid.UI.PropertyTemplatePropertiesConfigurationColumn.BindData(WebControl parentControl, IRowDataSource rowData) в System.Web.UI.Control.DataBind(логическое значение raiseOnDataBinding) в System.Web.UI.Control.DataBindChildren() в System.Web.UI.Control.DataBind (логическое значение raiseOnDataBinding) в System.Web.UI.WebControls.GridView.CreateRow (Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, логическое значение dataBind, Object dataItem, DataControlField [] поля, TableRowCollection rows, PagedDataSource pagedDataSource)
в System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) в System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) в System.Web.UI. WebControls.GridView.PerformDataBinding (данные IEnumerable) в System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback (IEnumerable data) в System.Web.UI.WebControls.DataBoundControl.PerformSelect() в Microsoft.Crm.Application.Controls.Grid.UI.LayoutProviderGridList.RenderGridData (вывод HtmlTextWriter) в Microsoft.Crm.Application.Controls.Grid.UI.LayoutProvider .Render (вывод HtmlTextWriter) в Microsoft.Crm.Application.Controls.GridUIProvider.Render (вывод HtmlTextWriter) в Microsoft.Crm.Core.Application.WebServices.AppGridWebServiceHandler.GetRefreshResponseHtml (IGridUIProvider uiProvider, StringBuilder sbTemp) в Microsoft.Crm.Core. Application.WebServices.AppGridWebServiceHandler.Refresh (String gridXml, StringBuilder sbXml, StringBuilder sbHtml, логическое значение returnJsonData) в Microsoft.Crm.Core.Application.WebServices.AppGridWebServiceHandler.ProcessRequestInternal (контекст HttpContext)

Исходный файл: недоступен

Номер строки: Недоступно

URL запроса: https://manufacturingdemo.crm2015.cloudappsonline.net/AppWebServices/AppGridWebService.ashx?operation=Refresh

Информация о трассировке стека: [InvalidCastException: невозможно привести объект типа «System.DBNull» к типу «Microsoft.Xrm.Sdk.OptionSetValue».] в Microsoft.Crm.Application.Controls.Grid.UI.PropertyTemplatePropertiesConfigurationColumn.BindData(WebControl parentControl , IRowDataSource rowData) в System.Web.UI.Control.DataBind(логическое значение raiseOnDataBinding) в System.Web.UI.Control.DataBindChildren() в System.Web.UI.Control.DataBind(логическое значение raiseOnDataBinding) в System.Web.UI .WebControls.GridView.CreateRow(Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, Boolean dataBind, Object dataItem, поля DataControlField[], строки TableRowCollection, PagedDataSource pagedDataSource)
в System.Web.UI.WebControls.GridView. CreateChildControls(IEnumerable dataSource, Boolean dataBinding) в System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) в System.Web.UI.WebControls.GridV iew.PerformDataBinding(данные IEnumerable) в System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(данные IEnumerable) в System.Web.UI.WebControls.DataBoundControl.PerformSelect() в Microsoft.Crm.Application.Controls.Grid.UI. LayoutProviderGridList.RenderGridData (вывод HtmlTextWriter) в Microsoft.Crm.Application.Controls.Grid.UI.LayoutProvider.Render (вывод HtmlTextWriter) в Microsoft.Crm.Application.Controls.GridUIProvider.Render (выход HtmlTextWriter) в Microsoft.Crm.Core. Application.WebServices.AppGridWebServiceHandler.GetRefreshResponseHtml(IGridUIProvider uiProvider, StringBuilder sbTemp) в Microsoft.Crm.Core.Application.WebServices.AppGridWebServiceHandler.Refresh(String gridXml, StringBuilder sbXml, StringBuilder sbHtml, Boolean returnJsonData) в Microsoft.Crm.Core.Application. WebServices.AppGridWebServiceHandler.ProcessRequestInternal (контекст HttpContext)

[XmlException: System.InvalidCastException: невозможно привести объект типа «System.DBNull» к типу «Microsoft.Xrm.Sdk.OptionSetValue». в Microsoft.Crm.Application.Controls.Grid.UI.PropertyTemplatePropertiesConfigurationColumn.BindData(WebControl parentControl, IRowDataSource rowData) в System.Web.UI.Control.DataBind(логическое значение raiseOnDataBinding) в System.Web.UI.Control.DataBindChildren() в System.Web.UI.Control.DataBind (логическое значение raiseOnDataBinding) в System.Web.UI.WebControls.GridView.CreateRow (Int32 rowIndex, Int32 dataSourceIndex, DataControlRowType rowType, DataControlRowState rowState, логическое значение dataBind, Object dataItem, DataControlField [] поля, TableRowCollection rows, PagedDataSource pagedDataSource)
в System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) в System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) в System.Web.UI. WebControls.GridView.PerformDataBinding (данные IEnumerable) в System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback (IEnumerable data) в System.Web.UI.WebControls.DataBoundControl.PerformSelect() в Microsoft.Crm.Application.Controls.Grid.UI.LayoutProviderGridList.RenderGridData (вывод HtmlTextWriter) в Microsoft.Crm.Application.Controls.Grid.UI.LayoutProvider .Render (вывод HtmlTextWriter) в Microsoft.Crm.Application.Controls.GridUIProvider.Render (вывод HtmlTextWriter) в Microsoft.Crm.Core.Application.WebServices.AppGridWebServiceHandler.GetRefreshResponseHtml (IGridUIProvider uiProvider, StringBuilder sbTemp) в Microsoft.Crm.Core. Application.WebServices.AppGridWebServiceHandler.Refresh(String gridXml, StringBuilder sbXml, StringBuilder sbHtml, логическое значение returnJsonData) в Microsoft.Crm.Core.Application.WebServices.AppGridWebServiceHandler.ProcessRequestInternal(контекст HttpContext)] в Microsoft.Crm.Core.Application.WebServices. AppGridWebServiceHandler.ProcessRequestInternal (контекст HttpContext) в System.Web.HttpApplication.CallHandlerExecutionStep .System.Web.HttpApplication.IExecutionStep.Execute() в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и завершено синхронно)

Я совершенно сбит с толку, и помощь, которую вы, ребята, можете предложить, будет чрезвычайно оценена. Больше всего беспокоит то, что ни одно из полей, которые я извлекаю, не является набором опций, так что же здесь происходит? Спасибо.


person Josh Alcorn    schedule 25.08.2015    source источник


Ответы (1)


Так что я думаю, что ваш подход немного не так.

Вы используете неподдерживаемый JavaScript для начинающих document.getElementById, который не должен работать.

Ошибка Unable to cast object of type 'System.DBNull' to type 'Microsoft.Xrm.Sdk.OptionSetValue' немного странная. Похоже, вы каким-то образом установили значение DBNull, которого CRM не ожидает.

Существуют поддерживаемые методы игры с подсеткой, которые позволят вам изменить представление, однако они сильно отличаются от вашего подхода. См. раздел Создание сценариев для вложенных сеток. Например:

var ContactsIFollow = {
 entityType: 1039, // SavedQuery
 id:"{3A282DA1-5D90-E011-95AE-00155D9CFA02}", 
 name: "Contacts I Follow"
}

Xrm.Page.getControl("Contacts").getViewSelector().setCurrentView(ContactsIFollow);

Для вложенных сеток похоже, что вы можете установить уже существующее представление только по идентификатору, в отличие от вашего подхода к изменению макета и выборки XML.

Кроме того, элемент управления поиском поддерживает настройку макета и выборки XML с помощью addCustomView. Однако два элемента управления — подсетка и поиск — совершенно разные, и их не следует путать.

person James Wood    schedule 26.08.2015
comment
Спасибо за ответ, Джеймс. Насколько мне известно, больше не поддерживается способ добавления пользовательской выборки в подсетку. Для меня DBNull не имеет смысла, потому что, как я уже сказал, ни одно из полей, которые я выбирал, не было набором опций. Представление, которое мне понадобится, должно позволять динамически заменять идентификатор учетной записи, чего обычные представления не могут сделать, поэтому использование предварительно созданного представления не поможет. Кроме того, предоставленная вами ссылка говорит, что это только для онлайн-развертываний, и мы используем локальное. Спасибо. - person Josh Alcorn; 27.08.2015