|  17.04.2007, 11:47 | #1 | 
| MCTS | DataSource на Web-форме (DAX 4.0) 
			
			Доброе время суток! Пытаюсь связать два датасурса на Web-форме и вывести поле из подчиненного датасурса. Пример: связываю таблицу деловых отношений (smmBusRelTable) и сотрудников (EmplTable), чтобы показать фамилию/имя ответственного за компанию. Однако в WebGrid в данном поле (имя сотрудника) во всех строках отображается первое выбранное значение из датасурса EmplTable, т.е. значение почему-то не обновляется после первой строки. Если повесить произвольный display-метод (просто возвращающий пустое значение) на какое-либо поле WebGrid, то значение поля "Имя сотрудника" отображается корректно (происходит обновление), правда, кроме первой строки WebGrid. Ax 4.0, SP1; SQL Server 2005; WSS 3.0. Спасибо заранее за участие! | 
|  | 
|  17.04.2007, 13:32 | #2 | 
| Member | 
			
			Какой вы тип JOIN поставили?
		 
				__________________ С уважением, glibs® | 
|  | 
|  17.04.2007, 16:16 | #3 | 
| MCTS | 
			
			Вообще InnerJoin, пробовал OuterJoin и ExistsJoin - в последнем случае отображается пустое значение. Пытался связать датасурсы программно - результат не поменялся.
		 | 
|  | 
|  17.04.2007, 16:33 | #4 | 
| Microsoft Dynamics | 
			
			А что выдается в квери датасорса? какой селект? Вы пробовали то же самое делать в обыкновенной форме? А с дисплей и едит методами - это действительно лажа, и не только в отображении первой записи   | 
|  | 
|  17.04.2007, 18:38 | #5 | 
| MCTS | 
			
			Select проверял, вроде все правильно Код: SELECT * FROM smmBusRelTable JOIN * FROM EmplTable WHERE smmBusRelTable.MainContact = EmplTable.EmplId   | 
|  | 
|  18.04.2007, 01:49 | #6 | 
| Member | 
			
			Проверил в 3.0 (до портала на 4.0 нет времени добраться). Правда, использовал PurchTable и EmplTable. Работает InnerJoin. Active, по-моему, не должен (не проверял, но в GUI по-моему не работало). У вас связь между таблицами прописана (в АОТ или вручную на форме)? PS. Уже вижу, прописан. В общем, проверьте ваши настройки на форме. Скорее всего должно работать (раз в 3.0 работает). Как до портала на четверке доберусь — отпишу. 
				__________________ С уважением, glibs® Последний раз редактировалось glibs; 18.04.2007 в 01:52. | 
|  | 
|  18.04.2007, 11:37 | #7 | 
| Microsoft Dynamics | 
			
			Могу высказать дурацкое предположение (не бейте): может вы код не рефрешите после изменений в коде?
		 | 
|  | 
|  18.04.2007, 14:28 | #8 | 
| MCTS | 
			
			К сожалению, код точно рефрешится ...   | 
|  | 
|  19.04.2007, 10:08 | #9 | 
| MCTS | 
			
			glibs Еще раз попробовал в 3.0 создать аналогичную форму - все отлично работает. В любом случае спасибо всем за участие! Если вдруг еще мысли появятся - просьба написать. | 
|  | 
|  25.04.2007, 16:29 | #10 | 
| MCTS | 
			
			Up на всякий случай - вдруг что-нибудь новое подскажут...
		 | 
|  | 
|  25.04.2007, 19:05 | #11 | 
| Microsoft Dynamics | 
			
			Сорри, нету машинки с порталом, чтобы проверить. Но я попробовала в клиенте и все работает, просто сделала smmBusRelTable джойн сорсом у EmplTable. ДелейАктив тут не должен никак повлиять, только в случае если у вас медленная машина, потому что он просто вставляет задержку отображения записи в подчиненном датасорсе. Сначала мне показалось, что у меня та же проблема - "во всех строках отображается первое выбранное значение из датасурса EmplTable". Но потом я обратила внимание, что поле, по которому таблички связаны, и содержит это первое значение из ЕмплТейбл (если у вас стндртная демодата, то первых 15 бизнес аккаунтов будет иметь МаinContact - AJE, что и есть первая запись в табличке). На веб-форме вы могли не заметить этого, потому что там ограничение на вывод 10 записей, потом нужно прощелкать некст. Проверьте, пожалуйста, данные и напишите. | 
|  | |
| За это сообщение автора поблагодарили: Link (1). | |
|  26.04.2007, 10:17 | #12 | 
| MCTS | 
			
			Мариночка Благодарю за участие. В клиенте действительно все работает на раз, почему сначала не получилось - мне сейчас непонятно. Теперь пробую создать в клиенте новую форму с двумя датасурсами, у второго указываю родительский сурс и меняю связь на InnerJoin - все отлично срабатывает. В портале проверяю правильность по коду сотрудника, пролистываю много записей - код по строкам меняется, название (ФИО) остается от первой записи. Вообще, грешу на класс WebFormHtml (такое ощущение, при обращении к датасурсам данные извлекаются только из первого на форме), однако точно пока в алгоритме разобраться не удалось. | 
