Dynamics AX
  RSS Feed  LinkedIn  Twitter
Want to turn you're data into a true asset? Ready to break free from the report factory?
Ready to gain true insights that are action focused for truly data informed decisions?
Want to do all of this across mutliple companies, instances of Dynamics and your other investments?
Hillstar Business Intelligence is the answer then! (www.HillstarBI.com)

Hillstar Business Intelligence for Microsoft Dynamics AX and NAV on Mobile, Desktop, Tablet


Let us prove to you how we can take the complexity out of the schema and truly enable users to answer the needed questions to run your business! Visit Hillstar Business Solutions at: www.HillstarBI.com

Saturday, December 31, 2005

Preform a PackingSlip Update through code

To continue on with post like the previous, below is code that will take a given salesid an perform a packslip update on it.

public packSlipUpSO(SalesId _salesid)
{
SalesFormLetter SalesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip,true);
SalesTable SalesTable = SalesTable::Find(_salesId);
;

SalesFormLetter.update(SalesTable,systemDateGet(), SalesUpdate::ALL, AccountOrder::None, false, false);

}

This is in short form, because that is what someone left comments about on the last post, so I thought I would put this in short form just for them! Anyway, if you notice the 'SalesUpdate::ALL'. This enum tells the update posting that take the entire sales order and mark it has being packing slip updated. If you only wanted what was set as delivered now from within the sales line, then you could change this to the value: SalesUpdate::DeliverNow.

Also if you would like to see the longer version of this code please request it. I would also like to take the time and ask that anyone leave comments on any request or problem you might be having and I will be glad to help you solve it.

Find a job at: www.DynamicsAXJobs.com

Thursday, December 29, 2005

Confirm a Sales Order through code

Over the next few days I am going to post code that walks through the sales life cycle. To start below is code that will take a given SalesId and confirm it.

public boolean confirmSalesOrder(SalesId _salesId)
{
SalesFormletter SalesFormletter;
SalesTable SalesTable;
;

SalesFormletter =
SalesFormletter::construct(DocumentStatus::Confirmation,true);

SalesTable.clear();

SalesTable = SalesTable::find(_salesId);
SalesFormletter.update(SalesTable,
systemDateGet(),
SalesUpdate::All,
AccountOrder::None,
false,
false);

}

This code is straight forward and simple. It has been very useful to me, because we made a lot of changes to the Sales Life cycle of Axapta. What I did was create a Class that contained different methods for taking sales orders through the sales life cycle. Next is Packing Slip Update (when changed the name of this to Delivered.)

Find a job at: www.DynamicsAXJobs.com

Friday, December 23, 2005

Merry Christmas!

I just wanted to take the time and wish everyone a Merry Christmas! I hope joy feels everyone's hearts, and love is the focal point. Most of all, though I hope that everone keeps with them the reason for this season. Christ, Jesus / Yeshua - our saviour and Lord.

Merry Christ-mas!

Find a job at: www.DynamicsAXJobs.com

Monday, December 19, 2005

AOS Load balancing. When?

I recently posted a question to one of the several news groups I subscribe too. The question was one in which I can't find a lot of material on, and I got a really great reply from another member of the group. With his permission I will now post my question and his answer. Hopefully this can help out people in the future.

My Question:

Hello All,

In light of my current progress to improve performance of Axapta, I am working through some idea's. I was wondering, what do you base load balancing for the AOS on? To explain further, what amount of users, or usage, etc. does one look at to say "You know what we need... we need to add another AOS and do load balancing!"

I am trying to find this out, but can't find much documentation on this. I am also really unsure of how to Google this topic, because it does not pull up much help.

Anyway, any advice on this topic would be great. Has anyone ever went from a single AOS to two AOS's load balanced?

thanks,
Brandon


Malcolm Burtt's answer:

Hi Brandon

Well, I guess you'd look at the following...

1. Is my AOS processor bound and not able to take additional processors?
2. Is my AOS memory bound and not able to take additional memory?
3. Is my AOS network bound and not able to take another network card?
4. Is my AOS disk bound (unlikely on an AOS) and disk performance not able to be improved?

If the answer to any of the above is "yes" and your AOS machine is not providing ant other service that could be relocated to another server then you need to ask.

Is it more cost effective to add a new AOS (and cluster the two) or replace my existing AOS with a better specified machine that will not suffer the same resource deficiency? Note that, if your server is not memory bound but your Ax32Serv process has hit its 2GB memory limit then you are effectively memory bound. If your server has more than 4Gb RAM (i.e. enough for 2 x 2Gb plus sufficient for the operating system to continue to function) and the processor capacity to handle the extra load then you could consider adding an extra AOS instance on the same machine and clustering the two instances.

You might also consider that adding a newer AOS might result in a slightly imbalanced cluster. AFAIK The AOS load balancing picks the AOS with the least number of users on it. So, if you have two machines and one is newer (and therefore likely to be higher specified) its possible that users one the newer AOS will receive a better user experience than those on the older machine. Its not a particularly big problem but might complicate things for you as your needs expand again and the performance starts to dip for some users but not others (i.e. "why the hell is user A complaining when user B is not and why the hell did user B complain yesterday when user A did not").

Good luck

Malcolm Burtt
Touchstone
Our Trusted Solutions - Your Optimised Business


I plan on doing a lot of research in this for 3.0 and 4.0 to see the major differences, and what Microsoft recommends. I hope to try to have a nice write up about AOS load balancing, how to make it happen, when you should add another AOS server, and what to look for. So look for that and more here on the X! (new nick name for this blog!)

