【发布时间】:2018-04-14 20:52:44
【问题描述】:
我正在尝试将默认分支位置字段添加到分支。该字段将允许用户选择一个分支位置作为默认值,并在未来的几次定制中使用此默认值。我的问题是,当我填充新的扩展字段时,该值保存在所有分支记录上,而不是选定的分支上。
我扩展了 Branch DAC(因为这是存储数据的地方):
//Branch Extension
[PXTable(typeof(Branch.branchID), IsOptional = false)]
public class BranchExtension : PXCacheExtension<Branch>
{
#region DefaultBranchLocation
public abstract class defaultBranchLocation : IBqlField { }
[PXDBInt()]
[PXUIField(DisplayName = "Default Branch Location")]
[PXSelector(typeof(FSBranchLocation.branchLocationID),
DescriptionField = typeof(FSBranchLocation.descr),
SubstituteKey = typeof(FSBranchLocation.branchLocationCD))]
public virtual int? DefaultBranchLocation { get; set; }
#endregion
}
这是我创建的 Branch 扩展表:
<Sql TableName="BranchExtension" TableSchemaXml="#CDATA">
<CDATA name="TableSchemaXml"><![CDATA[<table name="BranchExtension">
<col name="CompanyID" type="Int" default="Zero" />
<col name="BranchID" type="Int" />
<col name="DeletedDatabaseRecord" type="Bit" />
<col name="DefaultBranchLocation" type="Int" nullable="true" />
<index name="BranchExtension_PK" clustered="true" primary="true" unique="true">
<col name="CompanyID" />
<col name="BranchID" />
</index>
</table>]]></CDATA>
</Sql>
我创建了一个回填脚本(不包括在内)。 为了处理分支页面上使用的投影,我创建了以下 BranchBAccount 扩展:
//BranchBAccount Projection Extension
public class BranchBAccountExtension : PXCacheExtension<BranchMaint.BranchBAccount>
{
#region DefaultBranchLocation
public abstract class defaultBranchLocation : IBqlField { }
[PXDBInt(BqlField = typeof(BranchExtension.defaultBranchLocation))]
[PXUIField(DisplayName = "Default Branch Location")]
[PXSelector(typeof(
Search2<FSBranchLocation.branchLocationID,
InnerJoin<Branch, On<Branch.branchID, Equal<FSBranchLocation.branchID>>>,
Where<Branch.branchCD, Equal<Current<BranchMaint.BranchBAccount.branchBranchCD>>>>),
DescriptionField = typeof(FSBranchLocation.descr),
SubstituteKey = typeof(FSBranchLocation.branchLocationCD))]
public virtual int? DefaultBranchLocation { get; set; }
#endregion
}
对于 aspx,我只是将我的扩展字段添加到分支页面 (CS102000) 作为一般信息 MISC SETTINGS (SHARED) 下的第一个字段。你可以看看它是如何放置的:
...
<px:PXLayoutRule runat="server" StartGroup="True" GroupCaption="Misc Settings (Shared)" ></px:PXLayoutRule>
<px:PXSelector runat="server" ID="edDefaultBranchLocation" DataField="DefaultBranchLocation" CommitChanges="True" AutoRefresh="True" />
<px:PXFormView ID="CommonSettings" runat="server" DataMember="commonsetup" DataSourceID="ds" RenderStyle="Simple">
...
在我的测试公司中,我有 3 个分支机构(分支机构 ID 1、2 和 3)。我导航到 CS102000(分支)并选择其中一个分支(我们会说分支 ID 3)。我添加的默认分支位置字段存在,并且选择器似乎可以按需要工作(无论我选择了哪个分支,只显示其位置)。选择分支位置时不会显示错误。我单击“保存”按钮,一切看起来都很好。也就是说,在我查看任何其他分支记录之前,它们现在具有我选择的分支默认值。更改分支后,屏幕上的所有其他数据都会更改。在数据库中查看时,我的扩展表在分支 1、2 和 3 中具有相同的 DefaultBranchLocation 值。执行 SQL 跟踪表明它只是在运行以下命令:
UPDATE BranchExtension SET [BranchExtension].[DefaultBranchLocation] = @P0 WHERE CompanyID = 2
请注意,它不会过滤关键字段。
我以前从未在扩展表上遇到过这个问题,所以我不确定自己做错了什么。我的猜测是它与投影的扩展有关,但是我的扩展中的字段声明看起来与该投影上声明的正确保存的字段没有什么不同。
非常感谢任何帮助。先感谢您。
【问题讨论】:
标签: acumatica