There is a small change needed for mobile customizations in Infor CRM (Saleslogix) Mobile version 3.3 and higher. It's a small change, but one that will prevent your customizations from loading if you don't make it.
When customizing the Infor CRM (Saleslogix) Mobile client, it's common for the ApplicationModule to grow very large as more and more customizations get added into it. This makes the code difficult to work with and very poorly organized. There are some better solutions to keep your code nicely organized and easy to maintain.
Problem Showing All Area, Category, and Issue Values in Infor CRM (Saleslogix) Mobile And How to Fix
There is an issue with the Infor CRM (Saleslogix) Mobile client where, if you have a large list of Area, Category, & Issue values, not all of them will show in the lookup. This is caused by the fact that the out of the box AreaCategoryIssue lookup will retrieve only 200 rows, and, then filter the distinct list of these 200 rows to show the available area, category, or issue values. The problem comes into play when you have more than 200 rows in the AreaCategoryIssue table. Since only the first 200 rows are selected, you're only going to see the distinct values from those first 200 rows. Luckily, there is an easy solution.
I've had a few posts lately covering the ComboBox control in the Infor CRM (Saleslogix) Web Client. The ComboBox itself isn't too exciting. However, as I've mentioned in the previous posts, the fact that the Infor CRM ComboBox renders as a Dijit Select form widget makes it so much more powerful due to the fact that you can use it as a Dijit Select widget and not just as an ASP.NET control. In this post, we'll look at changing the widget type of the ComboBox to a filterable widget to make it even more useful. We can change the ComboBox so a user can type and the list will automatically filter to show the items matching as the user types – and do it with a single line of code. Pretty cool, right?
In my last post, I discussed how the Infor CRM (Saleslogix) ComboBox is a Dijit Select form widget. This opens up a few different things about what you can do to the control based on what is possible to do with the Dijit Select. For example, controlling the height of the popup list for the ComboBox.
There's a problem with the ComboBox control in the Infor CRM (Saleslogix) Web Client. It won't disable. Sure, it has an Enable property, but setting it to false has no effect on the control and it will remain enabled. However, there is a solution. Luckily, the control itself renders as a Dijit Select form widget from the Dojo UI Library so we can simply manipulate the control based on what can be done to the Dijit Select.
The blogs on customerfx.com go all the way back to 2003. There's years and years worth of information that we've accumulated and shared. Since the beginning of the Infor CRM (Saleslogix) web client, we've been posting and sharing what we've learned ever since. However, if you're just starting with developing & customizing the web client, it might be hard to know what to start reading. This post will contain an index of posts that would be a good place to start when getting started working with the web client.
Showing and hiding tabs in the Infor CRM (Saleslogix) client should be an easy thing. It should be something you can do on demand, and any time, no matter where things are in the page life-cycle. You should be able to show or hide tabs based on changes in other controls on the detail form. The help in Application Architect describes creating a module, an external assembly that you can wire up for the portal to show and hide tabs and runtime. That just feels like too much work to do something that should be simple. Let's take a look at a simpler route that you can do with just a line or two of code.
Avoiding the Dirty Data Message When Programatically Redirecting to a Record in Infor CRM (Saleslogix)
I'm not a huge fan of bugging end users. I figure, if an end user clicked something, he or she meant to click it. However, that's not always the case. It's especially a good idea for destructive actions or for things that will make a lot of changes and you want to make sure before you pass the point of no return. If a user clicks something and you need to confirm the action with some sort of "Are you sure?" prompt, then it must be done. So, I suppose it's a necessary evil and something that fortunately is very easy to do in Infor CRM (Saleslogix).
In most places in the Infor CRM (Saleslogix) web client, it's pretty easy to use security roles. You simply add the role string to an "Applied Security" property and the rest is magic. But what if you need to get more granular than that? What if you need to access the roles at runtime and apply security to something that doesn't have an Applied Security property? What if you need to apply role security to individual controls on a form, such as enabling or disabling a checkbox? Luckily, it is just as easy to use security roles programmatically as it is to apply them to properties of things in Application Architect.
Over the last year and a half I've been working on another product named Contatta. It's a great product and I'm really excited to see how it does in the marketplace. I got to work with some completely brilliant people and learned quite a bit as a developer. Many of the great minds behind Contatta were the same great minds that were formerly behind SalesLogix, including the wizards that authored the Argos framework that the Saleslogix mobile client is built on. Well, my contract working with Contatta has, for now, come to an end. As much as I loved working on Contatta, I am excited to, once again, get involved in the Saleslogix and Infor CRM community.
If you've had any exposure to SalesLogix, you'll have used a bundle. Bundles are great, but when it comes to delivering data or schema changes in a bundle, there have always been a lot of unknowns as to what is actually happening. What if the schema changes already exist in the target database? What about data, does it only insert or does it do updates if the data already exists? This post will attempt to clarify these questions so you'll no longer need to wonder about what is really happening when you deliver schema or data in a SalesLogix bundle.
Some entities in SalesLogix, such as Tickets, use a "pretty key" as an easier to use value to reference the record. These pretty keys take a SalesLogix table ID value and then create a value like 000-00-1234. If you are creating an external application with this functionality, you'll need to be able to create these pretty keys there as well.
Sometimes the easiest tasks can get in the way of doing the real work. Programatically looking up users should always be an easy task. When I noticed that we didn't appear to have a post on doing this on customerfx.com I thought it was time to create a post on this topic.
Most of the SalesLogix systems I see now days no longer use remote users. Instead, all users VPN into a central network to access SalesLogix, or use the SalesLogix Web and Mobile clients instead for remote users. This removes the need to worry about things like synchronization for remote users and also allows you to do some SalesLogix table manipulation without going through the SalesLogix OLE DB Provider since things no longer have to be "sync aware". This post will provide you with a SQL Stored Procedure to create SalesLogix table ID values from inside of SQL scripts. Keep in mind, you should only use this if you do not have remote users that synchronize with the host system.
We looked previously at adding custom fields to the SalesLogix Mobile client. It was easy enough to do, but as I've mentioned before, one of the hardest parts about customizing the mobile product is that you have to know what to type. Let's take a look at just what's available when adding custom fields in an customization module so you'll have all the knowledge you need.