10.02.2014, 17:25 | #1 |
Заноза в заднице
|
Два лукапа одной сущности
Имеется две сущности: "Объект" и "Характеристика объекта".
Характеристика привязывается к Объекту одной связью N:1 как к владельцу характеристики (Бизнес-требование), и, дополнительной второй связью N:1 как к поставщику некой услуги (Без ограничений). Соответствующие лукапы (поля типа "Поиск") созданы, соответствующие отношения в списке отношений появились, однако есть проблема: в списке сопоставлений обе связи фигурируют у обоих записей отношений, то есть: при создании новой сущности "Характеристика" из формы "Объекта" получаем, что оба поля типа поиск заполняются автоматически значением исходной записи объекта. Удалить лишнее сопоставление из списка сопоставлений отношения не удается. Что посоветуете предпринять для того, чтобы каждое отношение воспринималось правильно (в форму Объекта как положено просятся две ссылки навигации на Характеристики)?
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
10.02.2014, 17:51 | #2 |
Чайный пьяница
|
Единственный способ, который мне известен - это скрипт на онлоад, который будет реагировать на создание и вычищать подчинённое (как я понимаю) поле. Уже сталкивался с таким и это было единственное решение, которое я нашёл.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
10.02.2014, 17:51 | #3 |
Заноза в заднице
|
Дополнение: при попытке удаления одного из сопоставлений, получаю сообщение об ошибке:
"Невозможно удалить сопоставление поля Не удалось удалить одно или несколько сопоставлений полей, так как они используются платформой..." В прилагаемом файле журнала значится следующее: X++: Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: System.Web.HttpUnhandledException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #AC946F7BDetail: <OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"> <ErrorCode>-2147220970</ErrorCode> <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> <Message>System.Web.HttpUnhandledException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #AC946F7B</Message> <Timestamp>2014-02-10T13:27:29.797041Z</Timestamp> <InnerFault> <ErrorCode>-2147196411</ErrorCode> <ErrorDetails xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> <Message>Cannot create or delete a system AttributeMap.</Message> <Timestamp>2014-02-10T13:27:29.797041Z</Timestamp> <InnerFault i:nil="true" /> <TraceText i:nil="true" /> </InnerFault> <TraceText i:nil="true" /> </OrganizationServiceFault>
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
10.02.2014, 17:54 | #4 |
Заноза в заднице
|
Такая идея приходила в голову, но у меня дальше следует усложнение задачи: с аналогичным дублированием буду использоваться другие кастомные сущности, у которых связи в принципе будут равноценны и на стороне формы затруднительно будет определить, из какого контекста вызывали создание связанной сущности...
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
10.02.2014, 19:04 | #5 |
Чайный пьяница
|
Цитата:
Сообщение от Likefire
Дополнение: при попытке удаления одного из сопоставлений, получаю сообщение об ошибке:
"Невозможно удалить сопоставление поля Не удалось удалить одно или несколько сопоставлений полей, так как они используются платформой..." В прилагаемом файле журнала значится следующее: X++: Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: System.Web.HttpUnhandledException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #AC946F7BDetail: <OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"> <ErrorCode>-2147220970</ErrorCode> <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> <Message>System.Web.HttpUnhandledException: Microsoft Dynamics CRM has experienced an error. Reference number for administrators or support: #AC946F7B</Message> <Timestamp>2014-02-10T13:27:29.797041Z</Timestamp> <InnerFault> <ErrorCode>-2147196411</ErrorCode> <ErrorDetails xmlns:d3p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" /> <Message>Cannot create or delete a system AttributeMap.</Message> <Timestamp>2014-02-10T13:27:29.797041Z</Timestamp> <InnerFault i:nil="true" /> <TraceText i:nil="true" /> </InnerFault> <TraceText i:nil="true" /> </OrganizationServiceFault> Цитата:
Сообщение от Likefire
Такая идея приходила в голову, но у меня дальше следует усложнение задачи: с аналогичным дублированием буду использоваться другие кастомные сущности, у которых связи в принципе будут равноценны и на стороне формы затруднительно будет определить, из какого контекста вызывали создание связанной сущности...
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
11.02.2014, 09:35 | #6 |
Заноза в заднице
|
Мде... На social ресурсе от майкрософт аналогичный кейс посоветовали решать также скриптом.
Собственно, понятно что делать, когда одна связь явная (поле обязательно), а вторая - для выбора. А вот что делать, если обе связи равнозначны и наличие одной с отсутствием другой, определяется тем, из какого пункта меню формы связанной сущности вызвано создание - надо подумать.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
11.02.2014, 12:53 | #7 |
Участник
|
А CRM какой 2011 или 2013 может подскажу
|
|
11.02.2014, 12:56 | #8 |
Заноза в заднице
|
Подытожу: ничего не вышло.
Обходной путь: создал вместо одной сущности с двумя связями, две сущности для связей и одну сущность, которая связана с двумя. Напоминает CRM 3.0, в котором не было отношения многие-ко-многим и нужно было создавать промежуточную сущность для реализации.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
11.02.2014, 12:56 | #9 |
Заноза в заднице
|
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
11.02.2014, 13:19 | #10 |
Участник
|
Перепроверил в 2011 и 2013 работает
и так простая строчка возвращает по какой связи вы пришли (ее название) Код: opener.document.getElementById("relName").getAttribute("value") Код: if (opener && opener.document.getElementById("relName")){ opener.document.getElementById("relName").getAttribute("value") } |
|
|
За это сообщение автора поблагодарили: a33ik (2). |
11.02.2014, 13:22 | #11 |
Заноза в заднице
|
Цитата:
Сообщение от spectr
Перепроверил в 2011 и 2013 работает
и так простая строчка возвращает по какой связи вы пришли (ее название) Код: opener.document.getElementById("relName").getAttribute("value") Код: if (opener && opener.document.getElementById("relName")){ opener.document.getElementById("relName").getAttribute("value") }
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков! |
|
11.02.2014, 13:24 | #12 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Likefire (1). |
01.02.2018, 01:35 | #13 |
Участник
|
Столкнулся с данной проблемой в 2015-й црмке.
Нужно было понять, как определить, к какому сабгриду на главной форме юзер решил добавить дочернюю запись. Решение описанное выше Цитата:
opener.document.getElementById("relName").getAttribute("value")
Код, повешенный на он лоад дочернего окна, X++: var opener = parent.window.opener; if (opener) { var linkName = opener.document.location; } http ://srvName/orgName/_forms/read/page.aspx?etc=10062&id=1a1c74d3-8c06-e811-80f7-005056bf6794&pagemode=iframe&theme=Outlook15White#Child1Subgrid_AddContextualButton, где Child1Subgrid - нужный мне сабгрид. Ну а дальше уже по нему ясно, какой лукап нужно очищать. Последний раз редактировалось vasya-serega; 01.02.2018 в 01:47. |
|
|
За это сообщение автора поблагодарили: Дмитрий А.А. (1). |