Saturday, June 21, 2014

AX 2012 issue with menu item button not showing selected record in new form

I recently hit an issue where a lines record with a menu item button was not opening an associated form with the selected record. Normally, adding the menu item button to the form and tieing it to the data source would open the new form showing the record that I had selected on the previous grid.

The ultimate goal was to have a number of lines available in a details grid, select a record, and click a button which would open a new form and show an editable XML for data manipulation. A feature like this is absolutely imperative for interfaces. I've written similar functionality into existing interfaces but this one was tripping me up for some reason.

This is like AX Development 101 stuff. For some reason, there were things on this form preventing it from opening as it should. The normal methods were running short and I didn't want to resort to the menu item parameters via X++ yet. There had to be a way to do this some other way since it was not complex.

In  poking around a bit more, I set the 'CopyCallerQuery' property to 'Yes' instead of 'Auto' and the issue was resolved. See below for the menuItemButton having this property set to Yes.

I've never had to set this parameter before so I think the Auto was automatically triggering to 'Yes' but in this case, reverting to 'No'. Again, I've never encountered this before so I'm not sure why it would revert to 'No'. I did not investigate as to why this was happening, but did feel it important to post about. Hope it helps someone out. Even just one and this post is justified. #TigerBlood #Winning

UPDATE (3hrs after posting): Figured out the issue. Just tired so I didn't think of it at the time. I was calling a form which had that selected record from the caller form as the primary data source. There were no table relations as it was the same record. If the primary table on the second form is a different table with relations in place, the form would be fine without the parameter set below. 



Sunday, June 1, 2014

Retailing in the modern world Pt III - The careful balance in maximizing profits

The goal of a business is to make profit. You need to increase profit in order to grow or sustain a business. You can increase profit by lowering costs and/or increasing revenue. How do you do this? That can literally be the million dollar question. It can also be the question standing between your business and prosperity. The answer can vary from industry to industry and the key to finding it depends on number of factors ranging from timing to personalities to ideologies. The answer will also change as the retail landscape continues to evolve at an ever increasing rate. 

When determining what path to take, remember that there is a delicate balance between reducing costs and increasing revenue. As an example, If you reduce costs by using cheaper parts, you may be making an inferior product. This may result in fewer purchases and more returns thus lower revenue. On the other hand spending too much money on something, like a mobile app for your company, can increase your costs and thus lower your profits.  
How do you know where to skimp and where to splurge?
As stated in previous posts in this series, the answer is different from channel to channel and industry to industry. What may work for the restaurant industry may not work for the wine industry. What works for a textile producer may not work for a clothing manufacturer. From a consultants perspective, how will you know how to advise your clients' positioning for optimal revenue growth? 

The key here is to really know your client's business intimately. Even if you know their industry, do you know your client's secret sauce? Do those industry secrets change the way various sales channels should be leverage? More than likely, its a resounding yes. Truly understanding an organization is a key component to turning a good strategy into a great one.

The next series of posts will analyze the various retail channels mentioned in Pt 1 of the Retailing in the modern world series: http://daxdude.blogspot.com/2014/05/retailing-in-modern-world-pt-i-business.html

Wednesday, May 28, 2014

Retailing in the modern world Pt II - Omni-channel vs Multi-channel buzz words

It is a big buzz word to say 'omni-channel retail' in today's world but what does that mean? Is it the same as multi-channel? No. Then what is the difference? Depends on interpretation.

    Multi-channel retail – involves both the sales and supply chain aspects of a retail channel independent of any other channel
    Omni-channel retail – same definition as multi-channel but involves integrating the various channels to create a seamless, 360 degree experience for the customer. For example, it is creating a wish list on the website and continuing your order from any other channel.
