Thursday, March 28, 2013

How to grant permission to new users in GP 2013 Web client???


GP 2013 has lot of great features. One of the great features is accessing GP application through web client. This article explains how to grant permission to new users for accessing GP 2013 Web client.

The domain\windows account is used to access GP web client. The user who wants to access Dynamics GP 2013 web client that user should be in the web client users group. The web client user group will be created in local server active directory during the web client installation. Also the installation account has been added to that group.

Steps to add users to Web Client users group:
 
1.   Go to web client server, open Active Directory Users and Computers
     (Start à Administrative Tools à Active Directory Users and Computers).


2.   Expand Domain Name and select the Users then find web client user’s group name.

Note: In case administrator do not know the web client users group name then execute following query in GP web client session central database.

Select [Account] from dbo.ServiceSecurity where ServiceName = 'SessionService' and GroupId = 'GPWebUserAccounts'
                                                       


  
3.      Double click the group name to open properties window.

4.      In Group Properties window, select Members tab.

5.      Select users and click Add button to add the users.
                                                                 

Now the new user can access GP 2013 web client.

Hope this helps!

Friday, March 22, 2013

How to modify existing word template in GP???


 Microsoft Dynamics GP has lot of predefined word template reports and also there is a way to modify the predefined reports as per the user requirement.


Here are the steps to modify word template report and how to activate in Dynamics GP:

1.        In Dynamics GP, open the Report Template Maintenance window.

ReportsàTemplate Maintenance.

2.        Click Report Name and select More Reports option from the drop down.

3.        Select the desired report to modify.

4.        Click the New button to open New Template window.

5.        In New Template window, select From Existing Template option.

6.        Select the original template from Templates pane.

7.      Enter New Template Name (i.e. Make sure the New Template Name should not be same as original template name).


8.       Click Create button.

9.       In the Report Template Maintenance window, select the template created using step 7 & 8.

10.     Click the Modify button.

11.     Now, template opens in MS Word.

12.     Do the modification as per the requirements and save the template in local system with same template name.

13.     Go back to Report Template Maintenance window.

14.     Select the modified template and click the (+) symbol to select modified template file.

15.     Click Yes to replace the template.


The below step is important to print your modified template.

16.     Company assignment and Set default option to the modified template.

a.        In Report Template Maintenance window, select the modified template.
                                                         
b.        Click the Assign button à Company à Mark the desired Company à Click Set Default à Select the modified template.

Hope this helps!!! 

Dynamics SL 2011 Upgrade blues & fixes - 1


Situation:
Just to give a little preface of the situation that we faced during the SL 2011 upgrade. Few client machines also has been upgraded to Windows 7 OS.

The below error message pops up in the Client machines on the standard SL screen with additional customisations added. These customisations were working in the test server during the UAT. On click of OK button, everything seems to be working  but the message is annoying.  
Even the usual SL magic of  closing SL client and reopen not works.
 

 
    Solution:
      1.  Log off from Microsoft Dynamics SL.
      2.  Locate the Solomon.ini file in SL Root Directory
      3.  Open the file using Notepad.


      4.  Add the below lines  in solomon.ini file

                   [Customization]                                
                           VBASourceCompile = Yes


      5.  Click Save, and then close Notepad.
      6.  Restart Dynamics SL on the 64-bit server system and the customizations should work without errors.

           Hope this helps!!


MS CRM 2011 Report error (rsProcessingError) – Invalid column name “DeletionStateCode”


In MS CRM 4.0, “soft-delete” method was used, i.e., when a record is deleted in CRM 4.0, the record will not be actually deleted from the database. Instead the record would be internally marked with Is Deleted = true and there will be a CRM Deletion Service which will run an Asynchronous System Job once a day. This would actually pick up the records marked with Is Deleted = true and actually delete them from the database.

‘DeletionStateCode’ has been dropped in MS CRM 2011 and auditing functionality has replaced this one. There are no more soft deletes in CRM; the record is actually deleted from the database right away (hard delete).

Error:
Once we upgrade CRM 4.0 to CRM 2011, few custom reports may not render correctly instead may throw,

Invalid column name ‘DeletionStateCode

Reason:
The reason for this error is the custom stored procedures and triggers used in the database which might be referring to DeletionStateCode column. This column has been removed in CRM 2011 and hence this error is thrown.

Solution:
Since the ‘DeletionStateCode’ column no longer exists in CRM 2011, any SQL objects that referring it will no longer be valid. Columns like owneriddsc, territoryiddsc’, etc. holds/refers the value of the ‘DeletionStateCode’. If these columns have been used in the Query, Store Procedure or table the below error will occur,
Invalid column name ‘owneriddsc
Invalid column name ‘territoryiddsc’
Invalid column name ‘defaultpriceleveliddsc’
……
In order to resolve the stated errors, find the SQL objects that referring the DeletionStateCode column and drop the SQL object. i.e., Modify the query by commenting or removing code which uses the lookup fields/columns ‘..dsc’ along with the ‘DeletionStateCode’ column and alter the table. This will drop the SQL objects that referring to these columns and above stated error will get resolved.

