Пример того, как использовать объединение и pxпроекцию?

#acumatica

Вопрос:

(Сокращенная) история:

У вас есть существующая запись настройки По деловым соображениям, теперь вам нужна возможность ПЕРЕОПРЕДЕЛИТЬ настройку настройки на уровне САЙТА, поэтому у вас есть 2-я таблица с теми же полями (за исключением различий, которые не имеют значения), с ключом, определенным как «SiteID».

Проблема — Теперь мне нужно консолидированное представление, которое я всегда могу использовать, загруженное для конкретного сайта, с правильными значениями, это позволит мне искать все варианты использования «Оригинальной» единой настройки и заменять по мере необходимости

Итак, поскольку не предполагается использовать представления SQL, попытка сделать это с помощью Pxprojectionсоздала новый DAC со следующим заголовком:

 [PXProjection(typeof(Select2lt;INSite,  LeftJoinlt;MQMJINSiteDefaults,Onlt;MQMJINSiteDefaults.siteID,Equallt;INSite.siteIDgt;gt;,  CrossJoinlt;MQMJSetupgt;gt;gt;))] [PXBreakInheritance] [Serializable()] [PXCacheName(Messages.CacheMQMJINSiteDefaults)] public class MQMJINSiteSetup : IBqlTable  

Использование таблиц:

  • InSite — таблица acumatica по умолчанию (например, всегда там)
  • MQMJINSiteDefaults — Настройка уровня сайта (иногда там)
  • MQMJSetup — Исходная настройка (может предполагать, что она всегда есть, с одной записью)

SQL возвращает необходимые значения (через трассировку профилировщика) Левое соединение работает, перекрестное соединение работает

НО, используя общий запрос, не получите значения

НЕКОТОРЫЕ из многих опробованных вещей включают:

 [PXSelector(typeof(Searchlt;Numbering.numberingIDgt;), DescriptionField = typeof(Numbering.descr))] [PXUIField(DisplayName = "Additional Lab Results ID")] [PXDependsOnFields(typeof(MQMJINSiteDefaults.addLabResultsNumberingID), typeof(MQMJSetup.addLabResultsNumberingID))] // Ran for single value, get either the Site level or main Setup //[PXDBString(10, IsUnicode = true, BqlField = typeof(MQMJSetup.addLabResultsNumberingID))] // [PXDBString(10, IsUnicode = true, BqlField = typeof(MQMJINSiteDefaults.addLabResultsNumberingID))]  // Nothing below seems to work (e.g. No values) // [PXDBString(10, IsUnicode = true, BqlField = typeof(IsNulllt;Selectorlt;MQMJINSiteDefaults.addLabResultsNumberingID, MQMJSetup.addLabResultsNumberingIDgt;, MQMJINSiteDefaults.addLabResultsNumberingIDgt;))]  [PXString(10, IsUnicode = true)] //[PXUnboundDefault(typeof( IsNulllt;Selectorlt;MQMJINSiteDefaults.addLabResultsNumberingID, MQMJSetup.addLabResultsNumberingIDgt;, MQMJINSiteDefaults.addLabResultsNumberingIDgt; // ), PersistingCheck = PXPersistingCheck.Nothing)] //[PXUnboundDefault(typeof(Coalescelt; // Searchlt;MQMJINSiteDefaults.addLabResultsNumberingID, Wherelt;MQMJINSiteDefaults.addLabResultsNumberingID,IsNotNullgt;gt;, // Searchlt;MQMJSetup.addLabResultsNumberingIDgt;gt; // ))] [PXUnboundDefault(typeof(Switchlt;  Caselt;  Wherelt;Current2lt;MQMJINSiteDefaults.addLabResultsNumberingIDgt;, IsNotNullgt;, Current2lt;MQMJINSiteDefaults.addLabResultsNumberingIDgt;gt;,  Current2lt;MQMJSetup.addLabResultsNumberingIDgt;gt;), PersistingCheck = PXPersistingCheck.Nothing)] public virtual string AddLabResultsNumberingID { get; set; }  

Key success needs:

  • Необходимо проверить ПО ПОРЯДКУ — Нужно значение MQMJINSiteDefaults, ЕСЛИ НЕ NULL (в идеале null или пустое, но я возьму не null)
  • Должно работать для достаточного количества полей — у меня ~200, и я хотел бы, чтобы вычисления выполнялись «по мере необходимости», а не оценивались для всей записи (хорошо, но нужны значения).

Попытался поискать образцы, но не нашел многого, вот почему я спрашиваю здесь. В SQL, простой — IsNull или объединяется, в зависимости от того, сколько значений

Любые полезные советы или предложения