|  | 
|  27.04.2007, 00:10 | #13 | 
| Member | 
			
			У меня в 4.0 тоже не работает   . Display-методы Микрософт пока не сломал  Пользуйтесь ими  Пользуясь случаем хочется сказать — ну и гадость же этот портал на Шарапоинте. Нет чтобы портал от 3.0 до ума довести... 
				__________________ С уважением, glibs® | 
|  | 
|  27.04.2007, 13:17 | #14 | 
| MCTS | 
			
			glibs Спасибо, однако с display-методами возникает проблема из моего первого поста: при переходе навигационными клавишами по WebGrid (следующий/предыдущий) первая запись никогда не обновляется. Пример: первая запись выводит данные о клиенте с ответственным Иванов, в следующих записях ответственные все различные. Однако при переходе на следующие 10 записей первая строка сверху никогда не обновляется - всегда остается Иванов. Display-метод так отрабатывает и когда он определен в таблице, и в датасурсе. | 
|  | 
|  27.04.2007, 14:14 | #15 | 
| Member | 
			
			Display-метод у меня вчера работал корректно. Правда, я только 3 записи ввел. Вы точно все корректно настроили?
		 
				__________________ С уважением, glibs® | 
|  | 
|  27.04.2007, 15:09 | #16 | 
| MCTS | 
			
			Вроде да. Если не затруднит, попробуйте ввести больше десяти записей (или у грида поставьте свойство VisibleRows какое-нибудь малое значение - 2 например), а также ShowNavigationButtons = Yes. В случае 3-х записей в выборке и 2 выводимых на страницу строках у меня 2 первые показываются нормально. Когда происходит переход навигационной кнопкой Next на следующую запись, дисплейное поле в первой показываемой строке отображается неверно.
		 | 
|  | 
|  27.04.2007, 15:35 | #17 | 
| MCTS | 
			
			Вот пример. На первом рисунке выводятся две записи, где Наименование ДО - дисплейное поле. Далее нажимается кнопка next (выделено 1) Получаем следующие 2 записи, у первой дисплейное поле отображает неверное значение (выделено), которое на самом деле является самым значением из самой первой записи в выборке. Оно же будет повторяться в первой строке и при следующем переходе. | 
|  | 
|  27.04.2007, 21:50 | #18 | 
| Member | 
			
			Да, проблема с некорректным отображением display-методов при листании страниц действительно наблюдается. При этом display-метод некорректно отрабатывает только для первой строчки грида на следующей странице. Для всех последующих записей он отрабатывает корректно. Блин! Ну надо же куда мир катится! Нет чтобы что-то хорошее сделать. Например, вьюхи отремонтировать. Тот же код портала рефакторить, чтобы проверку по бэст практису от него не тошнило. Так они то что раньше работало продолжают доламывать. И интегрировать со всякой гадостью. Вчера не в офисе на рабочей машине пытался разобраться в функциональности. Потребовалось переключиться на английский интерфейс, чтобы хоть что-то понять... И знаете чего? Без контролера домена войти в систему можно, но язык интерфейса вы уже не поменяете  . 
				__________________ С уважением, glibs® | 
|  | 
|  02.05.2007, 18:14 | #19 | 
| MCTS | 
			
			Удалось добиться некоторых положительных итогов в вопросе, в частности, наладить работу связанных датасурсов на Web-форме. В результате испытаний выяснилось, что некорректно отображаются значения контролов на WebGrid, связанных с подчиненным родительскому датаусурсом, имеющих вид WebEdit и WebCheckBox. При этом значения контролов с видом WebComboBox, WebDate, WebInteger и WebReal отображаются правильно! Как вариант решения, в методе layoutEdit класса WebFormHtml были исправлена строка X++: controlText = fwe.text(); X++: Common common1;
 
...........................
 
if (fwe.dataSource() && fwe.dataField())
{
    common1 = _webrun.dataSourceById(fwe.dataSource()).cursor();
    controlText = common1.(fwe.dataField());
}
else
{
controlText = fwe.text();
}Аналогичным подходом был исправлен метод layoutCheckBox. | 
|  | |
| За это сообщение автора поблагодарили: glibs (8). | |
|  04.05.2007, 13:20 | #20 | 
| Microsoft Dynamics | 
			
			Супир! Если после проверок будет работать классно, предложим ЕП-команде исправить в 4.1!
		 | 
|  | 
| Теги | 
| ax3.0, ax4.0 | 
|  | 
| 
 |