I have moved my blog to http://www.nullfactory.net. The transition is pretty much done and all new posts will be published to the new location.
Enjoy!
Credentials > Enable alternate credentials and providing new credential information. More instructions available here.Get-Credentials cmdlet. This provides the standard windows credentials dialog for the user to enter information. Since this makes the script interactive, I debated about having the username and password as a parameter for the script, but in the end decided against it. Maybe the next improvement would be to include a silent version of the script.Invoke-RestMethod cmdlet will be used to make the actual call to the REST service. So what's the difference between Invoke-WebRequest and Invoke-RestMethod you may ask? While similar, the Invoke-RestMethod attempts to parse the returned JSON so that we do not have to do it manually within our script. Think of it as a super set of Invoke-WebRequest just like Invoke-WebRequest is a superset of System.Net.WebClient. Read more about it here and here.Get-Credentials cmdlet would return a System.Management.Automation.PSCredential object as expected, but when passed into into the Invoke-RestMethod cmdlet, it was not generating the the basic authentication header token within the request. I still haven't figured out why this happens, but the workaround was to add the authentication header explicitly as shown here. $basicAuth = ("{0}:{1}" -f $username,$password)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers = @{Authorization=("Basic {0}" -f $basicAuth)}
https://{account}.visualstudio.com/defaultcollection/_apis/tfvc/changesets?api-version=1.0&searchCriteria.fromId=100&searchCriteria.toId=200&searchCriteria.itemPath=$/{project}
It took me a while to figure it out but you should notice this call is only allowed to be made against the entire Team Project Collection. So in order to filter out the project, provide the project path via the searchCriteria.itemPath filter. That is searchCriteria.itemPath=$/{projectname} where {projectname} is the one that you are interested in.https://{account}.visualstudio.com/defaultcollection/_apis/tfvc/changesets/{changesetId}/changes?api-version=1.0
path property of the json result set. This is the path and name of the file./system/usr/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl /system/usr/keylayout/Vendor_XXXX_Product_XXXX.kl /system/usr/keylayout/DEVICE_NAME.kl /data/system/devices/keylayout/Vendor_XXXX_Product_XXXX_Version_XXXX.kl /data/system/devices/keylayout/Vendor_XXXX_Product_XXXX.kl /data/system/devices/keylayout/DEVICE_NAME.kl /system/usr/keylayout/Generic.kl/data/system/devices/keylayout/Generic.kl
key 62 HOME key 63 ENVELOPE key 64 MUSIC key 65 MEDIA_REWIND key 66 MEDIA_PLAY_PAUSE key 67 MEDIA_FAST_FORWARD key 68 VOLUME_MUTE key 87 VOLUME_DOWN key 88 VOLUME_UP
I: Bus=0003 Vendor=0c45 Product=7403 Version=0100 N: Name="SONiX USB Device" P: Phys=usb-usb20_host-1.1.1/input0 S: Sysfs=/devices/platform/usb20_host/usb2/2-1/2-1.1/2-1.1.1/2-1.1.1:1.0/input/input9 U: Uniq= H: Handlers=sysrq kbd event1 keychord I: Bus=0003 Vendor=0c45 Product=7403 Version=0100 N: Name="SONiX USB Device" P: Phys=usb-usb20_host-1.1.1/input1 S: Sysfs=/devices/platform/usb20_host/usb2/2-1/2-1.1/2-1.1.1/2-1.1.1:1.1/input/input10 U: Uniq= H: Handlers=kbd event2 keychord B: PROP=0Identify your device from the list and rename your previously created file to include the vendor and product Ids. Mine is now called Vendor_0c45_Product_7403.kl.
I am pleased to announce the latest iteration of Bookmark Organizer. It now comes with the ability to synchronize your bookmarks with SkyDrive. Please read the original post for application pre-requisites and installation.
The usual disclaimer applies; I am not responsible for anything you might break by using this application. Please use at your own risk.
Please feel free to suggest any improvements and I will try to accommodate you as best as I can.
Today I learned that the xsd.exe tool ignores all xsd:import statements. And the workaround is to explicitly provide all the schemas as command line arguments.
xsd.exe MainSchema.xsd Reference1.xsd Reference2.xsd
According to the post here, the fact that the W3C Schema spec describes the schemaLocation attribute as a hint, not a true location might be a plausible reason to this behavior.
div.ms-crm-TopBarContainerGlobal
{
/* background-repeat: no-repeat;
background-color: #ffffff; */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ff00', endColorstr='#0100ff',GradientType=1 ); /* IE6-9 */
}
div.ms-crm-TopBarContainerForm
{
/* background-repeat : repeat-x; */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ff00', endColorstr='#0100ff',GradientType=1 ); /* IE6-9 */
}
div.ms-crm-ToolBar
{
<%--<% = this.GetStyleCss(CrmTheme.Current.Form.ToolBar) %>--%>
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ff00', endColorstr='#0100ff',GradientType=1 ); /* IE6-9 */
}
I flashed my Samsung Focus using the Rogers OEM ROM the other day and then followed the update method described here to get back to 7.10.8107.79 within 30 mins.
Why? Because my Samsung Focus is finicky on the best of days. More so when it comes to pushing updates via Zune. It was a nightmare getting Mango on it when it was first release, I kept hitting the dreaded 80180048 error. And my slow as molasses internet connection was not helping; constantly re-downloading 160+ Megs of updates for each failure was painful to say the least. My best guess was something somewhere was timing out. And I was not too keen on going through that whole process again.
Followed everything described on the thread. Although I didn’t install the OEM drivers that were provided, I let Zune pick them out for me and this is what it got me:
This one brings the firmware up to 2124.11.8.1: http://download.windowsupdate.com/msdownload/update/software/dflt/2011/08/404680_i917rrwckh1_prod.pks_c73375d693c8eae569b062eefedea268bbe907d1.cab
And this to 2124.11.9.4: http://download.windowsupdate.com/msdownload/update/software/dflt/2011/10/417964_i917rrwcki4_prod.pks_1636e51c72b74f38ddfdf77ee9bbf5b2efb1d732.cab
The above links were not present on the original thread at the time of writing, I hope it helps someone else out there.
<fetch mapping="logical" count="50" version="1.0">
<entity name="systemuser">
<attribute name="address1_telephone1" />
<attribute name="businessunitid" />
<attribute name="fullname" />
<attribute name="siteid" />
<attribute name="title" />
<filter>
<condition attribute="isdisabled" operator="eq" value="0" />
</filter>
<link-entity alias="settings" name="usersettings" from="systemuserid" to="systemuserid">
<attribute name="entityformmode" />
</link-entity>
</entity>
</fetch>
The latest rollup update introduced a new feature called Read Optimized Forms. This enables a read-only version of the entity forms that optimized for users that want to rapidly read data instead of editing them.
One of the pre-requisites in the current implementation is that the form should be devoid of all script customizations. If so, how would you work around a situation where the form requires values to be dynamically calculated.
One of the recommended approaches, as defined in the SDK, is to use a synchronous sandbox plugin running on the Retrieve message of the entity.
The following code snippet demonstrates this:
And the plugin is registered as PostOutsideTransaction on the Retrieve event of the entity with the assembly under Sandbox isolation. This approach would also work on Online solutions as well.
Please beware of long running calculations as they are now being done synchronously as opposed to being done asynchronously through JavaScript.
When it comes to software solutions, it is always best practice to follow the Principal Least Privilege. This is no different with Dynamics CRM 2011. This post will provide you will basic instructions in creating a security role with the least privileges.
The help page in the Security Role entity under the “Create or edit a security role” topic already provides a pretty good summary of the minimum privileges required:
It's helpful to keep in mind the minimum privileges you need to define for some common tasks. These include:
- When logging in to Microsoft Dynamics CRM:
- To render the home page: prvReadWebResource, prvReadCustomization
- To render an entity grid (that is, to view lists of records and other data): Read privilege on the entity, prvReadUserSettings, prvReadQuery
- To view single entities in detail: Read privilege on the entity, prvReadSystemForm, prvCreateUserEntityUISettings, prvReadUserEntityUISettings
- When logging in to Microsoft Dynamics CRM for Outlook:
- To render navigation for Microsoft Dynamics CRM and all Microsoft Dynamics CRM buttons: prvReadEntity, prvReadQuery
- To render an entity grid: Read privilege on the entity, prvReadCustomization, prvReadWebResource, prvReadUserQuery
- To render entities: Read privilege on the entity, prvReadSystemForm, prvCreateUserEntityUISettings, prvReadUserEntityUISettings, prvWriteUserEntityUISettings
So suppose I want a user to have minimum read permission to a Custom Entity and for him to view records that have been assigned to him. I would add the following permission:
Basic Read Permission on your entity (prvRead[entityName])
Access to Viewing the entity grid and entity forms (prvReadQuery, prvReadSystemForm)
As well as the permissions that are added by default (prvReadSdkMessage, prvReadSdkMessageProcessingStepImage, prvReadSdkMessageProcessingStep, prvReadPluginAssembly, prvReadPluginType) These permissions are required for smooth operations of internal operations such as core CRM plugins.
The UserEntity UI Settings provides access to the functionality to remember the user’s last accessed Form (prvCreateUserEntityUISettings, prvReadUserEntityUISettings)
Permission to access User Preferences (prvReadUserSettings)
Also keep in mind that when designing security roles, a good understanding of the organization structure and deployed CRM solutions is key to success. As it is possible that there are additional plugins and workflows running in the background that require additional permissions.
I really appreciate the frequency in which the updates are released. Find more information about the update here:
http://blogs.msdn.com/b/crm/archive/2011/01/13/update-rollup-15-for-microsoft-dynamics-crm-4-0.aspx