Quantcast
Channel: Microsoft Dynamics 365 Community
Viewing all 10657 articles
Browse latest View live

Cannot find a valid offline scope with the name ‘YourTable’ in table ‘[scope_info]’.

$
0
0

Credit to Brian Storie for the contribution provided.

Symptom

Microsoft.Synchronization.Data.DbSyncException: Cannot find a valid scope with the name ‘YourTable’ in table ‘[scope_info]’. Ensure that this scope exists and that it has a corresponding valid configuration in the configuration table ‘[scope_config]’.

Cause

You have created a new Offline scope, added it to the POS Offline profiles form and run the 1095 job without deprovisioning it properly in your Channel database. The Channel database turned out to be in an invalid state.

Solution

  1. Backup Channel database.
  2. Open command prompt with elevated privilege and run the following command line: C:\Program Files (x86)\Microsoft Dynamics AX\60\Retail Database Utility>RetailDbUtilityCmd.exe DeprovisionChannelDB                  /StoreServername:<YourStoreServerName> /StoreDatabaseName:<YourStoreDatabaseName>
  3. Check if all the _tracking tables are successfully deleted in your Channel database.
  4. Open and run “Retail Channel Configuration Utility” as administrator.
  5. Select “Create offline database”.  Specify your Channel database and offline database information, click “Apply” to recreate the offline database again.
  6. Channel database and offline database should be provisioned successfully.

 


Work with Financial dimensions [AX2012, X++]

$
0
0

NOTES: All codes in this document based on CU12.

Disclaimer:

All the programming examples in this article are for illustration purposes only. Microsoft disclaims all warranties and conditions with regard to use of the programming example for other purposes. Microsoft shall not, at any time, be liable for any special, direct, indirect or consequential damages, whether in an action of contract, negligence or other action arising out of or in connection with the use or performance of the programming example. Nothing herein should be construed as constituting any kind of warranty.

From AX2012 we got a more flexible financial dimension feature. We can do more settings and customization on it to meet our requests. In this article, we will discuss following topics:

  1. How to add Financial dimensions’ control on a form.
  2. How to add Financial dimensions’ filter in a query.
  3. How Financial dimensions stored.
  4. How to create and modify a financial dimension.
  5. Tips for Financial dimensions.

The Financial dimensions here we are talking include Default dimension and Ledger dimension (account and dimension segment combination that used in ledger journal).

Default dimension:

