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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.02.2014, 17:25   #1  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Два лукапа одной сущности
Имеется две сущности: "Объект" и "Характеристика объекта".
Характеристика привязывается к Объекту одной связью N:1 как к владельцу характеристики (Бизнес-требование), и, дополнительной второй связью N:1 как к поставщику некой услуги (Без ограничений).
Соответствующие лукапы (поля типа "Поиск") созданы, соответствующие отношения в списке отношений появились, однако есть проблема: в списке сопоставлений обе связи фигурируют у обоих записей отношений, то есть: при создании новой сущности "Характеристика" из формы "Объекта" получаем, что оба поля типа поиск заполняются автоматически значением исходной записи объекта. Удалить лишнее сопоставление из списка сопоставлений отношения не удается.
Что посоветуете предпринять для того, чтобы каждое отношение воспринималось правильно (в форму Объекта как положено просятся две ссылки навигации на Характеристики)?
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 10.02.2014, 17:51   #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
Единственный способ, который мне известен - это скрипт на онлоад, который будет реагировать на создание и вычищать подчинённое (как я понимаю) поле. Уже сталкивался с таким и это было единственное решение, которое я нашёл.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 10.02.2014, 17:51   #3  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Дополнение: при попытке удаления одного из сопоставлений, получаю сообщение об ошибке:
"Невозможно удалить сопоставление поля
Не удалось удалить одно или несколько сопоставлений полей, так как они используются платформой..."
В прилагаемом файле журнала значится следующее:
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  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Цитата:
Сообщение от a33ik Посмотреть сообщение
Единственный способ, который мне известен - это скрипт на онлоад, который будет реагировать на создание и вычищать подчинённое (как я понимаю) поле. Уже сталкивался с таким и это было единственное решение, которое я нашёл.
Такая идея приходила в голову, но у меня дальше следует усложнение задачи: с аналогичным дублированием буду использоваться другие кастомные сущности, у которых связи в принципе будут равноценны и на стороне формы затруднительно будет определить, из какого контекста вызывали создание связанной сущности...
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 10.02.2014, 19:04   #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
Цитата:
Сообщение от 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  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Мде... На social ресурсе от майкрософт аналогичный кейс посоветовали решать также скриптом.
Собственно, понятно что делать, когда одна связь явная (поле обязательно), а вторая - для выбора. А вот что делать, если обе связи равнозначны и наличие одной с отсутствием другой, определяется тем, из какого пункта меню формы связанной сущности вызвано создание - надо подумать.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 11.02.2014, 12:53   #7  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
А CRM какой 2011 или 2013 может подскажу
Старый 11.02.2014, 12:56   #8  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Подытожу: ничего не вышло.
Обходной путь: создал вместо одной сущности с двумя связями, две сущности для связей и одну сущность, которая связана с двумя. Напоминает CRM 3.0, в котором не было отношения многие-ко-многим и нужно было создавать промежуточную сущность для реализации.
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 11.02.2014, 12:56   #9  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Цитата:
Сообщение от spectr Посмотреть сообщение
А CRM какой 2011 или 2013 может подскажу
2011
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
Старый 11.02.2014, 13:19   #10  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Перепроверил в 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  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Цитата:
Сообщение от 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  
spectr is offline
spectr
Участник
Аватар для spectr
MCBMSS
Лучший по профессии 2014
 
287 / 70 (3) ++++
Регистрация: 19.10.2011
Адрес: Киев
Цитата:
Сообщение от Likefire Посмотреть сообщение
Вариант! Такого я нигде не находил...
Ну это экспромт от меня за 10 мин нашел решение. Главное знать где искать
За это сообщение автора поблагодарили: Likefire (1).
Старый 01.02.2018, 01:35   #13  
vasya-serega is offline
vasya-serega
Участник
 
145 / 17 (1) ++
Регистрация: 12.05.2013
Адрес: Украина
Столкнулся с данной проблемой в 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).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Форма редактирования сущности. FordSoft Dynamics CRM: Разработка 7 23.10.2012 14:43
Как получить значение поля одной сущности при обработке формы другой сущности zhenek Dynamics CRM: Разработка 25 05.07.2011 16:19
Перенос бизнеес-процессов с одной сущности на другую guenberg Dynamics CRM: Разработка 4 08.06.2010 17:09
Как вытащить данные из лукапа на 2 сущности? vital.mih Dynamics CRM: Функционал 1 06.07.2009 16:07
Создание объекта сущности из другого объекта! SnSS Dynamics CRM: Разработка 5 29.05.2008 13:38

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

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

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