Я потерян и не уверен, что поступаю правильно.Я поместил кнопку PXAction на экран EP305000.
Экран EP305000
Когда кнопка нажата, я хотел найти любые записи в таблице PMTimeActivity для текущегопользователь с нулевым значением UsrPIXIClockIn и нулевым значением UsrPIXIClockOut.Если найдено, нужно установить его значение на текущее время.Если файл не найден, создайте новую запись с полем UsrPIXIClockIn, установленным на текущее время.
Однако моя первая попытка просто прочитать поля Usr - создать ошибку.Когда я пытаюсь проанализировать PXResultSet, строки кода, содержащие мои поля Usr, выдают ошибку при компиляции.Существует ошибка: «PX.Objects.CR.PMTimeActivity» не содержит определения для «UsrPIXIClockIn» и отсутствует метод расширения «UsrPIXIClockIn», принимающий первый аргумент типа «PX.Objects.CR.PMTimeActivity»
Я не уверен, где это определение принадлежит или как его определить.Вот код, который у меня есть:
[Serializable]
public class PMTimeActivityExt : PXCacheExtension<PMTimeActivity>
{
public PXSelect<PMTimeActivity> PMTimeActivity;
#region UsrPIXIClockIn
[PXDBTime(DisplayMask = "t", UseTimeZone = false)]
[PXUIField (DisplayName="Clock In")]
public virtual DateTime? UsrPIXIClockIn { get; set; }
public abstract class usrPIXIClockIn : IBqlField { }
#endregion
#region UsrPIXIClockOut
[PXDBTime(DisplayMask = "t", UseTimeZone = false)]
[PXUIField (DisplayName="Clock Out")]
public virtual DateTime? UsrPIXIClockOut { get; set; }
public abstract class usrPIXIClockOut : IBqlField { }
#endregion
#region UsrPIXITotalHours
[PXDBDecimal]
[PXUIField (DisplayName="Total Hours")]
public virtual decimal? UsrPIXITotalHours { get; set; }
public abstract class usrPIXITotalHours : IBqlField { }
#endregion
}
public class TimeCardMaint_Extension : PXGraphExtension<TimeCardMaint>
{
public PXSelect<PMTimeActivity> PMTimeActivity;
public PXAction<EPTimeCard> PunchCard;
public PXAction<PX.Objects.EP.EPTimeCard> PunchTimeCard;
[PXButton(CommitChanges = true)]
[PXUIField(DisplayName = "Punch Time Card")]
protected void punchTimeCard(PXCache cache)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.AppendLine("Started...\n");
EPEmployee employeeByUserID = PXSelect<EPEmployee, Where<EPEmployee.bAccountID, Equal<Current<EPTimeCard.employeeID>>>>.Select(this.Base);
Guid userID = (Guid) employeeByUserID.UserID;
sb.AppendLine("user ID:" + userID.ToString() + "\n");
// This one returns all records.
PXResultset<PMTimeActivity> TimeActivity = PXSelect<PMTimeActivity>.Select(this.Base);
foreach (PMTimeActivity timeRecord in TimeActivity)
{
if (timeRecord.OwnerID == userID) {
sb.AppendLine("UsrPIXIClockIn:" + timeRecord.UsrPIXIClockIn + "\n");
}
}
sb.AppendLine("\nEnded...\n");
throw new PXException("Clicked Punch Time Card!\n" + sb.ToString());
}
}
Что касается PXSelect для PXResultSet, я попробовал это:
PXResultset<PMTimeActivity> TimeActivity = PXSelect<PMTimeActivity, Where<Required<PMTimeActivity.ownerID>, Equal<Current<PMTimeActivity.ownerID>>>>.Select(this.Base, userID);
Но никаких записей не найдено.Что я делаю не так?