Ledger dimension:

  1. How to add Financial dimensions’ control on a form.
  • Default dimension

    We have a table called FinancialDimensionDemo and it has a field call DefaultDimension which extends from EDT DimensionDefault.

    We created a form called FinancialDimensionDemo and want add default dimension control for field DefaultDimension.

  1. Add a tab page or group for show Default dimensions. And set AutoDeclaration to yes.

  2. Define an object of class DimensionDefaultingController in form’s classDeclaration method.

    public
    class FormRun extends ObjectRun

    {

    DimensionDefaultingController dimensionDefaultingController;

    }

  1. Override and add following code in form’s init method to initialize DimensionDefaultingController object.

    public
    void init()

    {


    super();

    dimensionDefaultingController = DimensionDefaultingController::constructInTabWithValues(false, true, true, 0, this, TabFinancialDimensions, “@SYS138491”);

    dimensionDefaultingController.parmAttributeValueSetDataSource(FinancialDimensionDemo_DS, fieldStr(FinancialDimensionDemo, DefaultDimension));

    dimensionDefaultingController.parmValidateBlockedForManualEntry(true); //Specifies whether validation should be enforced for dimension values marked as not allowing manual entry. The default value is false.

    }

  2. Open the form

  • Ledger Dimension

    We have a table called FinancialDimensionDemo and it has 2 fields called LedgerDimension which extends from EDT DimensionDynamicAccount, and AccountType which extends from EDT LedgerJournalACType.

    And table has following relation. If you create field by drag EDT, the relation will be created automatically.

    We created a form called FinancialDimensionDemo and want add ledger dimension control for field LedgerDimension.

  1. Drag AccountType and LedgerDimension fields from form Data sources to following grip.

    Set AutoDeclaration property of FinancialDimensionDemo_LedgerDimension as Yes.

  2. Go to define an object for class DimensionDynamicAccountController.

    DimensionDynamicAccountController dimensionDynamicAccountController;

  3. Override init method and add following code to init object of DimensionDynamicAccountController

    dimensionDynamicAccountController = DimensionDynamicAccountController::construct(FinancialDimensionDemo_DS, fieldStr(FinancialDimensionDemo, LedgerDimension), fieldStr(FinancialDimensionDemo, AccountType));

    dimensionDynamicAccountController.parmDimensionAccountStorageUsage(DimensionAccountStorageUsage::Transactional);

    dimensionDynamicAccountController.parmPostingType(LedgerPostingType::LedgerJournal);

    dimensionDynamicAccountController.parmValidateBlockedForManualEntry(true);//Specifies whether validation should be enforced for dimension values marked as not allowing manual entry. The default value is false.

  4. Override following method of datasouce field LedgerDimension

    public Common resolveReference(FormReferenceControl _formReferenceControl)

    {

    Common common = dimensionDynamicAccountController.resolveReference();


    return common;

    }


  5. Override following methods of the SegmentedEntry Control FinancialDimensionDemo_LedgerDimension.

    public
    boolean validate()

    {


    boolean isValid;

    isValid = super();

    isValid = dimensionDynamicAccountController.validate() && isValid;


    return isValid;

    }

    public
    void segmentValueChanged(SegmentValueChangedEventArgs _e)

    {


    super(_e);

    dimensionDynamicAccountController.segmentValueChanged(_e);

    }

    public
    void loadSegments()

    {


    super();

    dimensionDynamicAccountController.parmControl(this);

    dimensionDynamicAccountController.loadSegments();

    }

    public
    void loadAutoCompleteData(LoadAutoCompleteDataEventArgs _e)

    {


    super(_e);

    dimensionDynamicAccountController.loadAutoCompleteData(_e);

    }

    public
    void jumpRef()

    {

    dimensionDynamicAccountController.jumpRef();

    }

  6. Open form

  1. How to add Financial dimensions’ filter in a query
  • Default Dimension

    Use following methods to filer default dimension

    SysQuery::addDimensionAttributeRange()

SysQuery::addDimensionAttributeFilter()

static
void searchDefaultDimension(Args _args)

