Konfiguracja bom nie jest poprawnie wyświetlana w oknie dialogowym "Dziennik karty trasy" po dodaniu kolumny "Konfiguracja" do karty "Omówienie" w systemie Microsoft Dynamics AX 2009

Dotyczy
Dynamics AX 2009 Service Pack 1 Microsoft Dynamics AX 2009

Szybko opublikowane artykuły zawierają informacje bezpośrednio z poziomu organizacji pomocy technicznej firmy Microsoft. Informacje zawarte w niniejszym artykule są tworzone w odpowiedzi na nowe lub unikatowe tematy lub mają na celu uzupełnienie innych informacji z bazy wiedzy.

Objawy

Po kliknięciu prawym przyciskiem myszy okna dialogowego Dziennik karty trasy w systemie Microsoft Dynamics AX 2009, a następnie kliknięciu pozycji Konfiguracja w celu dodania kolumny Konfiguracja do karty Przegląd konfiguracja zestawienia materiałów nie jest poprawnie wyświetlana w oknie dialogowym Dziennik kart trasy .

Przyczyna

Ten problem występuje, ponieważ usługa Microsoft Dynamics AX nie obsługuje dodawania opóźnionego połączonego źródła danych do kontrolki siatki.

Rozwiązanie

Informacje o poprawce

Obsługiwana poprawka jest teraz dostępna od firmy Microsoft. Jednak jego celem jest tylko naprawienie problemu opisanego w tym artykule. Zastosuj ją tylko do systemów, w których występuje ten konkretny problem. Ta poprawka może wymagać dodatkowych testów. Dlatego jeśli ten problem cię nie dotyczy poważnie, zalecamy poczekanie na następny dodatek Service Pack dla oprogramowania Microsoft Dynamics AX 2009 lub następną wersję zawierającą tę poprawkę.

Uwaga W specjalnych przypadkach opłaty, które zwykle naliczane są w związku z połączeniami pomocy technicznej, mogą zostać anulowane, jeśli specjalista pomocy technicznej w zakresie oprogramowania Microsoft Dynamics i produktów pokrewnych ustali, że określona aktualizacja rozwiąże problem. Typowe koszty pomocy technicznej będą miały zastosowanie do dodatkowych pytań dotyczących pomocy technicznej i problemów, które nie kwalifikują się do określonej aktualizacji.

Ta poprawka ma zostać dołączona do dodatku Service Pack 2 dla systemu Microsoft Dynamics AX 2009.

Informacje o instalacji

Przed zainstalowaniem tej poprawki upewnij się, że użytkownicy klienckich usługi Microsoft Dynamics AX wylogowali się z systemu. Należy być jedynym użytkownikiem klienckim, który jest zalogowany podczas implementowania tej poprawki.

Aby zaimplementować tę poprawkę, musisz mieć licencję dewelopera.

Uwaga Zalecamy, aby konto użytkownika w oknie Logowania systemu Windows lub w oknie Logowania bazy danych było członkiem grupy Użytkownicy administratorzy w systemie Microsoft Dynamics AX.

Zmiany kodu

Firma Microsoft udostępnia przykłady programowania wyłącznie w celach ilustracyjnych, bez gwarancji wyrażonej lub dorozumianej. To obejmuje między innymi dorozumiane gwarancje przydatności handlowej lub przydatności do określonego celu. W tym artykule założono, że znasz język programowania, który jest demonstrowany, oraz narzędzia, które są używane do tworzenia i debugowania procedur. Inżynierowie pomocy technicznej firmy Microsoft mogą pomóc w wyjaśnieniu funkcjonalności danej procedury. Nie będą jednak modyfikować tych przykładów, aby zapewnić dodatkową funkcjonalność lub konstruować procedur spełniających specyficzne wymagania użytkownika. Zawsze testuj poprawki kodu w kontrolowanym środowisku przed zastosowaniem poprawek do komputerów produkcyjnych.

