September 15, 2023

D365FO: Add query ranges to form data sources in X++

 

/// <summary>
/// Adds ranges to the form datasource.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
[FormDataSourceEventHandler(formDataSourceStr(VendPurchOrderJournal, VendPurchOrderJour), FormDataSourceEventType::QueryExecuting)]
public static void VendPurchOrderJour_OnQueryExecuting(FormDataSource sender, FormDataSourceEventArgs e)
{
    ICH_HcmWorkerSite workerSite;
    QueryBuildDataSource qbds_PurchTable;
    QueryBuildDataSource qbds_PurchTableExtended;
    HcmWorker currentWorker;
    QueryBuildRange qbr_PurchTableExtended;
    QueryBuildRange qbr_PurchTable;
    Array purchSecRoleIds;
    boolean isUserInRole;
 
    purchSecRoleIds = ICH_PurchSecRoleTable::getSecurityRoles();
 
    if (purchSecRoleIds)
    {
        isUserInRole = SysUserInfo::ICH_IsUserInRole(purchSecRoleIds, curUserId());
 
        if (isUserInRole)
        {
            // Range for Orderer, Requester, Approver, Assignee fields
            qbds_PurchTable = sender.query().dataSourceName(sender.name()).addDataSource(tableNum(PurchTable));
            qbds_PurchTable.joinMode(JoinMode::InnerJoin);
            qbds_PurchTable.relations(true);
 
            qbds_PurchTableExtended = qbds_PurchTable.addDataSource(tableNum(ICH_PurchTableExtended));
            qbds_PurchTableExtended.joinMode(JoinMode::InnerJoin);
            qbds_PurchTableExtended.relations(true);
 
            qbr_PurchTableExtended = SysQuery::findOrCreateRange(qbds_PurchTableExtended, fieldNum(ICH_PurchTableExtended, RecId));
            qbr_PurchTableExtended.status(RangeStatus::Hidden);
            qbr_PurchTableExtended.value(strFmt('((PurchOrderer == %1) || (PurchRequester == %2) || (PurchApprover == "%3") || (PurchAssignee == "%4"))',
                HcmWorkerLookup::currentWorker(),
                HcmWorkerLookup::currentWorker(),
                curUserId(),
                curUserId()));
        }
    }       
}

No comments:

Post a Comment