Acumatica未找到项目ProjectTaskID

问题描述 投票:0回答:1

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using PX.Common;
using PX.Data;
using PX.Objects.GL;
using PX.Objects.CM;
using PX.Objects.CS;
using PX.Objects.CR;
using PX.Objects.TX;
using PX.Objects.IN;
using PX.Objects.EP;
using PX.Objects.AP;
using PX.Objects.AR;
using PX.Objects.SO;
using PX.TM;
using SOOrder = PX.Objects.SO.SOOrder;
using SOLine = PX.Objects.SO.SOLine;
using PX.CS.Contracts.Interfaces;
using PX.Data.DependencyInjection;
using PX.Data.ReferentialIntegrity.Attributes;
using PX.Objects.PM;
using CRLocation = PX.Objects.CR.Standalone.Location;
using PX.Objects.AP.MigrationMode;
using PX.Objects.Common;
using PX.Objects.Common.Discount;
using PX.Objects;
using PX.Objects.PO;
using PX.Objects.CT;
using PX.Data.EP;

namespace PX.Objects.PO
{
  public class POOrderEntry_Extension : PXGraphExtension<POOrderEntry>
  {
        #region Event Handlers

        [Serializable]

        public class ProjectFilter : IBqlTable
        {
            #region ContractID
            public abstract class contractID : PX.Data.IBqlField { }
            //[PXDefault(typeof(PMProject.contractID))]
            [PXUIField(DisplayName = "Project ID")]
            [Project(DescriptionField = typeof(PMProject.contractCD))]
            public int? ContractID { get; set; }
            #endregion
            #region ProjectTaskID

            public abstract class projectTaskID : PX.Data.BQL.BqlInt.Field<projectTaskID> { }
            protected Int32? _ProjectTaskID;
            [ProjectTask(typeof(PMProject.contractID), AlwaysEnabled = true, DirtyRead = true, IsKey = true)]
            public virtual Int32? ProjectTaskID
            {
                get
                {
                    return this._ProjectTaskID;
                }
                set
                {
                    this._ProjectTaskID = value;
                }
            }
            #endregion
        }
        //PXSelect<PMCostBudget, Where<PMCostBudget.projectID, Equal<Current<PMProject.contractID>>, And<PMCostBudget.type, Equal<GL.AccountType.expense>,
        //              And<Where<Current<CostBudgetFilter.projectTaskID>, IsNull, Or<Current<CostBudgetFilter.projectTaskID>, Equal<PMCostBudget.projectTaskID>>>>>>,
        //              OrderBy<Asc<PMCostBudget.projectID, Asc<PMCostBudget.projectTaskID, Asc<PMCostBudget.inventoryID, Asc<PMCostBudget.costCodeID, Asc<PMCostBudget.accountGroupID>>>>>>>(this);

        //PXDelegateResult delResult = new PXDelegateRes

        public PXFilter<ProjectFilter> projectfilter;

        [PXFilterable]
        [PXCopyPasteHiddenView]
        public PXSelect<PMCostBudget, 
            Where<PMCostBudget.projectID, Equal<Current<ProjectFilter.contractID>>,
                //And<PMCostBudget.projectTaskID, Equal<Current<ProjectFilter.projectTaskID>>,
                    //And<PMProject.locationID, Equal<Current<POOrder.vendorLocationID>>,
                And<PMCostBudget.type, Equal<GL.AccountType.expense>>>> getCostBudget;

        //   public PXOrderedSelect<POOrder, POLine, Where<POLine.orderType, Equal<Current<POOrder.orderType>>, And<POLine.orderNbr, Equal<Optional<POOrder.orderNbr>>>>, OrderBy<Asc<POLine.orderType, Asc<POLine.orderNbr, Asc<POLine.sortOrder, Asc<POLine.lineNbr>>>>>> Transactions;

        //   PX.Objects.PM.PMProject project = PXSelect<PM.PMProject, Where<PM.PMProject.contractID, Equal<Required<PM.PMProject.contractID>>>>.Select(this, location.Current.VDefProjectID);
        //if (project != null)

        public PXAction<POOrder> AddProjectCostBudget;
        [PXButton(CommitChanges = true)]
        [PXUIField(DisplayName = "Add Project Cost Budget")]

        
        public virtual IEnumerable addProjectCostBudget(PXAdapter adapter)
        {
            if (getCostBudget.AskExt() == WebDialogResult.OK)
            {
                return addSelCostBudget(adapter);
            }
            return adapter.Get();
        }

        public PXAction<POOrder> AddSelCostBudget;
        [PXUIField(DisplayName = "Add", Visible = false)]
        [PXButton(CommitChanges = true)]

