【问题标题】:Acumatica The item ProjectTaskID is not foundAcumatica 项目 ProjectTaskID 未找到
【发布时间】:2019-12-10 04:44:12
【问题描述】:

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
    }
}

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

[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】:

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

    【讨论】:

    • 我已经尝试过您将 PMProject.projectID 更改为 ProjectFilter.projectID 的建议,但它仍然给我同样的错误。
    猜你喜欢
    • 2020-12-14
    • 1970-01-01
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-12-17
    • 2016-02-10
    • 1970-01-01
    • 2015-03-13
    相关资源
    最近更新 更多