{

Query q;

QueryRun qr;

QueryBuildDataSource qbds;

FinancialDimensionDemo financialDimensionDemo;


//q = new Query(queryStr(FinancialDimensionDemoQ));

q = new Query();

qbds = q.addDataSource(tableNum(FinancialDimensionDemo));

     //SysQuery::clearDimensionRangesFromQuery(q); //Clear exists filter value.

SysQuery::addDimensionAttributeRange(q,

qbds.name(),//’FinancialDimensionDemo’,


‘DefaultDimension’,

DimensionComponent::DimensionAttribute,

queryRange(‘001’, ‘004’),


‘Cashflow’);


//SysQuery::addDimensionAttributeFilter(q,


//qbds.name(),//’FinancialDimensionDemo’,


//’DefaultDimension’,


//DimensionComponent::DimensionAttribute,


//’001′,


//’Cashflow’);

qr = new QueryRun(q);


while(qr.next())

{

financialDimensionDemo = qr.get(tableNum(FinancialDimensionDemo));

info(financialDimensionDemo.JournalId);

}

}

  • Ledger Dimension

    Use following methods to filer default dimension

    SysQuery::addDimensionAttributeRange()

    SysQuery::addDimensionAttributeFilter()

    static
    void searchLedgerDimensionByDimAttribute(Args _args)

    {

    Query q;

    QueryRun qr;

    QueryBuildDataSource qbds;

    FinancialDimensionDemo financialDimensionDemo;


    //q = new Query(queryStr(FinancialDimensionDemoQ));

    q = new Query();

    qbds = q.addDataSource(tableNum(FinancialDimensionDemo));

    SysQuery::addDimensionAttributeRange(q,

    qbds.name(),//queryBuildDataSource.name()


    ‘LedgerDimension’,//fieldStr(GeneralJournalAccountEntry, LedgerDimension)

    DimensionComponent::DimensionAttribute,

    queryRange(‘100000’, ‘110150’),


    ‘MainAccount’);//DimensionAttribute::find(DimensionAttribute::getMainAccountDimensionAttribute()).Name);

    SysQuery::addDimensionAttributeRange(q,

    qbds.name(),//queryBuildDataSource.name()


    ‘LedgerDimension’,//fieldStr(GeneralJournalAccountEntry, LedgerDimension)

    DimensionComponent::DimensionAttribute,


    ‘004’,


    ‘Cashflow’);//DimensionAttribute::find(dimAttrId).Name

    qr = new QueryRun(q);


    while(qr.next())

    {

    financialDimensionDemo = qr.get(tableNum(FinancialDimensionDemo));

    info(financialDimensionDemo.JournalId);

    }

    }

    static
    void searchWithLedgerDimension(Args _args)

    {

    Query q;

    QueryRun qr;

    QueryBuildDataSource qbds;

    FinancialDimensionDemo financialDimensionDemo;


    //q = new Query(queryStr(FinancialDimensionDemoQ));

    q = new Query();

    qbds = q.addDataSource(tableNum(FinancialDimensionDemo));

    SysQuery::addDimensionAttributeRange(q,

    qbds.name(),


    ‘LedgerDimension’,

    DimensionComponent::LedgerDimensionDisplayValue,


    ‘*-*-025-*’);//,


    //’??’);

    qr = new QueryRun(q);


    while(qr.next())

    {

    financialDimensionDemo = qr.get(tableNum(FinancialDimensionDemo));

    info(financialDimensionDemo.JournalId);

    }

    }

  1. How Financial dimensions stored

[Tables]

DimensionAttribute: This table stores financial dimensions.

DimensionAttributevalue: This table stores the value of the financial dimension. There is a EntityInstance field in this table. That’s the relation to the value original table.

FinancialTagCategory: This table stores record of custom financial dimension.

DimensionFinancialTag: this table stores custom financial dimensions value.

[Views]

