15.11.2013, 16:23 | #1 |
Участник
|
JavaScript Entity Reference in CRM 2013.
Добрый день!
Разочарован, решил написать на форум. Задача: Создать кнопку, которая копирует Продукты из Проекта в Подпроект. Я реализовал кнопку на форме Подпроект, которая открывает сущность Выбрать Продукт, в гриде которой содержаться отфильтрованные по ИД Проекта Продукты. Чтобы просмотреть и выбрать записи из грида пользователь должен открыть их в отдельном окне. В этом отельном окне формы Продукт есть кнопка Создать продукт. При нажатии - должны копироваться выбранные записи и ассоциироваться с подпроектом. Проблема: Я не могу обратиться с открытого окна Продукты к родительской сущности Выбрать продукт. В 2011 это делалось очень просто, грид не открывался в отдельном окне, когда надо было просмотреть записи Вот пример кода: Цитата:
function CreateProduct (CrmParameters) { var Record = CrmParameters; //все что зачеркнуто ниже не работает //var EntityName = Xrm.Page.data.entity.getEntityName(); //var EntityId = Xrm.Page.data.entity.getId(); //var EntityId = Xrm.Page.getAttribute("erpc_entityid").getValue(); //var EntityName = Xrm.Page.getAttribute("erpc_entityname").getValue(); //var Parent = Xrm.Page.data.entity.attributes.get(0).getParent(); //var erpc_parent_record_id = pageParent.getAttribute("erpc_parent_record_id").getValue(); //var erpc_entityname = pageParent.getAttribute("erpc_entityname").getValue(); //var ParentName = parent.Xrm.Page.data.entity.attributes.get("erpc_entityname").getValue; var ParentID = window.parent.opener.Xrm.Page.data.entity.attributes.get("erpc_subproject").getValue()[0].id; var select = "*"; var id = null; for (var i = 0; i < Record.length; i++) { id = Record[i]; RetriveProduct (id, select,EntityName,EntityId) } //alert ("Копии задач созданы!"); } function RetriveProduct (ProductId, select,EntityName,EntityId) { InitializeRest(); SDK.REST.retrieveRecord( ProductId, 'InvoiceDetail', select, null, function (results) { var DataProduct = results; //Договор if (EntityName == "erpc_busines_contract") { DataProduct.InvoiceDetailId = null; DataProduct.erpc_campaign_invoicedetail = {Id: EntityId, LogicalName: "erpc_busines_contract", Name: "Name"}; CreateProductAndCopy(DataProduct) } // Подроект if (EntityName == "subproject") { DataProduct.InvoiceDetailId = null; DataProduct.erpc_subproject_invoicedetail = {Id: EntityId, LogicalName: "erpc_subproject", Name: "Name"}; CreateProductAndCopy(DataProduct) } //Счет if (EntityName == "invoice") { DataProduct.InvoiceDetailId = null; DataProduct.erpc_invoice_invoicedetail = {Id: EntityId, LogicalName: "invoice", Name: "Name"}; CreateProductAndCopy(DataProduct) } }, function (error) { alert(error.message); } ); } function CreateProductAndCopy (DataProduct) { InitializeRest(); SDK.REST.createRecord( DataProduct, 'InvoiceDetail', function (results) { }, function (error) { alert(error.message); } ); } Последний раз редактировалось GetLucky; 15.11.2013 в 16:26. |
|
15.11.2013, 17:10 | #2 |
Участник
|
С этого окна можно обращаться через window.parent.opener.Xrm.Page.data.entity.attributes.get("erpc_subproject").getValue().
Странно, что одно поле всегда было null, хотя в нем содержалось значение, и при обращении отладчик писал, что нельзя получить значение getValue, и на это все валилось В общем, пока я недоволен как "стабильно" работает СРМ 2013. |
|
15.11.2013, 17:58 | #3 |
Участник
|
потому что для кнопок есть возможность передавать параметр.
В вашем случае ID проекта. После чего надо сделать retriveMultiple и в цикле create |
|
15.11.2013, 18:37 | #4 |
Участник
|
Цитата:
А так есть требование - копировать только выбранные записи, что я и делаю в коде через Параметр SelectedControlSelectedItemIds, который принимает моя функция. Теперь другая проблема, я отфильтровал записи в гриде, но когда пользователь нажимает "показать связанные записи" - то мой кастомный фильтр не действует в новом окне, а как его установить - ХЗ. Может кто-то знает? |
|
17.11.2013, 18:37 | #5 |
Участник
|
А я могу в SetParameter("fetchXml", fetchXml), прописать layout?
Может это сможет решить проблему с выбором записей в гриде 2013 СРМ, не открываю нового окна. |
|
18.11.2013, 14:35 | #6 |
Участник
|
Добрый день!
У меня появилась идея: открывать диалоговое окно LookupStyle=multi, фильтровать записи в этом окне по ID, получать массив ИД, и потом создавать их копии. Допустим есть url строка: Цитата:
url = Xrm.Page.context.getServerUrl() + "//_controls/lookup/lookupinfo.aspx?LookupStyle=multi&objecttypes=" + 1 + "&browse=0&DefaultType=0&search=" + GuidId+"&AllowFilterOff=1&DisableViewPicker=1&ShowNewButton=1&ShowPropButton=0";
objecttypes поддерживает все системные сущности, включаю значение от 1 до 10. Как в url прописать мою кастомную сущность erpc_forviewproduct? |
|
18.11.2013, 15:15 | #7 |
Участник
|
Задача: вынести кнопку на риббон, открывать кастомное представление, передавать ИД, и по этому ИД фильтровать записи.
Могу ли я открыть представление и передать по url нужный параметр, который отфильтрует открытое представление, например по ИД. Для форм можно в url использовать &extraqs, можно ли так же сделать для представлений с типом userquery, viewtype=4230 |
|
18.11.2013, 15:27 | #8 |
Участник
|
Цитата:
Сообщение от GetLucky
Задача: вынести кнопку на риббон, открывать кастомное представление, передавать ИД, и по этому ИД фильтровать записи.
Могу ли я открыть представление и передать по url нужный параметр, который отфильтрует открытое представление, например по ИД. Для форм можно в url использовать &extraqs, можно ли так же сделать для представлений с типом userquery, viewtype=4230 Параметры передавать нельзя в представления. |
|
18.11.2013, 15:29 | #9 |
Участник
|
Цитата:
Сообщение от GetLucky
Добрый день!
У меня появилась идея: открывать диалоговое окно LookupStyle=multi, фильтровать записи в этом окне по ID, получать массив ИД, и потом создавать их копии. Допустим есть url строка: У меня вопрос, как мне указать мою кастомную сущность при выводе диалогового окна? objecttypes поддерживает все системные сущности, включаю значение от 1 до 10. Как в url прописать мою кастомную сущность erpc_forviewproduct? |
|
18.11.2013, 15:46 | #10 |
Участник
|
|
|
18.11.2013, 16:45 | #11 |
Участник
|
|
|
|
|