Really, omni-channel is an evolved iteration of multi-channel that was created as time went by and systems didn’t have to be disjointed solutions. When technologies like mobile first came out, they were completely separate worlds from existing retail channels that relied heavily on integrations and imports/exports. There were commonly large lags and discrepancies in data due to physical and data limitations of the time. Now that the concepts have been around for a while now and limitations reduced, solutions for that retail channel can be improved with interfaces reduced and optimized if existent at all.
Omni-channel is also a bit of a sales buzz word. Elements of the 360 view existed in systems that were dubbed multi-channel at the time. When things improve significantly, it helps to have a new name or something to distinguish it as new and an improvement. For instance, omni-channel sounds better than multi-channel. Xbox 360 is better than Xbox. PS4 is better than PS2.
However you define and view it, it all boils down to improving a seamless customer experience to assure a consistently exceptional experience. How do you best accomplish this? Have a centralized location for your ‘One version of the truth’.
What are the aspects of the seamless experience?
·         Branding
·         Pricing, Discounts, Shipping, and Taxes
·         Channel Management & Publishing
·         Catalog Management Enrichment & Publishing
·         Customer Management
·         Merchandising
·         EOD & Financials
·         Order Management & Fulfillment
·         BI/Reporting
·         Payment Processing
·         Inventory & Replenishment
As an example of a fully integrated omni-channel situation, if a customer has special pricing for an item at 9am on a specific day, they should be able to engage any retail channel at 9am and see consistent pricing across the board. It doesn’t seem like a big deal until you are encounter a situation where it isn’t working. These incongruences between systems is where some internet discount sites get their ‘hacker’ pricing or discounts. When I see these, it always makes me as a consumer second guess if I’m truly getting the best price from the same company.

Wednesday, May 21, 2014

Retailing in the modern world Pt I - Business marketing and sales channels

I'm going to write a series of posts relating to various retail channels and concepts in each. I hope they are informative to you. This is part one but look for the rest of the series to come out in the next few weeks. That being said, here is post one:

People generally specify marketing channels into two classifications: 1) Business to Business (B2B) and 2) Business to Consumer (B2C). Both channels are geared towards enticing increased revenues by optimizing the sales in retail channels via strategic planning for certain customers. They often share the same retail channels types to accomplish this.

What are the 3 big differences between B2B and B2C channels?

Customers: B2B channels are sales avenues between businesses while B2C are typically sales avenues for end-users of a product or service
Marketing: B2B sales are typically marketed through trade shows or mutual business associations while B2C are marketed through advertising, retail channels, or word of mouth.

Revenue: Generally, B2B transactions are larger in revenue and volume. The volume may be higher in this avenue but at the expense of margin (sales price). Quick note: Overhead may be lower in an organization with no brick and mortar and just B2B via portals and catalog sales

What are the different channels of B2B and B2B retailing?
  1. Brick and Mortar stores
  2. Online (E-commerce) stores (including B2B portals)
  3. Call Centers (telephone orders/support)
  4. Mobile stores
  5. Kiosks 
  6. Catalogs
  7. 3rd party direct sales
As the 'Retailing in the modern world' series goes on, we will look into the above channels in deeper detail in regards to increasing revenue, brand awareness, and leveraging technology to optimize these channels (my favorite topic!).  Stay tuned for more in this series!

Tuesday, May 13, 2014

AX 2012 - Conditionally hide a form control by current record

Occasionally we will need to change the accessibility of a certain controls/fields on a form in Dynamics AX. This can either be to hide/disable or show/enable the field from the user based on the current record they are on.

This is a pretty easy mod to do. Just follow the steps below. I'm using the example of hiding the field but you can just disable/enable the field from editing if you want using the allowEdit() property.

Your situation may be more complicated but this is meant to be a simple example. 
  1. Set the target form control's 'AutoDeclaration' property to 'yes'. by default it should be false
  2. For the primary record (e.g. in the grid), override the datasource's active() override if it is not already.
  3. After the super(), put the form control name in with the visible property. If you hit the period after the form control name and nothing pops up, 1) make sure the form control is spelled correctly and 2) check step 1 again to make sure the control has its autoDec set to yes.
    1. If the conditionals for the field to show up are complex, you might have logic and the visible property just assigning true/false, yes/no, etc outright. Example: FormControl_FieldName.visible(true);
    2. If the conditional is simple, like seeing if a field is a boolean or a type of a base enum, you can put the conditional statement in the parameters Example: FormControl_FieldName.visible(DSTableName.BaseEnumField == BaseEnum::Value2);
