独立投影中的未绑定字段

时间:2021-03-10 22:22:04

标签: acumatica

我有一个附加到 PMQuote 和 CRQuote DAC 的富文本字段。在 CRQuote 上,用户字段位于独立类和常规类上,并且按需要工作。但是,Acumatica 的报告不显示 HTML 格式,因此我正在创建一个未绑定的纯文本字段以放置在报告和 GI 中。此字段在 PMQuote 上工作正常,但在 CRQuote 上无效。在 CRQuote 上,该字段在那里,但始终为空白。我确定这与投影有关,但我不确定它应该如何创建。

这是 PMQuote 字段(正常工作)

    [PXString(IsUnicode = true)]
    [PXUIField(Visible = false, DisplayName = "Scope Text")]
    public virtual String UsrScopePlainText
    {
        get
        {
            return PX.Data.Search.SearchService.Html2PlainText(UsrScope);

        }
    }
    public abstract class usrScopePlainText : PX.Data.BQL.BqlString.Field<usrScopePlainText> { }

这是我在 CRQuote 上的内容(不起作用):

public class CRQuoteExt : PXCacheExtension<CRQuote>
{
    #region UsrScope
    [PXDBText(IsUnicode = true, BqlField = typeof(CRQuoteStandaloneExt.usrScope))]
    [PXUIField(DisplayName = "Scope")]

    public virtual string UsrScope { get; set; }
    public abstract class usrScope : IBqlField { }
    #endregion

    #region UsrScopePlainText
    [PXString(IsUnicode = true)]
    [PXUIField(Visible = false, DisplayName = "Scope Text")]
    public virtual String UsrScopePlainText
    {
        get
        {
            return PX.Data.Search.SearchService.Html2PlainText(UsrScope);

        }
    }
    public abstract class usrScopePlainText : IBqlField { }
    #endregion
}

public class CRQuoteStandaloneExt : PXCacheExtension<PX.Objects.CR.Standalone.CRQuote>
{
    #region UsrScope
    [PXDBText(IsUnicode = true)]
    [PXUIField(DisplayName = "Scope")]
    public virtual string UsrScope { get; set; }
    public abstract class usrScope : IBqlField { }
    #endregion

    #region UsrScopePlainText
    [PXString(IsUnicode = true)]
    [PXUIField(Visible = false, DisplayName = "Scope Text")]
    public virtual String UsrScopePlainText
    {
        get
        {
            return PX.Data.Search.SearchService.Html2PlainText(UsrScope);

        }
    }
    public abstract class usrScopePlainText : IBqlField { }
    #endregion
}

谢谢!

2 个答案:

答案 0 :(得分:1)

另一种解决方案可能是拥有一个可以附加到任何字段的可重用属性。我认为这比直接在数据访问类中添加逻辑更清晰...

using PX.Objects.IN;
using PX.Data;
using System;

namespace PX.Objects.IN
{
  public class InventoryItemPlainTextBodyExt : InventoryItem
  {
    [HtmlToText(typeof(InventoryItem.body))]
    [PXDependsOnFields(typeof(InventoryItem.body))]
    [PXUIField(DisplayName="Body (Plain Text)")]
    public virtual string BodyPlainText { get; set; }
    public abstract class bodyPlainText : PX.Data.BQL.BqlString.Field<bodyPlainText> { }
  }
  
  [PXString]    
  public class HtmlToTextAttribute : PXEventSubscriberAttribute, IPXFieldSelectingSubscriber
  {
    protected Type _htmlField;

    public HtmlToTextAttribute(Type htmlField) :base()
    {
      _htmlField = htmlField;
    }
      
    public void FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e)
    {
      e.ReturnValue = PX.Data.Search.SearchService.Html2PlainText(sender.GetValue(e.Row, _htmlField.Name) as string);
    }
  }
}

答案 1 :(得分:0)

我不确定发生了什么,但我将上面发布的原始代码放回到自定义项目中,它开始按预期工作。

相关问题