DimAttribute*: These views can show you the dimension value and it’s backing record.

  • Default dimension

    [Tables]

    DimensionAttributeValueSet: this table stores the record of the default dimension.

    DimensionAttributeValueSetItem: this table stores the attribute value of the default dimension.

    [Views]

    DefaultDimensionView

    DimensionAttributeValueSetItemView

    static
    void getSpecifiedDefaultDimension(Args _args)

    {

    DimensionAttributeValueSetItem dimensionAttributeValueSetItem;

    DimensionAttributeValue DimensionAttributevalue;

    DimensionAttribute dimensionAttribute;


    select
    firstOnly dimensionAttributeValueSetItem


    where dimensionAttributeValueSetItem.DimensionAttributeValueSet == 52565471266


    join DimensionAttributevalue


    where DimensionAttributevalue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue


    join dimensionAttribute


    where dimensionAttribute.RecId == DimensionAttributevalue.DimensionAttribute

    && dimensionAttribute.Name == ‘Department’;


    print dimensionAttributeValueSetItem.DisplayValue;


    pause;

    }

  • Ledger dimension

    [Tables]

    DimensionAttributeValueCombination: Stores combination of ledger dimension

    DimensionAttributeValueGroup: Stores dimension group

    DimensionAttributeValueGroupCombination: Store relation of DimensionAttributeValueGroup and DimensionAttributeValueCombination

    DimensionAttributeLevelValue: Stores dimension value of ledger dimension

    [Views]

    DimensionAttributeLevelValueAllView

    DimensionAttributeLevelValueView

    static
    void getSpecifiedLedgerDimension(Args _args)

    {

    DimensionAttributeValueGroupCombination dimensionAttributeValueGroupCombination;

    DimensionAttributeLevelValue dimensionAttributeLevelValue;

    DimensionAttributeValue dimensionAttributeValue;

    BankAccountTable bankAccountTable;


    while
    select dimensionAttributeValueGroupCombination


    where dimensionAttributeValueGroupCombination.DimensionAttributeValueCombination == 52565574540//ledgerDimension


    join dimensionAttributeLevelValue order
    by Ordinal asc


    where dimensionAttributeLevelValue.DimensionAttributeValueGroup == dimensionAttributeValueGroupCombination.DimensionAttributeValueGroup


    join dimensionAttributeValue


    where dimensionAttributeValue.RecId == dimensionAttributeLevelValue.DimensionAttributeValue


    //Specified dimension


    //join DimensionAttribute


    //where DimensionAttribute.name == ‘CostCenter’


    // && DimensionAttribute.RecId == dimensionAttributeValue.DimensionAttribute

    {


    //Back entity table


    //if (dimensionAttributeValue.getEntityInstance().TableId == tableNum(DimAttributeBankAccountTable))


    //{


    //bankAccountTable = BankAccountTable::find(dimensionAttributeValue.getName());//dimensionAttributeLevelValue.displayValue


    //break;


    //}

    info(dimensionAttributeLevelValue.DisplayValue);

    }

    }

  1. How to create or modify a financial dimension.
  • Default dimension

    [Create]

    static
    void CreateDefaultDimension(Args _args)

    {

    Struct struct = new Struct();


    container defaultDimensionCon;

    DimensionDefault dimensionDefault;

    ;

    dimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId([2,‘BusinessUnit’, ‘001’,


    ‘CostCenter’, ‘007’]);

    dimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId([3,‘BusinessUnit’, ‘001’,


    ‘CostCenter’, ‘007’,


    ‘Department’, ‘022’]);

    struct.add(‘BusinessUnit’, ‘001’);

    struct.add(‘CostCenter’, ‘007’);

    defaultDimensionCon += struct.fields();

    defaultDimensionCon += struct.fieldName(1);

    defaultDimensionCon += struct.valueIndex(1);

    defaultDimensionCon += struct.fieldName(2);

    defaultDimensionCon += struct.valueIndex(2);

    DimensionDefault = AxdDimensionUtil::getDimensionAttributeValueSetId(defaultDimensionCon);

    }

[Modify]

static
void ReplaceDimensionAttributeValue(Args _args)

{

DimensionDefault dimSource, dimTarget, dimReplaced;

dimTarget = 52565471266;

dimSource = AxdDimensionUtil::getDimensionAttributeValueSetId([1, “Department”, ‘022’]);

dimReplaced = DimensionDefaultingService::serviceReplaceAttributeValue(dimTarget,

dimSource,

DimensionAttribute::findByName(‘Department’).RecId);

}

