28 March, 2011
Voting for the Most Influential People in Microsoft Dynamics continues...
Check out the Dynamics Community blog post on the voting for the most influential people in Microsoft Dynamics. They did a great job of highlighting the Dynamics GP contingent to make it easy for you to vote. They've moved me to Poll 5.
15 March, 2011
Dynamics World List of Influential People
I'm not really sure how, and no I did not nominate myself, but I made it into the top 260 nominees for Dynamics World's Microsoft Dynamics Most Influential People. Thanks to who ever did nominate me. You can view the list of nominees here.
Several of my old friends are on the list; Mark Polino, Ross Carlson, Dwight Specht, Troy Ensor, Bob McAdam, and Shane Hall to a name a few. Plus some of my new friends like Mariano and Dave Musgrave will surely be moving up the list this year. People like Andy Hafer really deserve the recognition for their contributions to the community as do all of the Dynamics MVPs that we all hear from so often. Many of those who run the popular VAR and ISV organizations are on the list as well.
You can vote for those that you think deserve recognition for their contributions at http://www.dynamicsworld.co.uk/2011Voting.php. You will have to scroll through the polls to find individuals you might want to vote for. I'm in Poll 11 as are Dwight Specht (IBIS), Tony DiBenedetto (TriBridge), Andy Hafer (GPUG), and Bill Marshall (MC2).
Several of my old friends are on the list; Mark Polino, Ross Carlson, Dwight Specht, Troy Ensor, Bob McAdam, and Shane Hall to a name a few. Plus some of my new friends like Mariano and Dave Musgrave will surely be moving up the list this year. People like Andy Hafer really deserve the recognition for their contributions to the community as do all of the Dynamics MVPs that we all hear from so often. Many of those who run the popular VAR and ISV organizations are on the list as well.
You can vote for those that you think deserve recognition for their contributions at http://www.dynamicsworld.co.uk/2011Voting.php. You will have to scroll through the polls to find individuals you might want to vote for. I'm in Poll 11 as are Dwight Specht (IBIS), Tony DiBenedetto (TriBridge), Andy Hafer (GPUG), and Bill Marshall (MC2).
11 March, 2011
Ooops! I marked a SOP Line as Drop Ship after I fulfilled it
I recently received a request to lock down the Sales Transaction Entry Line Drop Ship checkbox when a line had been fulfilled. This purpose was to prevent users from mistakenly marking a fulfilled line as Drop Shipped which automatically removes all of the Serial Numbers from the line.
To do this just add the Sales Transaction Entry window to Visual Basic. Then add the Quantity Fulfilled field and Drop Ship checkbox to your project. Copy the code below and paste it behind the SalesTransactionEntryDetail(Grid):
Private Sub Grid_AfterLineGotFocus()
DropShipLock
End Sub
Private Sub QtyFulfilled_AfterUserChanged()
DropShipLock
End Sub
Private Sub DropShipLock()
If QtyFulfilled.Value <> 0 Then
Dropship.Enabled = False
Else
Dropship.Enabled = True
End If
End Sub
This will enable or disable the Drop Ship checkbox based on whether the Quantity Fulfilled is equal to 0 on both the Grid After Line Got focus and Quantity Fulfilled After User Changed events.
You can do this yourself as I describe above or download and import the package file with this code here.
08 March, 2011
GP Password Expired mid-day... while I was posting a Batch
I was recently talking shop with another consultant that has a customer who's Dynamics GP password was valid when they logged in but expired after causing a batch posting interruption. Has this ever happened to you?
He submitted a support request to Microsoft to explain this issue and seek out a resolution. The response he received was:
As for ways to overcome the password becoming invalid mid-day, there are two options:
1. Keep the password synchronized (time-wise) with the windows password and use the windows password reminder as a GP password reminder
2. Use the GP Password Expiration Notification utility, freely available from the blog link below
http://mbsguru.blogspot.com/p/dynamics-gp-password-expiration-notice.html
Microsoft recommended the GP Password Expiration Notification utility with qualification, of course, that it is not something Microsoft created or provides support for. Even so, it's nice to see that this utility is serving the community well by helping to solve and prevent common problems.
If you haven't downloaded it already you should before you have to recover from a batch posting interruption because your password has expired.
He submitted a support request to Microsoft to explain this issue and seek out a resolution. The response he received was:
As for ways to overcome the password becoming invalid mid-day, there are two options:
1. Keep the password synchronized (time-wise) with the windows password and use the windows password reminder as a GP password reminder
2. Use the GP Password Expiration Notification utility, freely available from the blog link below
http://mbsguru.blogspot.com/p/dynamics-gp-password-expiration-notice.html
Microsoft recommended the GP Password Expiration Notification utility with qualification, of course, that it is not something Microsoft created or provides support for. Even so, it's nice to see that this utility is serving the community well by helping to solve and prevent common problems.
If you haven't downloaded it already you should before you have to recover from a batch posting interruption because your password has expired.
04 March, 2011
Dynamics GP 2010 R2 Feature List
Straight out of Tech Conference in Fargo this week, thanks to Dave Musgrave http://blogs.msdn.com/b/developingfordynamicsgp/archive/2011/03/04/microsoft-dynamics-gp-technical-conference-2011-day-1-morning.aspx, I came across this graphic that lists some of the exciting new features coming out with Dynamics GP 2010 R2:
There are several other great features and enhancements to Extender, Deployment and Migration Tools, and Email Support among others. It's always good to see that Microsoft continues to invest in what is already such a fantastic product. Well done.
Dave goes on to explain that not only is Dynamics GP not being laid to rest as some have speculated since Microsoft begin investing in Dynamics AX nearly a decade ago but rather in a future release they are planning to include a web based client for Dynamics GP. That's a great improvement that I think we can all look forward to but first let's look at what's coming now:
- Field Service Series customers should be looking forward to some of the FSS enhancements on deck:
- The Contract Line Hold feature is well overdue. I've had several clients that need this functionality.
- Tech Stock Replenishment will be a much welcomed addition. I'm actively working on a project where we are having to work around this.
- Contract Transfer Approval Workflow is something else our Contract Admin clients have been asking for. It's as though Microsoft is reading my mind.
- The Reporting and BI enhancements for Dynamics GP seem endless:
- More Excel Report functionality; Bulk Deployment, Group Excel Reports, Multi-Company Support, and Default Column Ordering will be great enhancements.
- MORE Analytical SSRS Reports and Metrics. I'm not sure any of us can get enough of those!
- New Business Analyzer! Mariano touches on that in his coverage of the conference here http://dynamicsgpblogster.blogspot.com/2011/03/microsoft-dynamics-gp-technical_02.html.
- MORE Word Templates; SOP Returns and Word Template Generator. I was skeptical of the Word Templates after first seeing them at Tech Conference 2010 but I have to admit they're growing on me.
There are several other great features and enhancements to Extender, Deployment and Migration Tools, and Email Support among others. It's always good to see that Microsoft continues to invest in what is already such a fantastic product. Well done.
03 March, 2011
Join us at our Microsoft Dynamics CRM 2011 Launch Event
Are you ready to renew your focus on business productivity? Then join us at our exclusive Microsoft Dynamics CRM 2011 launch event in Nashville where we will be exploring the power of the most highly anticipated CRM release in years.
This in-person event, hosted by Straight Arrow Consulting, Inc. CEO Tom Karpowich, will include a live demonstration from a true CRM expert - Ben Vollmer, as he shares with you ways he has helped other companies boost sales, improve marketing performance and enhance customer service through better use of their CRM technology. Ben is known for his impressive energy and deep technical expertise - You will enjoy this time with such a true CRM guru!
This in-person event, hosted by Straight Arrow Consulting, Inc. CEO Tom Karpowich, will include a live demonstration from a true CRM expert - Ben Vollmer, as he shares with you ways he has helped other companies boost sales, improve marketing performance and enhance customer service through better use of their CRM technology. Ben is known for his impressive energy and deep technical expertise - You will enjoy this time with such a true CRM guru!
This event is geared towards a select group of business and technical professionals—allowing you to network with Microsoft professionals and other customers in your area in an open, round-table style discussion about the concept and place of CRM in modern business.
We’ll help you envision your organization reaching unparalleled levels of effectiveness with:
- The fluent Microsoft Office user experience which saves employees time and increases adoption
- More insightful and actionable dashboard data
- Built in business connections, team management and process collaboration
The Microsoft Dynamics CRM 2011 Launch Event takes place on Wednesday, March 16th, 2011 at 8:15am. It could be that start you need to renew your focus on your own business’ productivity!
Visit http://www.straightarrowusa.com/microsoft-dynamics-crm/crm-2011 for more information or register now at https://www.clicktoattend.com/invitation.aspx?code=152507.
I hope to see you there!
02 March, 2011
Love, Hate and the ViewState
I was recently tasked with creating a SharePoint interface to Microsoft Dynamics GP Item Maintenance. As the client's business had grown, inconsistencies in theirItem Master became apparent. When new items were needed, a similar existing item was copied and the details updated to match the new item. If there were no similar items, a new item was created.
The problem was, many of the existing items were not properly categorized. There were people in the organization who knew bits of information about items, but nobody had all the information to correctly set up an item. Setting up an item properly required a combination of phone calls, emails and a little bit of luck. It could sometimes take weeks to get the item set up. This held up BOMs, Routings and pretty much everything else dependent on the new item.
As usual for a new project, we started with a discovery phase. We tried to identify the groups that knew the necessary bits of information about items and proceeded to schedule interviews. During the interviews we gathered a lot of information to help us get started. We also found several points that were unclear: i.e. Accounting said Billing provides this. Billing said it was Sales, Sales thought it was Purchasing, Purchasing pointed to Engineering and Engineering said it was Accounting. After a few round trips, we were able to pin most things down but in the end, there were still a few bits of information that nobody understood.
It was clear the Workflow would have to be very flexible. Adding to the complexity, some Items could bypass entire groups. For example, there's no need to set a price on an item if you don’t sell it. And why bother Purchasing if you are making this item in your own shop?
To solve this business problem, we needed to deliver a product with:
What's more, the fields and their rules were not known at design time. All the metadata describing the rules had to be parsed during form generation and postback.
While building this application I ran into a few challenges. One in particular had to do with updating posted values based on business rules and then rendering the fields, not as the user had posted, but as the rules dictated. Now that you know the background, how do we make this happen?
The ViewState is great! It makes your life as a web developer so much easier. Some action causes a postback and all the fields are repopulated with their values. You can handle events for a control without having to worry about the rest of the form. Controls get their IDs set automatically. What's not to love? Plenty.
And what if you want to disable ViewState on the whole page?
So, you’ve defeated the ViewState on a couple of projects and now it's time to build a SharePoint Web Part. Create the Web Part, add some controls, disable ViewState, deploy the Web Part and life is good! And we still have time to make happy hour (the first one!)
Wait a minute. Didn't you disable ViewState? Why aren't your backend changes sticking? Because SharePoint Web Parts love ViewState so much, they insist on using it. Disable it on the control? Doesn't matter. It happens anyway.
Actually, there are two:
The problem was, many of the existing items were not properly categorized. There were people in the organization who knew bits of information about items, but nobody had all the information to correctly set up an item. Setting up an item properly required a combination of phone calls, emails and a little bit of luck. It could sometimes take weeks to get the item set up. This held up BOMs, Routings and pretty much everything else dependent on the new item.
As usual for a new project, we started with a discovery phase. We tried to identify the groups that knew the necessary bits of information about items and proceeded to schedule interviews. During the interviews we gathered a lot of information to help us get started. We also found several points that were unclear: i.e. Accounting said Billing provides this. Billing said it was Sales, Sales thought it was Purchasing, Purchasing pointed to Engineering and Engineering said it was Accounting. After a few round trips, we were able to pin most things down but in the end, there were still a few bits of information that nobody understood.
It was clear the Workflow would have to be very flexible. Adding to the complexity, some Items could bypass entire groups. For example, there's no need to set a price on an item if you don’t sell it. And why bother Purchasing if you are making this item in your own shop?
To solve this business problem, we needed to deliver a product with:
- Flexible Workflow rules that could be adapted as the business changes (and as the users work with the system and discover steps that had been overlooked.)
- Field-Level security to ensure each group can only edit their section.
- The ability to assign some fields to multiple groups and users.
- The ability to add new fields and groups as new requirements surface.
- Audit Logging for accountability.
- An intuitive User Interface.
- The ability to open, edit and copy existing GP Items.
- The ability to push the approved changes back to GP.
What's more, the fields and their rules were not known at design time. All the metadata describing the rules had to be parsed during form generation and postback.
While building this application I ran into a few challenges. One in particular had to do with updating posted values based on business rules and then rendering the fields, not as the user had posted, but as the rules dictated. Now that you know the background, how do we make this happen?
The ViewState is great! It makes your life as a web developer so much easier. Some action causes a postback and all the fields are repopulated with their values. You can handle events for a control without having to worry about the rest of the form. Controls get their IDs set automatically. What's not to love? Plenty.
- The ViewState is transmitted and parsed with every page post/load cycle using bandwidth, memory and CPU cycles for the server and the client.
- The ViewState, while encoded, is not encrypted. I've seen this argument and I don’t think it's really all that relevant. After all, you are sending the same information back and forth through the form fields. And if you need to keep a secret, use HTTPS.
- The ViewState is persistent insistent. If I take the users' submitted data and do some processing on the backend, I just might want to change some values on the form when it is sent back. Suppose they tried to order 100 widgets but you just sold some and you only have 75. Send the form back to the user with quantity set to 75 and display a nice alert telling them they are lucky to get that many. Thanks to ViewState, the quantity field gets set back to 100 automatically. I know, JavaScript could validate the page before the user submits. But what if the user is running without JavaScript? I know I do unless I'm on a trusted page. Add-ons like NoScript offer significant protection while surfing and after a whitelisting your common sites, they pretty much stay out of the way. But even with JavaScript, if I'm dealing with Dynamic Data, (what other kind is there?) the validation rules may have changed since the page was loaded. I suppose I could build some AJAXy validation JavaScript, but again, you can't count on JavaScript being there and you should never trust anything a user submits, even if you think your JavaScript has sanitized it.
TextBox t = new TextBox(); t.EnableViewState = false; t.Text = this.ToString(); return t;
And what if you want to disable ViewState on the whole page?
private void Page_Init(object sender, System.EventArgs e) { this.EnableViewState = false; //do some other interesting stuff }
So, you’ve defeated the ViewState on a couple of projects and now it's time to build a SharePoint Web Part. Create the Web Part, add some controls, disable ViewState, deploy the Web Part and life is good! And we still have time to make happy hour (the first one!)
Wait a minute. Didn't you disable ViewState? Why aren't your backend changes sticking? Because SharePoint Web Parts love ViewState so much, they insist on using it. Disable it on the control? Doesn't matter. It happens anyway.
Control.ClearChildViewState() doesn't even help. How about firing up SharePoint Designer and disabling it for the entire Page that hosts the Web Part? Congratulations, you've done it, and you’ve disabled pretty much all the SharePoint functionality too. No, there has to be way around this.Actually, there are two:
- Create a LiteralControl and build it's Text property with the HTML you need to create your form field. Now you can render the LiteralControl and IIS will never even see the field. Remember, you will have to inspect the Post Variables yourself to find out how many widgets you just sold. Unfortunately, I tend to make the occasional mistake dynamically building HTML from within a C Sharp app. Leave off a quote or miss a closing tag and your form starts acting really strange. That brings us to the other option.
- Create your controls like normal and add them to parent controls if you like. No need to worry about the HTML, IIS will get it right. But instead of adding the controls to the page (or a page element) render them into the Text property of our friend the LiteralControl. Using a StringBuilder, a StringWriter and an HTMLTextWriter, it all falls into place
//...Build your textbox as you like. //Don't forget a unique ID. TextBox tbQuantity = new TextBox(); LiteralControl LControl = new LiteralControl(); LControl.Text = this.RenderControlToString(tbQuantity); this.Controls.Add(LControl);
public string RenderControlToString(WebControl Control) { StringBuilder sb = new StringBuilder(); using (StringWriter sw = new StringWriter(sb)) { using (HtmlTextWriter textWriter = new HtmlTextWriter(sw)) { Control.RenderControl(textWriter); } } return sb.ToString(); }
Subscribe to:
Posts (Atom)