Hope this post might be helpful for you!!!



Thursday, March 21, 2013

User Productivity Enhancements in NAV 2013


It has been more than a quarter since the latest version of Dynamics NAV 2013 has been launched and it’s time to take a look into some of the exciting new features and enhancements that I feel is going to make NAV more user friendly.

 
1. Finding and Filtering Enhancements:

We can use Find and Filters on lines of any page. This will be useful for End-users to look for a specific line.

 Advantage

In previous Versions of NAV, users need to look for Actions and use the Select Filter to view records based upon value specified, which many of the users have found difficulties in using.

Now, the filtering option is more visible in the Ribbon, so it is easy for the users to know these features and can make use of it effectively.

For Example: In a Sales Order Document, on a sales Line, we can Find and Filter the lines.

Find: Click the Find button. The screen similar to the below image will open. You can find any field values. For Example: I find the name LINDA, in the No. column. So I used “lin” and the cursor will point to the specified line.

Filter:  Click the Filter Button or press Shift+F3, choose Add Filter, select the field that you want to filter, and then type a value to filter in the Type to filter box.

Clearing the filter is using Clear filter Button next to the Filter Button.
 
Difference b/w find & filter: Using find will only point the cursor to the specific line. The filter in-turn will display only the filtered value based on the condition specified


2. Ribbon
Action Pane has been redesigned to Ribbon. Press Ctrl+F1 for toggling (expanding or collapsing) the ribbon. The ribbon is organized into Tabs and groups

In Nav 2009 the Action Pane equivalent of the Ribbon was not present on the Role Center Pages

Nav 2013:

 
In prior versions, the commands related to the Page are not visible to the user when working as Actions Pane.
The ribbon is also available across all pages
Advantages
In Nav 2013, Microsoft overcome this issue and make the commands are more visible and access easily. The ribbons in NAV are similar to the Ribbon in Office Tools (Like Word, Excel).


3. Copy/Paste Rows between Dynamics NAV and Excel
Here is one very important/key feature that I feel is included with NAV 2013 that is going to make users work very simple.

In previous versions of NAV we need to write dataports to load bulk of similar data. Now, instead of Importing and Exporting to excel, we can directly use Copy and Paste Rows without using dataport/xmlport.

Advantages
  • Reducing the use of separate Objects for exporting and importing.
  • Save the time
  • Easy access
  • This functionality is similar to normal Copy and paste in Excel.
  • This will be helpful for the clients who needs only limited no. of rows
For Ex: In the Sales Line, the client needs only Type, No., Quantity and Location, they can easily copy from Navision and paste it as Excel.

 
 
4. Select All Lines:
Here is another key area that is addressed with the latest release, selecting all the lines in a grid is now possible in Dynamics NAV 2013 like Excel. The user needs a Single click in the top Left Corner to select all rows from the screen
 
 
In Previous version, there is no such facility to select the Rows, every time the user manually needs to hold the Shift key and select the records.

Overcoming back up error "Text No. 1965-0 does not exist in the .stx file" in Dynamics NAV


The following error message appears while we take full backup in Navision

"Text No. 1965-0 does not exist in the .stx file"


Why do we get this error?
The primary reason for this error is because when objects from a higher version of NAV is imported into a lower version

When we do this import (i.e.  Higher to lower) the system objects in the range2000000002.. 2000000203 gets changed from the current version to the higher version.

In detail, consider the following scenario
  • I’m having NAV 4.0sp3 database. By mistake I have opened the NAV 4.0sp3 database in NAV 2009 R2.
  • When I try to import all the objects from the NAV 2009 R2 to the NAV 4.0sp3. By default when we try to replace all the objects in the import worksheet it will throw an error. But I bypass the error and merged some of the tables and replaced all the other objects. By doing this I will be able to import all the objects in the lower version.
When I perform these operations for import, I get error messages while I try to generate full back up. These errors are typically inevitable and needs to be resolved.

Resolving the issue
1. Go to the database that is having this above error (lower version of NAV).
2. Select all the objects except table objects in the series 2000000002….2000000203
3. Export the objects.
4. Now take the backup of only the data common to all companies and not the application objects 

  
5. After the backup has been taken. Create a new database in the lower version (or any version that you are having problems).
6. Import all the objects.
7. Restore the backup.
Now the new database is ready with your Current Version. You can now take the backup without any errors.

Monday, March 18, 2013

Apply Languages Settings for Custom UI in MS CRM 2011:

Our previous blog, we posted how to apply language settings for Custom Entity.  This post will cover one of the approach in displaying Messages and Fields for a Custom UI (HTML web resource, aspx).  This approach looks appropriate as we leverage the CRM translate mechanism for our custom UI and store the relevant translations within CRM.

To achieve this follow the steps:
1.       Create custom entity with all necessary Labels and Messages to be displayed in custom page.
2.       Export and Import Translation.
3.       Retrieve the custom entity metadata to display in custom page.
i.e.  If a Message “Are you sure want to delete?” is used in a custom page which need to translate as per user’s language setting.
 

