如何通过代码操作“审核”屏幕(SM205510)

时间:2019-07-26 19:16:03

标签: acumatica

我正在尝试使用图形对象通过代码来操纵“审核”屏幕(SM205510)。当在标题中选择了屏幕ID时,屏幕的操作似乎可以正常工作。这是我创建新记录的代码:

Using PX.Data;
Using PX.Objects.SM;

var am = PXGraph.CreateInstance<AUAuditMaintenance>();
AUAuditSetup auditsetup = new AUAuditSetup();
auditsetup.ScreenID = "GL301000";
auditsetup = am.Audit.Insert(auditsetup);

am.Actions.PressSave();

现在,当我执行上面的代码时,它会在AUAuditSetup表中创建一条记录就很好了-但它不会像在屏幕上自动生成它们的方式那样自动创建AUAuditTable记录(我意识到这些记录不是还没有添加到数据库中)-但是如何获取图形对象以像在屏幕上一样自动生成缓存中的AUAuditTable记录?

我尝试查看“审核”屏幕的源代码-但它只显示空白,就像那里什么都没有。我在Visual Studio的代码存储库中查看,也没有看到AUAuditMaintenance的任何文件,因此我看不到可以在填充这些AUAuditTable记录的图形对象中运行的任何进程。

任何帮助将不胜感激。

谢谢...

2 个答案:

答案 0 :(得分:0)

如果我有这样的需要,要操作Audit屏幕记录,我宁愿创建自己的图形并可能生成DAC类。另外,我还要再增加一列UsrIsArtificial并将其默认设置为false。然后将它们作为普通记录进行管理,但是每当我添加一些内容时,我都会将字段UsrIsArtificial设置为false。 您几乎找不到在图级别管理记录的方法,因为这些记录是在图级别(但在框架级别)创建和处理的。也要三思而后行,甚至更多,因为直接写入审核历史记录可能会使系统中的用户混淆由用户引起的,由代码引起的。从这个角度来看,我宁愿再添加一个表,然后对现有表添加混乱。

答案 1 :(得分:0)

Acumatica支持人员提供了此解决方案,该解决方案效果很好(提示!)

var screenID = "GL301000"; //"SO303000";
var g = PXGraph.CreateInstance<AUAuditMaintenance>();
//Set Header Current
g.Audit.Current = g.Audit.Search<AUAuditSetup.screenID>(screenID);

if (g.Audit.Current == null)    //If no Current then insert
{
    var header = new AUAuditSetup();
    header.ScreenID = screenID;
    header.Description = "Test Audit";
    header = g.Audit.Insert(header);
}

foreach (AUAuditTable table in g.Tables.Select())
{
    table.IsActive = true;
    //Sets Current for Detail
    g.Tables.Current = g.Tables.Update(table);
    foreach (AUAuditField field in g.Fields.Select())
    {
        field.IsActive = false;
        g.Fields.Update(field);
    }
}

g.Actions.PressSave();