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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.04.2012, 01:33   #1  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
? AX2012 CU2, разработка Enterprise Portal в Visual Studio 2010 - как убить кэш?
делаю портал для AX2012, естественно разработка ведётся в VS2010.

наблюдаю очень странные вещи, похоже на то, что VS и EP где-то кэшируют метаданные из аксапты (информацию о таблицах, полях, отношениях, составе групп полей и так далее), потому что когда я что-то меняю в аксапте, это не сразу отображается в VS, и иногда очень странные ошибки появляются в портале.

где этот кэш и как его убить?

обычно я делаю так:
1. меняю что-то в аксапте (никогда не делаю много изменений за раз. или добавлю поле, или напишу новый display-метод)
2. иду в VS, на датасорсе нажимаю "Refresh Schema", это должно подтянуть свежую информацию из аксапты
3. использую новое поле на web control'e, сохраняю (новая версия web control'a при этом автоматически загружается в портал)
4. в портале запускаю три пункта меню (Refresh AOD, Refresh Data, Refresh Dictionary), при этом портал должен подтянуть те же изменения из аксапты.

после этого обычно всё работает.

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

пример сегодняшний: в AX2012 стали использовать RecId в качестве foreign key. пользователю показывать RecId ни к чему, он не будет запоминать RecId всех записей, что ему нужны. ему нужно выбирать запись по более понятному ему идентификатору.

например, таблица работников, HcmWorker. все записи в базе данных, которые ссылаются на работников, ссылаются по RecId. в AX2012 для этого ввели концепцию Reference field, когда RecId на форме или веб-контроле "умно" заменяется полем или группой полей из записи таблицы, на которую ссылается RecId.

по умолчанию из таблицы работников подставляется имя работника. клиенту имя ни к чему, он хочет видеть и вводить EmplId, который в AX2012 называется PersonnelNumber. я иду в аксапту и смотрю, что на таблице HcmWorker есть как раз подходящая группа полей с таким же именем, так что я иду в VS и меняю свойство ReferenceFieldGroup на PersonnelNumber.

сохраняю, собираю, запускаю, всё хорошо: на контроле появляется поле, которое принимает и показывает PersonnelNumber из HcmWorker, и пишет правильные значения RecId в показываемую запись.

теперь просят добавить ещё и имя, просто как display-метод отдельным полем под этим. нет проблем, пишу метод, добавляю на контрол, собираю, запускаю, и тут меня ждёт сюрприз. от первого поля осталась метка на контроле и лукап, а само поле пропало. выбор записи из лукапа ничего не даёт, и писать PersonnelNumber теперь вообще некуда, поля физически нет на форме, я смотрел HTML полученной страницы.

думал, проблема в поле, что я добавил. убираю display-метод, убираю поле с контрола - ничего не меняется. метка есть, лукап есть, поля нет на странице, некуда писать PersonnelNumber. что я только не пробовал с тех пор, ничего не помогает.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 19.04.2012, 18:05   #2  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
Может попробовать запустить АХ и портал от имени администратора (правой кнопкой по ярлыку)
сделать рефреш в АХ и обновить AOD?
__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy
Старый 19.04.2012, 18:21   #3  
lvan is offline
lvan
Участник
Аватар для lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Регистрация: 15.04.2011
Записей в блоге: 1
Вы наверное забыли, что в ax2012 теперь два кода - интепретируемый X++ и CIL
EP работает через сервисы, а они, как тоже известно, работают только в ЦЫЛе, и никак не в Х++
Соответственно, после того, как вы что-то поменяли в X++ коде, вам нужно коппильнуть в ЦЫЛ, чтобы ваш ЦЫЛ код соответствовал X++сному
Надеюсь, идея ясна.
Если дебажите с VS, то не забудьте также Hotswapping of assemblies включить.

Последний раз редактировалось lvan; 19.04.2012 в 18:25.
Старый 20.04.2012, 06:40   #4  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
CIL пересобирал, не помогает.

ещё один любопытный факт: если я иду в Administration -> Periodic -> SQL administration и пробую пересобрать индексы - куча ошибок, мол, не могу пересобрать такой индекс, потому что его нет (это после синхронизации без ошибок).

какой-то нездоровый продукт эта 2012. надо было подождать до первого сервиспака, чтобы проект начинать.
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 20.04.2012, 07:01   #5  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
Цитата:
Сообщение от lvan Посмотреть сообщение
Вы наверное забыли, что в ax2012 теперь два кода - интепретируемый X++ и CIL
EP работает через сервисы, а они, как тоже известно, работают только в ЦЫЛе, и никак не в Х++
Соответственно, после того, как вы что-то поменяли в X++ коде, вам нужно коппильнуть в ЦЫЛ, чтобы ваш ЦЫЛ код соответствовал X++сному
Надеюсь, идея ясна.
Если дебажите с VS, то не забудьте также Hotswapping of assemblies включить.
раньше в AX2009 когда делал, то в VS можно было сбросить кэш из Solution Explorer, теперь я нашёл, что точно так же в AX2012 / VS2010 работает корень Application Explorer, вызываешь контекстное меню и выбираешь Refresh All, он подтягивает последнюю метадату и все новые методы и поля видны в студии.

