using Microsoft.Security.Application.AntiXss;
using Microsoft.Security.Application.Sanitizer;
///
/// Sortable control
///
[FormControlAttribute('VKOSortableList', '/resources/html/VKOSortableListControlHTML.html', classStr(VKOSortableListBuild))]
class VKOSortableList extends FormTemplateControl
{
FormProperty SortableItems;
public void new(FormBuildControl _build, FormRun _formRun)
{
super(_build, _formRun);
//this.setTemplateId('VKOSortableList');
this.setResourceBundleName("/resources/html/VKOSortableListControlHTML.html");
SortableItems = this.addProperty(methodstr(VKOSortableList, parmSortableItems), Types::Class);
}
///
/// Applies the build configurations to the run instance of the control.
///
///
/// ApplyBuild of the form part control should be called only in formRun::Init() method.
///
public void applyBuild()
{
VKOSortableListBuild build;
super();
build = this.build();
if (build)
{
List sortableItemsLoc = build.parmSortableItems();
if (this.isDataSourceBinded())
{
DataSourceName dataSourceName = build.parmDataSourceName();
FieldName fieldNameName = build.parmDataFieldNameName();
FieldName fieldNameSort = build.parmDataFieldNameSort();
FormDataSource fds = this.formRun().dataSource(dataSourceName);
Common sortableTable = fds.cursor();
FieldId fieldIdName = fieldName2Id(sortableTable.TableId, fieldNameName);
FieldId fieldIdSort = fieldName2Id(sortableTable.TableId, fieldNameSort);
VKOSortableListItem sortableItem;
List itemList = this.getRecordsList();
ListEnumerator le;
sortableItemsLoc = new List(Types::Class);
if (itemList.elements())
{
le = itemList.getEnumerator();
while (le.moveNext())
{
sortableTable = le.current();
sortableItem = new VKOSortableListItem();
sortableItem.parmText(sortableTable.(fieldIdName));
sortableItem.parmRecId(sortableTable.RecId);
sortableItemsLoc.addEnd(sortableItem);
}
}
//this.setTemplateId('VKOSortableList');
//this.setResourceBundleName(build.resourceBundleName());
}
this.parmSortableItems(sortableItemsLoc);
}
}
[FormCommandAttribute(identifierstr(OrderModified), true)]
private void orderModified(str serializedOrder)
{
info('sort: '+serializedOrder);
container recIdCon = str2con(serializedOrder, ",");
int curIndex = 0,
conLen = conLen(recIdCon);
RefRecId refRecId;
List itemList = this.getRecordsList();
Common sortableTable;
if (this.isDataSourceBinded() && conLen > 0 && itemList.elements())
{
VKOSortableListBuild build = this.build();
FieldName fieldNameSort = build.parmDataFieldNameSort();
FieldId fieldIdSort = fieldName2Id(sortableTable.TableId, fieldNameSort);
Map itemMap = new Map(Types::Int64, Types::Record);
ListEnumerator le;
if (itemList.elements())
{
le = itemList.getEnumerator();
while (le.moveNext())
{
sortableTable = le.current();
itemMap.insert(sortableTable.RecId, sortableTable);
}
}
ttsbegin;
for (curIndex = 1; curIndex <= conLen; curIndex++)
{
refRecId = str2Int64(conPeek(recIdCon, curIndex));
if (refRecId)
{
if (itemMap.exists(refRecId))
{
sortableTable = itemMap.lookup(refRecId);
if (!fieldIdSort)
{
fieldIdSort = fieldName2Id(sortableTable.TableId, fieldNameSort);
}
if (sortableTable.(fieldIdSort) != curIndex)
{
sortableTable.(fieldIdSort) = curIndex;
sortableTable.selectForUpdate(true);
sortableTable.update();
}
}
}
}
ttscommit;
}
}
[FormPropertyAttribute(FormPropertyKind::Value, identifierstr(SortableItems))]
public List parmSortableItems(List _sortableItems = SortableItems.parmValue())
{
if (!prmIsDefault(_sortableItems))
{
SortableItems.setValueOrBinding(_sortableItems);
}
return SortableItems.parmValue();
}
/* */
protected boolean isDataSourceBinded()
{
boolean ret = false;
VKOSortableListBuild build = this.build();
if (build && build.parmDataSourceName() && build.parmDataFieldNameName() && build.parmDataFieldNameSort())
{
ret = true;
}
return ret;
}
protected List getRecordsList()
{
List recordList = new List(Types::Record);
if(this.isDataSourceBinded())
{
VKOSortableListBuild build = this.build();
DataSourceName dataSourceName = build.parmDataSourceName();
FieldName fieldNameName = build.parmDataFieldNameName();
FieldName fieldNameSort = build.parmDataFieldNameSort();
FormDataSource fds = this.formRun().dataSource(dataSourceName);
Common sortableTable = fds.cursor();
FieldId fieldIdSort = fieldName2Id(sortableTable.TableId, fieldNameSort);
Query q = new Query();
QueryBuildDataSource qbds = q.addDataSource(sortableTable.TableId);
QueryRun qr;
qbds.addSortField(fieldIdSort);
qr = new QueryRun(q);
qr.setCursor(sortableTable);
while (qr.next())
{
recordList.addEnd(sortableTable);
}
}
return recordList;
}
}