Я пытаюсь реализовать средство выбора дерева категорий продаж на экранах элементов инвентаря в настройке экрана возможностей CRM, с одним отличием: вместо того, чтобы иметь список / подстол, мне нужна только одна категория для каждой возможности, поэтому Я делаю это с помощью одного настраиваемого поля («UsrSalesCategoryID» - int) в расширении графа возможностей. Вот что я сделал:
К моему коду OpportunityMaint_Extension я добавил делегата:
protected IEnumerable categories ([PXInt] int? categoryID)
{
PXTrace.WriteInformation("OpportunityMaint_Extension categories delegate was called");
if (categoryID == null)
{
yield return new INCategory()
{
CategoryID = 0,
Description = PXSiteMap.RootNode.Title
};
}
foreach (INCategory item in PXSelect<INCategory,
Where<INCategory.parentID,
Equal<Required<INCategory.parentID>>>,
OrderBy<Asc<INCategory.sortOrder>>>.Select(this.Base, categoryID))
{
if (!string.IsNullOrEmpty(item.Description))
yield return item;
}
}
На моем экране ASPX я добавил деревья данных в источник данных:
<px:PXDataSource ID="ds" runat="server" Visible="True" Width="100%" TypeName="PX.Objects.CR.OpportunityMaint" PrimaryView="Opportunity">
<CallbackCommands>...</CallbackCommands>
<DataTrees>
...
<px:PXTreeDataMember TreeView="Categories" TreeKeys="CategoryID" />
</DataTrees>
</px:PXDataSource>
, а также к экрану, элемент управления, с привязками:
<px:PXTreeSelector runat="server" ID="CstPXTreeSelector15" DataField="UsrSalesCategoryID" PopulateOnDemand="True" ShowRootNode="True" TreeDataMember="Categories" TreeDataSourceID="ds">
<DataBindings>
<px:PXTreeItemBinding ValueField="CategoryID" TextField="Description" />
</DataBindings>
</px:PXTreeSelector>
Но что бы я ни делал, содержимое селектора дерева остается пустым, и тот факт, что я никогда не вижу сообщения PXTrace, говорит о том, что привязка данных не связана правильно, но я не могу понять, какой она должна быть - любая предложения о том, где я иду не так с благодарностью получены ...