Wednesday, 3 September 2014

CRM Dynamics 2013: Use Ctrl+S or click the CRM ‘Save’ icon to save your custom web resource´s entities

So, you have managed to create a custom html-javascript web page which you have inserted in your CRM as described here, right? Also, your page does some database calls and updates and you would like to use the save icon, already built in CRM to submit your changes. If this is the case, read along!

Tuesday, 26 August 2014

A [Description] Attribute approach for enums in Typescript

The problem at hand is that I need to use WebAPI services to get data structured in objects and use similar objects client-side in typescript code to structure and manipulate my frontend code. In C# and WebAPI I have the option to use enums:

1 public enum SearchOption
2 {
3 [EnumDescription("Starting With")]
4 StartingWith,
5 [EnumDescription("Contains")]
6 Contains,
7 [EnumDescription("Equal to")]
8 EqualTo,
9 [EnumDescription("Not Equal to")]
10 NotEqualTo
11 }

…which is very convenient because I then could get to the “description” info by reading the attribute for the enum. In typescript on the other hand, there are enums:

Thursday, 26 June 2014

Use form properties on an external web-resource in CRM Dynamics 2013

I assume that you have read my previous post and now you would like to bind the attached web resource to some information coming from the calling form, no?
This is supported out-of-the-box in CRM Dynamics 2011 as well as in 2013, but not automatically activated. To activate this feature, you will need to edit the customizations XML file.
Go find the solution that you have been working on and export it, making sure that the customizations option is checked:

Add navigation items in a form view

Hello again. This time I would like to share something with regard to CRM Dynamics 2013. I was trying to add a new navigation button under an account form. So this is how you do it.

First, you go into the solution where you want to add the new customization, in my case the solution was called Tickets. I made sure the Account Entity was included into it, yet I did not bother to include its dependencies.

Wednesday, 18 June 2014

Switching your HDMI inputs on a Samsung TV

Hi all, let's assume that you have a Samsung TV and a Raspberry Pi connected on an HDMI input.

Using CEC you could send:
 echo "as" | cec-client -s
to switch to the next input,. However this is inconvenient since it does not switch "back" to your previous input. So what can you do?

Get this lovely utility from here. (Disclaimer: I did not write this, I got it on GitHub). It is a lovely python script which you can use to send commands to your samsung TV AFTER you have turned it on. In my case I use the commands KEY_HDMI2 or KEY_HDMI3 but there is a great variety of commands that you can send.

Keep in mind, your device (where the script will run needs to be paired with your TV in order for this to work. This can be a simple procedure, the first time you fire a command the TV asks if you would like to pair with the device, you say yes and that's all.

Python is already installed on the xBian Linux for R-Pi. So, in the same manner that I have described here, you can set up an ssh command that executes this script with python on your raspberry Pi.

$ python KEY_HDMI.

A more comprehensive list of commands can be found online, search google for samsung and KEY_HDMI or look for example here.

Tuesday, 25 February 2014

Make SalesLogix Remember User Specific Preferences

Hello. Today I needed to implement a little checkbox in Saleslogix with a little twist. This checkbox must remember its value according to the user that is currently using it. In other words, if a user checks this box and then closes his SLX client, the checkbox must be checked the next time the user navigates to it.
This should be – like I said – user-dependent. Every user should be able to decide in which state he / she wants to operate the checkbox.
Saleslogix offers such methods out of the box. No creation of corresponding database tables and manual manipulation of values. This is done by using the embedded Application.UserOptions methods.
Inside the OnFormChange event, we check if the values exist and if so, we set them for the current instance:
 if Application.UserOptions.Exists("hideTestCheckBox", "LicenseContact" & Application.BasicFunctions.CurrentUserID) = true then  
     hideTestCheckBox.Checked = Application.UserOptions.GetAsBoolean("hideTestCheckBox", "LicenseContact" & Application.BasicFunctions.CurrentUserID)  
 End If  
Pay attention to the “Application.BasicFunctions.CurrentUserID” modifier for the CATEGORY KEY of the UserOption. Actually, the name UserOptions is not appropriate here since these keys are actually common for all users. Thus, we need to concatenate the group key with the current user ID to avoid exceptions trying to push entries with the same Primary key in SLX DB.

(The primary key consists of the combination of the two strings inside the “Exists” statement, in our case “hideTestCheckBox” and “LicenseContact + UserID”)

In the event where the checkbox gets updated, we need to push the updated value in the User Options. This is done as such:

 Sub hideTestCheckBoxClick(Sender)  
 if Application.UserOptions.Exists("hideTestCheckBox", "LicenseContact" & Application.BasicFunctions.CurrentUserID) = false then  
   Application.UserOptions.Add "hideTestCheckBox", "LicenseContact" & Application.BasicFunctions.CurrentUserID, "Hide Test Licenses", hideTestCheckBox.Checked  
 end if  
   Application.UserOptions.SetAsBoolean "hideTestCheckBox", "LicenseContact" & Application.BasicFunctions.CurrentUserID, hideTestCheckBox.Checked, false  
 End Sub  

Obviously we need to add the key to the database in case it is not there yet. The first “IF” statement is run only once here per user. But this is mandatory, otherwise SLX throws an exception that the key is missing.


Friday, 10 January 2014

Force-Validate Hidden Form Fields client-side

Hello again. Let´s say you have a couple of hidden fields inside an html form and the latest version of jQuery keeps on ignoring their validation on the client side. This has been the updated default behavior after version 1.9.0. Do you need to change it? Try inserting the script below in your page that contains the form.