Использование DAC из одного проекта настройки в другом проекте настройки в Acumatica

У меня есть два проекта настройки в Acumatica 2020R2. Мне нужно сослаться на DAC из одного из проектов настройки в другом проекте настройки. Экземпляр Acumatica, имеющий один из проектов настройки, может иметь или не иметь опубликованных обоих проектов настройки.

Например, в графике в одном проекте настройки может потребоваться ссылка на VendorRebate DAC, который был создан в другом проекте настройки, чтобы проверить, есть ли у покупателя скидка на конкретную позицию инвентаря, прежде чем устанавливать цену.

  • Есть ли способ ссылаться на DAC без необходимости включать DAC в оба проекта настройки?
  • Кроме того, есть ли способ проверить, опубликован ли в экземпляре Acumatica необходимый проект настройки (помимо использования условной компиляции)?

person user10605996    schedule 26.03.2021    source источник
comment
Может быть, у кого-то еще есть решение, но ... Если DAC находится в проекте, который не опубликован, как вы ожидаете получить к нему доступ? После публикации проекта в экземпляре база данных будет содержать таблицы и поля. Без опубликованного проекта, определяющего, как получить доступ к этим таблицам / полям, вам нужно было бы определить DAC в вашем новом проекте. Есть способы ссылаться на другую DLL в Visual Studio, но тогда вы рискуете, что ваш проект будет иметь устаревшую копию реальной DLL, управляемую другим проектом. Кроме того, если вы определите DAC по-другому, вы можете столкнуться с повреждением данных.   -  person Brian Stevens    schedule 26.03.2021
comment
В порядке. Я помещал ЦАП в оба проекта и рассматривал возможность ссылки на библиотеки DLL. Я подумал, что посмотрю, есть ли лучший способ добиться этого в Acumatica, но я полагаю, что мне просто нужно не забывать обновлять DAC в обоих проектах всякий раз, когда я меняю его в одном.   -  person user10605996    schedule 26.03.2021
comment
Лично я бы сделал базовый проект, содержащий абсолютный базовый код, такой как этот ЦАП. Тогда он доступен для каждого проекта, который находится сверху. Я подозреваю, что есть способ сделать то, что вы пытаетесь сделать, но меня больше всего беспокоит то, что повреждение данных вызвало разные определения одной и той же таблицы.   -  person Brian Stevens    schedule 26.03.2021
comment
Другой вариант - объединить проекты настройки и настроить лицензирование для различных функций, но это то, чего я пытался избежать. Я думаю, что мой единственный вариант - быть очень осторожным и синхронизировать определения ЦАП.   -  person user10605996    schedule 26.03.2021


Ответы (1)


Есть ли способ ссылаться на DAC без необходимости включать DAC в оба проекта настройки?

Прежде всего, если проекты когда-либо будут публиковаться вместе, вам никогда не следует создавать повторяющиеся определения DAC. Это может привести к сбоям во время выполнения. Неважно, что ЦАП идентичны. Acumatica Framework не сможет разрешить конфликты должным образом во всех сценариях для идентичных типов. Обычно это приводит к тому, что ошибка не может привести объект типа X к объекту типа Y.

Кроме того, есть ли способ проверить, опубликован ли в экземпляре Acumatica необходимый проект настройки (помимо использования условной компиляции)?

Используйте действие «Проверить проект настройки» в меню публикации настройки. Если вы не загружаете динамически ссылки на DLL, вы не сможете их опубликовать.

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

Чтобы ссылаться на тип, он должен быть опубликован, иначе он будет просто недоступен.

Наиболее распространенный вариант для вашего варианта использования - создать третий проект настройки / DLL, содержащий общие типы.

В противном случае вы можете попробовать условно отключить функцию с помощью свойства IsActive.

Ссылка на DAC IsActive: https://help-2021r1.acumatica.com/Help?ScreenId=ShowWiki&pageid=9ca4cca5-a46c-4dda-af09-8cb8b0793c34

Ссылка на Graph IsActive: https://help-2021r1.acumatica.com/Help?ScreenId=ShowWiki&pageid=cd70b408-b389-4bd8-8502-3d9c12b11112

Чтобы загрузить указанный тип только тогда, когда он существует, вам нужно сначала поместить его в DLL и динамически загружать эту DLL во время выполнения: https://stackoverflow.com/a/18362459/7376238

person Hugues Beauséjour    schedule 26.03.2021