Faker.js is a very useful tool to generate random names, addresses, company names, and so much more:
It is a simple Javascript that can be used with nodejs or in the browser.
Comes in very handy when trying to generate large amounts of test data.
Posted in Uncategorized on June 19, 2021| 1 Comment »
Faker.js is a very useful tool to generate random names, addresses, company names, and so much more:
It is a simple Javascript that can be used with nodejs or in the browser.
Comes in very handy when trying to generate large amounts of test data.
Posted in Uncategorized on March 12, 2021| 7 Comments »
Here are the steps needed in order to have cascading dropdowns in a Model driven app. Example: User selects a country and then selects state inside that country.
Example DataVerse structure:
We can then create a model driven app with these 3 tables
We then need to go to the Location table Main form (or whatever form that is being used in the model driven app) and we need to add a JavaScript Web Resource
You can then simply click the Text Editor to paste the JavaScript code
The Code is
var Sdk = window.Sdk || {};
(function () {
// Define some global variables
var myUniqueId = "_myUniqueId"; // Define an ID for the notification
var currentUserName = Xrm.Utility.getGlobalContext().userSettings.userName; // get current user name
var message = currentUserName + ": Your JavaScript code in action!";
// Code to run in the form OnLoad event
this.formOnLoad = function (executionContext) {
}
// Code to run in the attribute OnChange event
this.attributeOnChange = function (executionContext) {
var formContext = executionContext.getFormContext();
var country = formContext.getAttribute("cr82b_country").getValue();
if (country != null && country[0] != null) {
formContext.ui.setFormNotification("Country=" + country[0].name, "INFO", myUniqueId);
window.setTimeout(function () { formContext.ui.clearFormNotification(myUniqueId); }, 5000);
}
var stateControl = formContext.getControl("cr82b_state");
stateControl.addPreSearch(Sdk.filterStates);
}
Sdk.filterStates = function () {
var formContext = Xrm.Page.getControl("cr82b_country").formContext;
var country = formContext.getAttribute("cr82b_country").getValue();
if (country != null && country[0] != null) {
var stateFilter = "<filter type='and'><condition attribute='cr82b_country' operator='eq' value='" + country[0].id + "'/></filter>";
formContext.getControl("cr82b_state").addCustomFilter(stateFilter);
}
}
// Code to run in the form OnSave event
this.formOnSave = function () {
}
}).call(Sdk);
The main idea is to inject an OnChange Event to the Country Field and based on it, create a filter for States lookup
After publishing the script, refresh the Model driven app and you will see the filtering working (clicking “All records” after selecting a country, will only show states inside that country)
References:
addCustomFilter (Client API reference) in model-driven apps – Power Apps | Microsoft Docs
Filtering Lookups in Dynamics 365 with addCustomFilter and addPreSearch – Carl de Souza
Posted in Uncategorized, tagged PowerApps on March 3, 2021| Leave a Comment »
Power Apps has two sets of rules for showing/hiding buttons: Display rules and Enable rules. Display rules are running on the server side and enable rules are running on the client site (maybe counterintuitive). Custom rules (JavaScript rules) are therefore only available in client side (Enable rules).
As an example, assumed we have two Tables (Parent and Child) with a one to many relation (Parent can have multiple children, child can only have one parent). We want to disable the “Deactivate” button on the Parent if it has children.
Preparations:
Adding the JavaScript code with the logic:
2) Navigate to the form where the ribbon is: (Main Information form for example)
3) Click the Form libraries tab on the left navigation
4) Click “Add Library” and then Click “New”
5) Set the library name, Type and Language
6) Either upload a new file or paste code directly in the Text Editor. Use the following code
var AB = AB || {};
AB.Ribbon = (function () {
var isButtonEnabled = false;
function IsButtonEnabled(formContext) {
return new Promise(function (resolve, reject) {
var Entity = "cr33f_child";
var Select = "?$select=cr33f_name";
var Filter = "&$filter=cr33f_Parent/new_parentid eq '" + formContext.data._entity._entityId.guid + "'";
Xrm.WebApi.retrieveMultipleRecords(Entity, Select + Filter).then(
function success(result) {
if (result.entities.length == 0) {
isButtonEnabled = true;
}
// return true or false
resolve(isButtonEnabled);
},
function (error) {
reject(error.message);
console.log(error.message);
}
);
});
}
return {
IsButtonEnabled: IsButtonEnabled
};
})();
Note: you will have different prefixes (cr33f) and make sure of casing as the query is case sensitive
7) Click “Save” and “Publish”
Adding the new Rules to the ribbon:
3) In the Ribbon workbench, click “Open Solution” and select the solution that has the tables, in this example: RibbonEntitiesTest.
4) Select the entity whose ribbon we need to customize, in our case, parent entity
5) Select the button we need to customize and click “Customize Command” (NOT customize button)
6) Click the Command and in the Enable rules click “Add Enable rule”
7) Click “Add Step” and select “Custom Rule”
8) Set the function name, library name (use autocomplete feature) and Add parameter (Primary control)
9) Click “Publish” (sometimes it takes up to 10 minutes to complete)
10) Test ! you can check a parent entity with no related children should have the “Deactivate” button shown while a parent with related children should not
Troubleshooting
One simple way to troubleshoot is to add &ribbondebug=true to the url. this will show a new button called “Command Checker”
if you click it , you can see more information like
Posted in Uncategorized on January 4, 2019| 6 Comments »
In Microsoft flow there is no built in action to add a user to a SharePoint group. One way to achieve this is to use the “Send HTTP request to SharePoint”
in this action you need to
It would look like this
This is tested with a SharePoint online connection but assume might work with on premise SharePoint as well.
Posted in SharePoint, Tips, Uncategorized, tagged SharePoint on September 19, 2018| Leave a Comment »
When trying to install SP2013 on a windows 2012R2 or 2016 you may get the error : Error: The tool was unable to install Application Server Role, Web Server (IIS) Role
A quick fix might be to go to C:\Windows\System32\ , look for ServerManager.exe, make a copy and name it ServerManagerCMD.exe as this is the file that the SP prereqs is trying to call
Posted in Uncategorized on August 30, 2018| Leave a Comment »
Newly released from Microsoft AI Lab, a tool to convert handwritten mockups into valid html code. Simply upload an image and get HTML markup.
GitHub link: https://github.com/Microsoft/ailab/tree/master/Sketch2Code
a short YouTube video overview: https://www.youtube.com/watch?v=V6pqqPPHyYM
Posted in Uncategorized on June 7, 2016| Leave a Comment »
A new tool by google to test how mobile friendly is a web site: https://testmysite.thinkwithgoogle.com
Posted in Uncategorized on June 2, 2016| Leave a Comment »
Just came up across this very useful post : http://sadomovalex.blogspot.ca/2015/08/fix-problem-with-returned-xml-instead.html
It shows how to use JSON light with SP2013 SP1+.
Posted in Uncategorized, tagged OAuth Javascript Twitter on June 4, 2014| Leave a Comment »
https://oauth.io/ offers a Client Side OAuth solution that can be used with JavaScript.
It can be used for the new Twitter API with no server code.
Posted in Uncategorized, tagged PowerShell, SharePoint 2010 on January 17, 2013| Leave a Comment »
$webAppName = “Contoso Internet Site XYZ”
$webAppUrl = “http://www.contoso.com”
$webAppPort = 80
$webAppHostHeader = “sharepoint.contoso.com”
$membershipProviderName = “OAMMembershipProvider”
$roleProviderName = “OAMRoleProvider”
$appPoolName = “ContosoAppPool”
$contentDBName = “Contoso”
$appPoolUser = “DE\sp_AppPool”
Write-Host “Deleting Web application $webApp if it exists…”
Remove-SPWebApplication -Identity $webAppUrl -Confirm:$false -Verbose -DeleteIISSite:$true -RemoveContentDatabases:$true -ErrorAction SilentlyContinue
$formsAuthProvider = New-SPAuthenticationProvider -ASPNETMembershipProvider $membershipProviderName -ASPNETRoleProviderName $roleProviderName
$windowsAuthProvider = New-SPAuthenticationProvider
$AuthProvidersArray = $formsAuthProvider, $windowsAuthProvider
New-SPWebApplication -Name $webAppName -Port $webAppPort -HostHeader $webAppHostHeader -URL $webAppUrl -ApplicationPool $appPoolName -ApplicationPoolAccount (Get-SPManagedAccount $appPoolUser) -AllowAnonymousAccess -AuthenticationProvider $AuthProvidersArray -AuthenticationMethod NTLM -Verbose -DatabaseName $contentDBName -ErrorVariable $ev
if($ev -ne $null)
{
Write-Host “Web Application $webApp created successfully”
}
$webApp = get-SPWebApplication $webAppUrl
$webApp.UseClaimsAuthentication = $true
$webApp.Update()
Write-Host “Updated Web application to use claims based authentication for $webApp..”