✏️ Explanatory Question

Example of for data source event handler

👁 19 Views
📘 Detailed Answer
🟢 Easy
No previous question
No next question
💡

Answer with Explanation


class ANSARIWHSWorkTableListPageEventHandler
{
    /// <summary>
    /// Changing the JumpRef for Locked user field
    /// </summary>
    /// <param name="sender">
    /// WHSWorkTable form data source
    /// </param>
    /// <param name="e">
    /// Form data source event args
    /// </param>
    /// <remarks>
    /// May 7, 2019 - Sonata Software Limited - #Bug2227 Work User error
    /// </remarks>
    [FormDataSourceEventHandler(formDataSourceStr(WHSWorkTableListPage, WHSWorkTable), FormDataSourceEventType::Initialized)]
    public static void WHSWorkTable_OnInitialized(FormDataSource sender, FormDataSourceEventArgs e)
    {
        var overrides = new ANSARIWHSWorkTableUser();

        sender.object(fieldNum(WHSWorkTable, LockedUser)).registerOverrideMethod(methodStr(FormDataObject, jumpRef), methodStr(ANSARIWHSWorkTableUser, jumpRefUser) , overrides);

        //05/09/2023 - ansari - BUG 208946 - TO and SO work trans type if replenishment will both open the respective TO and SO when click on ALL work form - START
        var overrideOrderNumJumpRef = new ANSARIWHSTOSOJumpRef();

        sender.object(fieldNum(WHSWorkTable, OrderNum)).registerOverrideMethod(methodStr(FormDataObject, jumpRef), methodStr(ANSARIWHSTOSOJumpRef, jumpRefSOTO) , overrideOrderNumJumpRef);
        //05/09/2023 - ansari- BUG 208946 - TO and SO work trans type if replenishment will both open the respective TO and SO when click on ALL work form - START
    }

    //09/01/2023 - ansari -215509 Performance All work screen when filtering on closed work is extremely slow
    /// <summary>
    /// To fiter all works for a period of 45 days on enabling closed work
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormControlEventHandler(formControlStr(WHSWorkTableListPage, ShowClosed), FormControlEventType::Modified)]
    public static void ShowClosed_OnModified(FormControl sender, FormControlEventArgs e)
    {
        FormCheckBoxControl     showClosed = Sender as FormCheckBoxControl;
        FormDataSource          formDataSource = Sender.formRun().dataSource(formDataSourceStr(WHSWorkTableListPage,WHSWorkTable)) as FormDataSource;
        QueryBuildDataSource    qbdWhsWorkTable;
        QueryBuildRange         qbrWhsWorkTable;

        qbdWhsWorkTable = formDataSource.queryBuildDataSource();
        qbdWhsWorkTable.clearRanges();
        qbrWhsWorkTable = SysQuery::findOrCreateRange(qbdWhsWorkTable ,fieldnum(WHSWorkTable,CreatedDateTime));
                                        

        if(showClosed.checked())
        {

            qbrWhsWorkTable.value(SysQueryRangeUtil::greaterThanUtcDate(-45));
        }
        else
        {
            qbdWhsWorkTable.clearRange(fieldnum(WHSWorkTable,CreatedDateTime));           
        }

    }

    //01/02/2024 - ansari -268797 Performance on  All work screen production slownes
    /// <summary>
    /// To have 90 day fiter on created date and time
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormDataSourceEventHandler(formDataSourceStr(WHSWorkTableListPage, WHSWorkTable), FormDataSourceEventType::QueryExecuting)]
    public static void WHSWorkTable_OnQueryExecuting(FormDataSource sender, FormDataSourceEventArgs e)
    {
        FormDataSource          formDataSource = Sender as FormDataSource;
        QueryBuildDataSource    qbdWhsWorkTable;
        QueryBuildRange         qbrWhsWorkTable;

        //18/04/2025 - ansari -Bug 362380: Don't allow wildcard searches in All Work form - start
        QueryBuildRange         qbr;
        QueryBuildDataSource    qbds;       
        //18/04/2025 -ransari -Bug 362380: Don't allow wildcard searches in All Work form - end

        qbdWhsWorkTable = formDataSource.queryBuildDataSource();
        qbrWhsWorkTable = SysQuery::findOrCreateRange(qbdWhsWorkTable ,fieldnum(WHSWorkTable,CreatedDateTime));
        qbrWhsWorkTable.value(SysQueryRangeUtil::greaterThanUtcDate(-90));
       
        //18/04/2025 - ansari -Bug 362380: Don't allow wildcard searches in All Work form - start
        if(sender.queryRun())
        {
            qbds = sender.queryRun().query().dataSourceTable(tableNum(WHSWorkTable));
            ANSARIWHSWorkTableListPageEventHandler::ansariThrowErrorForWildcardSearch(qbds);            
        }
        //18/04/2025 - ansari -Bug 362380: Don't allow wildcard searches in All Work form - end
    }

    //18/04/2025 -ansari -Bug 362380: Don't allow wildcard searches in All Work form - start
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    [FormDataSourceEventHandler(formDataSourceStr(WHSWorkTableListPage, WHSWorkLine), FormDataSourceEventType::QueryExecuting)]
    public static void WHSWorkLine_OnQueryExecuting(FormDataSource sender, FormDataSourceEventArgs e)
    {
        WHSWorkLine WHSWorkLine = sender.cursor() as WHSWorkLine;
        QueryBuildRange         qbr;
        QueryBuildDataSource    qbds;        
        
        // Example: Inspect current filters
        if(sender.queryRun())
        {
            qbds = sender.queryRun().query().dataSourceTable(tableNum(WHSWorkLine));
            ANSARIWHSWorkTableListPageEventHandler::ansariThrowErrorForWildcardSearch(qbds); 
        }
    }

    public static void ansariThrowErrorForWildcardSearch(QueryBuildDataSource qbds)
    {
        str qStr;
        #define.matchStr("LIKE")
        
        if(qbds)
        {
            qStr = qbds.toString();
            int i = match(#matchStr, qStr);

            if(i)
            {
                throw error('@ANSARI:ANSARIFilterNotAllowed');
            }
        }
    }
    //18/04/2025 - ansari -Bug 362380: Don't allow wildcard searches in All Work form - end

}
No previous question
No next question