Acumatica 独立投影中的未绑定字段
我有一个富文本字段附加到PMQuote和CRQuote DAC。在CRQuote上,用户字段位于独立类和常规类上,可以根据需要工作。但是,Acumatica的报告没有显示HTML格式,因此我创建了一个未绑定的纯文本字段,用于报告和GI中。此字段在PMQuote上正常工作,但在CRQuote上不正常。在CRQuote上,该字段存在,但始终为空。我肯定这与投影有关,但我不确定它应该如何创建 这是PMQuote字段(工作正常)Acumatica 独立投影中的未绑定字段,acumatica,Acumatica,我有一个富文本字段附加到PMQuote和CRQuote DAC。在CRQuote上,用户字段位于独立类和常规类上,可以根据需要工作。但是,Acumatica的报告没有显示HTML格式,因此我创建了一个未绑定的纯文本字段,用于报告和GI中。此字段在PMQuote上正常工作,但在CRQuote上不正常。在CRQuote上,该字段存在,但始终为空。我肯定这与投影有关,但我不确定它应该如何创建 这是PMQuote字段(工作正常) [PXString(IsUnicode=true)] [PXUIField
[PXString(IsUnicode=true)]
[PXUIField(Visible=false,DisplayName=“范围文本”)]
公共虚拟字符串UsrScopePlainText
{
得到
{
返回PX.Data.Search.SearchService.Html2PlainText(UsrScope);
}
}
公共抽象类usrscopeplantext:PX.Data.BQL.BqlString.Field{}
以下是我在CRQuote上的信息(不工作):
公共类CRQuoteExt:PXCacheExtension
{
#区域UsrScope
[PXDBText(IsUnicode=true,BqlField=typeof(crquotestandaroneext.usrScope))]
[PXUIField(DisplayName=“Scope”)]
公共虚拟字符串UsrScope{get;set;}
公共抽象类usrScope:IBqlField{}
#端区
#区域USR范围明文
[PXString(IsUnicode=true)]
[PXUIField(Visible=false,DisplayName=“范围文本”)]
公共虚拟字符串UsrScopePlainText
{
得到
{
返回PX.Data.Search.SearchService.Html2PlainText(UsrScope);
}
}
公共抽象类usrScopePlainText:IBqlField{}
#端区
}
公共类CRQuoteStandaloneExt:PXCacheExtension
{
#区域UsrScope
[PXDBText(IsUnicode=true)]
[PXUIField(DisplayName=“Scope”)]
公共虚拟字符串UsrScope{get;set;}
公共抽象类usrScope:IBqlField{}
#端区
#区域USR范围明文
[PXString(IsUnicode=true)]
[PXUIField(Visible=false,DisplayName=“范围文本”)]
公共虚拟字符串UsrScopePlainText
{
得到
{
返回PX.Data.Search.SearchService.Html2PlainText(UsrScope);
}
}
公共抽象类usrScopePlainText:IBqlField{}
#端区
}
谢谢 另一种解决方案可能是拥有一个可重用属性,可以附加到任何字段。我认为这比直接在数据访问类中添加逻辑更干净
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);
}
}
}
使用PX.Objects.IN;
使用PX数据;
使用制度;
命名空间PX.Objects.IN
{
公共类InventoryItemPlainTextBodyExt:InventoryItem
{
[HtmlText(typeof(InventoryItem.body))]
[PXDependsOnFields(typeof(InventoryItem.body))]
[PXUIField(DisplayName=“Body(纯文本)”)]
公共虚拟字符串正文明文{get;set;}
公共抽象类bodyPlainText:PX.Data.BQL.BqlString.Field{}
}
[字符串]
公共类HtmlToxtAttribute:PXEventSubscriberAttribute,IPXFieldSelectingSubscriber
{
受保护类型_htmlField;
公共HtmlToxtAttribute(类型htmlField):base()
{
_htmlField=htmlField;
}
公共无效字段选择(PXCache发送方,PXFieldSelectingEventArgs e)
{
e、 ReturnValue=PX.Data.Search.SearchService.Html2PlainText(sender.GetValue(e.Row,_htmlField.Name)作为字符串);
}
}
}
我不确定发生了什么,但我将上面发布的原始代码放回定制项目中,它开始按预期工作。UsrScopePlainText字段缺少BqlField属性BqlField不是PXString的一部分,只有PXDBString。即使它是一个非持久性字段,我是否应该在常规类上将其更改为PXDBString?正如我所怀疑的,如果独立类是PXString,则无法创建常规类PXDBString。但是我不能添加BQLField来指向独立类,因为它不是PXString的一部分。这是正确的。我认为您应该在独立的CRQuote DAC(DB表1)上保留PXDBString自定义字段,在CRQuote DAC扩展(不是独立的)上保留PXDBString自定义字段,而不是在UsrScope字段上使用PXDBString,而是使用PXDBScalar属性从独立版本获取值。并确保您的usrScope纯文本字段[dependsOn…]usrScope字段。
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
}
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);
}
}
}