Aby zastosować tę poprawkę, wykonaj następujące czynności:

  1. Zmień kod w metodzie datasourceWritePre w klasie ProdJournalFormTransRoute w następujący sposób:
    Istniejący kod

    void datasourceWritePre()
    {
        ;
    
        if (prodJournalRoute.ProdPickList && prodJournalRoute.OprPriority && !prodJournalRoute.ProdPickListJournalId)
            prodJournalRoute.ProdPickList = NoYes::No;
    
        if (prodJournalRoute.ProdReportFinished)
            prodJournalRoute.ProdInventDimId = InventDim::findOrCreate(inventDim).InventDimId;
        else
    
            // Modify the following line.
            prodJournalRoute.ProdInventDimId = '';
    
            prodJournalRoute.ProdInventDimId = '';
    
        super();
    }
    
    

    Kod zastępczy

    void datasourceWritePre()
    {
        ;
    
        if (prodJournalRoute.ProdPickList && prodJournalRoute.OprPriority && !prodJournalRoute.ProdPickListJournalId)
            prodJournalRoute.ProdPickList = NoYes::No;
    
        if (prodJournalRoute.ProdReportFinished)
            prodJournalRoute.ProdInventDimId = InventDim::findOrCreate(inventDim).InventDimId;
        else
    
            // The following line is modified.
            prodJournalRoute.ProdInventDimId = InventDim::inventDimIdBlank();
    
            prodJournalRoute.ProdInventDimId = '';
    
        super();
    }
    
    
  2. Zmień kod w poluModifiedProdReportFinishedPost w klasie ProdJournalFormTransRoute w następujący sposób:
    Istniejący kod

    void fieldModifiedProdReportFinishedPost()
    {
        InventDim emptyInventDim;
        ;
        if (prodJournalRoute.ProdReportFinished)
        {
            if (! prodJournalRoute.ProdInventDimId)
                inventDim_ds.create();
    
            inventDim.data(InventDim::find(ProdTable::find(prodJournalRoute.ProdId).InventDimId));
        }
        else
            inventDim.data(emptyInventDim);
    
        inventDim_ds.setCurrent();
    }
    
    

    Kod zastępczy

    void fieldModifiedProdReportFinishedPost()
    {
    
        // Add the following line.
        InventDim emptyInventDim = InventDim::find(InventDim::inventDimIdBlank());
    
        InventDim emptyInventDim;
        ;
        if (prodJournalRoute.ProdReportFinished)
        {
            if (! prodJournalRoute.ProdInventDimId)
                inventDim_ds.create();
    
            inventDim.data(InventDim::find(ProdTable::find(prodJournalRoute.ProdId).InventDimId));
        }
        else
            inventDim.data(emptyInventDim);
    
        inventDim_ds.setCurrent();
    }
    
    
  3. Zmień kod w metodzie enableFieldsActive w formularzu ProdJournalTransRoute w następujący sposób:
    Istniejący kod

    void enableFieldsActive()
    {
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        projectHour.visible(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        projectQuantity.visible(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    }
    
    

    Kod zastępczy

    void enableFieldsActive()
    {
    
        // Add the following lines.
        int i;
        container enabledDimFields = InventDim::dimEnabledFieldList();
        container dimFields = InventDim::dimFieldList();
        ;
    
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        projectHour.visible(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        projectQuantity.visible(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
    
        // Add the following lines.
        for(i = 0; i < conlen(dimFields) ; i++)
        {
            if (inventDim_DS.object(conpeek(dimFields, i)))
            {
                if (prodJournalRoute.ProdInventDimId == InventDim::inventDimIdBlank())
                {
                    inventDim_DS.object(conpeek(dimFields,i)).enabled(false);
                }
                else
                {
                    inventDim_DS.object(conpeek(dimFields,i)).enabled(confind(enabledDimeFields,i) != 0);
                }
            }
        }
    
    }
    
    
  4. Zmień wartość właściwości obiektu InventDim Data Source w formie ProdJournalTransRoute w następujący sposób:

    • Zmień wartość właściwości LinkType na InnerJoin.
    • Zmień wartość właściwości DelayActive na No (Nie).
  5. Dodaj następujący kod w obiekcie "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ validateWrite".

    public boolean validateWrite()
    {
        boolean ret;
        ;
        if (inventDim.inventDimId == InventDim::inventDimIdBlank())
            return true;
        ret = super();
    
        return ret;
    }
    
    
  6. Zmień kod w obiekcie "\Forms\ProdJournalTransRoute\DataSources\InventDim\Methods\ write" w następujący sposób:
    Istniejący kod

    void write()
    {
        ;
        prodJournalRoute_ds.write();
    }
    
    

    Kod zastępczy

    void write()
    {
        ;
        prodJournalRoute_ds.write();
    
        // Add the following line.
        element.enableFieldsActive();
    
    }
    
    
  7. Zmień kod w folderze "\Forms\ProdJournalTransRoute\DataSources\ProdJournalRoute\Methods\active" w następujący sposób:
    Istniejący kod

    int active()
    {
        int ret;
    
        ret = super();
    
        journalFormTrans.datasourceActivePost();
        if (prodJournalRoute.isProjMethodConsumed())
        {
            skipWrite = true;
            prodJournalRouteProjHour_ds.executeQuery();
            prodJournalRouteProjQuantity_ds.executeQuery();
            skipWrite = false;
        }
        element.enableFieldsActive();
        return ret;
    }
    
    

    Kod zastępczy

    int active()
    {
        int ret;
    
        // Add the following lines.
        ;
        journalFormTrans.updateDesign(InventDimFormDesignUpdate::Init);
    
        ret = super();
    
        journalFormTrans.datasourceActivePost();
        if (prodJournalRoute.isProjMethodConsumed())
        {
            skipWrite = true;
            prodJournalRouteProjHour_ds.executeQuery();
            prodJournalRouteProjQuantity_ds.executeQuery();
            skipWrite = false;
        }
        element.enableFieldsActive();
        return ret;
    }
    
    
  8. Zmień kod w metodzie enableFieldsActive w formularzu ProdJournalTransJob w następujący sposób:
    Istniejący kod

    void enableFieldsActive()
    {
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        projectHour.visible(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        projectQuantity.visible(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    }
    
    

    Kod zastępczy

    void enableFieldsActive()
    {
      // Add the following lines.
        int i;
        container enabledDimFields = InventDim::dimEnabledFieldList();
        container dimFields = InventDim::dimFieldList();
        ;
    
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,EmplId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryHoursId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRoute_ds.object(fieldnum(ProdJournalRoute,CategoryQtyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        projectHour.visible(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjHour_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        projectQuantity.visible(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjLinePropertyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
        prodJournalRouteProjQuantity_ds.object(fieldnum(ProdJournalRouteProj,ProjSalesCurrencyId)).mandatory(prodJournalRoute.isProjMethodConsumed());
    
        // Add the following lines.
        for(i = 0; i < conlen(dimFields) ; i++)
        {
            if (inventDim_DS.object(conpeek(dimFields, i)))
            {
                if (prodJournalRoute.ProdInventDimId == InventDim::inventDimIdBlank())
                {
                    inventDim_DS.object(conpeek(dimFields,i)).enabled(false);
                }
                else
                {
                    inventDim_DS.object(conpeek(dimFields,i)).enabled(confind(enabledDimeFields,i) != 0);
                }
            }
        }
    
    }
    
    
  9. Zmień wartość właściwości obiektu InventDim Data Source w formie ProdJournalTransJob w następujący sposób:

    • Zmień wartość właściwości LinkType na InnerJoin.
    • Zmień wartość właściwości DelayActive na No (Nie).
  10. Dodaj następujący kod w obiekcie " \Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ validateWrite".

    public boolean validateWrite()
    {
        boolean ret;
        ;
        if (inventDim.inventDimId == InventDim::inventDimIdBlank())
            return true;
        ret = super();
    
        return ret;
    }
    
    
  11. Zmień kod w obiekcie "\Forms\ProdJournalTransJob\DataSources\InventDim\Methods\ write" w następujący sposób:
    Istniejący kod

    void write()
    {
        ;
        prodJournalRoute_ds.write();
    }
    
    

    Kod zastępczy

    void write()
    {
        ;
        prodJournalRoute_ds.write();
    
        // Add the following line.
        element.enableFieldsActive();
    
    }
    
    
  12. Zmień kod w folderze "\Forms\ProdJournalTransJob\DataSources\ProdJournalRoute\Methods\active" w następujący sposób:
    Istniejący kod

    int active()
    {
        int ret;
    
        ret = super();
    
        journalFormTrans.datasourceActivePost();
        if (prodJournalRoute.isProjMethodConsumed())
        {
            skipWrite = true;
            prodJournalRouteProjHour_ds.executeQuery();
            prodJournalRouteProjQuantity_ds.executeQuery();
            skipWrite = false;
        }
        element.enableFieldsActive();
        return ret;
    }
    
    

    Kod zastępczy

    int active()
    {
        int ret;
    
        // Add the following lines.
        ;
        journalFormTrans.updateDesign(InventDimFormDesignUpdate::Init);
    
        ret = super();
    
        journalFormTrans.datasourceActivePost();
        if (prodJournalRoute.isProjMethodConsumed())
        {
            skipWrite = true;
            prodJournalRouteProjHour_ds.executeQuery();
            prodJournalRouteProjQuantity_ds.executeQuery();
            skipWrite = false;
        }
        element.enableFieldsActive();
        return ret;
    }
    
    
  13. Zmień kod w metodzie wstawiania w tabeli ProdJournalRoute w następujący sposób:
    Istniejący kod

    void insert()
    {
        ttsbegin;
    
        if (! this.LineNum)
            this.LineNum = ProdJournalRoute::lastLineNum(this.JournalId) + 1;
    
        if (this.OprFinished)
            this.JobFinished = NoYes::Yes;
    
        this.updateRouteConstantRelease();
    
        super();
    
        ttscommit;
    }
    
    

    Kod zastępczy

    void insert()
    {
        ttsbegin;
    
        if (! this.LineNum)
            this.LineNum = ProdJournalRoute::lastLineNum(this.JournalId) + 1;
    
        if (this.OprFinished)
            this.JobFinished = NoYes::Yes;
    
    
        // Add the following lines.
        if(!this.ProdInventDimId)
            this.ProdInventDimId = InventDim::inventDimIdBlank();
    
    
        this.updateRouteConstantRelease();
    
        super();
    
        ttscommit;
    }
    
    
  14. Zmień kod w metodzie initValue w tabeli ProdJournalRoute w następujący sposób:
    Istniejący kod

    void initValue()
    {
        super();
    
        this.TransDate= systemdateget();
    
    }
    
    

    Kod zastępczy

    void initValue()
    {
        super();
    
        this.TransDate= systemdateget();
    
        // Add the following line.
        this.ProdInventDimId = InventDim::inventDimIdBlank();
    
    }
    
    

Wymagania wstępne

Zastosowanie tej poprawki nie wymaga żadnych wymagań wstępnych.

Wymóg ponownego uruchomienia

Po zastosowaniu tej poprawki nie trzeba ponownie uruchamiać komputera.

Stan

Firma Microsoft potwierdziła, że jest to problem dotyczący produktów firmy Microsoft wymienionych w sekcji „Dotyczy”.

FIRMA MICROSOFT I/LUB JEJ DOSTAWCY NIE UDZIELAJĄ ŻADNYCH OŚWIADCZEŃ ANI GWARANCJI CO DO PRZYDATNOŚCI, NIEZAWODNOŚCI ANI DOKŁADNOŚCI INFORMACJI ZAWARTYCH W DOKUMENTACH I POWIĄZANYCH GRAFIK OPUBLIKOWANYCH W TEJ WITRYNIE INTERNETOWEJ ("MATERIAŁY") W DOWOLNYM CELU.

MATERIAŁY MOGĄ ZAWIERAĆ NIEŚCISŁOŚCI TECHNICZNE LUB BŁĘDY TYPOGRAFICZNE I MOGĄ ZOSTAĆ POPRAWIONE W DOWOLNYM MOMENCIE BEZ POWIADOMIENIA. W MAKSYMALNYM ZAKRESIE DOZWOLONYM PRZEZ OBOWIĄZUJĄCE PRAWO FIRMA MICROSOFT I/LUB JEJ DOSTAWCY ZRZEKAJĄ SIĘ WSZELKICH OŚWIADCZEŃ, GWARANCJI I WARUNKÓW JAWNYCH, DOROZUMIANYCH LUB USTAWOWYCH, W TYM MIĘDZY INNYMI OŚWIADCZEŃ, GWARANCJI LUB WARUNKÓW TYTUŁU, NIENAGWAŁCENIA, ZADOWALAJĄCYCH WARUNKÓW LUB JAKOŚCI, PRZYDATNOŚCI HANDLOWEJ I PRZYDATNOŚCI DO OKREŚLONEGO CELU, W ODNIESIENIU DO MATERIAŁÓW.