        public virtual IEnumerable addSelCostBudget(PXAdapter adapter)
        {
            //Base.Transactions.Cache.ForceExceptionHandling = true;

            foreach (PMCostBudget cost in getCostBudget.Cache.Cached)
            {

                //var costExt = cost.GetExtension<PMBudgetExt>();
                if (cost.Selected == true)
                {
                    POLine newline = Base.Transactions.Insert();
                    newline.ProjectID = cost.ProjectID;
                    newline.TaskID = cost.ProjectTaskID;
                    newline.CostCodeID = cost.CostCodeID;
                    newline.InventoryID = cost.InventoryID;
                    newline.UOM = cost.UOM;
                    Base.Transactions.Cache.Update(newline);
                    Base.Transactions.Update(newline);
                }

            }
            //getCostBudget.Cache.Clear();
            return adapter.Get();
        }
        //public override void Initialize()
        //{
        //    base.Initialize();
        //    AddProjectCostBudget.SetEnabled(false);
        //}

        //protected virtual void PMCostBudget_ProjectTaskID_FieldVerifying(PXCache sender, PXFieldVerifyingEventArgs e)
        //{
        //    PMCostBudget row = e.Row as PMCostBudget;
        //    if (row == null) return;
        //    if (!(e.NewValue is Int32)) return;

        //    if (e.NewValue != null)
        //    {

        //        PXResultset<INLocation> projectLocations = PXSelectReadonly<INLocation,
        //            Where<INLocation.projectID, Equal<Required<INLocation.projectID>>,
        //            And2<Where<INLocation.taskID, IsNull>, Or<INLocation.taskID, Equal<Required<INLocation.taskID>>>>>>.Select(Base, row.ProjectID, e.NewValue);

        //        string taskCD = null;

        //        PMTask task = PXSelect<PMTask, Where<PMTask.taskID, 
        //            Equal<Required<PMTask.taskID>>>>.Select(Base, row.TaskID);

        //        if (task != null)
        //        {
        //            taskCD = task.TaskCD;
        //        }
        //        else
        //        {
        //            sender.RaiseExceptionHandling<PMCostBudget.projectTaskID>(row, taskCD, new PXSetPropertyException(Messages.ProjectTaskIsNotAssociatedWithAnyInLocation, PXErrorLevel.Warning));
        //        }
        //    }
        //}
        //protected virtual void PMCostBudget_ProjectTaskID_FieldDefaulting(PXCache sender, PXFieldDefaultingEventArgs e)
        //{
        //    PMCostBudget cost = e.Row as PMCostBudget;

        //    if (cost == null) return;

        //    PMTask task = PXSelect<PMTask,
        //        Where<PMTask.projectID, Equal<Current<ProjectFilter.contractID>>,
        //        And<PMTask.isDefault, Equal<True>>>>.Select(Base, cost.ProjectID, cost.ProjectTaskID);
        //    if (task == null) return;



        //    sender.SetValue<PMCostBudget.projectTaskID>(cost, task.TaskID);
        //}


        #endregion
    }
}

我创建了一个弹出面板,将项目成本预算插入采购订单屏幕的POLine中。每次我想选择并插入时,都会出现此错误错误:处理字段项目任务期间发生错误:错误:在系统中找不到“项目任务”。我认为的代码段:[

[Serializable]

        public class ProjectFilter : IBqlTable
        {
            #region ContractID
            public abstract class contractID : PX.Data.IBqlField { }
            //[PXDefault(typeof(PMProject.contractID))]
            [PXUIField(DisplayName = "Project ID")]
            [Project(DescriptionField = typeof(PMProject.contractCD))]
            public int? ContractID { get; set; }
            #endregion
            #region ProjectTaskID

            public abstract class projectTaskID : PX.Data.BQL.BqlInt.Field<projectTaskID> { }
            protected Int32? _ProjectTaskID;
            [ProjectTask(typeof(PMProject.contractID), AlwaysEnabled = true, DirtyRead = true, IsKey = true)]
            public virtual Int32? ProjectTaskID
            {
                get
                {
                    return this._ProjectTaskID;
                }
                set
                {
                    this._ProjectTaskID = value;
                }
            }
            #endregion
        }
        
        public PXFilter<ProjectFilter> projectfilter;

        [PXFilterable]
        [PXCopyPasteHiddenView]
        public PXSelect<PMCostBudget, 
            Where<PMCostBudget.projectID, Equal<Current<ProjectFilter.contractID>>,
                And<PMCostBudget.projectTaskID, Equal<Current<ProjectFilter.projectTaskID>>,
                And<PMCostBudget.type, Equal<GL.AccountType.expense>>>>> getCostBudget;

] 1这是错误图像

acumatica
1个回答
0
投票

ProjectTask属性需要对当前选定项目的引用;您需要使用ProjectFilter.projectID而不是PMProject.projectID

© www.soinside.com 2019 - 2024. All rights reserved.