As an important caveat to changing any control properties on a conditional basis, if appropriate, make sure that you flip the controls to the next appropriate field. Test it out by toggling back and forth between records where the property will keep triggering back and forth.

Test your logic. Its pretty common people will have a field or button default a property to true/false, not not change the field again when moving to a new record. That means that the control will not have the value you want

Enjoy!

Thursday, May 8, 2014

The case for renaming AX 2012 R3 Call Center module to Order Management

In AX 2012 R3, there is a new module added called 'Call Center'. This module finally adds the functionality of a call center to the AX backoffice scene. With this, all of the retail functionality that was extended to the various retail channels (POS, ecommerce, mobile, etc) that previously was not available to AX sales orders now is available without the need for backoffice workers to open an instance of the POS.

That being said, a common question I've been getting from colleagues and clients is "What is this 'call center' exactly". Personally, I think the name is misleading and confusing. There are features in that module that everyone wants but not everyone wants a call center. Do they now need a call center to leverage these features? The short answer is no.

To curb this, I've been changing the label of the module from 'Call center' to 'Order management' when I show the functionality. Why? Call centers are a single retail channel. They beg for the image of a person with a headset talking to customers directly either for cold calling, taking orders, or customer service. Order management is not a retail channel and paints a picture of being able to look at sales orders in a broader sense to encompass multiple functions for orders. It also happens to include call centers, club management/continuity orders (like a wine club), order fraud detection across multiple retail channels, catalog management, payment management, etc.  The 'Call centers' module in AX is so much more than just a module for a single retail channel.

While some may disagree with me wanting to change this label, I will respectfully disagree. I was asked questions 100% of the time in regards to why functionality like continuity management and serialized coupons were in call center. Now, the name order management seems to better explain the functionality it has that previously seemed displaced.

The choice is yours!


Sunday, April 27, 2014

AX 2012 Error in loading label file. How to import new label files

Having been out of the AX development game for a while, I had not had the opportunity to import in label files in AX 2012 until April of this year. The label files went from actual files in the folder directories to within the AOT.

I needed to import some mods into a new environment and also include the label files. The label file from the AOT was exported into the XPO, but when attempting to import the file (Figure 1), I was receiving an error 'expected LABELFILE but found LANGUAGES' (Figure 2). From what I can gather the XPO only has language information of the label file but will not actually create the label file. This creates an issue on import. If we want the whole label file in the new environment (like I do), we should go a different route which I will explain below.

NOTE: This is just one way to move the labels. There are other methods. Choose the appropriate one for your situation

Figure 1 -  Import attempt of label file via XPO

 
 Figure 2 - The error trying to import a new label file via XPO

In the source environment, navigate out to the label you want to move to the new environment. Expand out nodes so you can see the language you need to migrate. Right click on the language (en-us for my example) and select 'Export to Label file' (Figure 3). You will need to select a location to save your .ald file for later import into the destination environment where you want the label.

The .ald file ('application label data' I believe) should look familiar to people from the previous versions of AX. In those previous versions there were also .ali (label index) and .alc (label cache) files. Just to clarify, depending on how you did the move in previous versions of AX, you didn't need to move those two files during migration; just moving the .ald would be sufficient. That is why in the method I'm showing, you only need to import the .ald file. The .ald file contains all the actual label data.

Figure 3 - The 'Export to Label file' option 

In the destination environment, right click on the 'Label files' node of the AOT. Select the 'Create from File' option (Figure 4). Again, to avoid confusion, this is for moving a label file with all of its contents to a new environment where the label doesn't exist. Select the .ald file exported from the source environment and click ok. You will receive a confirmation of the import (Figure 5).

At this point, you should see the new label file in your AOT. In my instance, it had a red line to the left of it indicating that the object needed to be saved. When right clicking on the new label file object in the AOT, I did not have an option to save the label like you can have on other objects. To save the file, I had to select the new object with the red line, then click the 'Save all' button in the AOT window tool bar (Figure 6). This saved the object. 

That should be all you need!

Figure 4 - 'Create from File' option when right clicking on the 'Label Files' node in the AOT


 Figure 5 - The imported label file confirmation

Figure 6 - Highlight the imported label and click the 'save all' button in the AOT window