从Acumatica ERP 5.3升级到17.2时,我遇到了一个问题,因为ActiveProject *属性类不再存在。有没有人有任何建议使用这些属性(例如ActiveProjectForModuleAttribute)调整我们的自定义代码项目ID在R2中工作?有没有新的首选方法来完成这门课程的用途?
答案 0 :(得分:2)
我通常做的是将先前版本的代码文件与较新版本的相同代码文件进行比较。这非常简单,因为PX.Objects.dll的完整源代码存储在Acumatica网站的 \ App_Data \ CodeRepository \ PX.Objects 文件夹中。
在您的情况下,您只需在本地安装一个Acuamtica ERP 5.3网站和一个Acuamtica ERP 2017 R2网站,然后在Visual Studio中搜索5.3网站 中的 ActiveProjectForModuleAttribute \ App_Data \ CodeRepository \ PX.Objects 文件夹,并将搜索结果与2017 R2代码库进行比较。
举一个例子,在第5.3版中,在 POLine 的 ProjectID 字段中使用了 ActiveProjectForModuleAttribute :
[System.SerializableAttribute()]
[PXCacheName(Messages.POLineShort)]
public partial class POLine : PX.Data.IBqlTable, IAPTranSource, IItemPlanMaster, ISortOrder
{
...
#region ProjectID
public abstract class projectID : PX.Data.IBqlField
{
}
protected Int32? _ProjectID;
[POProjectDefault(typeof(POLine.lineType), AccountType = typeof(POLine.expenseAcctID))]
[ActiveProjectForModule(BatchModule.PO, null, false, false, true)]
public virtual Int32? ProjectID
{
get
{
return this._ProjectID;
}
set
{
this._ProjectID = value;
}
}
#endregion
...
}
2017年,R2 ActiveProjectForModuleAttribute 被 ProjectBaseAttribute 和2 PXRestrictor 属性取代:
[System.SerializableAttribute()]
[PXCacheName(Messages.POLineShort)]
public partial class POLine : PX.Data.IBqlTable, IAPTranSource, IItemPlanMaster, ISortOrder
{
...
#region ProjectID
public abstract class projectID : PX.Data.IBqlField
{
}
protected Int32? _ProjectID;
[POProjectDefault(typeof(POLine.lineType), AccountType = typeof(POLine.expenseAcctID))]
[PXRestrictor(typeof(Where<PMProject.isCancelled, Equal<False>>),
PM.Messages.CancelledContract, typeof(PMProject.contractCD))]
[PXRestrictor(typeof(Where<PMProject.visibleInPO, Equal<True>,
Or<PMProject.nonProject, Equal<True>>>),
PM.Messages.ProjectInvisibleInModule, typeof(PMProject.contractCD))]
[ProjectBaseAttribute()]
public virtual Int32? ProjectID
{
get
{
return this._ProjectID;
}
set
{
this._ProjectID = value;
}
}
#endregion
...
}