Wednesday, 18 June 2014

Plugin registration tool Timeout Exception

When you registering the plugin using plugin registration tool the plugin doesn't get registered and you will get the exception below

Unhandled Exception: System.TimeoutException: The request channel timed out while waiting for a reply after 00:01:59.9139778.Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding.

The above error may be occur of slow internet connection or your early bind class may be an big size.

If your Early bound class is an big size you can reduce the size of early bound class by following the bellow steps:

  1. Create a new C# class library project in Visual Studio called SvcUtilFilter.
  2. In the project, add references to the following:

  • CrmSvcUtil.exe(from sdk)   This exe has the interface we will implement.

  • Microsoft.Xrm.Sdk.dll

  • System.Runtime.Serialization.

  • Add the following class to the project:

    using System;
    using System.Collections.Generic;
    using System.Xml.Linq;
    using Microsoft.Crm.Services.Utility;
    using Microsoft.Xrm.Sdk.Metadata;

    namespace SvcUtilFilter
    {
        /// <summary>
        /// CodeWriterFilter for CrmSvcUtil that reads list of entities from an xml file to
        /// determine whether or not the entity class should be generated.
        /// </summary>
        public class CodeWriterFilter : ICodeWriterFilterService
        {
            //list of entity names to generate classes for.
            private HashSet<string> _validEntities = new HashSet<string>();
           
            //reference to the default service.
            private ICodeWriterFilterService _defaultService = null;

            /// <summary>
            /// constructor
            /// </summary>
            /// <param name="defaultService">default implementation</param>
            public CodeWriterFilter( ICodeWriterFilterService defaultService )
            {
                this._defaultService = defaultService;
                LoadFilterData();
            }

            /// <summary>
            /// loads the entity filter data from the filter.xml file
            /// </summary>
            private void LoadFilterData()
            {
                XElement xml = XElement.Load("filter.xml");
                XElement entitiesElement = xml.Element("entities");
                foreach (XElement entityElement in entitiesElement.Elements("entity"))
                {
                    _validEntities.Add(entityElement.Value.ToLowerInvariant());
                }
            }

            /// <summary>
            /// /Use filter entity list to determine if the entity class should be generated.
            /// </summary>
            public bool GenerateEntity(EntityMetadata entityMetadata, IServiceProvider services)
            {
                return (_validEntities.Contains(entityMetadata.LogicalName.ToLowerInvariant()));
            }

            //All other methods just use default implementation:

            public bool GenerateAttribute(AttributeMetadata attributeMetadata, IServiceProvider services)
            {
                return _defaultService.GenerateAttribute(attributeMetadata, services);
            }

            public bool GenerateOption(OptionMetadata optionMetadata, IServiceProvider services)
            {
                return _defaultService.GenerateOption(optionMetadata, services);
            }

            public bool GenerateOptionSet(OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
            {
                return _defaultService.GenerateOptionSet(optionSetMetadata, services);
            }

            public bool GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata, IServiceProviderservices)
            {
                return _defaultService.GenerateRelationship(relationshipMetadata, otherEntityMetadata, services);
            }

            public bool GenerateServiceContext(IServiceProvider services)
            {
                return _defaultService.GenerateServiceContext(services);
            }
        }
    }

    This class implements the ICodeWriterFilterService interface.  This interface is used by the class generation utility to determine which entities, attrributes, etc. should actually be generated.  The interface is very simple and just has seven methods that are passed metadata info and return a boolean indicating whether or not the metadata should be included in the generated code file.   

    For now I just want to be able to determine which entities are generated, so in the constructor I read from an XML file (filter.xml) that holds the list of entities to generate and put the list in a Hashset.  The format of the xml is this:

    <filter>
    <entities>
    <entity>team</entity>
        <entity>role</entity>
        <entity>businessunit</entity>
    <entity>systemuser</entity>
    <entity>lead</entity>
    <entity>contact</entity>
    <entity>email</entity>
    <entity>activitymimeattachment</entity>
    </entities>
    </filter>

    Take a look at the methods in the class. In the GenerateEntity method, we can simply check the EntityMetadata parameter against our list of valid entities and return true if it's an entity that we want to generate.

    For all of the other methods we want to just do whatever the default implementation of the utility is.  Notice how the constructor of the class accepts a defaultService parameter.  We can just save a reference to this default service and use it whenever we want to stick with the default behavior.  All of the other methods in the class just call the default service.

    To use our extension when running the utility, we just have to make sure the compiled DLL and the filter.xml file are in the same folder as CrmSvcUtil.exe, and set the /codewriterfilter command-line argument when running the utility (as described in the SDK):

    CrmSvcUtil.exe /url:https://<orgName>.api.crm.dynamics.com/XRMServices/2011/Organization.svc /out:Xrm.cs /username:kanagaraj@XXX.com /password:******* /namespace:Xrm /codewriterfilter:SvcUtilFilter.CodeWriterFilter,SvcUtilFilter

    That's it! You now have a generated sdk.cs file that is only a few hundred kilobytes instead of 5MB. 

    One final note:  There is actually a lot more you can do with extensions to the code generation utility.  For example: if you return true in the GenerateOptionSet method, it will actually generated Enums for each CRM picklist (which it doesn't normally do by default).

    Also, the source code for this SvcUtilFilter example can be found here.  Use at your own risk, no warranties, etc. etc. 


    Sunday, 19 January 2014

    Get entity form name in CRM 2013 using Javascript.

    function getFormName() {
        var formLabel = Xrm.Page.ui.formSelector.getCurrentItem().getLabel();
        alert(formLabel.toString());
        if (formLabel == 'YourFormName') {
           //Write your logic here.
        }
    }

    Retrieve lookup field data in CRM 2013 usign javascript.

    The following sample code is used to retrieve entity information by Entity Id via Javascript.

    function getRecordDetails() {
        var EntityName, EntityId, LookupFieldObject;
        var Name = "";
        var resultXml;
        LookupFieldObject = Xrm.Page.data.entity.attributes.get('parentaccountid');
        if (LookupFieldObject.getValue() != null) {
            EntityId = LookupFieldObject.getValue()[0].id;
            EntityName = LookupFieldObject.getValue()[0].entityType;
            resultXml = getDetails(EntityName, EntityId);
    // Retrieve optionset value and set the value to current record field.
            if (resultXml != null && resultXml.attributes['new_industry'] != null) {
                var industry = resultXml.attributes['new_industry'].value;          
                Xrm.Page.getAttribute('new_common_industry').setValue(industry);          
            }
            else
                Xrm.Page.getAttribute('new_common_industry').setValue(null);

    // Retrieve text field value and set the value to current record field.
            if (resultXml != null && resultXml.attributes['new_industrydetail'] != null) {
                var industrydetail = resultXml.attributes['new_industrydetail'].value;          
                Xrm.Page.data.entity.attributes.get('new_industrydetail').setValue(industrydetail);          
            }
            else
                Xrm.Page.data.entity.attributes.get('new_industrydetail').setValue("");

    // Retrieve lookup field value and set the value to current record field.
            if (resultXml != null && resultXml.attributes['primarycontactid'] != null) {          
                var lookupValue = new Array();
                lookupValue[0] = new Object();
                lookupValue[0].id = resultXml.attributes['primarycontactid'].id;
                lookupValue[0].name = resultXml.attributes['primarycontactid'].name;
                lookupValue[0].entityType = resultXml.attributes['primarycontactid'].logicalName;
                Xrm.Page.data.entity.attributes.get("parentcontactid").setValue(lookupValue);
            }
            else
                Xrm.Page.data.entity.attributes.get("parentcontactid").setValue(null);
        }
    }

    function getDetails(EntityName, EntityId) {
        var cols = ["new_industry", "new_industrydetail", "primarycontactid"];
        var retrievedResult = XrmServiceToolkit.Soap.Retrieve(EntityName, EntityId, cols);
        return retrievedResult;
    }

    After that you need to add the following files to the Form Libraries.

    Jquery
    Json2
    XrmServiceToolkit


    Monday, 6 January 2014

    Prevent to create opportunity when qualifying Lead in CRM 2013

    Use the following code in your plugin and register in the PostValidation on the QualifyLead message for the Lead entity.

    context.InputParameters["CreateOpportunity"] = false; // set to true by default
    //context.InputParameters["CreateAccount"] = false; // set to true by default
    //context.InputParameters["CreateContact"] = false; // set to true by default

    Tuesday, 19 November 2013

    Retrieve records associate contact email address in CRM 2011 using C#

    Here i retrieve email id in the "to" field of email activity.

    Entity entity = context.InputParameters["Target"] as Entity;
                       
                        if (entity.LogicalName != "email")
                            return;
                        Email email = entity.ToEntity<Email>();                  
                        string to = string.Empty;

                        ColumnSet col = new ColumnSet("to");
                        entity = service.Retrieve(entity.LogicalName, entity.Id, col);
                        Guid partyId = new Guid();
                        EntityCollection Recipients = entity.GetAttributeValue<EntityCollection>("to");
                        foreach (var party in Recipients.Entities)
                        {                      
                            partyId = party.GetAttributeValue<EntityReference>("partyid").Id;
                        }

                        ColumnSet column = new ColumnSet("emailaddress1");
                        Entity toRecipent= service.Retrieve("contact", partyId, column);

                        Contact contact = toRecipent.ToEntity<Contact>();
                        to = contact.EMailAddress1;

    How to use Access teams in CRM 2013.

    Monday, 18 November 2013

    Enable/Disable Autosave options in CRM 2013

    Autosave can be enabled/disabled by navigating to Settings > Administration > System Settings > General Tab.


    Friday, 15 November 2013

    Get Option set text value from CRM 2011 using C#.

    public string getOptionSetText(string entityName, string attributeName, int optionsetValue)
       {
           string optionsetText = string.Empty;
           RetrieveAttributeRequest retrieveAttributeRequest = new RetrieveAttributeRequest();
           retrieveAttributeRequest.EntityLogicalName = entityName;
           retrieveAttributeRequest.LogicalName = attributeName;
           retrieveAttributeRequest.RetrieveAsIfPublished = true;
    
           RetrieveAttributeResponse retrieveAttributeResponse = 
             (RetrieveAttributeResponse)OrganizationService.Execute(retrieveAttributeRequest);
           PicklistAttributeMetadata picklistAttributeMetadata = 
             (PicklistAttributeMetadata)retrieveAttributeResponse.AttributeMetadata;
    
           OptionSetMetadata optionsetMetadata = picklistAttributeMetadata.OptionSet;
    
           foreach (OptionMetadata optionMetadata in optionsetMetadata.Options)
           {
                if (optionMetadata.Value == optionsetValue)
                 {
                    optionsetText = optionMetadata.Label.UserLocalizedLabel.Label;
                     return optionsetText;
                 }
    
           }
           return optionsetText;
      }

    Get Option set values in CRM 2011 using C#.

    string optionSetText="Advertisement"
    OptionSetValue leadSource = new OptionSetValue(getOptionSetValue(lead.LogicalName, "fieldAttribute", optionSetText));
    newLead["leadsourcecode"] = leadSource;

    public int getOptionSetValue(string logicalName, string attributeName, string optionsetText)
            {
                int optionSetValue=0;
                RetrieveAttributeRequest retrieveAttributeRequest = new RetrieveAttributeRequest();
                retrieveAttributeRequest.EntityLogicalName = "lead";
                retrieveAttributeRequest.LogicalName = attributeName;
                retrieveAttributeRequest.RetrieveAsIfPublished = true;

                RetrieveAttributeResponse retrieveAttributeResponse = (RetrieveAttributeResponse)service.Execute(retrieveAttributeRequest);
                PicklistAttributeMetadata picklistAttributeMetadata = (PicklistAttributeMetadata)retrieveAttributeResponse.AttributeMetadata;

                OptionSetMetadata optionsetMetadata = picklistAttributeMetadata.OptionSet;

                foreach (OptionMetadata optionMetadata in optionsetMetadata.Options)
                {
                    if (optionMetadata.Label.UserLocalizedLabel.Label.ToLower() == optionsetText.ToLower())
                    {
                        optionSetValue = optionMetadata.Value.Value;
                        return optionSetValue;
                    }

                }
                return optionSetValue;
            }

    Wednesday, 13 November 2013

    Plugin to Create record in the creation of email activity in CRM 2011 and 2013

    In my scenario i have to create new lead in creation of email. The email contain one Xml attachment named enquiry. That attachment have some standard tags. I have to read the xml tag and its values.Based on the values i have to create a new lead record. I did this scenario using the following code:

    using System;
    using System.ServiceModel;
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Query;
    using Xrm;
    using System.Xml;
    using System.IO;
    using Microsoft.Xrm.Sdk.Messages;
    using Microsoft.Xrm.Sdk.Metadata;

    namespace OPS.Lead.Create
    {  
        public class GenerateLead : IPlugin
        {
            XmlDocument doc = new XmlDocument();
            IOrganizationService service;
            public void Execute(IServiceProvider serviceProvider)
            {          
                ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
                try
                {
                    IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                    IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                    service = serviceFactory.CreateOrganizationService(context.UserId);
                 
                    if (context.InputParameters.ContainsKey("Target") && context.InputParameters["Target"] is Entity)
                    {                  
                        Entity entity = context.InputParameters["Target"] as Entity;
                     
                        if (entity.LogicalName != "email")
                            return;
                        Email email = entity.ToEntity<Email>();                  
                        string to = string.Empty;

                        ColumnSet col = new ColumnSet("to", "from");
                        entity = service.Retrieve(entity.LogicalName, entity.Id, col);
                        Guid partyId = new Guid();
                        EntityCollection Recipients = entity.GetAttributeValue<EntityCollection>("to");
                        foreach (var party in Recipients.Entities)
                        {                      
                            partyId = party.GetAttributeValue<EntityReference>("partyid").Id;
                        }

                        ColumnSet column = new ColumnSet("internalemailaddress");
                        Entity toRecipent = service.Retrieve(SystemUser.EntityLogicalName, partyId, column);

                        SystemUser contact = toRecipent.ToEntity<SystemUser>();
                        to = contact.InternalEMailAddress;

                        if (!(to == "enquiry@xyz.com"))
                            return;

                        try
                        {
                            //Retrieve all attachments associated with the email activity.
                            QueryExpression _attachmentQuery = new QueryExpression
                            {
                                EntityName = ActivityMimeAttachment.EntityLogicalName,
                                ColumnSet = new ColumnSet("activitymimeattachmentid"),
                                Criteria = new FilterExpression
                                {
                                    FilterOperator = LogicalOperator.And,
                                    Conditions =
                            {
                                new ConditionExpression
                                {
                                    AttributeName = "objectid",
                                    Operator = ConditionOperator.Equal,
                                    Values = {entity.Id}
                                },
                                new ConditionExpression
                                {
                                    AttributeName = "objecttypecode",
                                    Operator = ConditionOperator.Equal,
                                    Values = {Email.EntityLogicalName}
                                }
                            }
                                }
                            };

                            EntityCollection results = service.RetrieveMultiple(_attachmentQuery);

                            if (results.Entities.Count == 0)
                                return;
                            string filename=string.Empty;
                            foreach (Entity ent in results.Entities)
                            {

                                ColumnSet colset = new ColumnSet();
                                colset.AllColumns = true;
                                ActivityMimeAttachment emailAttachment = (ActivityMimeAttachment)service.Retrieve("activitymimeattachment", ent.Id, colset);
                                filename= emailAttachment.FileName;
                                if (filename.Equals("enquiry"))
                                {
                                    byte[] fileContent = Convert.FromBase64String(emailAttachment.Body);
                                    using (MemoryStream ms = new MemoryStream(fileContent))
                                    {
                                        doc.Load(ms);
                                    }
                                }
                            }

                            if (filename.Equals("enquiry"))
                            {
                                Entity newLead = new Entity("lead");

                                newLead["subject"] = entity.GetAttributeValue<string>("subject");
                                newLead["firstname"] = GetTagValue("Firstname");
                                newLead["lastname"] = GetTagValue("LastName");
                                newLead["emailaddress1"] = GetTagValue("EmailAddress");
                                newLead["companyname"] = GetTagValue("Companyname");
                                newLead["jobtitle"] = GetTagValue("Title");
                                newLead["mobilephone"] = GetTagValue("MobileNo");
                                newLead["address1_country"] = GetTagValue("Country");

                                string numberOfUsers = GetTagValue("Crmusers");
                                OptionSetValue crmUsers = new OptionSetValue(getOptionSetValue("ln_crmusers", numberOfUsers));
                                newLead["ln_crmusers"] = crmUsers;

                                string source = GetTagValue("Channel");
                                OptionSetValue leadSource = new OptionSetValue(getOptionSetValue("leadsourcecode", source));
                                newLead["leadsourcecode"] = leadSource;

                                string NoOfProduct = GetTagValue("ProductImplemented");
                                OptionSetValue productImplemented = new OptionSetValue(getOptionSetValue("ln_productimplemented", NoOfProduct));
                                newLead["ln_productimplemented"] = productImplemented;

                                string durationToBuy = GetTagValue("BuyPeriod");
                                OptionSetValue buyPeriod = new OptionSetValue(getOptionSetValue("ln_buyplan", durationToBuy));
                                newLead["ln_buyplan"] = buyPeriod;

                                string wantDemo = GetTagValue("Demo");
                                bool demo = false;
                                if (wantDemo.Equals("true"))
                                    demo = true;
                                newLead["ln_demo"] = demo;

                                string broucher = GetTagValue("Brochure");
                                bool ln_broucher = false;
                                if (broucher.Equals("true"))
                                    ln_broucher = true;
                                newLead["ln_brochure"] = ln_broucher;

                                newLead["description"] = GetTagValue("Comments");
                                newLead["ownerid"] = new EntityReference(SystemUser.EntityLogicalName, context.UserId);

                                service.Create(newLead);
                            }
                            else
                                return;
                        }
                        catch (FaultException<OrganizationServiceFault> ex)
                        {
                            tracingService.Trace("1"+ex.Message);
                        }
                        catch (Exception e)
                        {
                            tracingService.Trace("2"+e.Message);
                        }
                    }
                }          
                catch (Exception exp)
                {
                    tracingService.Trace("3"+exp.Message);
                }
            }

            public string GetTagValue(string element)
            {          
                string values = "";
                foreach (XmlNode node in doc.GetElementsByTagName(element))
                    values = node.InnerText;
                return values;
            }

            public int getOptionSetValue(string attributeName, string optionsetText)
            {
                int optionSetValue = 0;
                RetrieveAttributeRequest retrieveAttributeRequest = new RetrieveAttributeRequest();
                retrieveAttributeRequest.EntityLogicalName = "lead";
                retrieveAttributeRequest.LogicalName = attributeName;
                retrieveAttributeRequest.RetrieveAsIfPublished = true;

                RetrieveAttributeResponse retrieveAttributeResponse = (RetrieveAttributeResponse)service.Execute(retrieveAttributeRequest);
                PicklistAttributeMetadata picklistAttributeMetadata = (PicklistAttributeMetadata)retrieveAttributeResponse.AttributeMetadata;

                OptionSetMetadata optionsetMetadata = picklistAttributeMetadata.OptionSet;

                foreach (OptionMetadata optionMetadata in optionsetMetadata.Options)
                {
                    if (optionMetadata.Label.UserLocalizedLabel.Label.ToLower() == optionsetText.ToLower())
                    {
                        optionSetValue = optionMetadata.Value.Value;
                        return optionSetValue;
                    }

                }
                return optionSetValue;
            }
        }
    }
     

    Friday, 15 March 2013

    Trigger workflow from button using JavaScript in CRM 2011


    function CallWorkflow(entityId, workflowId) {
      var xml = "" +
        "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +

        Xrm.Page.context.getAuthenticationHeader() +
        "<soap:Body>" +
        "<Execute xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\>" +
        "<Request xsi:type=\"ExecuteWorkflowRequest\">" +
        "<EntityId>" + entityId + "</EntityId>" +
        "<WorkflowId>" + workflowId + "</WorkflowId>" +
        "</Request>" +
        "</Execute>" +
        "</soap:Body>" +
        "</soap:Envelope>";

      var xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
      xmlHttpRequest.Open("POST", "/mscrmservices/2007/CrmService.asmx", false);
      xmlHttpRequest.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/crm/2007/WebServices/Execute");
      xmlHttpRequest.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
      xmlHttpRequest.setRequestHeader("Content-Length", xml.length);

      xmlHttpRequest.send(xml);
    }

    Tuesday, 12 March 2013

    Disable all fields in CRM 2011 based on Statuscode using Javascript


    function DisableFields() {
        if (Xrm.Page.data.entity.attributes.get("statuscode").getValue() != 1) {
            disableFormFields(true);
        }
    }
    function doesControlHaveAttribute(control) {
        var controlType = control.getControlType();
        return controlType != "iframe" && controlType != "webresource" && controlType != "subgrid";
    }
    function disableFormFields(onOff) {
        Xrm.Page.ui.controls.forEach(function (control, index) {
            if (doesControlHaveAttribute(control)) {
                control.setDisabled(onOff);
            }
        });
    }

    Save this code on webResources and call DisableFields method on page OnLoad.

    Thursday, 7 March 2013

    Thursday, 28 February 2013

    Disable View of Look Up Record dialog


    function SupplierLookup() {
        document.getElementById("customerid").setAttribute("lookuptypes", "1");
        document.getElementById("customerid").setAttribute("defaulttype", "1");
        Xrm.Page.getControl("customerid").setDefaultView("36C01218-C55F-E211-BACF-00155D000B45"); // View Id
        document.getElementById("customerid").setAttribute("disableViewPicker", "1");
    }

    Thursday, 21 February 2013

    Access restriction: The type Krb5LoginModule is not accessible due to restriction on required library C:\Program Files\Java\jre7\lib\rt.jar

    In eclipse go to: Window > Preferences > Java > Compiler > Errors/Warnings > Deprecated and restricted API > Forbidden reference (access rules) > set it to ‘Warnings’ 

    Wednesday, 13 February 2013

    Set Opportunity status to Won in crm 2011


    WinOpportunityRequest winRequest = new WinOpportunityRequest
                        {
                            OpportunityClose = new OpportunityClose
                            {
                                OpportunityId = new EntityReference
                                {
                                    LogicalName = "opportunity",
                                    Id = order.OpportunityId.Id
                                },
                            },
                            Status = new OptionSetValue(3)
                        };
                        service.Execute(winRequest);

    Friday, 8 February 2013

    Create Users in Domino Administrator



    The purpose of this document is to create Lotus Notes user using Domino Administrator in Domino Server. Once the user is created successfully in Domino Server it can be configured in Lotus Notes.

    Prerequisites:
    ·         Lotus Domino Administrator should  be installed and configured

    Steps:
    1.   Open Lotus Domino Administrator
    2.   Select “People” under the Domino server directory



    3.       Right side panel, click “People”. In that click “Register…” as shown below.



    4.   It will prompt below dialog, click “Certifier ID…” and choose the “cert.id” file from “C:\Program Files\IBM\Lotus\Domino\data” path. 



    5.   Then click “OK” button in the above dialog.
    6.   It will prompt for Lotus Notes certifier password as shown below. In that enter certifier password and click “OK” button. 



    7.   Finally after the validation it will open the user creation dialog as shown below. in that dialog enter the required details as shown below. 



    8.   Click “Password Options…” and set the options as shown below and click “OK” button.




    9.   Then to set the email address for the newly created user, Check the “Advanced” option and set the email address as shown below. 



    10.                Once all the above steps are completed, click the green color tick symbole in the above dialog and click the “Register” button to regiter the user in the domino server. 



    11.                Once the user registered successfully in the domino server, it will show the below confirmation dialog.




    These are all the steps to be done to create a user in domino server.