InitRow = true deleting all records - acumatica

I'm running into an interesting situation on an extension I'm working on.
The extension exists on the Customer Location screen and has an additional grid.
The DAC for this grid has four primary keys
CompanyID,
BAccountID,
LocationId,
SortOrder
Primary keys in the DAC are defined as follows
#region BAccountID
public abstract class bAccountID : PX.Data.IBqlField
{
}
protected int? _BAccountID;
[PXDBInt(IsKey = true)]
[PXDefault(typeof(Location.bAccountID))]
public virtual int? BAccountID
{
get
{
return this._BAccountID;
}
set
{
this._BAccountID = value;
}
}
#endregion BAccountID
#region LocationID
public abstract class locationID : PX.Data.IBqlField
{
}
protected int? _LocationID;
[PXDBInt(IsKey = true)]
[PXDefault(typeof(Location.locationID))]
public virtual int? LocationID
{
get
{
return this._LocationID;
}
set
{
this._LocationID = value;
}
}
#endregion LocationID
#region SortOrder
public abstract class sortOrder : PX.Data.IBqlField
{
}
protected int? _SortOrder;
[PXDBInt(IsKey = true)]
[PXDefault]
[PXLineNbr(typeof(CWACustomerLocationItem))]
[PXParent(typeof(Select<CWACustomerLocationItem,
Where<CWACustomerLocationItem.bAccountID, Equal<Current<Location.bAccountID>>, And<CWACustomerLocationItem.locationID, Equal<Current<Location.locationID>>>>>))]
[PXUIField(DisplayName = "Sort Order", Enabled = false)]
public virtual int? SortOrder
{
get
{
return this._SortOrder;
}
set
{
this._SortOrder = value;
}
}
#endregion SortOrder
The issue I'm running into is if on the grid definition, I set "InitRow = false", the first number in the sort order starts at 2 instead of 1 and doesn't add itself until the row is complete.
If I set "InitRow = true" when adding a new row, the sortorder propertly starts at 1 and increments correctly, however if I add a new row and update no other values (only sortorder is shown), when saving all rows in the grid are deleted out.
I've validated that all "non-null" fields in the database are specified as such in the DAC
Full Grid is defined as below
<px:PXGrid runat="server" ID="CstPXGrid1" Width="100%" SkinID="DetailsInTab" KeepPosition="True" SyncPosition="True">
<Levels>
<px:PXGridLevel DataMember="LocationItem">
<Columns>
<px:PXGridColumn DataField="SortOrder" Width="70" />
<px:PXGridColumn DataField="InventoryID" Width="120" AutoCallBack="True" />
<px:PXGridColumn DataField="InventoryID_description" Width="200" />
<px:PXGridColumn DataField="SellingUOM" Width="70" />
<px:PXGridColumn DataField="SellingPrice" Width="100" />
<px:PXGridColumn DataField="MinQty" Width="100" />
<px:PXGridColumn DataField="MaxQty" Width="100" />
<px:PXGridColumn DataField="EOQ" Width="100" />
<px:PXGridColumn DataField="Comments" Width="70" />
<px:PXGridColumn DataField="Inactive" Width="60" Type="CheckBox" /></Columns></px:PXGridLevel></Levels>
<AutoSize Enabled="True" Container="Parent" MinHeight="200" />
<ActionBar>
<CustomItems>
<px:PXToolBarButton Text="Up" Tooltip="Move Node Up" CommandName="Up" Visible="True" CommandSourceID="ds">
<Images Normal="main#ArrowUp" /></px:PXToolBarButton>
<px:PXToolBarButton Text="Down" Tooltip="Move Node Down" CommandSourceID="ds" CommandName="Down">
<Images Normal="main#ArrowDown" /></px:PXToolBarButton></CustomItems></ActionBar>
<AutoCallBack Enabled="True" />
<Mode InitNewRow="True" /></px:PXGrid>
I've used "InitRow" several other times and haven't run into this so I'm not sure exactly where the fault is coming into play.
The fact that it removes all rows on save is what bothers me the most.
Anyone have any theories or advice on what to look for?

I believe I figured out the problem. The definition of PXParent/number is wrong in the above.
The correct sortorder DAC is below:
[PXDBInt(IsKey = true)]
[PXDefault()]
[PXLineNbr(typeof(Location),false)]
[PXParent(typeof(Select<Location,
Where<Location.bAccountID, Equal<Current<CWACustomerLocationItem.bAccountID>>, And<Location.locationID, Equal<Current<CWACustomerLocationItem.locationID>>>>>))]
[PXUIField(DisplayName = "Sort Order", Enabled = false)]

Related

How do I get the current tree-selected item from a treeView?

