Limpando todas as tabelas do AX (especificando DataAreaId)

Caros,
Uma vez eu precisei ‘limpar’ um BD de produção, foi quando o Fraga ainda estava ajudando a Microsoft no suporte via PrimeIT (já faz tempo!). O fato aconteceu porque os consultores tinham criado muitas empresas de teste na base de produção (pela facilidade de só trocar de empresa ao invés de abrir outra instância) e com isso trouxeram um prejuízo enorme quando fomos migrar de um release para outro, a ponto de termos que debugar processo de upgrade, até então, desconhecido para o suporte da MS Brasil! Acredito eu, que os consultores fazem isto por falta de informação, por não saberem como é o processo de upgrade, onde existem scripts de pré e pós sincronização que executam rotinas em muitas tabelas, uma vez para cada DataAreaId encontrado.

A solução que encontrei na época (e lembrei dela agora porque vi em outro artigo) foi vasculhar tabela por tabela procurando pelos DataAreaIDs que eu gostaria de apagar, o que resultou no sequinte script:

--Declarando as variáveis que irei usar
DECLARE @TABLE VARCHAR(100)
DECLARE @STATEMENT VARCHAR(500)
DECLARE LOCALTABLE CURSOR FOR SELECT NAME FROM   SYS.TABLES
DECLARE @MYDATABASE  VARCHAR(100)
DECLARE @MYCOMPANIES VARCHAR(100)
 
--Especificando a Base de Dados
SELECT @MYDATABASE = 'DAX_HOM'
 
--Especificando os DataAreaIds que eu quero apagar
SELECT @MYCOMPANIES = '(''VC1'', ''VC2'', ''VC3'')'
 
--Abrindo o Cursor
OPEN LOCALTABLE
 
--Carregando o Cursor pela Primeira vez
FETCH NEXT FROM  LOCALTABLE INTO  @TABLE
 
 
WHILE @@FETCH_STATUS = 0
BEGIN
        BEGIN TRY
                SET @STATEMENT = N'DELETE FROM [' + @MYDATABASE + '].[DBO].[' + @TABLE + '] WHERE [DATAAREAID] IN ' + @MYCOMPANIES
                PRINT @STATEMENT
                EXECUTE SP_EXECUTESQL @STATEMENT
        END TRY
        BEGIN CATCH
                PRINT 'DataAreaID não encontrado na Tablea: ' + @TABLE
        END CATCH
        FETCH NEXT
        FROM  LOCALTABLE
        INTO  @TABLE
END
 
CLOSE LOCALTABLE
DEALLOCATE LOCALTABLE

Usei um cursor para navegar em todas as tabelas e, a partir daí, removo o que tiver o DataAreaId que quero, nas tabelas onde não há DataAreaId é gerada uma excessão que é tratada no CATCH e com isso a rotina faz a limpeza geral.

Nem preciso dizer o cuidado que deve ser tomado antes de rodar este comando né!?

[]s
Pichler





Usando as Funções Pick da Global

Vi uma postagem bem legal no Ramon Morini’s Blog e recomendo a leitura, bem útil.

Usando as Funções Pick da Global

[]s
Pichler





Resolvendo o problema “unbalanced TTS”

Pessoal,
Achei que já tinha isso por aqui, mas fui precisar agora e não encontrei, então vou postar.

Algumas vezes quando estamos debugando, por algum motivo não completamos a seqüencia dos TTS e deixamos mais ttsbegins do que deveria, ai o AX começa a te dar mensagens dizendo que encontrou um par desbalanceado de TTSBEGIN/TTSCOMMIT e para resolver basta criar um job com um ttsabort, ou algo mais elaborado como:

1
2
3
4
5
static void job1(Args _args)
{
    while (appl.ttsLevel() > 0)
        ttsAbort;
}

[]s
Pichler





Microsoft Dynamics AX 2009 Administration

