Как получить доступ к пользовательскому полю, которое определено в пакете конструктивных элементов - Acumatica - PullRequest
0 голосов
/ 10 января 2020

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

Я хочу получить доступ к полю «Тип» на экранах проекта. Подробная информация о вкладке задач

enter image description here

UsrType - это настраиваемое поле, определенное в пакете конструктивных элементов. В этом пакете файл был преобразован в dll. Я пытался получить доступ к этому полю, как мы обычно делаем при настройке.

enter image description here

но я получил ошибку

Тип или Пространство имен «PMTaskExt» не может быть найден

Я даже пробовал это

enter image description here

Я получил ошибку

UsrType Не существует в PMTask

Также существует проблема с полем UsrSubcontractNbr в APTran. Не только эти поля, есть много таких полей для доступа. Как мы можем получить доступ к таким полям?

1 Ответ

0 голосов
/ 10 января 2020

При взгляде на PX.Objects.CN.dll он будет находиться в пространстве имен PX.Objects.CN.ProjectAccounting.PM.CacheExtensions как PmTaskExt

Использован последний строительный проект 19R2 "ConstructionFeatures_19_205_4_1_157"

Декомпилирована настройка dll (использовал DotPeek) Я искал PMTask:

enter image description here

Скопированный текст:

using PX.Data;
using PX.Data.BQL;
using PX.Objects.CN.ProjectAccounting.PM.Descriptor;
using PX.Objects.CS;
using PX.Objects.PM;

namespace PX.Objects.CN.ProjectAccounting.PM.CacheExtensions
{
  public sealed class PmTaskExt : PXCacheExtension<PMTask>
  {
    [PXDBString(30)]
    [PXDefault]
    [PXUIField(DisplayName = "Type", Required = true)]
    [ProjectTaskType.List]
    public string UsrType { get; set; }

    public static bool IsActive()
    {
      return PXAccess.FeatureInstalled<FeaturesSet.construction>();
    }

    public abstract class usrType : BqlType<IBqlString, string>.Field<PmTaskExt.usrType>
    {
    }
  }
}

Примерно так должно работать:

var cnExt = PXCache<PX.Objects.PM.PMTask>.GetExtension<PX.Objects.CN.ProjectAccounting.PM.CacheExtensions.PmTaskExt>((PX.Objects.PM.PMTask)e.Row);

Обратите внимание, что. Net версия PX.Objects.CN.dll использует 4.8 в случае, если это вызывает проблемы с совместимостью версий в Visual Studio, если ваше решение скомпилировано на той же версии Acumatica для 19R2, что составляет 4,7,1

...