Then this message needs to be field Label in MS CRM custom entity.
 
 

Similarly, all necessary Labels need to be created in MS CRM.  Then this entity need to be exported for translation and translated following the steps mentioned in my previous blog (refer date here). Once this is done, retrieve this custom entities metadata to display the Labels and Messages the custom pages.
Below is code to retrieve the custom entity labels from metadata using JavaScript:
function RetrieveMetadataRequest() {

            var requestMain = ""
            requestMain += "<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\">";
            requestMain += "  <s:Body>";
            requestMain += "    <Execute xmlns=\"http://schemas.microsoft.com/xrm/2011/Contracts/Services\" xmlns:i=\"http://www.w3.org/2001/XMLSchema-instance\">";
            requestMain += "      <request i:type=\"a:RetrieveEntityRequest\" xmlns:a=\"http://schemas.microsoft.com/xrm/2011/Contracts\">";
            requestMain += "        <a:Parameters xmlns:b=\"http://schemas.datacontract.org/2004/07/System.Collections.Generic\">";
            requestMain += "          <a:KeyValuePairOfstringanyType>";
            requestMain += "            <b:key>EntityFilters</b:key>";
            requestMain += "            <b:value i:type=\"c:EntityFilters\" xmlns:c=\"http://schemas.microsoft.com/xrm/2011/Metadata\">Entity Attributes Privileges Relationships</b:value>";
            requestMain += "          </a:KeyValuePairOfstringanyType>";
            requestMain += "          <a:KeyValuePairOfstringanyType>";
            requestMain += "            <b:key>MetadataId</b:key>";
            requestMain += "            <b:value i:type=\"c:guid\" xmlns:c=\"http://schemas.microsoft.com/2003/10/Serialization/\">00000000-0000-0000-0000-000000000000</b:value>";
            requestMain += "          </a:KeyValuePairOfstringanyType>";
            requestMain += "          <a:KeyValuePairOfstringanyType>";
            requestMain += "            <b:key>RetrieveAsIfPublished</b:key>";

            requestMain += "            <b:value i:type=\"c:boolean\" xmlns:c=\"http://www.w3.org/2001/XMLSchema\">false</b:value>";
            requestMain += "          </a:KeyValuePairOfstringanyType>";
            requestMain += "          <a:KeyValuePairOfstringanyType>";
            requestMain += "            <b:key>LogicalName</b:key>";
            requestMain += "            <b:value i:type=\"c:string\" xmlns:c=\"http://www.w3.org/2001/XMLSchema\">new_languagesettings</b:value>";
            requestMain += "          </a:KeyValuePairOfstringanyType>";
            requestMain += "        </a:Parameters>";
            requestMain += "        <a:RequestId i:nil=\"true\" />";
            requestMain += "        <a:RequestName>RetrieveEntity</a:RequestName>";
            requestMain += "      </request>";
            requestMain += "    </Execute>";
            requestMain += "  </s:Body>";
            requestMain += "</s:Envelope>";
            var req = new XMLHttpRequest();
            req.open("POST", _getServerUrl(), false)
            // Responses will return XML. It isn't possible to return JSON.
            req.setRequestHeader("Accept", "application/xml, text/xml, */*");
            req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
            req.setRequestHeader("SOAPAction", http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute);
            var successCallback = null;
            var errorCallback = null;

            req.onreadystatechange = function () { RetrieveMetadataResponse(req, successCallback, errorCallback); };
            req.send(requestMain);
        }

        function RetrieveMetadataResponse(req, successCallback, errorCallback) {
            if (req.readyState == 4) {
                if (req.status == 200) {
                    LabelXml = req.responseXML;
                }
                else {
                    errorCallback(_getError(req.responseXML));
                }
            }
        }

        function _getError(faultXml) {
            ///<summary>
            /// Parses the WCF fault returned in the event of an error.
            ///</summary>
            ///<param name="faultXml" Type="XML">
            /// The responseXML property of the XMLHttpRequest response.
            ///</param>
            var errorMessage = "Unknown Error (Unable to parse the fault)";
            if (typeof faultXml == "object") {
                try {
                    var bodyNode = faultXml.firstChild.firstChild;
                    //Retrieve the fault node
                    for (var i = 0; i < bodyNode.childNodes.length; i++) {
                        var node = bodyNode.childNodes[i];
                        //NOTE: This comparison does not handle the case where the XML namespace changes
                        if ("s:Fault" == node.nodeName) {
                            for (var j = 0; j < node.childNodes.length; j++) {
                                var faultStringNode = node.childNodes[j];
                                if ("faultstring" == faultStringNode.nodeName) {
                                    errorMessage = faultStringNode.text;
                                    break;
                                }
                            }
                            break;
                        }
                    }
                }
                catch (e) { };
            }
            return new Error(errorMessage);
        } 

Finally the LabelXml custom web page will display messages and Labels as per user’s language code.
 

This will be the message displayed if the user’s language setting had French selected. 
Hope this was helpful.