Acumatica 如何将EPTimecardDetail记录添加到时间卡?

Acumatica 如何将EPTimecardDetail记录添加到时间卡?,acumatica,Acumatica,我正在编写一个自定义项,将记录添加到时间卡,并尝试创建一个新记录添加到时间卡。使用T230中的逻辑,我正在创建一个变量,编译器告诉我找不到EPTimecardDetail 我添加了PX.Objects.EP和PX.Objects.PM,但我认为如果可以找到TimeCardMaint,那么也应该可以找到EPTimecardDetail。我也包括了我的使用代码,但我想我遗漏了其他东西 using System; using System.Collections; using PX.Data; usi

我正在编写一个自定义项,将记录添加到时间卡,并尝试创建一个新记录添加到时间卡。使用T230中的逻辑,我正在创建一个变量,编译器告诉我找不到EPTimecardDetail

我添加了PX.Objects.EP和PX.Objects.PM,但我认为如果可以找到TimeCardMaint,那么也应该可以找到EPTimecardDetail。我也包括了我的使用代码,但我想我遗漏了其他东西

using System;
using System.Collections;
using PX.Data;
using PX.Data.BQL.Fluent;
using PX.Data.BQL;
using PX.Objects.CS;
using PX.Objects.PM;
using PX.Objects.EP;
using PX.Objects.CR;
using PX.Objects.AR;
using PX.Objects.CT;
using PX.Objects.GL.FinPeriods;
using PX.TM;
using System.Collections.Generic;

namespace TimecardImport
{
    public class NLTimecardLineEntry : PXGraph<NLTimecardLineEntry>
    {

private static void DoPopulateTimeCard(Int32 employeeID, DateTime startDate, NLTimecardLine record)
{
   TimeCardMaint graph = PXGraph.CreateInstance<TimeCardMaint>();
   Int32 cardWeekID = PXWeekSelector2Attribute.GetWeekID(graph, startDate);

   //look for an employee timecard with the current weekID  
   EPTimeCard card = PXSelectReadonly<EPTimeCard,
   Where<EPTimeCard.employeeID, Equal<Required<EPTimeCard.employeeID>>,
   And<EPTimeCard.weekId, Equal<Required<EPTimeCard.weekId>>>>>.SelectWindowed(graph, 0, 1, employeeID, cardWeekID);


   if (card == null) //if a card was not found, create one
   {
      card = (EPTimeCard)graph.Document.Cache.CreateInstance();
      card.WeekID = cardWeekID;
      card.EmployeeID = employeeID;
      card = graph.Document.Insert(card);
   }

   //at this point card is the card that we're going to work with 
   var detailLine = (EPTimecardDetail)graph.Activities.Cache.CreateCopy(
                                      graph.Activities.Insert());

   //detailLine.SetValueExt<detailLine.Date_Date>(record, record.InDate);
   //detailLine.EarningTypeID = "RG";

   //detailLine = graph.Activities.Update(detailLine);
   graph.Save.Press();

}
}}
使用系统;
使用系统集合;
使用PX数据;
使用PX.Data.BQL.Fluent;
使用PX.Data.BQL;
使用PX.Objects.CS;
使用PX.Objects.PM;
使用PX.Objects.EP;
使用PX.Objects.CR;
使用PX.Objects.AR;
使用PX.Objects.CT;
使用PX.Objects.GL.FinPeriods;
使用PX.TM;
使用System.Collections.Generic;
命名空间TimecardImport
{
公共类NLTimecardLineEntry:PXGraph
{
私有静态无效DoPopulateTimeCard(Int32 employeeID、DateTime startDate、NLTimecardLine记录)
{
TimeCardMaint graph=PXGraph.CreateInstance();
Int32 cardWeekID=PXWeekSelector2Attribute.GetWeekID(图形,起始日期);
//查找当前工作日的员工考勤卡
EPTimeCard card=PXSelectReadonly.SelectWindowed(图形,0,1,员工ID,cardWeekID);
if(card==null)//如果找不到卡,则创建一个
{
card=(EPTimeCard)graph.Document.Cache.CreateInstance();
card.WeekID=cardWeekID;
card.EmployeeID=EmployeeID;
卡片=图形.文档.插入(卡片);
}
//在这一点上,卡就是我们要使用的卡
var detailLine=(EPTimecardDetail)graph.Activities.Cache.CreateCopy(
Activities.Insert());
//detailLine.SetValueExt(记录,记录,InDate);
//detailLine.EarningTypeID=“RG”;
//detailLine=graph.Activities.Update(detailLine);
graph.Save.Press();
}
}}
我得到的错误是“找不到类型或命名空间名称'EPTimecardDetail'(是否缺少using指令或程序集引用?)