What you will learn from this book :

  • Master the components required to set up and configure Dynamics AX 2009 in your business and effectively manage your business data
  • Understand the current hardware, software, and network infrastructure in which you will be implementing Microsoft Dynamics AX
  • Maximize the stability and performance of your Dynamics AX environment
  • Fully understand the base Dynamics AX 2009 components and their features to get your Dynamics AX environment up and running effectively
  • Implement the Enterprise Portal, a web-based solution to access data from Dynamics AX and perform many functions such as Purchase Requisitions, Sales Orders, Customer lookups, and CRM
  • Understand how to set up and configure the business intelligence and advanced reporting capabilities of your data by using the Role Centers in Dynamics AX
  • Enhance the security of multiple services by ensuring that the Kerberos Authentication protocol is implemented in your Dynamics AX environment
  • Learn the process of setting up and configuring workflow to fit the needs of a company that requires various workflow capabilities
  • Discover how to use the Application Integration Framework to exchange data either synchronously or asynchronously between one system and another
  • Manage, migrate, and convert your data in Dynamics AX
  • Get a hold of the common user administration functions that are built into Dynamics AX, including setting up domains and importing users, permissions, profiles and company accounts
  • Make critical, timely business decisions by fully understanding the Alerts and Notifications features that notify you when specific criteria have been met with your data
  • Tweak and enhance Dynamics AX and its components for optimal performance
  • Learn how to maintain the data integrity of Dynamics AX data and develop backup and recovery processes
  • []s
    Pichler





    Categorizando tabelas em Grupos – Propriedade TableGroup

    Caros,
    Existem algumas funcionalidades/propriedades que são pouco comentadas, no entanto, ao meu ver são muito úteis, principalmente quando o assunto é organização, palavra essa que falta muito no mercado brasileiro de AX, ok, talvez não só no ax! kkkk

    Hoje vou falar da propriedade TableGroup que esta disponível em qualquer tabela e serve para classificar o tipo dela, qual a finalidade final e etc…

    Para que serve? Vamos supor que você quer limpar todas as tabelas que contém transações da sua base de dados? Como faria? Essa é uma boa situação, se tiver todas as tabelas categorizadas, você resolve este problema rápido. Uma outra situação é a que você deseja exportar todos os dados que não sejam transações, você também conseguirá se tiver categorizado as tabelas.

    Abaixo uma tabela relacionando o tipo de tabela, caracteristicas e exemplos: (retirado do msdn)

    TableGroup Características Exemplos
    Parameter

    Contém dados usados como parâmetros ou informação para configurar tabelas principais (uma tabela que tem o TableGroup do tipo Main).

    Este tipo de tabela geralmente contém apenas um registro por empresa (DataAreaId).

    CustParameters, VendParameters
    Group

    Contém dados usados para categorizar os registros das tabelas principais (uma tabela que tem o TableGroup do tipo Main).

    Existe um relacionamento um para muitos entre tabelas do grupo Group e Main.

    CustGroup, VendGroup
    Main

    Contém os principais dados usados na aplicação.

    Existe um relacionamento um para muitos entre tabelas do grupo Main e Transaction.

    CustTable, VendTable
    Transaction

    Contém dados transacionais.

    Geralmente estas tabelas não são populadas diretamente.

    CustTrans, VendTrans
    WorkSheetHeader

    Categorizam as informações nas tabelas do grupo WorkSheetLine.

    O relacionamento é de um pra muitos entre WorkSheetHeader e WorkSheetLine.

    SalesTable, PurchTable
    WorksheetLine

    Contém informações para serem validadas e inseridas dentro de transações.

    Em comparação com os dados das tabelas transacionais a diferença é que os dados das tabelas WorkSheetLines são temporários e podem ser removidos / alterados sem afetar as transações que já foram geradas..

    SalesLine, PurchLine
    Miscellaneous

    São dados que não se encaixam em nenhum dos grupos anteriores e é o valor default quando você cria uma tabela nova.

    TableExpImpDef

    []s
    Pichler





    Tags / Categorias

    RSS



    Arquivo

    Dynamics Community