System will create a new default dimension which just the replaced attribute is different than source default dimension.

  • Ledger dimension

    [Create]

    static
    void CreateLedgerDimension(Args _args)

    {


    //print DimensionStorage::accountNum2LedgerDimension(‘1101’,LedgerJournalACType::Cust);


    print DimensionDefaultingEngine::getLedgerDimensionFromAccountAndDim(MainAccount::findByMainAccountId(‘110150’).RecId,

    DimensionHierarchy::getAccountStructure(MainAccount::findByMainAccountId(‘110150’).RecId),


    52565471266);//default dimension


    pause;

    }

    static
    void CreateLedgerDimension2(Args _args)

    {

    LedgerDimensionAccount ledgerDimension;

    ledgerDimension = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum(‘110150’),


    52565471266);//default dimension

    info(strFmt(“%1: %2”, ledgerDimension, DimensionAttributeValueCombination::find(ledgerDimension).DisplayValue));

    }

    [Modify]

    static
    void ReplaceLedgerDimensionValue(Args _args)

    {

    LedgerDimensionAccount ledgerDimension, ledgerDimensionReplaced;

    DimensionDefault dimSource, dimTarget, dimReplaced;

    ledgerDimension = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum(‘110150’),


    52565471266);//default dimension

    info(strFmt(“%1: %2”, ledgerDimension, DimensionAttributeValueCombination::find(ledgerDimension).DisplayValue));

    dimTarget = DimensionStorage::getDefaultDimensionFromLedgerDimension(ledgerDimension);

    dimSource = AxdDimensionUtil::getDimensionAttributeValueSetId([1, “Department”, ‘022’]);

    dimReplaced = DimensionDefaultingService::serviceReplaceAttributeValue(dimTarget,

    dimSource,

    DimensionAttribute::findByName(‘Department’).RecId);

    ledgerDimensionReplaced = DimensionDefaultingService::serviceCreateLedgerDimension(DimensionStorage::getDefaultAccountForMainAccountNum(‘110150’),

    dimReplaced);//default dimension

    info(strFmt(“%1: %2”, ledgerDimensionReplaced, DimensionAttributeValueCombination::find(ledgerDimensionReplaced).DisplayValue));

    }

    Actually, here is to create a new ledger dimension. Update the records of ledger dimension or default dimension may cause data consistency issues.

  1. Tips for Financial dimensions.
  • Useful classes:

    DimensionDefaultingEngine

    DimensionDefaultingService

    DimensionStorage

    AxdDimensionUtil

    These classes have some static methods that very useful. You can get details from MSDN.

  • Some time we may need to debug what’s kind of account and default dimensions be used when posting certain transaction. You can try set a breakpoint in following method:

    DimensionDefaultingService::serviceCreateLedgerDimension()

  • The ledger dimension default account that used for settings on parameter form that without segment.

    For example, the account that used for posting profile, inventory posting….

    static
    void accountNum2Dimension(Args _args)

    {


    print DimensionStorage::getLedgerDefaultAccountFromLedgerDim(DimensionDefaultingEngine::getLedgerDimensionFromAccountAndDim(MainAccount::findByMainAccountId(‘140200’).RecId,

    DimensionHierarchy::getAccountStructure(MainAccount::findByMainAccountId(‘140200’).RecId),


    0));


    print DimensionStorage::getDynamicAccount(‘1001’, LedgerJournalACType::Vend);


    print DimensionStorage::accountNum2LedgerDimension(‘1001’, LedgerJournalACType::Vend);


    pause;

    }

Mobile Apps: Helping Manufacturers Make Better Decisions

$
0
0

The right business decision can mean the difference between success and failure, especially in the manufacturing space. However, making the right decision can be challenging. There’s a formula for making the right decision: relevant information plus time. Here’s the problem, though. You can’t always get all of the information you need in what is usually a limited amount of time in which to make a decision.

Mobile apps can solve this problem – they enable manufacturers to access relevant, timely data when they need it most.

Mobile Apps and Real Time Data

We’ll use an example to illustrate the point.

Jim is the CEO at a glassware manufacturing company, Vitria. The firm has a few different lines of glass cooking dishes.

As with any product, some items are more popular than others. However, there are some items that are so unpopular that it’s no longer profitable for Vitria to manufacture them. The quarter is coming to an end, and Jim has some decisions to make.

Which lines should be discontinued? Which lines are popular (and profitable)? And how can Jim get accurate data quickly?

Vitria recently implemented a mobile app that contains real time data on sales. With a few clicks, Jim learns that certain dishes have fallen out of favor with consumers. Another few clicks tell Jim that a couple of other products have sold quite well. And it would be quite easy for the factory to begin manufacturing more of the popular products.

The Information You Need, When You Need It

Here’s another example.

One of the machines at Vitria has broken down. It’s old, and the decision makers have put off replacing it. Now, they can’t put it off any longer – no one makes the parts to repair it.

Jim and his team need to make a few decisions. Does Vitria really need to buy another piece of equipment? Can other machines pick up the slack? If Vitria can’t avoid buying a new piece of equipment, what’s the best one to buy?

Thanks to the mobile app, Jim and his team can easily find this information. Sensors built into the equipment tell them the machines’ current output and their maximum capacity. As it turns out, Jim and his team learn that they can increase production by shifting the burden to other machines temporarily.

What about buying a new machine? The procurement function of the app helps Jim and his team find the best solutions to replace the broken machine while adhering to Vitria’s budget.

Making the Case for Mobile Apps in Manufacturing

While the examples above are purely anecdotal, the power of mobile apps in the manufacturing space is very real.