EPTimecardDetail是在PX.Objects.EP中定义的,所以我不确定为什么会出现问题。或者,这可能不是将记录添加到员工时间卡屏幕的详细信息选项卡的方法?

对于名称空间问题,您可以使用PX.Object.EP声明
,并将类型引用为
TimeCardMaint.EPTimecardDetail

或者您可以使用static PX.Objects.EP.TimeCardMaint声明
,并将类型引用为
eptimecarddail


要插入记录,请检查文件TimeCardMaint.cs中的源代码。这里有一些有关如何插入此DAC记录的示例

确保用于SQL联接的字段(如
OrigNoteID
RefNoteID
具有正确的值(非空)

此示例来自TimeCardMaint中的正确操作:

[PXUIField(DisplayName = Messages.Correct)]
[PXButton(ImageKey = PX.Web.UI.Sprite.Main.Release)]
public virtual IEnumerable Correct(PXAdapter adapter)
{
    if (Document.Current != null)
    {
        EPTimeCard source = GetLastCorrection(Document.Current);

        if (source.IsReleased != true)
            return new EPTimeCard[] { source };


        EPTimeCard newCard = (EPTimeCard)Document.Cache.CreateInstance();
        newCard.WeekID = source.WeekID;
        newCard.OrigTimeCardCD = source.TimeCardCD;
        newCard = Document.Insert(newCard);
        newCard.EmployeeID = source.EmployeeID;
        PXNoteAttribute.CopyNoteAndFiles(Document.Cache, source, Document.Cache, newCard, true, true);

        bool failed = false;

        Dictionary<string, TimeCardSummaryCopiedInfo> summaryDescriptions = new Dictionary<string, TimeCardSummaryCopiedInfo>(); 
        foreach (EPTimeCardSummary summary in Summary.View.SelectMultiBound(new object[] { source }))
        {
            string key = GetSummaryKey(summary);
            if (!summaryDescriptions.ContainsKey(key))
            {
                string note = PXNoteAttribute.GetNote(Summary.Cache, summary);
                var info = new TimeCardSummaryCopiedInfo(summary.Description, note);
                summaryDescriptions.Add(key, info);
            }
        }

        foreach (EPTimecardDetail act in TimecardActivities.View.SelectMultiBound(new object[] { source }))
        {
            EPTimecardDetail newActivity = PXCache<EPTimecardDetail>.CreateCopy(act);
            newActivity.Released = false;
            newActivity.Billed = false;
            newActivity.NoteID = null;
            newActivity.TimeCardCD = null;
            newActivity.TimeSheetCD = null;
            newActivity.OrigNoteID = act.NoteID; //relation between the original activity and the corrected one.
            newActivity.Date = act.Date;
            newActivity.Billed = false;
            newActivity.SummaryLineNbr = null;
            newActivity.NoteID = null;
            newActivity.ContractCD = null;
            isCreateCorrectionFlag = true;
            try
            {
                newActivity = Activities.Insert(newActivity);
            }
            catch (PXSetPropertyException ex)
            {
                failed = true;
                Activities.Cache.RaiseExceptionHandling<EPTimecardDetail.summary>(act, act.Summary, new PXSetPropertyException(ex.MessageNoPrefix, PXErrorLevel.RowError));
                continue;
            }
            newActivity.TrackTime = act.TrackTime; //copy as is.
            isCreateCorrectionFlag = false;
            newActivity.ApprovalStatus = ActivityStatusAttribute.Completed;
            newActivity.RefNoteID = act.NoteID == act.RefNoteID ? newActivity.NoteID : act.RefNoteID;
            newActivity.ContractCD = act.ContractCD;

            PXNoteAttribute.CopyNoteAndFiles(Activities.Cache, act, Activities.Cache, newActivity);

            Activities.Cache.SetValue<EPTimecardDetail.isCorrected>(act, true);
            Activities.Cache.SetStatus(act, PXEntryStatus.Updated);
        }

        if (failed)
        {
            throw new PXException(Messages.FailedToCreateCorrectionTC);
        }

        foreach (EPTimeCardItem item in Items.View.SelectMultiBound(new object[] { source }))
        {
            EPTimeCardItem record = Items.Insert();
            record.ProjectID = item.ProjectID;
            record.TaskID = item.TaskID;
            record.Description = item.Description;
            record.InventoryID = item.InventoryID;
            record.CostCodeID = item.CostCodeID;
            record.UOM = item.UOM;
            record.Mon = item.Mon;
            record.Tue = item.Tue;
            record.Wed = item.Wed;
            record.Thu = item.Thu;
            record.Fri = item.Fri;
            record.Sat = item.Sat;
            record.Sun = item.Sun;
            record.OrigLineNbr = item.LineNbr;//relation between the original activity and the corrected one.
        }

        foreach (EPTimeCardSummary summary in Summary.Select())
        {
            string key = GetSummaryKey(summary);
            if (summaryDescriptions.ContainsKey(key))
            {
                PXNoteAttribute.SetNote(Summary.Cache, summary, summaryDescriptions[key].Note);
                Summary.Cache.SetValue<EPTimeCardSummary.description>(summary, summaryDescriptions[key].Description);
            }
        }

        return new EPTimeCard[] { newCard };
    }

    return adapter.Get();
}
[PXUIField(DisplayName=Messages.Correct)]
[PXButton(ImageKey=PX.Web.UI.Sprite.Main.Release)]
公共虚拟IEnumerable正确(PXAdapter)
{
如果(Document.Current!=null)
{
EPTimeCard source=GetLastCorrection(Document.Current);
如果(source.IsReleased!=true)
返回新的EPTimeCard[]{source};
EPTimeCard newCard=(EPTimeCard)Document.Cache.CreateInstance();
newCard.WeekID=source.WeekID;
newCard.OrigTimeCardCD=source.TimeCardCD;
newCard=文件。插入(newCard);
newCard.EmployeeID=source.EmployeeID;
PXNoteAttribute.CopyNoteAndFiles(Document.Cache,source,Document.Cache,newCard,true,true);
bool失败=错误;
Dictionary summaryDescriptions=新字典();
foreach(summary.View.SelectMultiBound(新对象[]{source})中的EPTimeCardSummary摘要)
{
字符串键=GetSummaryKey(摘要);
if(!summaryDescriptions.ContainsKey(键))
{
string note=PXNoteAttribute.GetNote(Summary.Cache,Summary);
var info=新的TimeCardSummaryCopiedInfo(summary.Description,note);
summaryDescriptions.Add(键、信息);
}
}
foreach(在TimecardActivities.View.SelectMultiBound(新对象[]{source})中执行EPTimecardDetail操作)
{
EPTimecardDetail newActivity=PXCache.CreateCopy(act);
newActivity.Released=false;
newActivity.Billed=false;
newActivity.NoteID=null;
newActivity.TimeCardCD=null;
newActivity.TimeSheetCD=null;
newActivity.Origonteid=act.NoteID;//原始活动和更正的活动之间的关系。
newActivity.Date=开始日期;
newActivity.Billed=false;
newActivity.SummaryLineNbr=null;
newActivity.NoteID=null;
newActivity.ContractCD=null;
isCreateCorrectionFlag=true;
尝试
{
newActivity=活动。插入(newActivity);
}
捕获(PXSetPropertyException ex)
{
失败=真;
Activities.Cache.RaiseExceptionHandling(act、act.Summary、new PXSetPropertyException(例如MessageNoPrefix、PXErrorLevel.RowError));
继续;
}
newActivity.TrackTime=act.TrackTime;//按原样复制。
isCreateCorrectionFlag=false;
newActivity.ApprovalStatus=ActivityStatusAttribute.Completed;
newActivity.RefNoteID=act.NoteID==act.RefNoteID?newActivity.NoteID:act.RefNoteID;
newActivity.ContractCD=act.ContractCD;
PXNoteAttribute.CopyNoteAndFiles(Activities.Cache、act、Activities.Cache、newActivity);
Activities.Cache.SetValue(act,true);
Activities.Cache.SetStatus(act,PXEntryStatus.Updated);
}
如果(失败)
{
抛出新的PXException(异常)消息。