Как работать с Extension Table с классом проекции INKitAssembly? - PullRequest
0 голосов
/ 06 мая 2020

Ниже расширение DA C и код графика, INRegisterKitAssemblyExt - это DA C, я создал для этого таблицу базы данных. Я хочу сохранить значение usrSiteID в (отдельной) таблице базы данных INRegisterKitAssemblyExt. Пожалуйста, проверьте, как я могу инициализировать расширение DA C с помощью INKitRegister DA C и сохранить значение и как использовать usrSiteId в пользовательском интерфейсе?

[PXTable(typeof(INKitRegister.refNbr), typeof(INKitRegister.KitRevisionId))] 
public class INRegisterKitAssemblyExt: PXCacheExtension<INKitRegister> { 

      #region RefNbr

        public abstract class refNbr:PX.Data.BQL.BqlString.Field<refNbr> {
        }
        protected String _RefNbr;
        [PXDBDefault(typeof(INKitRegister.refNbr))]
        [PXDBString()]
        [PXParent(typeof(Select<INKitRegister, Where<INKitRegister.refNbr, Equal<Current<refNbr>>,And<INKitRegister.kitRevisionID, Equal<Current<kitRevisionID>>>>>))]
        public virtual String RefNbr {
            get {
                return this._RefNbr;
            }
            set {
                this._RefNbr = value;
            }
        }

        #endregion


        #region KitRevisionID

        public abstract class kitRevisionID:PX.Data.BQL.BqlString.Field<kitRevisionID> {
        }
        protected String _KitRevisionID;
        [PXDBDefault(typeof(INKitRegister.kitRevisionID))]
        [PXDBString()]

        public virtual String KitRevisionID {
            get {
                return this._KitRevisionID;
            }
            set {
                this._KitRevisionID = value;
            }
        }

        #endregion

   // My Fields as well as refNbr and KitRevison is also here 
        public virtual int? UsrQCSiteID {
            get; set;
        }
        public abstract class usrQCSiteID:PX.Data.BQL.BqlInt.Field<usrQCSiteID> {
        }

} 

    // Extension Graph

    public class KitAssemblyEntryExt:PXGraphExtension<KitAssemblyEntry> {

    }

1 Ответ

0 голосов
/ 06 мая 2020

INRegisterKitAssemblyExt в вашем примере кода не является DA C. DA C наследуется от базового класса IBqlTable.

INRegisterKitAssemblyExt в вашем примере кода является расширением DA C. Расширения DA C наследуются от базового класса PXCacheExtension. Вы никогда не должны создавать таблицу базы данных для расширений DA C.

Пользовательские поля в расширении DA C будут автоматически сохранены в базовой таблице DA C. Основная проблема здесь в том, что INKitRegister не привязан к таблице базы данных DA C. Это проекция DA C, а таблица базы данных INKitRegister не существует.

Проекция INKitRegister DA C указывает на INRegister DA C:

[PXPrimaryGraph(typeof(KitAssemblyEntry))]
[PXCacheName(Messages.INKit)]
[PXProjection(typeof(Select2<INRegister, InnerJoin<INTran, On<INRegister.FK.KitTran>>>), Persistent=true)]
[Serializable]
public partial class INKitRegister : IBqlTable, ILSPrimary

Вы должны создать расширение INRegister DA C вместо INKitRegister, потому что INRegister привязан к фактической таблице базы данных с тем же именем:

public class INRegisterKitAssemblyExt: PXCacheExtension<INRegister>
...