Mobile apps enable manufacturers to access real time data to make the best possible decisions. These decisions affect productivity, efficiency, and profitability.

Applications can sometimes intimidate business leaders. They worry their organizations will never see ROI from them. This is an unfounded fear, as the right mobile app brings ROI quickly and even generates savings.

The post Mobile Apps: Helping Manufacturers Make Better Decisions appeared first on Merit Solutions.

WEBINAR: DYNAMICS AX TRACKING PRODUCTION COSTS TO THE GENERAL LEDGER

$
0
0

Summit Encore Series Webinar: Financial Impacts of Production

Our job of implementing Enterprise Resource Planning (ERP) and being a Cloud Service Provider (CSP) requires that we listen to our customers and respond by solving our customers biggest problems with automated software.  In spite of other software's big promises, companies still struggle with quantifying the real cost of producing finished goods. Our team frequently gets questions about production costing from our manufacturing customers.

(more…)

Monthly curated list of AX development news from the community - 2016 12

$
0
0
Here is the shortlist of what I think is the most important developer community news from this month.

X++, the catch
Create a new language in Microsoft Dynamics 365 for Operations
How to solve AX Data Refresh with Powershell?
Find assembly for a given type – in AX 7
Testing AX7 OData services with Fiddler
ssms-visualstudio-addin
Extensible control – HTML/JavaScript
Extensible control – X++ classes
How To: Extending report menu items

This is a list I try to keep as short as possible, making it manageable for most people to look through the articles on the list. If your article is not on the list, I may have overlooked it (hope not) or it fell for the prioritization of making this list short. I have a lot more ongoing links on my Twitter profile and my Flipboard magazine.

Dynamics podcast // Episode 7 // BrandingNoise

$
0
0
Jon Rivers and Jeff Shuey join us to talk about Marketing and branding, the Microsoft acquisition of LinkedIn, the different Dynamics conferences, how to reach out to Millenials, IAMPC and much more. ...(read more)

From the Microsoft Dynamics AX Blogs: Favorites in AX; Service objects; Create new countries; Item units of measure

$
0
0
A selection of the latest insight from the Microsoft Dynamics AX blogs: Using Favorites in AX Let's talk Service Objects in Dynamics 365 How to Create a New Country for Localizing Dynamics 365 for Operations Changing the Unit ...read more

AX 2012 - One or more conflicting model elements already exists in an installed model. How to know the conflict element.

$
0
0
Hi All

How many times during a model installation you faced the error "One or more conflicting model elements already exists in an installed model."?

In order to install the Models usually I prefer use the Powershell command, like Install-AXModel with "-verbose" option just to see more details in case an error.

Unfortunately the "-verbose" option do not help us to find the element in conflict.

Instead, using "-verbose" option together with AxUtil resolve our issues. In this case is showed the element name that generate the conflict.



Enjoy!

AX 2012 - TFS Build Failed, Timeout during XPO Import

$
0
0
Hi Guys

Let me say, start the New Year with a post is a good start. What do you say?

Back to us, if the TFS Build fail, the causes could be many.

However, from my experience if fails with a Timeout during the XPO Import (you can achieve this through the Build Txt log), the reasons can be two:


1-    Someone delete an AOT object without commit the operation on TFS. Afterward someone else create a new AOT object and add it to TFS. This one could have the same GUID of the deleted object.

2-    Someone rename an AOT object but on TFS (through TFS Solution Explorer), the object have the new name but inside the XPO is present the old name (In my opinion this is a Microsoft bug)!!!

In both case the TFS Build fails.

In order to understand which object create the issue you have to:


1-    Restore the AX Baseline Database (the DBs without any AX Customizations) on your TFS Build AX Environment
2-    Run the XPO Import process manually and verify the error
3-    Fix the error on Dynamics AX or TFS as mentioned above
4-    Rerun the TFS Build Process

Happy New Year!

Remove spaces from Text in Ax 2012

$
0
0
To Remove spaces from Text you can get idea from below code sample. Here we are update name fields which include spaces on right and left side .

 Dirpartytable   Dirpartytable;  
