在Acumatica中,您可以使用未绑定的DAC获得图表/页面吗?

时间:2014-10-25 02:49:03

标签: acumatica

是否可以让图表和页面使用完全未绑定的DAC?

当我在4.20尝试此操作时,我收到以下错误消息:

Incorrect syntax near the keyword 'FROM'.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Incorrect syntax near the keyword 'FROM'.

如果我在数据库中创建一个表并将我的DAC字段从PXInt更改为PXDBInt,那么页面会加载我尝试做的事情,我不需要实际存储数据。

DAC示例:

    namespace Acumatica1
{
    [PXPrimaryGraph(typeof(UnboundDataTest))]
    [System.SerializableAttribute()]
    public class UnboundDAC : PX.Data.IBqlTable
        {
        public abstract class unboundKey : PX.Data.IBqlField
        {
        }
        protected int _UnboundKey;
        [PXInt(IsKey = true)]
        [PXUIField(Visible = false)]
        public virtual int UnboundKey
        {
            get
            {
                return this._UnboundKey;
            }
            set
            {
                this._UnboundKey = value;
            }
        }

        #region UnboundText
        public abstract class unboundText : PX.Data.IBqlField
        {
        }
        protected string _UnboundText;
        [PXString]
        [PXUIField(DisplayName = "Text")]
        public virtual string UnboundText
        {
            get
            {
                return this._UnboundText;
            }
            set
            {
                this._UnboundText = value;
            }
        }
        #endregion
    }
}

图表示例:

public class UnboundDataTest: PXGraph<UnboundDataTest>
{
    public PXSelect<UnboundDAC> UnboundInfo;
}

1 个答案:

答案 0 :(得分:3)

要控制select进程,需要创建一个在选择UnboundInfo视图时调用的委托:

public IEnumerable unboundInfo()
{
    //TODO: Put your logic to return a new instance of UnboundDAC here
}

在此委托中,您可以自由使用任何机制来检索应由此未绑定选择返回的记录。例如,您可以动态创建一个或多个对象并返回它们:

public IEnumerable unboundInfo()
{
    yield return new UnboundDAC() { UnboundKey = 1, UnboundText = "A" };
    yield return new UnboundDAC() { UnboundKey = 2, UnboundText = "B" };
}

如果您以某种方式需要允许用户编辑UnboundDAC中的值,您可以利用缓存,并在第一次选择视图时将记录插入缓存中:

public IEnumerable unboundInfo()
{
    PXCache cache = _Graph.Caches[typeof(Table)];
    cache._AllowInsert = true;
    cache._AllowUpdate = true;

    if(cache.Current == null)
    {
        cache.SetStatus(new UnboundDAC() { UnboundKey = 1, UnboundText = "A" }, PXEntryStatus.Held);
        cache.SetStatus(new UnboundDAC() { UnboundKey = 2, UnboundText = "B" }, PXEntryStatus.Held);
    }

    return UnboundInfo.Cache.Cached;
}

最后,您可以看一下PXFilter的内部实现; PXFilter是一个专门的PXSelect,它实际上并没有从数据库中选择任何东西;它只是在第一次选择时在缓存中插入一行,并阻止该行的持久化。您可以使用类似的技术来创建可以在多个图中轻松重用的PXUnboundSelect类。