тем не менее порталу это так и не помогло справиться с AxReferenceBoundField, он всё так же не приделывает контрол для PersonnelNumber. лукап есть, метка есть, контрола нет. загадка. добавляю в AutoIdentification поле Person, которое там и было изначально - имя появляется, а номера как не было так и нет (хотя место под него зарезервировано). а выбираю работника через лукап - кидает следующее:

Could not find natural key field 'RespWorker!PersonnelNumber'

System.ArgumentException
at Microsoft.Dynamics.AX.Framework.Portal.Data.DataSetViewRow.GetForeignKeyValue(IAxDataAccessObjectViewDataFieldMetadata foreignKeyField, IDictionary`2 referenceFieldValues, Boolean synchronizeReferenceValues, IAxDataAccessObjectViewFieldGroupMetadata autoIdentificationGroup, Boolean stopOnDuplicates, Boolean& foundMoreThanOneMatch)
at Microsoft.Dynamics.Framework.Portal.UI.WebControls.AxReferenceControl.GetForeignKeyValue()

почему "не могу найти"? вот оно, поле.

кончилось всё тем, что я сделал три контрола:

1. edit-метод чтобы вводить PersonnelNumber. когда клиент делает edit, то правильный RecId указывающий на HcmWorker вводится в нашу таблицу.

2. display-метод чтобы показывать имя работника

3. AxReferenceBoundField который показывает имя работника - потому что у него есть лукап, и если надо, клиент может выбрать из лукапа (например если клиент забыл PersonnelNumber).

по идее можно было бы обойтись 1м и 3м, чтобы третий показывал имя, но вот беда, когда я вбиваю в edit-методе новое значение PersonnelNumber и делаю AutoPostBack, то display метод показывает имя нового выбранного работника, а вот третий контрол - нет, хотя должен. после ещё одного постбэка (когда что-то ещё меняю на форме) начинает показывать.

кто-то вообще пользовался уже этими AxReferenceBoundField? может делаю что неправильно. документации-то нет никакой
__________________
our sharp bitter vitriol is not that of the vulgar.
Старый 23.04.2012, 06:35   #6  
offenmeier is offline
offenmeier
HAI; CAN HAS STDIO?
Аватар для offenmeier
Соотечественники
 
77 / 36 (2) +++
Регистрация: 17.02.2005
Адрес: Auckland, NZ
оказалось всё-таки, что невнимательно прочитал гайд.

для того, чтобы использовать ReferenceBoundField, не нужно добавлять Reference DataSource, просто Relation на таблице достаточно, аксапта сама поймёт, что куда нужно добавить.

кончилось тем, что убрал все Reference Data Source, потому что именно они почему-то мешали. нигде не сказано, что они могут мешать, вот в чём дело.

для новой таблицы нужно делать так:
1. создал таблицу
2. добавил на неё поле типа HcmWorkerRecId
3. добавил Relation (можно посмотреть настройки нужные на таблице smmActivities, там есть два Relation'a на HcmWorker)
4. остальное как обычно. когда в студии делаю контрол, кроме обычного Bound Field будет доступно и BoundReferenceField для этого поля.

а ещё проще создать на таблице группу полей, и на контрол выводить группу, а не по одному полю, так быстрее будет. может, все так и делают, но этот проект я делаю апгрейд с 2009 до 2012, и приходится разбирать творение чужих рук.
__________________
our sharp bitter vitriol is not that of the vulgar.
За это сообщение автора поблагодарили: Logger (2), S.Kuskov (2).
Теги
ax2012, enterprise portal, ep, visual studio

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: Microsoft Dynamics AX 2012 Enterprise Portal: How to provider access for user to be able to only Personalize Page on SharePoint 2010 Blog bot DAX Blogs 0 13.12.2011 22:11
emeadaxsupport: Unable to deploy AX 2009 Enterprise Portal on SharePoint 2010 even after patching setup files with hotfix 2278963 Blog bot DAX Blogs 0 08.12.2010 03:14
emeadaxsupport: Error "Cannot access a disposed object" when deploying AX 2009 Enterprise Portal on a SharePoint 2010 server Blog bot DAX Blogs 0 01.10.2010 20:05
emeadaxsupport: Resolving some issues you may experience when creating an AX 2009 Role Center and Enterprise Portal Site using SharePoint Server/Foundation 2010 after installing Microsoft Dynamics AX 2009 SP1 hotfix 2278963 Blog bot DAX Blogs 1 24.09.2010 11:34
Solutions Monkey: Microsoft SharePoint 2010 Foundation compatibility mode support with Dynamics AX 2009 Service Pack 1 Enterprise Portal Blog bot DAX Blogs 0 13.08.2010 10:05

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

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

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