Name Name;
;
while select forUpdate Dirpartytable
{
ttsBegin;
Name= strRTrim(strLTrim(Dirpartytable.Name));
Dirpartytable.Name = Name;
Dirpartytable.doUpdate();
ttsCommit;
}
info("Done");

NewYear = 2016 + 1; Info(“Happy new year!”);

$
0
0

On the last day of the year 2016 I was looking back at the past year.  It has been an extremely busy year. Business wise I was mainly working for two customer projects, managed to get our Data Validation Framework ISV solution into “AX7” and did some smaller tasks in between. In private I coached 2 […]

The post NewYear = 2016 + 1; Info(“Happy new year!”); appeared first on Kaya Consulting.

Procurement workflow in Dynamics AX 2012 – Love and hardship in an implementation

$
0
0
A while back I was implementing AX 2012 (R2 I believe – but I will illustrate the learnings in R3) in a Project heavy organization. I must admit that we underestimated the requirements in terms of the...(read more)

Service management activities

$
0
0
Microsoft released the Service management module with AX 4.0 back in 2006 at the time I was Program manager for the area which meant responsible for the design of the module (“good” old waterfall model...(read more)

January 4: MSDynamicsWorld launches Microsoft Dynamics AX costing seminar (free to subscribers)

$
0
0
On Wednesday, January 4, MSDynamicsWorld will launch a comprehensive 10-session seminar on Dynamics AX Costing. Acting as presenter is Don Riggs , who for much of his 25-year career has trained cost accountants as a trainer and engineered costing-related ...read more

Run time workflow Type Change Customization in Dynamics Ax 2012.

$
0
0

Recently I completed a customization.  Basic requirement is workflow type have to decide on Certain enum based value at run time.

For dumpy example, I have two customized type for Sales Order. External Sales and Internal Sales.

And Workflow based on same query or table will be different for external sales and internal sales.

For this you have to left empty Workflow in Design Property of form.

 

You have to over write. LoadWorkflowConfiguration

 

For more reference Kindly explore the ledgerjournaltable form.


Product Attributes - Solving the Mystery

$
0
0
Product attributes in AX can be a mystery. Why are they there? What do they tie to? How do I set them up? Can I have separate product attributes for different types of products? Within this post, I will break down the mysteries surrounding Product attributes...(read more)

Auto charges for sales order in Microsoft dynamics AX 2012 R3

$
0
0
Hello Readers, Hope !! you are all well :-) After a gap of almost three months, here I am ready to post the new topic of AX. I hope you will find this post interesting. In this topic, I will walk you through...(read more)

Workflow infrastructure configuration wizard in Ax 2012

$
0
0
Workflow infrastructure configuration wizard.

1. Click Area Page node: System administration -> Setup -> Workflow -> Workflow infrastructure configuration.


2. Click the Next > button.

3. Switch to the Configure the workflow message processing batch job tab on the Workflow infrastructure configuration wizard form.


4. Click the Next > button.

5. Switch to the Configure the workflow due date processing batch job tab on the Workflow infrastructure configuration wizard form.


6. Click the Next > button.

7. Switch to the Configure the line-item workflow notifications batch job tab on the Workflow infrastructure configuration wizard form.




8. Change Repeat job after the specified number of minutes from '30' to '1'.

9. Click the Next > button.

10. Switch to the Completing the workflow infrastructure configuration wizard tab on the Workflow infrastructure configuration wizard form.




11. Click the Finish button.

12. Close the Workflow infrastructure configuration wizard form.

13. Click Area Page node: System administration -> Inquiries -> Batch jobs -> Batch jobs.




Peripheral Simulator in new release of Dynamics 365 Operations

$
0
0
With one of the latest releases of Dynamics 365 Operations we have the option of simulating hardware peripherals like printers, cash drawers and so on. The idea is to allow the user to simulate the flow...(read more)

AX7 event handler for QueryExecuting to filter data of form

$
0
0
1. Copy Form ->Data source ->Event-> onQueryExecuting. 2. Past this code in New class. This can be used for data filter on form. [FormDataSourceEventHandler(formDataSourceStr(CaseDetail, CaseDetailBase...(read more)
Viewing all 10657 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>