Problem #1
I have a Form with a split panel with a tree view on the left side and a grid on the right side.
The tree view is displaying itemClassCD. When I select an item in the tree, the current selection is always the same itemClassCd (the first entry), or null. The code view from the Tree is as follows "Tree.Current.ItemClassCD".
Form with Tree and Grid
Problem#2
The second issue is related to the display of the tree nodes.
They are showing a "+" sign and they will keep opening if I press the sign.
Node Issue
**This is what I have tried.
**
<%# Page Language="C#" MasterPageFile="~/MasterPages/FormDetail.master" AutoEventWireup="true" ValidateRequest="false" CodeFile="SG302010.aspx.cs" Inherits="Page_SG302010" Title="Untitled Page" %>
<%# MasterType VirtualPath="~/MasterPages/FormDetail.master" %>
<asp:Content ID="cont1" ContentPlaceHolderID="phDS" Runat="Server">
<script language="javascript" type="text/javascript">
function showTreeChanged(owner, args)
{
var visible = owner.getValue();
if (window['px_alls'] && px_alls["sp1"]) px_alls["sp1"].setDisabledPanel(visible ? 0 : 1);
}
function showTreeChk(e)
{
if (!loaded)
{
var px = __px_alls(this);
var TreeView = px_alls["chkShowTree"];
setTimeout(function ()
{
if (window['px_alls'] && px_alls["chkShowTree"] && px_alls["sp1"])
{
TreeView = px_alls["chkShowTree"];
px_alls["sp1"].setDisabledPanel(TreeView.getValue() ? 0 : 1);
}
loaded = true;
}, 1);
}
}
function showTreeLoad(e)
{
if (window['__px_alls'])
{
var pxs = __px_alls(this);
if (pxs)
{
setTimeout(function ()
{
var frm = pxs["form"];
if (frm) frm.events.addEventHandler("afterRepaint", showTreeChk);
}, 100);
}
}
}
var loaded = false;
window.addEventListener("load", showTreeLoad);
</script>
<px:PXDataSource EnableAttributes="True" ID="ds" Width="100%" runat="server" PrimaryView="Filter"
TypeName="ISGoalSetting.SGForecastEntry" Visible="True" PageLoadBehavior="PopulateSavedValues">
<CallbackCommands>
<px:PXDSCallbackCommand Name="Save" CommitChanges="True" RepaintControls="All" RepaintControlsIDs="grid" />
<px:PXDSCallbackCommand Name="distribute" Visible="False" CommitChanges="True" DependOnGrid="grid"
RepaintControls="Bound" />
<px:PXDSCallbackCommand Name="distributeOK" Visible="False" CommitChanges="True"
DependOnGrid="grid" />
<px:PXDSCallbackCommand CommitChanges="True" Visible="False" Name="preload" DependOnGrid="grid" />
<px:PXDSCallbackCommand CommitChanges="True" Name="showPreload" />
<px:PXDSCallbackCommand CommitChanges="True" Name="wNext" />
<px:PXDSCallbackCommand CommitChanges="True" Name="showManage" />
<px:PXDSCallbackCommand Name="manageOK" Visible="False" CommitChanges="True"/>
</CallbackCommands>
<DataTrees>
<px:PXTreeDataMember TreeView="Tree" TreeKeys="ItemClassID" ></px:PXTreeDataMember>
</DataTrees>
</px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phF" Runat="Server">
<px:PXFormView ID="form" runat="server" Width="100%" DataMember="Filter" Caption="Forecast Filter"
LinkIndicator="True" BPEventsIndicator="True" DataSourceID="ds">
<Template>
<px:PXLayoutRule runat="server" ID="CstPXLayoutRule1" StartColumn="True" LabelsWidth="SM"
ControlSize="M" ></px:PXLayoutRule>
<px:PXSelector CommitChanges="True" ID="edBranchID" runat="server" DataField="BranchID"
DataSourceID="ds" ></px:PXSelector>
<px:PXSelector CommitChanges="True" ID="edFinYear" runat="server" DataField="FinYear"
DataSourceID="ds" AutoRefresh="True" ></px:PXSelector>
<px:PXCheckBox CommitChanges="True" ID="chkShowTree" runat="server" DataField="ShowTree">
<ClientEvents ValueChanged="showTreeChanged" />
</px:PXCheckBox>
</Template>
<CallbackCommands>
<Save PostData="Page" RepaintControls="All" RepaintControlsIDs="grid, tree" ></Save>
</CallbackCommands>
</px:PXFormView>
</asp:Content>
<asp:Content ID="cont3" ContentPlaceHolderID="phG" Runat="Server">
<px:PXSplitContainer runat="server" ID="sp1" SplitterPosition="220" CollapseDirection="Panel1"
Panel1MinSize="1" DisabledPanel="Panel1">
<AutoSize Enabled="true" Container="Window" />
<Template1>
<px:PXTreeView ID="tree" runat="server" PopulateOnDemand="True" ExpandDepth="1" DataSourceID="ds"
ShowRootNode="false" SelectFirstNode="true" >
<AutoCallBack Target="grid" Command="Refresh" />
<Images>
<ParentImages Normal="tree#Folder" Selected="tree#FolderS" />
<LeafImages Normal="tree#Folder" Selected="tree#FolderS" />
</Images>
<DataBindings>
<px:PXTreeItemBinding DataMember="Tree" TextField="ItemClassCD" ValueField="ItemClassID" ></px:PXTreeItemBinding>
</DataBindings>
<AutoSize Enabled="True" />
</px:PXTreeView>
</Template1>
<Template2>
<px:PXGrid ID="grid" runat="server" DataSourceID="ds" Width="100%" Height="150px" SkinID="Details" Caption="Forecast Details"
SyncPosition="True">
<AutoCallBack Command="Refresh" Target="form" ActiveBehavior="True">
<Behavior RepaintControlsIDs="ds" BlockPage="True" CommitChanges="True" ></Behavior>
</AutoCallBack>
<Levels>
<px:PXGridLevel DataMember="ForecastArticles">
<Columns>
<px:PXGridColumn DataField="BranchID" Width="140" ></px:PXGridColumn>
<px:PXGridColumn DataField="GoalType" Width="140" ></px:PXGridColumn>
<px:PXGridColumn DataField="ItemClass" Width="120" ></px:PXGridColumn>
<px:PXGridColumn DataField="Month" Width="90" ></px:PXGridColumn>
<px:PXGridColumn DataField="Goal" Width="100" ></px:PXGridColumn></Columns>
</px:PXGridLevel>
</Levels>
<AutoSize Container="Window" Enabled="True" MinHeight="150" ></AutoSize>
<ActionBar >
</ActionBar>
<Mode AllowUpload="True" /></px:PXGrid>
</Template2>
</px:PXSplitContainer>
</asp:Content>
public class SGForecastEntry : PXGraph<SGForecastEntry>
{
#region Actions
public PXSave<SGForecastFilter> Save;
public PXCancel<SGForecastFilter> Cancel;
public PXDelete<SGForecastFilter> Delete;
public PXAction<SGForecastFilter> First;
public PXAction<SGForecastFilter> Prev;
public PXAction<SGForecastFilter> Next;
public PXAction<SGForecastFilter> WNext;
public PXAction<SGForecastFilter> Last;
public PXAction<SGForecastFilter> ShowPreload;
public PXAction<SGForecastFilter> Preload;
public PXAction<SGForecastFilter> Distribute;
public PXAction<SGForecastFilter> DistributeOK;
public PXAction<SGForecastFilter> ShowManage;
public PXAction<SGForecastFilter> ManageOK;
#endregion
#region Selects
public PXFilter<SGForecastFilter> Filter;
public SelectFrom<INItemClass>.OrderBy<INItemClass.itemClassCD.Asc>.View Tree;
public SelectFrom<INItemClass>.
Where<INItemClass.itemClassID.IsEqual<INItemClass.itemClassID.FromCurrent>>.View CurrentNode;
/*Everything*/
[PXImport(typeof(ISSGForecast))]
public SelectFrom<ISSGForecast>.
OrderBy<Asc<ISSGForecast.itemClass>>.View ForecastArticles;
#endregion
protected bool suppressIDs;
public override IEnumerable ExecuteSelect(string viewName, object[] parameters, object[] searches, string[] sortcolumns, bool[] descendings, PXFilterRow[] filters, ref int startRow, int maximumRows, ref int totalRows)
{
IEnumerable ret = base.ExecuteSelect(viewName, parameters, searches, sortcolumns, descendings, filters, ref startRow, maximumRows, ref totalRows);
suppressIDs = viewName == nameof(ForecastArticles);
CurrentSelected.ClassCD = Tree.Current?.ItemClassCD;
return ret;
}
private SelectedClass CurrentSelected
{
get
{
PXCache cache = this.Caches[typeof(SelectedClass)];
if (cache.Current == null)
{
cache.Insert();
cache.IsDirty = false;
}
return (SelectedClass)cache.Current;
}
}
[Serializable]
[PXHidden]
public partial class SGForecastFilter : IBqlTable
{
#region BranchID
public abstract class branchID : PX.Data.BQL.BqlInt.Field<branchID> { }
[Branch(Required = true)]
public virtual int? BranchID { get; set; }
#endregion
#region FinYear
public abstract class finYear : PX.Data.BQL.BqlString.Field<finYear> { }
[PXUIField(DisplayName = "Financial Year", Required = true)]
[PXDBString(4)]
[GenericFinYearSelector(typeof(Search3<FinYear.year, OrderBy<Desc<FinYear.year>>>),null)]
public virtual String FinYear { get; set; }
#endregion
#region ShowTree
public abstract class showTree : PX.Data.BQL.BqlBool.Field<showTree> { }
[PXBool]
[PXUnboundDefault(true)]
[PXUIField(DisplayName = "Tree View")]
public virtual Boolean? ShowTree { get; set; }
#endregion
#region ItemClass
[PXDBString(10, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Item Class", Visibility = PXUIVisibility.SelectorVisible)]
[PXSelector(typeof(Search<INItemClass.itemClassCD>))]
public virtual string ItemClass { get; set; }
public abstract class itemClass : PX.Data.BQL.BqlString.Field<itemClass> { }
#endregion
public short? Precision;
}
[Serializable]
[PXHidden]
public partial class SelectedClass : IBqlTable
{
#region ItemClass
[PXInt]
[PXSelector(typeof(Search<INItemClass.itemClassID>))]
public virtual int? ItemClass { get; set; }
public abstract class itemClass : PX.Data.BQL.BqlInt.Field<itemClass> { }
#endregion
#region ClassCD
[PXString]
[PXSelector(typeof(Search<INItemClass.itemClassCD>))]
public virtual string ClassCD { get; set; }
public abstract class classCD : PX.Data.BQL.BqlString.Field<classCD> { }
#endregion
}
}

I got an error while submitting a new project to add a new page for instance ( Error #97: View doesn't exist )

everybody. I' m a acumatica version 4. 10.
I' m asking you today about a problem. I had this error trying to create a new page for the website.
I added a project for this section, which includes all the files as shown below
The error occurred when i tried to access the new page that just created
My new page
<%# Page Language="C#" MasterPageFile="~/MasterPages/FormDetail.master" AutoEventWireup="true" ValidateRequest="false" CodeFile="PO510000.aspx.cs" Inherits="Page_PO510000" Title="Untitled Page" %>
<%# MasterType VirtualPath="~/MasterPages/FormDetail.master" %>
<asp:Content ID="cont1" ContentPlaceHolderID="phDS" Runat="Server">
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" PrimaryView="CodeGiftRecords" TypeName="SunfixInquiry.POCodeGiftMaint">
<CallbackCommands>
<px:PXDSCallbackCommand Name="Save" CommitChanges="True" />
<px:PXDSCallbackCommand Name="Insert" CommitChanges="True" Visible="false" />
<px:PXDSCallbackCommand Name="Delete" CommitChanges="True" Visible="false" />
<px:PXDSCallbackCommand Name="First" CommitChanges="True" Visible="false" />
<px:PXDSCallbackCommand Name="Previous" CommitChanges="True" Visible="false" />
<px:PXDSCallbackCommand Name="Next" CommitChanges="True" Visible="false" />
<px:PXDSCallbackCommand Name="Last" CommitChanges="True" Visible="false" />
</CallbackCommands>
</px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phF" Runat="Server">
<px:PXFormView ID="form" runat="server" DataSourceID="ds" Style="z-index: 100"
Width="100%">
<Template>
<px:PXLayoutRule runat="server" StartRow="True"/>
</Template>
</px:PXFormView>
</asp:Content>
<asp:Content ID="cont3" ContentPlaceHolderID="phG" Runat="Server">
<px:PXGrid ID="grid" runat="server" DataSourceID="ds" Style="z-index: 100"
Width="100%" Height="150px" SkinID="Details" TabIndex="2200">
<Levels>
<px:PXGridLevel DataKeyNames="CodeGift" DataMember="CodeGiftRecords">
<RowTemplate>
<px:PXCheckBox ID="edDisable" runat="server" CommitChanges="True" DataField="Disable" Text="Disable">
</px:PXCheckBox>
</RowTemplate>
<Columns>
<px:PXGridColumn DataField="CodeGift">
</px:PXGridColumn>
<px:PXGridColumn DataField="Name">
</px:PXGridColumn>
<px:PXGridColumn DataField="Disable" TextAlign="Center" Type="CheckBox" DataType="Boolean">
</px:PXGridColumn>
</Columns>
</px:PXGridLevel>
</Levels>
<AutoSize Container="Window" Enabled="True" MinHeight="150" />
<ActionBar ActionsText="False">
</ActionBar>
<Mode AllowUpload="True" />
</px:PXGrid>
</asp:Content>
My DAC
<Graph ClassName="POCodeGift" Source="#CDATA" IsNew="True" FileType="NewDac">
<CDATA name="Source"><![CDATA[using System;
using PX.Data;
namespace SunfixInquiry
{
[Serializable]
public class POCodeGift: IBqlTable
{
#region CodeGift
[PXDBString(10, IsKey = true, InputMask = "")]
[PXUIField(DisplayName = "Code Gift")]
public string CodeGift { get; set; }
public class codeGift : IBqlField{}
#endregion
#region Name
[PXDBString(IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Name")]
public string Name { get; set; }
public class name : IBqlField{}
#endregion
#region Disable
[PXDBBool()]
[PXUIField(DisplayName = "Disable")]
public bool? Disable { get; set; }
public class disable : IBqlField{}
#endregion
#region CreatedByID
[PXDBCreatedByID()]
public Guid? CreatedByID { get; set; }
public class createdByID : IBqlField{}
#endregion
#region CreatedByScreenID
[PXDBCreatedByScreenID()]
public string CreatedByScreenID { get; set; }
public class createdByScreenID : IBqlField{}
#endregion
#region CreatedDateTime
[PXDBCreatedDateTime]
[PXUIField(DisplayName = "Created Date Time")]
public DateTime? CreatedDateTime { get; set; }
public class createdDateTime : IBqlField{}
#endregion
#region LastModifiedByID
[PXDBLastModifiedByID()]
public Guid? LastModifiedByID { get; set; }
public class lastModifiedByID : IBqlField{}
#endregion
#region LastModifiedByScreenID
[PXDBLastModifiedByScreenID()]
public string LastModifiedByScreenID { get; set; }
public class lastModifiedByScreenID : IBqlField{}
#endregion
#region LastModifiedDateTime
[PXDBLastModifiedDateTime()]
[PXUIField(DisplayName = "Last Modified Date Time")]
public DateTime? LastModifiedDateTime { get; set; }
public class lastModifiedDateTime : IBqlField{}
#endregion
#region Tstamp
[PXDBTimestamp()]
[PXUIField(DisplayName = "Tstamp")]
public byte[] Tstamp { get; set; }
public class tstamp : IBqlField{}
#endregion
}
}]]></CDATA>
</Graph>
My Graph
<Graph ClassName="POCodeGiftMaint" Source="#CDATA" IsNew="True" FileType="NewGraph">
<CDATA name="Source"><![CDATA[using System;
using PX.Data;
namespace SunfixInquiry
{
[PXCustomization]
public class POCodeGiftMaint: PXGraph<POCodeGiftMaint,POCodeGift>
{
[PXImport(typeof(POCodeGift))]
public PXSelect<POCodeGift> CodeGiftRecords;
#region Event Handlers
#endregion
}
}]]></CDATA>
</Graph>
Please tell me what i' m missing, many thanks
The ASPX markup states that CodeGiftRecords is thePrimaryView and the DataMember of the grid. Does your BLC have CodeGiftRecords specified, or is it named something else? The ASPX also shows a FormView tag without a DataMember. Is this page handling Master/Detail information, or did you intend to use a ListView instead?

Process screen grid blanks Joined table data after Process

I have a companion table / DAC to Inventory Items:
[Serializable]
public class InventoryItemCompanion : IBqlTable
{
[PXDBInt(IsKey = true)]
[PXParent(typeof(Select<InventoryItem,
Where<InventoryItem.inventoryID, Equal<Current<InventoryItemCompanion.inventoryID>>>>))]
[PXDBDefault(typeof(InventoryItem.inventoryID))]
public virtual int? InventoryID { get; set; }
public abstract class inventoryID : IBqlField { }
[PXDBInt]
[PXUIField(DisplayName = "Custom Data")]
public virtual int? CustomData { get; set; }
public abstract class customData : IBqlField { }
}
I then have a custom Process screen that will operate on these custom records with a Filter and derived class adding a Selection field. In the Process screen I Join in the Inventory Item records to display relevant information in the process grid.
[Serializable]
public class InventoryItemCompanionProcess : InventoryItemCompanion
{
[PXBool]
[PXUIField(DisplayName = "Select")]
public virtual bool? Selected { get; set; }
public abstract class selected : IBqlField { }
}
[Serializable]
public class TestFilter : IBqlTable
{
[PXDBInt]
[PXUIField(DisplayName = "Item Class")]
[PXDimensionSelector(INItemClass.Dimension,
typeof(Search<INItemClass.itemClassID>),
typeof(INItemClass.itemClassCD),
DescriptionField = typeof(INItemClass.descr))]
public virtual int? ItemClassID { get; set; }
public abstract class itemClassID : IBqlField { }
}
public class TestProcess : PXGraph<TestProcess>
{
public PXCancel<TestFilter> Cancel;
public PXFilter<TestFilter> Filter;
public PXFilteredProcessingJoin<
InventoryItemCompanionProcess, TestFilter,
InnerJoin<InventoryItem,
On<InventoryItem.inventoryID, Equal<InventoryItemCompanionProcess.inventoryID>>>,
Where<InventoryItem.itemClassID, Equal<Current<TestFilter.itemClassID>>,
Or<Current<TestFilter.itemClassID>, IsNull>>,
OrderBy<Asc<InventoryItem.inventoryCD>>
> Records;
public TestProcess()
{
Records.SetSelected<InventoryItemCompanionProcess.selected>();
Records.SetProcessDelegate(Process);
}
public static void Process(List<InventoryItemCompanionProcess> Records)
{
foreach(var rec in Records)
{
// Perform custom processing function
}
}
}
And the ASPX page:
<%# Page Language="C#" MasterPageFile="~/MasterPages/FormDetail.master" AutoEventWireup="true" ValidateRequest="false" CodeFile="XX501000.aspx.cs" Inherits="Page_XX501000" Title="Untitled Page" %>
<%# MasterType VirtualPath="~/MasterPages/FormDetail.master" %>
<asp:Content ID="cont1" ContentPlaceHolderID="phDS" Runat="Server">
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" PrimaryView="Filter" TypeName="TestProcessing.TestProcess">
</px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phF" Runat="Server">
<px:PXFormView ID="form" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" DataMember="Filter" TabIndex="100">
<Template>
<px:PXLayoutRule runat="server" StartRow="True"/>
<px:PXSegmentMask ID="edItemClassID" runat="server" DataField="ItemClassID" />
</Template>
</px:PXFormView>
</asp:Content>
<asp:Content ID="cont3" ContentPlaceHolderID="phG" Runat="Server">
<px:PXGrid ID="grid" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" Height="150px" SkinID="Details" TabIndex="900">
<Levels>
<px:PXGridLevel DataMember="Records">
<RowTemplate>
<px:PXCheckBox ID="edSelected" runat="server" AlreadyLocalized="False" DataField="Selected" Text="Select" />
<px:PXNumberEdit ID="edCustomData" runat="server" AlreadyLocalized="False" DataField="CustomData" />
<px:PXSegmentMask ID="edInventoryItem__InventoryCD" runat="server" DataField="InventoryItem__InventoryCD" />
<px:PXTextEdit ID="edInventoryItem__Descr" runat="server" AlreadyLocalized="False" DataField="InventoryItem__Descr" />
<px:PXSegmentMask ID="edInventoryItem__ItemClassID" runat="server" DataField="InventoryItem__ItemClassID" />
</RowTemplate>
<Columns>
<px:PXGridColumn AllowCheckAll="True" DataField="Selected" TextAlign="Center" Type="CheckBox" Width="60px" />
<px:PXGridColumn DataField="CustomData" TextAlign="Right" />
<px:PXGridColumn DataField="InventoryItem__InventoryCD" />
<px:PXGridColumn DataField="InventoryItem__Descr" Width="200px" />
<px:PXGridColumn DataField="InventoryItem__ItemClassID" Width="120px" />
</Columns>
</px:PXGridLevel>
</Levels>
<AutoSize Container="Window" Enabled="True" MinHeight="150" />
</px:PXGrid>
</asp:Content>
The Process does run on the desired records but after doing so the fields within the Grid from the Joined Inventory Item table are blanked.
I need the Item information to still display in case of errors in the processing requiring user attention.
Consider changing InventoryItemCompanion (or the derived class) into a PXProjection, mapping each field to the specific DAC Field intended. Optionally try marking displayed fields like Descr with IsKey=true, such as:
[PXProjection(typeof(
Select2<InventoryItemCompanion,
InnerJoin<InventoryItem, On<InventoryItemCompanion.inventoryID,
Equal<InventoryItem.inventoryID>>>>),
new Type[] { typeof(InventoryItemCompanion) }, Persistent = true)]
public class InventoryItemCompanion : PX.Data.IBqlTable
{
[PXDBInt(IsKey = true,
BqlField=typeof(InventoryItemCompanion.inventoryID))]
[PXParent(typeof(Select<InventoryItem,
Where<InventoryItem.inventoryID,
Equal<Current<InventoryItemCompanion.inventoryID>>>>))]
[PXDBDefault(typeof(InventoryItem.inventoryID))]
public virtual int? InventoryID { get; set; }
public abstract class inventoryID : IBqlField { }
[PXDBString(256, IsKey = true,
BqlField=typeof(InventoryItem.descr))]
[PXUIField(DisplayName="Description", Enabled=false))]
public virtual String Descr{ get; set;
public abstract class descr: IBqlField { }
}
The View would then be PXFilteredProcessing instead of PXFilteredProcessingJoin and the ASPX markup would assign DataField = "Descr" directly instead of InventoryItem__Descr, as example.

Adding a Detail Grid to Sales Category (IN204060) - Parent/Child Issue

I am trying to add a detail grid tied to the selected sales category on the Sales Category screen (IN204060)
Created a DAC that holds the grid data:
public class INCategoryFilesCTC : IBqlTable
{
#region CategoryID
[PXDBInt(IsKey = true)]
[PXUIField(DisplayName = "Category ID")]
public virtual int? CategoryID { get; set; }
public abstract class categoryID : IBqlField { }
#endregion
#region Type
[PXDBString(1, IsFixed = true, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "Type")]
public virtual string Type { get; set; }
public abstract class type : IBqlField { }
#endregion
#region NoteID
[PXNote()]
[PXUIField(DisplayName = "Price Source")]
public virtual Guid? NoteID { get; set; }
public abstract class noteID : IBqlField { }
#endregion
#region Uploaded
[PXDBDate()]
[PXUIField(DisplayName = "Uploaded")]
public virtual DateTime? Uploaded { get; set; }
public abstract class uploaded : IBqlField { }
#endregion
#region FileName
[PXDBString(50, IsFixed = true, IsUnicode = true, InputMask = "")]
[PXUIField(DisplayName = "File Name")]
public virtual string FileName { get; set; }
public abstract class fileName : IBqlField { }
#endregion
}
Then added a data view delegate select (was having issues with Current<> due to the non standard selects for the rest of the graph data)
public PXSelect<INCategoryFilesCTC> CategoryFiles;
protected virtual IEnumerable categoryFiles()
{
var cache = Base.Caches[typeof(INCategoryFilesCTC)];
cache.AllowInsert = true;
cache.AllowUpdate = true;
cache.AllowDelete = true;
var select = PXSelect<INCategoryFilesCTC,
Where<INCategoryFilesCTC.categoryID,
Equal<Required<INCategoryFilesCTC.categoryID>>>>.Select(Base,Base.Folders.Current.CategoryID).FirstTableItems;
foreach (INCategoryFilesCTC item in select)
{
cache.SetStatus(item,PXEntryStatus.Held);
}
return cache.Cached;
}
The grid lives inside of 1/2 of a split container, and inside a tab. Search for ID="WebFiles" ( is the half it lives in, figured I wouldn't drown you guys with aspx code, if you want the rest let me know)
<Template2>
<px:PXFormView ID="form" runat="server" DataSourceID="ds" DataMember="CurrentCategory"
Caption="Category Info" Width="100%">
<Template>
<px:PXLayoutRule ID="PXLayoutRule1" runat="server" StartColumn="True" LabelsWidth="S" ControlSize="SM" />
<px:PXTextEdit ID="edDescription" runat="server" DataField="Description" CommitChanges="True" />
<px:PXLayoutRule ID="PXLayoutRule2" runat="server" StartColumn="True" LabelsWidth="S" ControlSize="SM" />
<px:PXTreeSelector ID="edParentID" runat="server" DataField="ParentID" ShowRootNode="False"
TreeDataMember="ParentFolders" TreeDataSourceID="ds" AutoRefresh="True" ExpandDepth="1"
SyncPosition="True" DataMember="ParentFolders" AutoRepaint="True" CommitChanges="True" KeepPosition="True">
<DataBindings>
<px:PXTreeItemBinding DataMember="ParentFolders" TextField="Description" ValueField="CategoryID" />
</DataBindings>
</px:PXTreeSelector>
<px:PXLayoutRule ID="PXLayoutRule3" runat="server" StartColumn="True" LabelsWidth="S" ControlSize="SM" />
</Template>
</px:PXFormView>
<px:PXTab runat="server" >
<Items>
<px:PXTabItem Text="Category Members">
<Template>
<px:PXGrid ID="gridMembers" runat="server" ActionsPosition="Top" Width="100%"
SkinID="Details" CaptionVisible="true" SyncPosition="True"
AutoRepaint="True" AdjustPageSize="Auto">
<AutoSize Enabled="True" Container="Parent"/>
<Mode InitNewRow="True"></Mode>
<Levels>
<px:PXGridLevel DataMember="Members">
<Columns>
<px:PXGridColumn AllowCheckAll="True" AllowNull="False" DataField="CategorySelected" TextAlign="Center"
Type="CheckBox" Width="26px" />
<px:PXGridColumn DataField="InventoryID" CommitChanges="true" Width="140px" LinkCommand="viewDetails"/>
<px:PXGridColumn DataField="InventoryItem__Descr" Width="200px"/>
<px:PXGridColumn DataField="InventoryItem__ItemClassID" Width="140px"/>
<px:PXGridColumn AllowNull="False" DataField="InventoryItem__ItemStatus" RenderEditorText="True" Width="100px"/>
</Columns>
</px:PXGridLevel>
</Levels>
<ActionBar>
<Actions>
<Search Enabled="False" />
<EditRecord Enabled="False" />
<NoteShow Enabled="False" />
<FilterShow Enabled="False" />
<FilterSet Enabled="False" />
<ExportExcel Enabled="False" />
</Actions>
<CustomItems>
<px:PXToolBarButton Tooltip="Copy Selected Inventory Items" DisplayStyle="Image">
<AutoCallBack Command="Copy" Enabled="True" Target="ds" />
<Images Normal="main#Copy" />
</px:PXToolBarButton>
<px:PXToolBarButton Tooltip="Cut Selected Inventory Items" DisplayStyle="Image">
<AutoCallBack Command="Cut" Enabled="True" Target="ds" />
<Images Normal="main#Cut" />
</px:PXToolBarButton>
<px:PXToolBarButton Tooltip="Paste Inventory Items from Buffer" DisplayStyle="Image">
<AutoCallBack Command="Paste" Enabled="True" Target="ds" />
<Images Normal="main#Paste" />
</px:PXToolBarButton>
<px:PXToolBarButton>
<AutoCallBack Command="AddItemsbyClass" Target="ds" />
</px:PXToolBarButton>
<px:PXToolBarButton Text="Inventory Details" Key="cmdviewDetails" Visible="False">
<AutoCallBack Command="viewDetails" Target="ds" />
</px:PXToolBarButton>
</CustomItems>
</ActionBar>
</px:PXGrid>
</Template>
</px:PXTabItem>
<px:PXTabItem Text="Website Media">
<template>
<px:PXFormView ID="WebForm" runat="server" DataSourceID="ds" DataMember="CurrentCategory">
<Template>
<px:PxTextEdit ID="txtVideoURL" runat="server" DataField="CTCVideoURL" />
<px:PxTextEdit ID="txtCategoryDesc" runat="server" DataField="CTCCategoryDesc" />
</Template>
</px:PXFormView>
<px:PXGrid ID="WebFiles" runat="server" FilesIndicator="True" Height="300px" Width="100%" DataSourceID="ds">
<Levels>
<px:PXGridLevel DataMember="CategoryFiles" DataKeyNames="CategoryID">
<Columns>
<px:PXGridColumn DataField="CategoryID" />
<px:PXGridColumn DataField="Type" />
<px:PXGridColumn DataField="Filename" />
<px:PXGridColumn DataField="Uploaded"/>
</Columns>
</px:PXGridLevel>
</Levels>
<ActionBar>
<Actions>
<Delete Enabled="True" />
<AddNew Enabled="True" />
</Actions></ActionBar>
</px:PXGrid>
</template>
</px:PXTabItem>
</Items>
</px:PXTab>
</Template2>
When I select a tree element, if there are records that would show up in my custom table (tree element categoryID = grid record categoryID) I get the following error:
Error: an invalid argument has been specified
Parameter name selectParent
Absolutely nothing comes up in trace, and nothing comes up during debugging, so I am at a bit of a loss.
A few things:
The error goes away when I comment out my custom PXGrid, and I can use the screen normally even with the tabs and groups i have added
The error does not go away if i comment out the PXParent and PXDBDefault attributes on the grids CategoryID DAC Field
If there is no detail record for the selected tree choice, there is no error. If I make a record and save it, the error appears (with the inserted record now showing in the grid, and a saved detail record in the database table)
This lends me to believe something is happening on the select of the detail records. Any advice?
Thanks
-Kyle
OK, this turned out to be more basic than I thought.. whoops. If you want to skip reading it turned out to be due to a simple key issue on the detail records
First off, I removed the data view delegate, the "Current" Sales category ID was coming through fine
public PXSelect<INCategoryFilesCTC,
Where<INCategoryFilesCTC.categoryID,
Equal<Current<INCategory.categoryID>>>> CategoryFiles;
Second off, added the correct PXParent and PXDBdefault attributes for the master-detail link (on field CategoryID)
#region CategoryID
[PXDBInt(IsKey=true)]
[PXParent(typeof(Select<INCategory, Where<INCategory.categoryID, Equal<Current<INCategory.categoryID>>>>))]
[PXDBDefault(typeof(INCategory.categoryID))]
public virtual int? CategoryID { get; set; }
public abstract class categoryID : IBqlField { }
#endregion
But lastly I added a Row# style column that used attribute [PXLineNbr]
#region CatFileKey
[PXDBInt(IsKey=true)]
[PXLineNbr(typeof(INCTC001INCategory.ctcPrevFileNumber))]
public virtual int? CatFileKey { get; set; }
public abstract class carFileKey : IBqlField { }
#endregion
And having this second key fixed my problem immediately
So all in all an error that I thought was due to some difficult customization was really because of some extremely basic thing ha ha.. hopefully this post prevents people from forgetting the same thing

Acumatia excel upload button in grid

When I click upload for Excel, Common Settings dialog appear -> Columns dialog appear-> and when I click final Ok it shows me that "the operation has completed" , but no rows are importing. Excel file is correct, it correctly detects mapping.
Grid : Allow upload = true
Graph :
public class KALCADisposalEntry : PXGraph<KALCADisposalEntry, KALCADisposal>
{
public PXSelect<KALCADisposal> LCADisposals;
[PXImport(typeof(KALCADisposal))]
public PXSelectJoin<KALCADisposalDetail,
LeftJoin<KAAsset, On<KAAsset.assetID, Equal<KALCADisposalDetail.assetID>>,
LeftJoin<KAAssetLocationHistory, On<KAAsset.assetID, Equal<KAAssetLocationHistory.assetID>,
And<KAAsset.locationRevID, Equal<KAAssetLocationHistory.revisionID>>>>>,
Where<KALCADisposalDetail.lCADisposalID, Equal<Current<KALCADisposal.lCADisposalID>>>> LCADisposalDetails;
Where KALCADisposal is a primary graph view.
KALCADisposalDetail DAC:
namespace KA
{
using System;
using PX.Data;
using PX.Objects.GL;
using DAC;
using DAC.Shared;
[System.SerializableAttribute()]
public class KALCADisposalDetail : PX.Data.IBqlTable
{
#region LCADisposalID
public abstract class lCADisposalID : PX.Data.IBqlField
{
}
protected int? _LCADisposalID;
[PXDBInt()]
[PXDBDefault(typeof(KALCADisposal.lCADisposalID))]
[PXParent(typeof(Select<KALCADisposal,
Where<KALCADisposal.lCADisposalID, Equal<Current<KALCADisposalDetail.lCADisposalID>>>>))]
public virtual int? LCADisposalID
{
get
{
return this._LCADisposalID;
}
set
{
this._LCADisposalID = value;
}
}
#endregion
#region LCADisposalDetailID
public abstract class lCADisposalDetailID : PX.Data.IBqlField
{
}
protected int? _LCADisposalDetailID;
[PXDBIdentity()]
//[PXUIField(Enabled = false)]
public virtual int? LCADisposalDetailID
{
get
{
return this._LCADisposalDetailID;
}
set
{
this._LCADisposalDetailID = value;
}
}
#endregion
#region AssetID
public abstract class assetID : PX.Data.IBqlField
{
}
protected int? _AssetID;
[PXDBInt(IsKey = true)]
[PXUIField(DisplayName = "Asset ID")]
[KAAssetSelector(typeof(Search<KAAsset.assetID,
Where<KAAsset.status, NotEqual<KAAssetStatus.hold>,
And<KAAsset.status, NotEqual<KAAssetStatus.open>,
And<KAAsset.status, NotEqual<KAAssetStatus.disposed>>>>>))]
public virtual int? AssetID
{
get
{
return this._AssetID;
}
set
{
this._AssetID = value;
}
}
#endregion
#region tstamp
public abstract class Tstamp : PX.Data.IBqlField
{
}
protected byte[] _tstamp;
[PXDBTimestamp()]
public virtual byte[] tstamp
{
get
{
return this._tstamp;
}
set
{
this._tstamp = value;
}
}
#endregion
#region CreatedByID
public abstract class createdByID : PX.Data.IBqlField
{
}
protected Guid? _CreatedByID;
[PXDBCreatedByID()]
public virtual Guid? CreatedByID
{
get
{
return this._CreatedByID;
}
set
{
this._CreatedByID = value;
}
}
#endregion
#region CreatedByScreenID
public abstract class createdByScreenID : PX.Data.IBqlField
{
}
protected string _CreatedByScreenID;
[PXDBCreatedByScreenID()]
public virtual string CreatedByScreenID
{
get
{
return this._CreatedByScreenID;
}
set
{
this._CreatedByScreenID = value;
}
}
#endregion
#region CreatedDateTime
public abstract class createdDateTime : PX.Data.IBqlField
{
}
protected DateTime? _CreatedDateTime;
[PXDBCreatedDateTime()]
public virtual DateTime? CreatedDateTime
{
get
{
return this._CreatedDateTime;
}
set
{
this._CreatedDateTime = value;
}
}
#endregion
#region LastModifiedByID
public abstract class lastModifiedByID : PX.Data.IBqlField
{
}
protected Guid? _LastModifiedByID;
[PXDBLastModifiedByID()]
public virtual Guid? LastModifiedByID
{
get
{
return this._LastModifiedByID;
}
set
{
this._LastModifiedByID = value;
}
}
#endregion
#region LastModifiedByScreenID
public abstract class lastModifiedByScreenID : PX.Data.IBqlField
{
}
protected string _LastModifiedByScreenID;
[PXDBLastModifiedByScreenID()]
public virtual string LastModifiedByScreenID
{
get
{
return this._LastModifiedByScreenID;
}
set
{
this._LastModifiedByScreenID = value;
}
}
#endregion
#region LastModifiedDateTime
public abstract class lastModifiedDateTime : PX.Data.IBqlField
{
}
protected DateTime? _LastModifiedDateTime;
[PXDBLastModifiedDateTime()]
public virtual DateTime? LastModifiedDateTime
{
get
{
return this._LastModifiedDateTime;
}
set
{
this._LastModifiedDateTime = value;
}
}
#endregion
#region NoteID
public abstract class noteID : PX.Data.IBqlField
{
}
protected Guid? _NoteID;
[PXNote()]
public virtual Guid? NoteID
{
get
{
return this._NoteID;
}
set
{
this._NoteID = value;
}
}
#endregion
}
}
KAAssetSelector :
public class KAAssetSelectorAttribute : PXSelectorAttribute
{
public KAAssetSelectorAttribute() :
base(typeof(Search<KAAsset.assetID>))
{
SubstituteKey = typeof(KAAsset.assetCD);
}
public KAAssetSelectorAttribute(Type search) : base(search)
{
SubstituteKey = typeof(KAAsset.assetCD);
}
}
aspx :
<%# Page Language="C#" MasterPageFile="~/MasterPages/FormTab.master" AutoEventWireup="true"
ValidateRequest="false" CodeFile="KA303000.aspx.cs" Inherits="Page_KA301000" Title="Untitled Page" %>
<%# MasterType VirtualPath="~/MasterPages/FormTab.master" %>
<asp:Content ID="cont1" ContentPlaceHolderID="phDS" runat="Server">
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="KA.KALCADisposalEntry" PrimaryView="LCADisposals">
</px:PXDataSource>
</asp:Content>
<asp:Content ID="cont2" ContentPlaceHolderID="phF" runat="Server">
<px:PXFormView ID="form" runat="server" DataSourceID="ds" Style="z-index: 100" Width="100%" DataMember="LCADisposals" TabIndex="5100">
<Template>
<px:PXLayoutRule ID="PXLayoutRule1" runat="server" StartColumn="True" LabelsWidth="S" ControlSize="S" />
<px:PXSelector ID="edLCADisposalCD" runat="server" DataField="LCADisposalCD">
</px:PXSelector>
<px:PXDropDown ID="edStatus" runat="server" DataField="Status">
</px:PXDropDown>
<px:PXCheckBox ID="edHold" Size="S" runat="server" AlreadyLocalized="False" DataField="Hold" Text="Hold" CommitChanges="true">
</px:PXCheckBox>
<px:PXLayoutRule runat="server" ControlSize="S" LabelsWidth="S" StartColumn="True">
</px:PXLayoutRule>
<px:PXTextEdit ID="edDisposalReason" runat="server" AlreadyLocalized="False" DataField="DisposalReason" DefaultLocale="" Size="L">
</px:PXTextEdit>
</Template>
</px:PXFormView>
</asp:Content>
<asp:Content ID="cont3" ContentPlaceHolderID="phG" runat="Server">
<px:PXTab ID="tab" runat="server" Width="100%" Height="150px" DataSourceID="ds" DataMember="LCADisposalDetails">
<Items>
<px:PXTabItem Text="Details">
<Template>
<px:PXGrid ID="PXGrid1" AdjustPageSize="Auto" runat="server" DataSourceID="ds" TabIndex="-14036" Width="100%" Height="300px" SyncPosition="True" SkinID="DetailsInTab" KeepPosition="True" TemporaryFilterCaption="Filter Applied">
<Levels>
<px:PXGridLevel DataKeyNames="LCADisposalDetailID" DataMember="LCADisposalDetails">
<RowTemplate>
<px:PXSelector ID="edAssetID" runat="server" DataField="AssetID" CommitChanges="True" AutoRefresh="True" AllowEdit="true">
</px:PXSelector>
<px:PXTextEdit ID="edKAAsset__Description" runat="server" AlreadyLocalized="False" DataField="KAAsset__Description" DefaultLocale="">
</px:PXTextEdit>
<px:PXDropDown ID="edKAAsset__Status" runat="server" DataField="KAAsset__Status">
</px:PXDropDown>
<px:PXDropDown ID="edKAAsset__Condition" runat="server" DataField="KAAsset__Condition">
</px:PXDropDown>
<px:PXSelector ID="edKAAsset__UOM" runat="server" DataField="KAAsset__UOM">
</px:PXSelector>
<px:PXNumberEdit ID="edKAAsset__Cost" runat="server" AlreadyLocalized="False" DataField="KAAsset__Cost" DefaultLocale="">
</px:PXNumberEdit>
<px:PXSelector ID="edKAAssetLocationHistory__BuildingID" runat="server" DataField="KAAssetLocationHistory__BuildingID">
</px:PXSelector>
<px:PXTextEdit ID="edKAAssetLocationHistory__Floor" runat="server" AlreadyLocalized="False" DataField="KAAssetLocationHistory__Floor" DefaultLocale="">
</px:PXTextEdit>
<px:PXTextEdit ID="edKAAssetLocationHistory__Room" runat="server" AlreadyLocalized="False" DataField="KAAssetLocationHistory__Room" DefaultLocale="">
</px:PXTextEdit>
<px:PXSelector ID="edKAAssetLocationHistory__EmployeeID" runat="server" DataField="KAAssetLocationHistory__EmployeeID">
</px:PXSelector>
<px:PXSelector ID="edKAAssetLocationHistory__Department" runat="server" DataField="KAAssetLocationHistory__Department">
</px:PXSelector>
<px:PXSegmentMask ID="edKAAssetLocationHistory__SiteID" runat="server" DataField="KAAssetLocationHistory__SiteID">
</px:PXSegmentMask>
</RowTemplate>
<Columns>
<px:PXGridColumn DataField="AssetID" CommitChanges="True">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAsset__Description" Width="200px">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAsset__Cost" TextAlign="Right" Width="100px">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAsset__UOM">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAssetLocationHistory__BranchID">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAssetLocationHistory__BuildingID">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAssetLocationHistory__Floor">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAssetLocationHistory__Room">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAssetLocationHistory__EmployeeID" Width="120px">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAssetLocationHistory__Department">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAssetLocationHistory__SiteID" Width="120px">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAsset__Status">
</px:PXGridColumn>
<px:PXGridColumn DataField="KAAsset__Condition">
</px:PXGridColumn>
</Columns>
</px:PXGridLevel>
</Levels>
<Mode AllowUpload="True" />
</px:PXGrid>
</Template>
</px:PXTabItem>
</Items>
<AutoSize Container="Window" Enabled="True" MinHeight="150" />
</px:PXTab>
</asp:Content>
As you can see <Mode AllowUpload="True" /> is inside in <px:PXGrid> tag
Page screen after uploaded excel :
As you can see it light's up pagination left arrow on the grid , but no rows are imported.
What am I missing?
After I removed selector(KAAssetSelector) from AssetID , problem fixed.
I think it's a bug

Resources