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