Find a job at: www.DynamicsAXJobs.com

Wednesday, December 14, 2005

MORPHX IT - Chapter Review: Reports

Hello everyone!

Recently I had Steen Andreasen on here for an interview about his up coming book: 'MORPHX IT'. I also said that I would review his recently pre-release chapter on reports, and here it is! THE REVIEW!

The chapter starts off like most of it's kind. Telling you what a report it, what makes up a report, etc. Laying the foundation like any good book, chapter for that matter, should. Going through the chapter, you can tell it's well wrote, and time was put into it. He gives a lot of example code, and example report parts. How to compile the report, what get's called, etc.

All in all I give the chapter an 8 out of 10. The reason why I give it an 8, is because of a few things. (1) It's a well written great chapter, that a lot of effort went into it. (2) It has great information on reports, and is a great starting place, tha will get you crearing reports if you read and follow it. (3) There's nothing like this, that I found, that gives this good of a run down on reports in AX. (4) He gives a great example of sending data to Word through the COM object to create a report in MS Word.

Now that is the good reasons, the negative's are:
(1) I believe Steen left out a very important piece with calling reports from code. You see he shows the example as a job, which it is fine to call from a job, or a form the Report.run(). But if you are calling a report from a class, then you must do a Report.Prompt() right before the Report.Run() or you will run into all kinds of problems. (2) The depth of the chapter is not enough if you are a seasoned developer. If you are a seasoned developer who is new to reports then this will get you started but will leave you with more questions that have to be answered through practice. If you are a seasoned developer with report design, etc. experince Then there will be a few things that you can take away from this chapter, but not much.

Now looking at this further, really this should have two rankings. A 9 out of 10 for newbie's, and a 7 out of 10 for seasoned developers, given the avg. 8 out of 10 ranking.

Now if someone were to ask me would I read Steen's book, or would I recommend it. If the rest of his book is like this pre-release chapter, then most for sured I Would recommend it!

Find a job at: www.DynamicsAXJobs.com

WinAPI::shellExecute() Method

Today I wanted to continue my post about the WinAPI class, and it's different methods. Something that is Very useful, and can be incorporated with launching websites, or other applications, etc. is the WinAPI::shellExecute() method. This method take variables, and based on what you send will launch as application, through the OS shell execute.

If anyone has every done any windows development, prior to or outside of X++, then most likely you have used the ShellExecute before.

Below is sample code that shows you how to launch IE, and feed IE a web site to launch, which happens to be a static HTML page in my c:\temp folder.

server static void WinAPITest(Args _args)
{
;
// WinAPI::shellExecute() returns an int value. 1 being that everything launched ok, 0 being a problem. (usually path, etc.)
// WinAPI::shellExecute(FileName _lpFile,[str _lpParameters, str _lpDirectory, str _lpOperation, int _show]);

// example
WinAPI::shellExecute("explorer.exe","c:\\temp\\TempInv.html","c:\\","",1);
}

If you copy and paste the above into a job, you will see the comments, and see it run like a champ! Of course instead of sending the static HTML page to launch you could also send an UNC path, or http:// path.

Well that's all for now!



Visit Hillstar Business Intelligence (www.HillstarBI.com) in order to truly unlock your data trapped in your Microsoft Dynamics investment. With our value driven business intelligence strategy Hillstar help you transform into a data informed company.


Find a job at: www.DynamicsAXJobs.com

Monday, December 12, 2005

DynamicsAXJobs.com stats update

Well,

As we close out the year, DynamicsAXJobs.com grows even bigger. Current stats are:

- 132 Job Seeker resumes
- 27 Employers
- Over 15 posted jobs since Sept. 12th.

I just want to thank everyone for giving us such a great start, and thank Christ and the Creator for giving me the ability to launch a site like this. I hope that is continues on, and that it grows as the AX community grows.

Find a job at: www.DynamicsAXJobs.com

Wednesday, December 07, 2005

WinAPI::copyFile() Method

To continue on with my post about the WinAPI class I thought I would post about something I used today! The WinAPI::copyFile() method. This is a great little method, that came in handy for me today, when I had to copy files to a location from within X++. The Method looks something like this:

WinAPI::copyFile(str _strFile, str _newfile, [boolean _overwrite])

With Example as:

WinAPI::copyFile("c:\\test.txt","c:\\temp\\test.txt",true);

Look for more post soon!

Find a job at: www.DynamicsAXJobs.com

Rounding in X++

I recently had to do some rounding in X++ on a real variable. This was due to some custom Rebate code. Anyway, I have some sample code here for rounding. I found it strange really how the synatx had to be and could not find anywhere on the internet what the synatx needed to be, so here you go:

server static void RoundExample(Args _args)
{
real r = 7.8413;
real a;
;

a = round(r,0.01);
r = a;
}

Anyway, if you put 0.00 in the decimal, then no decimal is used, but if you supply 0.01 in the decial variable then it works great. So if you wanted to round to 0.0000 then you would need to put there 0.0001.

Find a job at: www.DynamicsAXJobs.com

Friday, December 02, 2005

WinAPI::FileExists()

I thought I would start doing some mini posts on the WinAPI class in AX. This is a great class, because it has a lot of Static methods that access, like the name suggestions the Windows API.

One of the methods I have used a lot is the WinAPI::FileExists(). This method is returns a boolean value stating if the past in file name and path exists. Some sample code would look like:

if(WinAPI::fileExists("c:\\temp\\test.txt"))
{
// preform some code
}

Find a job at: www.DynamicsAXJobs.com


Copyright 2005-2011, J. Brandon George - All rights Reserved