COPYFILTER between 2 similar but different record

andy76andy76 Member Posts: 616
Hello,

I need to copy all filters between 2 similar but different record (from "Sales Header" to "Sales Header Archive").
COPYFILTERS wants same record...
Is that possible? With some automatic cycle? How?


Thank you

Comments

  • kinekine Member Posts: 12,562
    RecordRef can help you...
    Kamil Sacek
    MVP - Dynamics NAV
    My BLOG
    NAVERTICA a.s.
  • AlbertvhAlbertvh Member Posts: 516
    Hi,

    You could also use GETVIEW and SETVIEW


    Albert
  • pdjpdj Member Posts: 643
    I.e. like this:
    OBJECT Codeunit 50000 Transfer Filters
    {
      OBJECT-PROPERTIES
      {
        Date=24-09-08;
        Time=23:14:38;
        Modified=Yes;
        Version List=;
      }
      PROPERTIES
      {
        OnRun=VAR
                l_SalesHeader@1000000000 : Record 36;
                l_SalesHeaderArchive@1000000001 : Record 5107;
                l_FromRecRef@1000000002 : RecordRef;
                l_ToRecRef@1000000003 : RecordRef;
              BEGIN
                l_SalesHeader.SETRANGE("Document Type",l_SalesHeader."Document Type"::Order);
                l_SalesHeader.SETRANGE("Your Reference",'X');
                l_SalesHeader.SETRANGE("No. Printed",0);
    
                // Will cause error because the field doesn't exist in the archive
                //l_SalesHeader.SETRANGE("Send IC Document",TRUE);
    
                // Will cause error because of different field type
                //l_SalesHeader.SETRANGE("No. of Archived Versions",1);
    
                l_FromRecRef.GETTABLE(l_SalesHeader);
                l_ToRecRef.OPEN(DATABASE::"Sales Header Archive");
                TransferFilters(l_FromRecRef,l_ToRecRef,FALSE);
                l_SalesHeaderArchive.SETVIEW(l_ToRecRef.GETVIEW(FALSE));
    
                MESSAGE(l_SalesHeaderArchive.GETFILTERS);
              END;
    
      }
      CODE
      {
    
        PROCEDURE TransferFilters@1000000001(VAR p_FromRecRef@1000000000 : RecordRef;VAR p_ToRecRef@1000000001 : RecordRef;p_IgnoreIncompatibleFilters@1000000002 : Boolean);
        VAR
          l_Field@1000000006 : Record 2000000041;
          l_FromFldRef@1000000003 : FieldRef;
          l_ToFldRef@1000000004 : FieldRef;
          l_FldNo@1000000005 : Integer;
        BEGIN
          // Known errors and limitations:
          //   * Filtergroups are ignored
          //   * High number of complex filters can result in overflow in the SETVIEW/GETVIEW line
    
          FOR l_FldNo := 1 TO p_FromRecRef.FIELDCOUNT DO BEGIN
            l_FromFldRef := p_FromRecRef.FIELDINDEX(l_FldNo);
            IF l_FromFldRef.GETFILTER <> '' THEN BEGIN
              IF l_Field.GET(p_ToRecRef.NUMBER,l_FromFldRef.NUMBER) THEN BEGIN
                l_ToFldRef := p_ToRecRef.FIELD(l_FromFldRef.NUMBER);
                IF l_FromFldRef.TYPE = l_ToFldRef.TYPE THEN
                  l_ToFldRef.SETFILTER(l_FromFldRef.GETFILTER)
                ELSE
                  IF NOT p_IgnoreIncompatibleFilters THEN
                    ERROR(
                      'Filter on the "%1" field cannot be copied from the %2 table to\' +
                      'the "%3" field in the %4 table due to different field types. (%5 vs. %6)\\' +
                      'Please remove this field filter and try again.',
                      l_FromFldRef.CAPTION,p_FromRecRef.CAPTION,
                      l_ToFldRef.CAPTION,p_ToRecRef.CAPTION,
                      l_FromFldRef.TYPE,l_ToFldRef.TYPE);
              END ELSE
                IF NOT p_IgnoreIncompatibleFilters THEN
                  ERROR(
                    'Filter on the "%1" cannot be copied from the %2 table\' +
                    'since field number %3 does not exist in the %4 table.\\' +
                    'Please remove this field filter and try again.',
                    l_FromFldRef.CAPTION,p_FromRecRef.CAPTION,
                    l_FromFldRef.NUMBER,p_ToRecRef.CAPTION);
            END;
          END;
        END;
    
        BEGIN
        {
          Code by Peter D. Jorgensen - 2008
        }
        END.
      }
    }
    
    Regards
    Peter
Sign In or Register to comment.