【发布时间】:2021-05-12 19:41:25
【问题描述】:
我在形成动态选择器时遇到了一些问题,下面我将想象一下已经完成了什么。 我需要根据所选 AssetId 动态生成选择器。 AssedInfo 选择器必须根据 AssetId 中选择的信息类型返回信息。我试过了,分步骤:
public class NSIAssetLinkInfo: IBqlTable
{
#region AssetId
[PXDBString(500, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Asset Id")]
[PXStringList(
new string[]
{
"AssedInfo","GLTran"
},
new string[]
{
"AssedInfo","GLTran"
})]
public virtual string AssetId { get; set; }
public new abstract class assetId : PX.Data.BQL.BqlString.Field<assetId> { }
#endregion
#region AssetInfo
[PXUIField(DisplayName = "Asset Information")]
[PXDBString(500, IsUnicode = true, InputMask = "")]
public virtual string AssetInfo { get; set; }
public abstract class assetInfo : PX.Data.BQL.BqlString.Field<assetInfo> { }
#endregion
}
在这里,我创建了一个按钮和一个应该动态形成我们的选择器的事件。 并且选择器将形成的事件还必须返回不是所有的列,而只返回必要的列,例如“AssetID - RecordType”,如果你是准确的,那么你只需要我将指出的那些列,而不是全部。 added button to panel
public class KNRWAPInvoiceEntryExt : PXGraphExtension<APInvoiceEntry>
{
public SelectFrom<GLTranR>.View GLTrans;
public SelectFrom<FixedAsset>.View FXAsset;
public SelectFrom<NSIAssetLinkInfo>.View NSIAssetLinkInfo;
public PXAction<APInvoice> LinkInfo;
[PXButton]
[PXUIField(DisplayName = "LinkInfo", MapEnableRights = PXCacheRights.Delete, MapViewRights = PXCacheRights.Delete)]
protected void linkInfo()
{
if (TagPanel.AskExt(true) != WebDialogResult.OK) return;
//Do some useful Stuff
}
public PXFilter<NSIAssetLinkInfo> TagPanel;
public virtual void _(Events.FieldSelecting<NSIAssetLinkInfo, NSIAssetLinkInfo.assetId> e)
{
if (e.Row == null)
{
return;
}
var assetId = e.Row.AssetId;
if (assetId == "GLTran")
{
//gltran
//saves TranID
//Displays RefNbr - InventoryID
//not all gltran, but gltran which has accountid
var returnState = PXFieldState.CreateInstance(e.ReturnState, dataType: typeof(FixedAsset), isKey: false, nullable: null,
required: null, precision: null, length: null, defaultValue: null, fieldName: null);
e.ReturnState = returnState;
returnState.Visible = true;
returnState.Visibility = PXUIVisibility.Visible;
returnState.Enabled = true;
returnState.DisplayName = "RefNbr";
returnState.ViewName = "GLTrans";
returnState.DescriptionName = "GLTranR";
returnState.FieldList = new[] { nameof(FixedAsset.AssetID), nameof(FixedAsset.Description), nameof(FixedAsset.Depreciable) };
returnState.HeaderList = new[]
{
PXUIFieldAttribute.GetDisplayName<FixedAsset.assetID>(FXAsset.Cache),
PXUIFieldAttribute.GetDisplayName<FixedAsset.description>(FXAsset.Cache),
PXUIFieldAttribute.GetDisplayName<FixedAsset.depreciable>(FXAsset.Cache),
};
}
if (assetId == "AssedInfo")
{
//Fixed Asset
//saves InventoryID
//InventoryID - Desc
//not all fixed assets, but those, which has class
var returnState = PXFieldState.CreateInstance(e.ReturnState, dataType: typeof(GLTranR), isKey: false, nullable: null,
required: null, precision: null, length: null, defaultValue: null, fieldName: null);
//descriptionName: null, displayName: null, error: null, errorLevel: PXErrorLevel.Undefined,
//enabled: null, visible: null, readOnly: false, visibility: PXUIVisibility.Visible, viewName: null,
//fieldList: null, headerList: null);
e.ReturnState = returnState;
returnState.Visible = true;
returnState.Visibility = PXUIVisibility.Visible;
returnState.Enabled = true;
returnState.DisplayName = "RefNbr";
returnState.ViewName = "GLTrans";
returnState.DescriptionName = "GLTranR";
returnState.FieldList = new[] { nameof(GLTranR.InventoryID), nameof(GLTranR.TranDesc), nameof(GLTranR.RefNbr), nameof(GLTranR.DebitAmt), nameof(GLTranR.CreditAmt) };
returnState.HeaderList = new[]
{
PXUIFieldAttribute.GetDisplayName<GLTranR.inventoryID>(GLTrans.Cache),
PXUIFieldAttribute.GetDisplayName<GLTranR.tranDesc>(GLTrans.Cache),
PXUIFieldAttribute.GetDisplayName<GLTranR.refNbr>(GLTrans.Cache),
PXUIFieldAttribute.GetDisplayName<GLTranR.debitAmt>(GLTrans.Cache),
PXUIFieldAttribute.GetDisplayName<GLTranR.creditAmt>(GLTrans.Cache)
};
}
}
}
视图中的按钮
<CallbackCommands>
<px:PXDSCallbackCommand Name="LinkInfo" Visible="false" />
</CallbackCommands>
和
<px:PXToolBarButton>
<AutoCallBack Command="LinkInfo" Target="ds" />
</px:PXToolBarButton>
和
<px:PXSmartPanel ID="pnlCopyCompany" runat="server" CaptionVisible="True" Caption="My Command" Style="position: static" LoadOnDemand="True" Key="TagPanel" AutoCallBack-Target="frmMyCommand" AutoCallBack-Command="Refresh" DesignView="Content">
<px:PXFormView ID="frmMyCommand" runat="server" SkinID="Transparent" DataMember="TagPanel" DataSourceID="ds" EmailingGraph="">
<Template>
<px:PXGrid runat="server" SyncPosition="true" KeepPosition="true" Height="150px" SkinID="Details" Width="865px" Caption="Caption"
CaptionVisible="false" MatrixMode="True" RepaintColumns="true"
DataSourceID="ds" AllowPaging="True" AdjustPageSize="Auto" NoteIndicator="false" FilesIndicator="false" Style='left: 0px; top: 0px; height: 188px;'>
<AutoSize Enabled="True" MinHeight="200" />
<ActionBar PagerVisible="False" />
<CallbackCommands>
<Refresh CommitChanges="True" />
</CallbackCommands>
<Levels>
<px:PXGridLevel DataMember="NSIAssetLinkInfo" DataKeyNames="TagInfoID">
<RowTemplate>
<px:PXDropDown runat="server" ID="edAssetId" CommitChanges="True" DataField="AssetId" AllowMultiSelect="True" />
<px:PXSelector runat="server" ID="edAssetInfo" DataField="AssetInfo" AutoRefresh="True" CommitChanges="True" />
</RowTemplate>
<Columns>
<px:PXGridColumn DataField="AssetId" CommitChanges="True" />
<px:PXGridColumn DataField="AssetInfo" CommitChanges="True" />
</Columns>
</px:PXGridLevel>
</Levels>
</px:PXGrid>
</Template>
</px:PXFormView>
</px:PXSmartPanel>
【问题讨论】:
标签: acumatica